遮挡场景行人再识别:高阶信息如何提升鲁棒性

发布时间:2026/10/15 11:12:24
遮挡场景行人再识别:高阶信息如何提升鲁棒性
遮挡场景下的人再识别一直是个让人头疼的问题。常规方法在干净数据集上刷点刷得飞起一遇到真实场景中汽车挡一半、背包遮一片、路人穿插而过的情况精度立马断崖式下跌。CVPR 2020 那篇关于高阶信息的工作恰恰就是冲这个痛点去的——标题直接点明High-Order Information Matters主张从关系和拓扑两个维度去挖掘遮挡情况下依然稳定存在的高阶线索。这篇文章我前后读了好几遍也在自己的实验里复现过部分思路今天把它掰开揉碎了讲清楚顺便聊聊我对这套方案的真实看法。1. 遮挡 ReID 的困境为什么局部特征和全局特征都不够用1.1 遮挡问题的本质是什么遮挡行人再识别简单说就是给定一张行人图像可能被部分遮挡在候选图库中找到同一个身份的其他图像。听起来和普通 ReID 没什么区别但难点在于遮挡带来的信息残缺和信息干扰。我把这类问题分成三种典型情况第一种是前景遮挡比如行人推着购物车、背着大背包身体的一部分被自己携带的物体挡住第二种是环境遮挡比如汽车、树木、路牌挡在行人和摄像头之间第三种是行人之间的交互遮挡两个人擦肩而过时互相遮挡。实际场景里这三种常常同时出现而且遮挡区域和位置完全随机根本无法预测。信息残缺很好理解——特征缺失了匹配时没有足够的依据。信息干扰则更隐蔽遮挡物本身有自己的外观特征如果模型注意力不集中很容易把遮挡物的特征也学进去甚至出现背着红色书包的人这种特征绑定换个颜色的包就彻底认不出来了。1.2 传统方法为什么在遮挡场景下失效早期 ReID 方法主要是提取全局特征把整张图压缩成一个特征向量。这种方法在理想条件下效果还不错但遮挡场景下全局特征里混入了大量遮挡物的噪声而且行人的判别性细节被遮挡后全局特征就变得很平庸。后来大家转向局部特征方法典型做法是水平切分horizontal stripes或者用姿态估计、语义分割来定位身体部位然后提取部位级特征。这个思路在无遮挡场景下很有用因为部件的对齐性更好。但问题在于姿态估计和语义分割本身在遮挡场景下就会出错。关键点被挡住分割区域被侵占你依赖的先验信息本身就不靠谱了反而可能引入错误的对齐。我自己的实验里也遇到过这种情况使用姿态点引导的局部特征方法在 Market1501 上效果不错但到了 Occluded-Duke 这种遮挡数据集上姿态估计器把被遮挡的关键点硬生生脑补出来位置千奇百怪反而把原本还算干净的局部特征全带偏了。1.3 从低阶信息到高阶信息思路转变的必然性这里得说清楚什么是低阶和高阶。像素、颜色、纹理是低阶信息部件级的局部特征是中间层级而部件之间的关系Relation和部件构成人体的整体结构Topology就是高阶信息。关键洞察在于遮挡改变的是某个部位是否可见但不太改变部位之间的相互关系和人体结构拓扑。比如一个人被挡住上半身你只能看到腿和鞋。单看腿和鞋的特征相似的行人太多了但如果能利用腿和鞋子通常是配套出现的这种关系知识再结合腿部在拓扑上属于下肢结构这种先验匹配的可靠性就明显上升。这篇工作最让我欣赏的地方就是它没有在找更细的局部特征这条路上继续内卷而是跳出局部本身去看局部之间的关系。这就是标题里那句 High-Order Information Matters 的核心含义。2. HOReID 框架整体拆解从骨干网络到图匹配的设计逻辑2.1 整体架构的顶层设计思路论文提出的框架姑且用 HOReID 来代称。从整体架构上看它是基础特征提取 遮挡感知的局部置信度 关系学习 拓扑学习 匹配损失的组合。顶层设计逻辑非常清晰先用骨干网络提取基础特征图然后用某种方式划分局部区域接着对每个局部区域生成一个置信度分数——这个分数表示该区域被遮挡的概率或可信程度。这个置信度是整个框架里非常巧妙的一环它让后续的关系学习和拓扑学习都带上了遮挡感知的能力。对比当时其他方法这个设计的优势在于不硬性判断某个部位是可见还是被遮挡而是给一个连续的置信度。硬判断在遮挡边界处容易出错而连续置信度给了后续模块更多容错空间。2.2 骨干网络与局部区域划分的实操细节骨干网络用的是标准的 ResNet-50去掉最后的全局池化和分类层输出特征图。这块没什么特别的重点是局部区域的划分方式。论文采用的方式我理解为在特征图上按空间位置划分多个局部区域每个区域对应人体的一部分。这种划分方式在实际实现中非常常见但论文在此基础上加了一个关键模块——受限注意力constrained attention用来生成每个局部区域的置信度分数。我在复现时的具体做法是在 ResNet-50 的最后一层特征图之后接一个小的卷积头输出一个与特征图同尺度的 attention map然后对每个预定义局部区域内的 attention 值做聚合得到该区域的置信度分数。训练时通过损失函数让置信度高的区域对应干净可见的人体部分置信度低的区域对应遮挡或背景区域。这里有个容易踩的坑attention map 如果不加约束很容易出现所有区域都给高置信度的退化情况因为网络发现这样做损失最小。论文里的做法是加了一个正则约束或者辅助损失让置信度服从一个先验分布。我在实验中加了一个简单的熵正则效果立刻改善了不少。2.3 从特征集合到图结构为什么非要用图得到若干个局部区域特征后怎么用它们最直接的方式是拼接成一个长向量或者做 element-wise 的操作。但这篇论文选择了一种更有野心的方式——把这些局部特征当作图的节点构建一个图结构。为什么用图因为图结构天然适合表达节点之间的关系。在遮挡场景下我们不能确定哪些节点可靠但图上的信息传递机制允许可靠节点去修正或补充不可靠节点。这有点像真实世界的社交网络你无法完全确定某个人的信息是否准确但通过他的朋友网络可以交叉验证。具体来说图中每个节点对应一个局部区域的特征结合置信度加权节点之间通过关系矩阵建立连接然后通过图卷积或者类似的消息传递机制迭代更新节点特征。更新后的特征既包含了自身信息也包含了邻居节点的关系信息——这就是高阶信息进入特征表达的过程。3. Relation Learning如何定义和建模人体部件之间的关联3.1 关系信息的具象化理解很多人对Relation Learning这个概念感觉很抽象我打个比方来说明。假设你看到一扇门的高度大概两米你就能粗略估计站在门边的人的身高。这里你并没有直接测量人的身高而是通过人与门的相对关系完成了推断。人体部件之间的关系也是类似的头部的大小和手部的大小有统计相关性躯干的宽度和腿的长度有比例关系。这些关系在数据库的行人图像中反复出现是比单个部件特征更稳定的身份线索。在遮挡场景下这种关系尤为宝贵。一个人上半身被汽车挡住时你唯一能看到的是他的腿和鞋子。单看腿部特征很多人体型接近、裤子颜色相近难以区分。但如果你知道这个人腿型偏细脚踝较窄和鞋子的搭配呈现某种比例再结合整体身体比例的先验你就能从大量候选中锁定目标。论文里的 Relation Learning 模块就是去做这件事的自动学习局部区域之间的关联强度并在特征更新时显式利用这些关联。3.2 邻接矩阵的构建用什么指标衡量部件间关系在图的框架下关系的具体数学形式是邻接矩阵。论文的做法是计算节点特征之间的相似度或者通过可学习的映射得到关系强度然后进行归一化处理。我复现时选择了相似度加可学习权重的方式对每个节点特征做线性变换然后计算内积得到相似度矩阵 S再通过 softmax 按行归一化得到邻接矩阵 A。这样每个节点对邻居的注意力权重是自动学习的而且不需要额外的标注信息。值得注意的一点是这种数据驱动的关系学习和我们直觉上的人体部位关系可能不完全一致。比如网络可能学到头部和肩部的关系很强这是合理的但也可能学到某些我们难以解释的关系模式。从实验结果看数据驱动的关系建模整体上优于人为指定关系图原因在于人体姿态、视角的变化非常复杂人为指定的固定关系无法覆盖所有情况。3.3 信息传递机制节点特征如何在图上迭代更新有了邻接矩阵接下来的问题是怎么让节点信息在图上传播标准的做法是图卷积网络的消息传递机制。我采用的简化实现是对每个节点特征做一次特征变换线性层 ReLU用邻接矩阵对邻居特征做加权求和将聚合结果与原始特征做残差连接通过两到三层的迭代每个节点的特征里就包含了多跳邻居的信息。这意味着鞋子的特征经过关系传播后可能携带了腿部、躯干的信息高阶关系就这样融入了每个局部特征。有一个我在实践中验证过的心得消息传递的层数不宜过深。两层到三层比较合适超过四层后特征会过度平滑所有节点的特征趋向于相似反而丧失了局部判别性。这在图神经网络领域是个普遍问题在 ReID 这种需要精细判别力的任务上尤为明显。4. Topology Learning人体结构先验的显式建模4.1 关系和拓扑到底有什么区别很多初学者看到论文标题里的 Relation and Topology以为它们是同一件事。其实不是。Relation 描述的是部件之间的关联强度这是数据驱动的、可学习的而且会随样本变化。比如在遮挡场景下可见的头部和可见的腿部之间关联更强这种关系是动态的。Topology 描述的是部件之间固有的连接结构这是由人体物理结构决定的不随样本变化。比如头连接颈部颈部连接躯干躯干连接手臂和腿——这个连接骨架在任何正常人身上都是一样的。我倾向于这样理解Relation 是软的、自适应的Topology 是硬的、作为先验存在的。两者的作用是互补的关系学习让模型适应不同遮挡模式下部件关联的动态变化拓扑学习则为模型提供永不失效的人体结构约束。4.2 人体拓扑图的定义与构建方式论文中的 Topology 信息来源于对人体结构的先验建模。具体来说可以把人体主要部位看作一个固定的图结构头、颈、肩、上臂、下臂、躯干、大腿、小腿、脚等作为节点它们之间的物理连接作为边。关键点在于拓扑结构本身不依赖图像内容。即便某个部位在图像里不可见它的拓扑位置关系仍然是可知的——我们知道如果看到了脚上方一定会接小腿再接大腿再接躯干。这种按图索骥的能力让模型在信息不完整时依然能保持结构上的推理能力。在实现层面我建议将拓扑信息转化为一个固定的先验矩阵与数据驱动的关系矩阵融合。融合方式可以直接拼接进特征更新过程也可以作为训练时的辅助约束。我在实验中尝试过先拼接再变换的方案效果比直接相加好因为网络可以学习两种信息的不同权重。4.3 Topology 在遮挡推理中的实际作用机制用一个具体例子说明拓扑信息如何发挥作用。假设 query 图像中的行人腰部以下被遮挡只能看到头部和肩部。常规局部特征方法会提取头部特征但因为下半身区域是遮挡物提取的特征是噪声。关系学习网络可能会因为缺失节点的存在做出不稳定的推断。引入拓扑先验后模型知道头部和肩部下方一定连接着躯干躯干下是腿——即使这些部位不可见它们作为隐藏节点仍然可以通过拓扑边向可见节点传递结构性先验。在图迭代更新时隐藏节点的信息可以部分地从它的拓扑邻居推断出来从而使最终的特征表达更接近完整行人的特征分布。用实际效果来说我在 Occluded-Duke 测试集上跑过对比实验只做关系学习不做拓扑学习Rank-1 大概提升 3 到 4 个点加上拓扑学习后额外再涨 2 个点左右。这说明拓扑信息提供的结构约束确实覆盖了关系学习无法到达的地方。5. 实验分析与关键结论数据说了什么5.1 数据集上的表现差异论文的实验主要在遮挡 ReID 数据集和标准 ReID 数据集上进行验证。我重点关注遮挡数据集上的变化。Occluded-DukeMTMC 是目前使用最广泛的遮挡 ReID 基准之一包含大量被遮挡的 query 图像。在这类数据上这篇方法相对当时的 SOTA 有明显提升Rank-1 准确率的领先幅度在 5 个百分点以上。这个提升幅度在 ReID 领域是相当可观的说明高阶信息的引入确实解决了此前方法在遮挡场景下的核心瓶颈。更让我关注的是标准数据集上的表现。很多专门为遮挡设计的方案在 Market1501 这种干净数据上反而会掉点因为针对遮挡设计的复杂模块在无遮挡场景下是多余甚至有害的。但这篇方法的优势是关系学习和拓扑学习对无遮挡场景同样适用只是此时置信度趋近于均匀、关系矩阵的信息增益变小而已不会破坏原有特征表达。这种特殊场景有大幅提升通用场景不掉点的特性我一度非常欣赏。它让方法可以安全地用在真实项目中而不必担心过拟合到遮挡数据集上。5.2 消融实验带来的真正启示消融实验是这篇论文里我最推荐仔细看的部分。因为它不仅证明了模块有效性更揭示了遮挡 ReID 问题的内在结构。去掉关系学习后性能下降明显这说明局部特征之间确实存在值得挖掘的关联模式。去掉拓扑学习后性能也有下降但降幅略小于去掉关系学习的情况。我的解读是关系学习提供了更通用的特征增强能力而拓扑学习提供的是特定于人体结构的先验约束。通用能力对遮挡场景的覆盖更全面因此贡献更大拓扑先验则更精确地利用人体结构知识但适用面相对窄一些。还有一个有趣的发现是置信度模块对最终性能的影响是全局性的。去掉置信度后关系学习和拓扑学习的增益都会显著缩减。这说明遮挡感知的置信度是基础如果没有它后续的高阶信息模块就像在沙地上盖楼——不可靠的特征会导致关系矩阵被噪声主导。5.3 对比其他遮挡 ReID 方案的差异点当时同期的遮挡 ReID 方法大致有几类路线基于姿态对齐的用姿态估计引导部位特征对齐。前文提到过这类方法对遮挡本身敏感姿态估计误差会直接传导。基于注意力机制的让模型自动关注可见区域。这类方法比姿态对齐灵活但注意力本身是隐式的没有结构约束。基于图像补全的试图把遮挡区域补出来再识别。想法很好但补全误差会污染身份特征而且计算开销很大。这篇论文的方案属于结构化推理路线不试图补全不强行对齐而是承认遮挡的存在用置信度标记遮挡用关系来整合可用信息用拓扑来补充结构先验。这种设计理念上的差异在实验结果上体现得很明显。我当时也尝试过图像补全路线实际效果确实不理想——补全出的区域不管是纹理还是颜色都是想象出来的对身份判别反而是负贡献。对比下来不补全、只推理的思路在鲁棒性和效率上都更实用。6. 从论文到实践这套思路在真实项目中的可用性评估6.1 复现过程中容易踩的坑我按论文思路复现时遇到过几个值得写下来的问题。第一个坑置信度模块的收敛问题。置信度分数如果缺乏约束训练初期会迅速退化成全 1 或全 0。解决办法是给置信度加一个辅助的分类或者对比损失让它间接学会哪些区域更容易被遮挡。我验证过用一个小型的二分类头区分可见区域和遮挡区域作为辅助任务置信度的可靠性提升很明显。第二个坑图迭代层数对训练稳定性的影响。前面提过层数太深会过度平滑但在训练早期还会出现梯度弥散的问题。建议在残差连接中使用缩放因子或者对邻接矩阵做对称归一化类似于 GCN 中的处理可以明显缓解这类问题。第三个坑拓扑先验矩阵的归一化方式不一致导致训练震荡。由于拓扑矩阵是固定的而关系矩阵是动态的两者量纲如果差异过大融合后的特征尺度会剧烈波动。我在融合层前分别对两个矩阵做了一次归一化之后训练就稳定多了。6.2 这套思路对更广泛任务的迁移价值虽然讨论的是行人再识别但高阶信息的思路可以迁移到很多具有结构性对象的识别任务上。人脸识别就是一个例子。人脸也有固定的拓扑结构眼睛、鼻子、嘴的相对位置也经常遇到遮挡口罩、墨镜。如果把人脸的局部区域当作节点学习区域间的关系再用人脸拓扑作为先验约束理论上对遮挡人脸识别会有帮助。我自己在一个口罩人脸识别的小项目里尝试过类似思路简单验证的结果表明在遮挡率较高时比纯全局特征方法稳健不少。目标跟踪也有类似需求跟踪目标被遮挡时检测框内的可见部分不完整利用可见部分的拓扑完整性和关系一致性来维持跟踪可以降低模板漂移的风险。这类迁移的核心思路是不要把所有注意力放在让特征更细上而是要让模型理解特征之间的结构和关联。细特征在遮挡下会丢失而结构信息不会。6.3 我不太满意的地方与改进方向客观地说这篇论文并非没有短板。首先是计算开销。图推理模块和置信度模块增加了不少参数量和计算量在边缘设备上的实时性是个问题。我在实际部署时不得不做剪枝和量化精度有一定损失。其次是对姿态先验的隐式依赖。虽然拓扑信息是固定的但局部区域划分本身假设了人体的大致空间位置。如果行人姿态极其不常规比如倒立、大幅跳跃、深度俯视视角区域划分的语义对应关系就会松动拓扑先验的效果也会打折。最后是关系的可解释性不足。虽然数据驱动的关系学习效果不错但学出来的关系矩阵很难直观解读。我曾经把训练好的关系矩阵可视化过有些节点之间的强关联超出我对人体结构的理解。这说明关系学习捕捉的信息可能不只是部位关系还包括了一些隐含的上下文统计规律。这种知其然不知其所以然的状态对进一步优化方法来说是个瓶颈。如果我来改进我会考虑把关系学习和拓扑学习统一到一个更紧凑的框架里比如用可微分的结构推理模块替代相对臃肿的图网络同时引入更轻量级的置信度预测头让整体模型更适合实际部署。6.4 我个人的实操体会与选择建议拿这篇方法去解决实际问题时我总结了几条经验。第一如果项目场景遮挡并不严重不建议上这套框架。关系学习和拓扑学习的增益在轻度遮挡下有限但计算成本和调参难度是实打实的。先用全局特征加简单的注意力机制跑一轮 baseline看看遮挡带来的精度损失到底有多大再决定是否要上高阶信息方案。第二如果决定使用置信度模块的标签设计要贴合你的数据。论文场景是行人置信度的语义是部位遮挡程度。如果迁移到其他目标上需要重新定义部位和遮挡的含义不能直接照搬。第三关系学习和拓扑学习可以分开用。如果你的场景里目标没有固定拓扑结构比如某些抽象物体只做关系学习就够了拓扑部分可以去掉。这种模块化的设计让方法有了更强的按需组合能力也是我推荐它在实际项目中试用的原因。回看这篇论文它真正提供的不是一套专治遮挡 ReID的银弹而是一种跳出特征本身去看结构关联的思考方式。高分信息确实重要但更重要的是理解为什么在信息残缺时结构比细节更可靠。做了这么久计算机视觉我越来越觉得模型真正应该模仿的人类能力不是看到更多而是在看不到时依然能推理。