被遮挡的行人重识别(Occluded Person Re-Identification)这几年来一直是个硬骨头。我做了几年Re-ID相关的项目,初期接触的几套公开方法在干净场景下精度都不错,但一旦遇到行人被车、栏杆、背包或者广告牌挡住一部分,指标掉得特别快。其实这个问题很好理解:传统方法提取的是全局特征,你把特征向量扔进度量空间做距离比较,行人一旦有一截身体被遮挡,全局特征就被污染,匹配自然就出错。
核心痛点在于“遮挡”打破了两张行人图之间的空间对应关系。后来大家开始用局部特征、人体解析、姿态关键点来引导对齐,但这样做仍然只把问题往前提了一层:匹配时只看局部特征是不是相似,却忽略了局部和局部之间的连接关系,以及这些局部点组成的空间拓扑结构。也就是标题里说的“低阶信息”不够用,必须要引入“高阶信息”。CVPR2020这篇工作,核心思路正是把关系(Relation)和拓扑(Topology)这两个高阶维度纳入遮挡行人重识别的建模过程中,解决跨图匹配时信息错位的问题。
这篇文章我从三个层面拆解:这套方法到底解决了什么、核心模块怎么理解、放到实际训练和部署中有哪些需要注意的坑。后面还会给出一个简化版的实现思路和调参经验,希望能帮你避掉我们踩过的雷。
1. 问题拆解:遮挡Re-ID为什么一直难做
1.1 全局特征失效的物理原因
行人重识别本质上是跨摄像头下的身份判别任务。理想条件下,同一行人在不同相机里整体轮廓、体型、服装颜色分布是稳定的,所以用卷积网络提一个几百维甚至上千维的全局特征向量,再算欧氏距离或余弦相似度,就能拿到不错的排序结果。
但遮挡打破了这种稳定。当行人A的左臂被一辆面包车挡住,全局特征里关于左臂区域的信息就变成背景污染或者完全丢失。更麻烦的是,不同相机下的遮挡区域还不一样。A在相机1里左臂被遮挡,在相机2里右腿被遮挡,这两张图放进同一个特征空间里,全局向量对应的其实是“半截人”,而不是一个完整行人的身份描述。
我之前在校验集上做过一个简单实验:把测试行人图像人为加上遮挡,遮挡比例从10%逐步加到40%,全局特征Re-ID的Rank-1准确率会从90%左右滑到60%以下。这个下跌幅度远超普通噪声,说明遮挡对全局表征的破坏是结构性的。
1.2 局部特征匹配为什么不够
既然全局特征不行,很自然就想到把图像切成局部区域,或者借助人体关键点来提取局部特征,然后让两幅图在局部层面上找对应。
局部对齐确实有效,但也带来了新问题:局部特征只描述了“某一块长什么样”,没有描述“这块和其他块之间什么关系”。举个具体例子,两张行人图,一张是正面全身照,一张是从侧后方拍摄且背包遮住了腰部。如果你只看局部相似性,可能把“左胯附近的特征”误匹配到“背包边沿的特征”上,因为它们的颜色纹理都接近。
低阶匹配还有一个天然短板:当遮挡导致某个关键点完全不可见时,那个局部特征本来就是噪声,强行参与匹配不仅没帮助,还会拉低整体分数。换句话说,只依赖局部特征逐点比对的思路,本质上还是在低阶信号上做直线对齐,少了结构约束。
1.3 高阶信息缺失引发的问题
所谓高阶信息,指的是特征点与特征点之间的相互关系,以及这些特征点构成的整体空间结构。放在行人Re-ID里就特别直观:
- 关系信息:左肩和右肩在空间上绝对水平,左右手肘通常低于肩膀,这些成对关键点之间的关系是稳定的人体结构先验。
- 拓扑信息:把行人的关键点分布看成一个图结构,节点的相对位置、边上节点的连通方式,构成了一个大致稳定的拓扑形态。
在遮挡场景下,虽然某个关键点可能看不见,但剩下的可见关键点仍然保持着人体结构关系。低阶方法只看点,把这些关系全丢了;高阶方法看关系、看拓扑,等于多了一层约束,可以抑制错误匹配,同时借助结构先验补全部分缺失信息的推理。
2. 高阶关系与拓扑是怎么被建模的
2.1 从局部特征到关系矩阵
这句话我强调过很多次:欧氏空间里只比特征向量相似度,不等于建模了关系。真正的关系建模,是把两张图上特征点之间的两两关联也纳入匹配计算。
具体操作上,给定一张行人图,先用姿态估计模块提取关键点热图,基于热图挑选概率最高的k个位置,作为图结构的节点。每个节点对应一块局部区域,区域里的卷积特征就是节点的特征向量。
下一步,任意两个节点之间都可以计算一个关系表示。这个关系由两部分组成:
- 外观关系:节点i和节点j的特征分别提取出来,做外积或者差值计算,表达“区域i和区域j一起出现时的联合视觉模式”。
- 空间关系:节点i和节点j的坐标差,表达成几何偏移向量。
把这两种关系拼起来,就得到这一组节点的边特征。所有节点两两组合,最终形成一张图的邻接关系矩阵。这张矩阵里存的不再是“每个区域长什么样”,而是“每个区域和哪些区域在视觉和空间上绑定在一起”。
2.2 拓扑约束的核心价值
拓扑可以理解成图的连接骨架。人的骨架不会因为换了摄像机角度就完全变样,即使某个关键点被遮挡,也仍然可以从其他关键点的拓扑关系推断它的合理位置范围。
在论文方法里,拓扑信息不是作为后处理使用,而是直接嵌入匹配过程。具体做法是把所有节点特征之外,还维护一个空间坐标通道。匹配时不仅要求两幅图的节点外观特征一致,还要求节点之间的相对空间关系保持拓扑一致性。
打个比方:匹配算法同时看两条信息,一条是“这边有个蓝点”,另一条是“蓝点的左上方是红点,红点下方还有绿点”。即使蓝点被遮挡,只要红点和绿点出现的相对空间关系与查询图一致,算法依然能大概率判断这是同一个人。
2.3 图匹配框架中的高阶信息融通
把这套思路转换成可训练模型,需要把两幅图的节点特征、关系矩阵、拓扑信息放进同一个可微架构里。核心步骤如下:
- 输入两张行人图,分别提取特征图和关键点热图。
- 由关键点生成节点特征集合。
- 计算各自的关系矩阵,并提取两两节点之间的联合特征。
- 构造匹配亲和矩阵,把候选节点匹配的兼容性得分填进矩阵。
- 求解图匹配问题,输出匹配分数和匹配对应关系。
由于匹配问题本质上是组合优化,训练时不能直接把离散的匹配结果端到端回传。实践中常用的做法是构造一个连续松弛的匹配矩阵,计算匹配损失,同时结合行人身份分类损失和三元组损失一起优化。
我们在实现时采用了一个简化思路,用软匹配矩阵近似硬匹配,然后对软匹配矩阵做行列归一化,损失函数里再加一项匹配熵正则,防止匹配矩阵退化成均匀分布。这套做法在训练稳定性和最终指标上都比纯用分类损失好不少。
3. 实操拆解:数据处理、网络模块与损失设计
3.1 输入数据与关键点热图的处理
训练高阶Re-ID网络,建议先把姿态估计分支准备好。我们用的方案是直接用预训练好的姿态估计模型,在训练Re-ID阶段冻结关键点检测部分,只训练特征提取和匹配部分。
为什么冻结姿态估计?因为关键点热图是“先验结构”的来源,如果端到端同时优化关键点分支,很容易出现检测器因为Re-ID的损失信号而崩溃,最后关键点输出全是一片大光圈,拓扑约束完全失效。我们试过同时微调,结果Rank-1不升反降3到5个点。后续改成冻结关键点分支,效果立刻稳定下来。
输入尺寸方面,我们使用384×192作为训练分辨率,这个尺寸对人体的关键点数量和局部块数量比较充足。再高到512×256不是不行,但训练时间和显存占用明显上升,收益很小。Re-ID场景里图像分辨率本来就低,过分追求高分辨率意义不大。
3.2 网络主干与图卷积融合
主干我们选的是基础残差网络结构。去掉最后的全局池化和分类头,保留到倒数第二层,输出一个空间特征图。这个特征图的分辨率在输入384×192的情况下通常是12×6,能提供足够的空间信息来提取局部块特征。
在特征图基础上,根据关键点坐标,用双线性采样提取每个关键点位置的局部特征向量。向量维度一般取256或512。注意这里不要直接对热图做最大池化,因为热图本身光滑且空间范围很小,最大池化会让多个节点共享一个特征响应,在后续匹配阶段容易产生歧义。
接着用几层图卷积对节点特征和边特征做交互传播。这里核心是让每个节点的特征不仅包含自身区域的信息,还包含与相邻节点之间关系的加权聚合信息。一次聚合不够,通常做两次传播,因为高阶关系往往需要至少两步扩散才能覆盖“关键点A到关键点C”这种间接关联。
3.3 匹配亲和矩阵与分数计算
匹配亲和矩阵是两幅图节点集的交叉乘积矩阵。假设两幅图各有N个关键点,亲和矩阵的维度就是N×N,其中第(i,j)个元素代表“查询图的第i个节点匹配到候选图的第j个节点”的置信度。
亲和值的计算方式不能太简单,否则就退回低阶匹配了。我们用的是多种信息的加权组合:
- 节点外观相似度,用余弦相似度或带可学习权重的内积。
- 边特征相似度,把查询图节点i与邻近节点构成的边特征,和候选图节点j与邻近节点构成的边特征进行比对。
- 拓扑一致性,计算两图中节点间几何分布是否匹配。
公式可以简单表示成:
亲和值 = a × 节点外观相似度 + b × 边关系相似度 + c × 拓扑一致性
a、b、c三个权重是可学习的,训练初期b和c不宜过高,否则矩阵梯度过于复杂,训练速度慢。我们初期固定b=c为0.1,等节点外观特征稳定后再逐步放开。
最终两张图的相似度得分是匹配矩阵中的最大值,或匹配矩阵行列向量的某种聚合函数。我们实验中发现用匹配矩阵行监督加最大得分组合效果最好,纯用最大得分会丢失部分全局信息。
3.4 损失函数组合与权重设置
单靠匹配损失无法稳定训练,我们最后使用了三部分损失加权组合:
- 身份分类损失:复用主干分类头,保证每个行人特征具备基础判别力。
- 三元组损失:拉近同类样本特征的距离,推开不同类样本。
- 匹配损失:监督匹配亲和矩阵与真值匹配关系之间的差距。
总损失可以这么写:
L = L_id + λ1 × L_triplet + λ2 × L_match
参考我们的做法,λ1通常设为0.5,λ2设为0.2。λ2如果给太大,训练早期会过拟合匹配矩阵,导致后面的图匹配模块变成一个记忆表格,泛化能力差。
真值匹配关系的构造也很关键。如果两张图属于同一身份,从关键点热图里选出概率最高的可见关键点作为真值匹配锚点,未被遮挡区域的节点对匹配标记为1,被遮挡区域的节点标记为0。属于不同身份的图则整组匹配标记为0。
这个真值构造方式比完全用姿态估计对齐要稳定,因为姿态估计本身会有误差,直接用原坐标做真值会让模型学到错误的位置偏差。
3.5 推理阶段如何利用高阶信息
推理阶段不需要姿态估计真值,直接用检测器输出的关键点热图构建图结构,再计算查询图与候选图之间的匹配分数。为了加快速度,可以先用一个轻量级全局特征模型做初筛,召回前2000个候选,再对这种小规模候选集使用高阶匹配打分。
我们线上实验时发现,基于高阶信息的排序可以用在重排序阶段,和初始排序分数做一个线性融合。融合比例可以按照验证集上的最优分数来定,我们最终把融合权重定为0.6的高阶分数加0.4的初始全局分数。这个配置在遮挡测试集上比纯全局分数Rank-1提高了14个点左右。
4. 常见问题与调参心得
4.1 匹配矩阵退化与归一化
训练中期容易遇到一个现象:损失已经降得足够低,但验证集指标原地踏步。后来排查发现是匹配矩阵出现了退化,大部分行都非常接近均匀分布,意味着节点匹配没有学到有效区分。
对策有两个:一是对亲和矩阵做Sinkhorn归一化,让矩阵具备双随机性,行列和都归一化到1,这样模型必须做出有意义的匹配决策。二是调整三元组损失的margin,让特征空间整体紧凑度提升。我们实验下来Sinkhorn归一化帮助最大,加了之后验证集Rank-1从80%涨到86%左右。
注意:Sinkhorn迭代次数不需要太多,3到5次就够。迭代次数多了不仅没有额外收益,还会让梯度信号变得非常小,影响训练稳定。
4.2 关键点缺失时的策略
遮挡场景下必然有关键点不可见。我们在训练时做了数据增强,随机丢弃一定比例的关键点,让网络学会在部分节点缺失时依然保持稳定匹配。初始丢弃率从20%开始,后续按训练阶段逐步提高到35%。
但丢弃率不能无限加大,超过50%之后网络就会倾向于放弃拓扑约束,转而去学全局特征的表层记忆。我们发现35%是一个相对合适的甜点区间。
另外,推理阶段如果某个关键点热图的最大响应值特别低,比如低于0.3,就不要强行加入匹配过程了。直接把该节点的匹配亲和值置为负数大值,或者干脆从节点集中剔除,比硬让它参与匹配要好得多。
4.3 训练不稳定与显存占用优化
图匹配模块涉及两两节点组合,节点数多时计算量指数级上升。训练两幅图各取17个关键点还好,但如果把输入分辨率调大,或者改用更多关键点的姿态估计器,显存会直接撑爆。
我们的处理办法是分块计算亲和矩阵,而不是一次性构出完整匹配矩阵。具体来说,把节点分成小batch,每个小batch独立算亲和值后再拼接。这样做几乎没有精度损失,显存占用大幅降低。
如果显存还是不够,可以考虑把节点数从17减少到10到12个。少掉一些对遮挡场景贡献不大的头部、手腕节点,保留躯干和四肢核心节点,Rank-1损失通常控制在2个点以内,但训练速度能快接近一倍。
4.4 数据集与评测注意事项
评测时不要只看Rank-1,还要看mAP。高阶方法在mAP上的提升通常比Rank-1更显著,因为排序稳定性更强。我们在一套包含大量遮挡样本的评测集上做了对比,只做遮挡子集统计时,方法的mAP比全局特征方法高接近20个点。
测试集的遮挡比例会影响最终指标的可信度。如果测试集里遮挡样本偏少,高阶模型优势体现不出来。建议在项目里单独划分一个“困难遮挡子集”,专门用来评估遮挡鲁棒性,这样才能正确衡量高阶建模带来的真实收益。
5. 后续扩展思路
这套“关系+拓扑”的建模思路不只能用于Re-ID。我在其他相关任务里也试过迁移,效果都比较有意思。比如跨视角动作识别,不同视角下局部动作的外观差异很大,但动作关键点之间的时空拓扑关系基本一致,用高阶匹配也能提升识别稳定性。视频行人检索也同理,时序上的帧间关系天然构成更高阶的信息结构,图匹配模块几乎不用大改就能迁移过去。
另一个值得尝试的方向是多模态的特征关系建模。红外与可见光行人匹配里,两种模态下的颜色外观几乎不可比,但人体关键点之间的拓扑关系是一致的。把这两种模态分别提取关键点图结构,再做跨模态图匹配,比直接用哈希或者双流网络判别特征更抗干扰。
如果有条件的话,可以继续探索把高阶匹配模块设计成轻量插件,接到现有Re-ID模型后面。只要输入图结构信息,输出一个匹配矫正分数,就能在不更换原有特征提取器的情况下,提升遮挡场景的鲁棒性。这个方向对于已有的老系统升级很有价值。
最后分享一个个人经验:这类高阶模型在学术指标上确实漂亮,但工程落地要花不少时间做细节打磨。数据清洗、关键点质量检查、匹配阈值调整、推理速度优化,每一项都得亲自跑几轮。尤其是姿态估计器本身出错时,高阶模块反而可能放大错误。所以落地时一定要对姿态估计质量做一个监控指标,当检测分数低到一定程度时,回退到全局特征模型,不让高阶分支承担它不该承担的风险。这套“质量开关”机制,是我们把论文方法变成稳定业务功能的关键一步。