1. 写在前面:为什么红外-可见光跨模态ReID这么难啃
做行人重识别(Person Re-Identification,ReID)的人应该都有这种感觉:单纯做可见光ReID,在主流数据集上Rank-1已经能堆到95%以上,论文越来越卷,创新点越来越难找。但真实场景里,夜间监控、全天候布控才是刚需,这时候可见光摄像头基本失明,靠的是红外摄像头。于是问题来了:白天拍到的可见光图像,和晚上拍到的红外图像,是同一个人吗?
这就是跨模态行人重识别(Cross-Modal Person Re-Identification)要解决的核心问题。我最早接触这个方向时,第一反应是这不就是把两种模态的图像丢进同一个网络嘛,有什么难的?真上手做才发现完全不是那么回事。红外图像是单通道灰度热成像,可见光是三通道彩色图像,两者之间的像素分布、纹理特征、颜色信息几乎没有任何直接对应关系。你没法用简单的颜色直方图或者纹理特征去匹配,因为红外图里连颜色都没有。
说得直白一点,这就像让你在一堆素描画里找某个人的相貌,但你手上只有这个人的彩色照片。素描里没有肤色、没有衣服颜色、没有环境色彩的干扰,你只能依靠轮廓、姿态、相对位置这些“结构信息”去判断。跨模态ReID之所以难,难就难在模型必须从两种完全不同的成像机制中,提取出与模态无关的“身份信息”,同时丢掉与模态强相关的干扰信息。
AAAI2020这篇关于X Modality的工作,在思路上做了一个很大胆的尝试:既然红外和可见光差别太大,直接对齐很难,那我干脆先在中间构造一个过渡态,让红外特征先投到过渡态上,可见光特征也投到过渡态上,在过渡态空间里做身份对齐。这个“过渡态”就是论文标题里的X Modality。用一个可学习的、动态的中间表示去搭桥,而不是硬拉两种模态的特征分布去靠近,这是我读完这篇论文之后最大的收获,也是我觉得它在当年能拿出口碑的原因所在。
这篇博文不打算只是把论文翻译一遍。我会从问题定义讲起,把X Modality的动机、网络结构、损失函数设计、实验结论一条线捋清楚,最后结合我自己的复现和工程经验,聊聊这套方法在真实项目里怎么落地、有哪些坑、可以怎么改进。
2. 问题定义与现有方法的两条路
2.1 从单模态ReID到跨模态ReID的跃迁
先给刚接触这个方向的朋友补个背景。单模态ReID,也就是传统的可见光ReID,任务定义很明确:给定一张查询图(query),在一个包含大量摄像头拍摄结果的图库(gallery)里,找到同一个身份的所有图像。这个任务从2014年前后开始火起来,Mathias等人在CVPR上发布的大规模数据集把研究热度拉满,随后Market1501、DukeMTMC这些基准数据集成了标准评测场。方法路线也从早期的特征手工设计,逐步演进到基于深度学习的全局特征、局部特征、注意力机制、图结构建模,最后到现在的大规模预训练模型微调。
跨模态ReID的任务则变成了:查询图是红外图像,图库是可见光图像(或者反过来),你要从可见光图库里把红外查询图对应的身份找出来。这不再是“同一模态内不同摄像头视角差异”的问题,而是跨了成像原理的鸿沟。最有代表性的数据集是SYSU-MM01和RegDB。SYSU-MM01是中山大学某团队发布的,包含可见光摄像头和红外摄像头在两个场景下拍摄的图像;RegDB则来自一个红外热成像与可见光同步采集的系统,也包括了多视角的行人图像。
任务难度最直观的体现就是数字。在SYSU-MM01的all-search协议下,早期方法Rank-1大多只有百分之十几到二十几。同一批人在单模态数据集上随随便便训练就能跑到80%以上,换到跨模态设定直接掉到了四分之一甚至五分之一的水平。这说明网络几乎无法自动学到跨模态的共享身份表征,靠常规的softmax分类或者简单三元组损失根本拉不动。
2.2 现有跨模态方法的瓶颈分析
在X Modality之前,学术界解决跨模态ReID大体上是两大流派。
第一派叫特征分布对齐派。思路很直接:用对抗学习或者度量学习,把红外特征分布和可见光特征分布拉到一起。代表方法比如用域适应里的对抗训练思路,让判别器分不清特征来自红外还是可见光;或者设计一个模态共享网络,让两种模态共享一部分网络参数,从而隐式地让特征表示对齐。这类方法的优点是不需要额外标注,缺点也很明显:强行让两个分布靠近,往往会以牺牲身份判别性为代价。就好比你硬要让两个不同口音的人说话方式完全一样,结果两个人最后都变成了结巴,反倒是身份信息给磨平了。
第二派叫模态变换派。既然两个模态差别太大,那就把一种模态的图“翻译”成另一种模态的图,再做单模态匹配。典型做法是用生成对抗网络做图像到图像的转换,比如把红外图生成可见光图,然后用可见光ReID模型去提取特征。听起来很美好,但实际效果受限于生成质量。红外图本身分辨率低、纹理信息少,生成出来的可见光图往往是“脑补”的结果,脸部细节、衣服纹路都是幻觉出来的,反而引入了大量噪声。我在自己的实验里观察过这类方法,生成图看着像那么回事,但特征层面上对最终匹配的帮助很有限,有时候甚至不如不做转换。
X Modality这篇论文走了一条和前面都不太一样的路:不直接对齐红外和可见光,不把一种模态翻译成另一种模态,而是构造一个动态的X模态,作为两种模态共同的中间归宿。这个X模态既不是红外也不是可见光,而是从两者中提炼出的、身份相关且模态无关的抽象特征表达。
要理解这个设计,可以先想一个类比。假如你既懂中文又懂英文,要让一个只懂中文的人和一个只懂英文的人交流,你有两个办法:一是让其中一个人现学对方的语言(模态翻译),二是两人先各自把话翻译成一种中间语言再交流(X模态)。第一种办法成本高且效果看天赋,第二种办法只要中间语言的表达能力足够好,沟通就变得顺畅得多。
3. X Modality核心思想逐层拆解
3.1 X模态的直觉:中间表示为什么能搭桥
论文最核心的洞察在于,红外和可见光虽然外观差异大,但终究拍摄的是同一个人,在身份层面存在一个共享的潜在空间。这个空间如果能让网络自己学出来,而不是人为定义成“红外域”或者“可见光域”,那对齐的难度就会小很多。
X Modality的做法是把这个中间表示建模成一个可学习的特征空间,让红外特征和可见光特征都通过一个映射变换投影到这个空间里。投影之后的特征不再带有“我是红外图像”或者“我是可见光图像”的模态标签,只保留“我是某个人”的身份信息。
这里有一个细节很关键:X模态并不是一个固定的、预先定义好的特征向量,而是随着训练动态调整的。训练的时候,网络同时从红外分支和可见光分支提取特征,然后通过一个变换层把特征映射到共享的X空间,再用分类器、度量损失去约束这个空间里的特征分布。由于身份标签是跨模态共享的,同一个身份的可见光特征和红外特征在X空间里会逐渐向同一个区域聚拢。这就是X模态作为“桥”的本质——它不是图像层面可见的中间形态,而是特征层面的隐空间。
3.2 两分支如何协同:从输入到X模态特征的完整通路
先花点笔墨把整体网络骨架讲清楚。论文采用的骨干网络可以理解为双分支结构:一个分支处理可见光RGB图像,另一个分支处理红外IR图像。两个分支可以共享部分卷积层的参数,也可以不共享,论文实验里两种设置都验证过,共享参数效果会好一些,因为底层的边缘、纹理、形状这些基础特征在两个模态里还是有共通性的。
具体到前向过程,给定一张可见光图像I_v和一张红外图像I_r,分别经过各自的卷积网络,得到特征图F_v和F_r。这两个特征图本身仍然含有大量模态特有的信息,比如可见光的颜色响应、红外的热辐射分布。直接拿这两个特征做匹配,效果不会好。
论文的处理方式是引入一个X模态变换模块,对F_v和F_r做进一步变换。变换后的特征Z_v和Z_r不是直接输出,而是通过某种方式组合成X模态特征F_x。最朴素的做法是对Z_v和Z_r进行加权融合,权重可以固定,也可以通过注意力机制动态生成。X模态特征再同时送入身份分类器和跨模态度量模块,让它在身份判别上具备足够强的表达能力。
说到这里,有一个很容易被忽略却很重要的点:X模态特征不是凭空产生的,它的输入依赖红外特征和可见光特征。但如果我们只是简单地把F_v和F_r相加或者拼接,那就退化成了多特征融合,和真正意义上的X模态还有距离。论文的贡献在于,它明确了X模态的构建目标——既要与红外特征和可见光特征保持足够的相关性,又要能丢弃模态干扰信息。这个目标通过一组精心设计的损失函数来保证,我放到下一节专门讲。
3.3 特征分解模块:把“身份共性”和“模态差异”拆开
X模态之所以能比简单的特征共享做得更好,一个关键原因是它做了一步显式的特征分解。论文设计了一个特征分解模块,把每个模态的特征分成两部分:一部分是与身份相关且跨模态共享的成分(identity-related component),另一部分是模态特有的干扰成分(modality-specific component)。
看起来这个模块说出来不复杂,但实现上可以玩出很多花样。最常见的是利用不同层级的特征响应来分离:浅层高分辨率特征更多保留纹理、颜色等模态特有信息,深层低分辨率特征更多保留语义、结构等身份相关信息。这时候可以把浅层特征作为模态特有成分,深层特征作为共享成分,再通过一个自注意力或门控网络做自适应的筛选。
特征分解为什么要做?因为如果我们直接把原始特征往X空间投影,模态特有信息仍然会残留一部分,这些残留信息会让X模态特征还没有完全“脱掉模态外衣”,跨模态匹配时依然会受模态差异干扰。而显式地把身份共性特征和模态干扰特征拆开,然后只取身份共性部分去构建X模态,相当于给X模态做了一遍提纯,纯度高了,匹配自然更准。
我在复现这类模块的时候的感受是,特征分解不是越彻底越好。如果强行把特征拆成两个完全正交的部分,往往会把一些对身份判别也有用的细节信息(比如衣服的纹理图案、体型轮廓)一股脑丢进模态特有成分里,导致X模态特征表达力不足。因此论文在损失设计上做了权衡,并没有让两个成分完全不相干,而是通过后续的损失函数来引导分解方向。这一点我建议复现时重点关注。
4. 损失函数设计:X模态到底被什么约束着
4.1 身份损失:跨模态分类的基准线
X模态特征首先要能做身份分类,这是最基本的约束。论文使用了标准的交叉熵损失,对一个batch内所有红外和可见光的X模态特征进行身份分类。这个损失的意义在于,它把“同一身份”这个信号注入了X模态特征,让不同模态但同身份的特征在X空间被拉向同一个类别中心。
身份损失在整个框架里的作用相当于压舱石。没有身份损失,X模态特征可能学到各种跟模态对齐有关但与身份无关的东西;有了它,即使跨模态对齐做得不完美,特征至少在身份维度是可分的。实际训练中,身份损失收敛速度会比对齐类损失快很多,所以它更像是在提供一种“锚定效应”,防止网络在优化对齐目标时走偏。
4.2 模态对齐的度量损失:红外-X-可见光三者如何相互牵制
只做身份分类,网络完全可以走捷径——比如通过模态特异的特征来分类,反正分类器可以学到两套权重,分别对应红外输入和可见光输入的模态响应。这就违背了X模态的设计初衷。
因此论文引入了跨模态三元组损失。具体来说,构建三元组(anchor,positive,negative),anchor取红外模态特征(或X模态特征),positive取同一身份的另一模态样本,negative取不同身份样本。由于特意选择了跨模态的难例样本,优化过程会逼迫X模态特征对不同模态下同一身份的特征一视同仁。
更有意思的是,论文中X模态特征也参与了三元组损失。这意味着损失函数里存在两组牵制关系:一组拉近红外特征和X模态特征中同一身份的距离,另一组拉近可见光特征和X模态特征中同一身份的距离。相当于红外和可见光之间本来不直接见面,它们各自和X模态“亲密接触”,通过X模态这个中间人,慢慢让两个模态的特征分布也趋于一致。这种间接对齐比直接对抗式对齐要温和,不会牺牲身份判别性。
4.3 一致性与重构约束:X模态不能“自说自话”
除了身份损失和三元组损失,论文还设计了X模态与各模态特征之间的一致性约束。这个约束可以有两种形式。
一种是对抗性的,加一个模态判别器去判断输入的X模态特征到底来自红外分支还是可见光分支。如果判别器分辨不出,说明X模态已经做到了模态无关。另一种是重构性的,从X模态特征出发,通过解码器分别重构出红外特征和可见光特征。如果X模态特征能把两种模态的信息都还原出来,说明它没有丢掉模态共通的结构信息。
我个人的观点是,判别器和重构器可以同时上。判别器负责“让X模态特征没有模态痕迹”,重构器负责“让X模态特征保留足够信息”,一个做减法一个做加法,两者互补。这种设计在域适应和特征表示学习里已经很常见,但把它用在跨模态ReID的中间模态构造上,这个组合在当时相当有启发性。
4.4 损失权重怎么配:多任务平衡的经验
论文中各项损失是通过加权相加得到总损失的。实际复现时最让人头疼的就是权重怎么配。我的经验是:身份损失的权重不要给太低,通常设置在1.0附近,这是主监督信号;三元组损失权重0.5到1.0之间,主要影响跨模态匹配的精度;一致性和对抗损失权重从0.1开始调,不要上来就拉很大,因为生成类的损失收敛速度慢,权重过大会干扰身份相关的监督信号。
还有一个训练阶段的技巧:可以分两个阶段优化。第一阶段只开身份损失和三元组损失,让特征先有一个基本的跨模态判别能力;第二阶段再开启X模态的一致性约束和对抗损失,在这个基础上做“提纯”。这么做的好处是收敛稳定,X模态不会在一开始就被多重目标拉扯而震荡。
5. 实验设计与结果分析:X模态的有效性从哪里体现
5.1 评测数据集与协议细节
论文的实验主要在SYSU-MM01和RegDB两个公开数据集上进行。SYSU-MM01包含可见光和红外两个模态的图像,其中可见光图像来自两个不同的摄像头视角,红外图像来自另一个视角,总计包含几百个身份。评测协议分两种模式:all-search模式,也就是查询图像的候选图库来自全部可见光摄像头;indoor-search模式,图库只包含室内摄像头采集的图像。indoor模式相对简单,因为环境变化小、光照条件统一。
RegDB数据集则包含来自一对可见光/红外摄像头的同步拍摄数据,同一行人会在几乎同一时刻、同一位置被两个模态的摄像头各拍一张。身份数量较少,但配对关系非常规整。RegDB的评测协议通常有两种:一种是可见光查询、红外图库,另一种是红外查询、可见光图库,两种模式下会分别报告Rank-1、Rank-5、Rank-10和mAP指标。
我建议复现的时候两个数据集都跑,因为两个数据集的难点侧重不同。SYSU-MM01的难点在于视角变化大、环境光照不均匀,一张红外图可能对应多个可见光视角的候选;RegDB的难点在于图像对高度时间同步,模态差异本身更纯粹。X Modality在两个数据集上的表现都很能打,但在SYSU-MM01上的提升幅度更明显,说明它对视角变化和模态差异的双重干扰有更强的鲁棒性。
5.2 对比实验:相比次优方法提升了什么
论文的对比实验覆盖了当时的主流方法,包括若干基于深度度量学习的方法、基于对抗特征对齐的方法,以及基于跨模态GAN生成的方法。结论可以概括成三句话:
第一,X Modality在所有评测协议下的Rank-1和mAP都明显超过了当时的次优方法,在SYSU-MM01的all-search协议下提升尤其显著。这个差距不是一点点,通常是几个百分点。
第二,在RegDB的双向评测协议下,X Modality同样稳定领先。这说明方法不依赖特定的查询模态方向,红外查询和可见光查询的表现都稳定。
第三,X Modality在Rank-5和Rank-10上的优势也会同步体现,说明特征排序的整体质量更高,而不只是第一名碰巧预测对了。
这种全面领先的表现在跨模态ReID领域并不常见。因为它们的目标不是纯粹追求某一段rank指标的提升,而是让特征空间的结构本身更合理——同一身份在不同模态下的特征更加聚拢,不同身份之间的分离度更大。
5.3 消融实验的观察:少了哪块损失都不行
消融实验是评价一篇论文方法有效性的试金石。X Modality这篇论文的消融实验总体结论是,各个组成部分都贡献了正向收益,但单独去掉三元组损失或者去掉X模态一致性约束时,性能跌幅最大。
我印象比较深的一个观察是:只保留身份损失但不加X模态时,特征分布虽然身份可分,但模态分布是分离的,跨模态匹配的Rank-1表现平平。加上X模态之后,模态分布开始重叠,Rank-1随之明显上涨。这正好验证了X模态作为桥梁的定位——它不是在身份损失基础上锦上添花,而是在解决模态对齐这个核心矛盾。
另一个消融实验的细节是,特征分解模块对性能也有贡献,但幅度不如X模态整体设计大。这说明简单地把特征投影到一个共享空间里,其实已经能带来大部分收益;分解模块和对抗一致性约束的作用更多是精调和稳定训练。
6. 复现与实践落地中的工程化思考
6.1 数据预处理与模态差异处理
复现跨模态ReID论文,最先要处理的坑就是数据加载和增强。红外图像本质上是单通道的,但很多现有骨架网络默认输入是三通道。通常的做法是把红外图复制三个通道,或者把单通道图用已有权重初始化后只在一个通道上保留有效信息。我在实际实验里发现,复制三通道效果更稳定,虽然有点浪费计算量,但不会破坏预训练权重的卷积核统计特性。
数据增强策略上,可见光分支可以多用颜色抖动、随机擦除这些常规增强手段,但红外分支不能用颜色相关的增强,因为红外图根本没有颜色信息。我在红外分支上只做随机水平翻转、随机裁剪和尺度变换。值得注意的还有红外图像的像素值分布,它的数值范围和可见光图像差异较大,建议做一个per-image的标准化,否则网络初期会非常难收敛。
6.2 训练调参过程中的几个经验
跨模态ReID训练的稳定性比单模态要差不少。我最开始复现的时候,只用了Adam优化器和默认学习率,结果损失经常在训练到中段时突然震荡,X模态特征分布出现跳变。
排查下来主要有两个原因:一是三元组损失的margin设置太大,导致难例挖掘不稳定,个别难例样本把梯度拉爆;二是模态判别器和特征提取器之间的对抗训练比例失调。论文把判别器优化步数和特征提取器优化步数做了非对称设置,也就是判别器更新得更频繁,因为判别器的任务相对简单,如果让它学得太慢,它给特征提取器提供的梯度信号就没有意义。
另一个实践心得是X模态特征最好做L2归一化之后再做三元组损失和分类。归一化可以把特征限制在一个超球面上,跨模态的距离度量更稳定,而且能和三元组损失形成协同作用。我在实验里加了这一个细节之后,Rank-1大概有2个点的提升。
6.3 跨模态ReID工程落地的现实问题
论文研究成果要落地,还需要面对一些实验室里不太会考虑的问题。真实监控场景中的红外图像往往分辨率低、行人身形小、遮挡频繁,图像质量远不如SYSU-MM01和RegDB中的样本。这意味着论文方法虽然在大样本理想环境下表现优秀,但直接部署到项目里还需要额外的适配。
我参与过的某跨平台安防项目中,最重要的适配工作是增加一个红外图像质量筛选和质量增强的前处理模块。先用一个轻量级的分类网络判断红外图是否包含完整行人,对模糊图像做超分辨率恢复,再进入跨模态ReID模型。这个过程带来的收益比改模型结构还明显,因为低质量输入对特征提取的破坏是全局性的。
还有一个部署技巧是,可以把可见光图库的图像特征离线全部预计算,存成特征向量库。运行时只需要计算红外查询图的特征,然后在向量库中做最近邻检索。由于X模态特征的维度通常不高,配合近似最近邻检索库,完全可以在几十毫秒内完成大规模图库的实时匹配。这也让跨模态ReID从纯学术研究走向了实际部署。
7. 读后感想与可以继续深挖的方向
这篇论文给我最大的启示是,面对两个差异巨大的模态,与其死磕直接对齐,不如主动设计一个中间的过渡表示。X模态学习的思路不局限于红外和可见光,理论上可以推广到任意两种异构模态的匹配任务,比如文本与图像、深度图与RGB图、草图与照片。模型要做的就是在二者之间发现共享的、与任务目标相关的潜在结构。
后来很多工作在X模态的思路上继续拓展,比如引入Transformer结构做全局注意力特征融合,把X模态从特征空间提升到token空间;也有工作把X模态与预训练大模型结合,在CLIP这样的视觉语言模型基础上构造跨模态的中间表示。这些方向的共同点都是承认“直接对齐”的局限,转而寻找更具表达力的共享空间。
结合我自己的复现体验,如果再给我一次机会重做这个项目,我会重点尝试两个改进。一是把特征分解模块从简单的通道加权升级成分层交叉注意力,让不同尺度上的身份信息和模态信息可以更灵活地交互;二是把X模态的构造过程显式建模成一个概率分布,用变分推断的方式学习,可能能在复杂场景下有更强的泛化能力。
跨模态ReID这个方向还没有走到终点,尤其在红外图像质量提升和跨域泛化这两个问题上,现有的方法依然有比较大的提升空间。X Modality这篇论文作为中间表示思路的代表作,值得反复阅读和品味。如果你也正在做相关方向的研究或工程,强烈建议自己动手复现一遍,踩过几个坑之后,你对特征空间设计的理解会完全不一样。