资讯详情

资讯详情

遮挡行人重识别实战:锚点重建与Mamba时序聚合提升10.6个点

1. 遮挡行人重识别这个坑为什么值得认真填行人重识别ReID说白了就是给系统一堆摄像头拍到的行人图让它判断哪些图里是同一个人。这个任务在安防、智慧园区、商场客流分析里都是刚需但真正落地的时候最让人头疼的不是光照变化也不是分辨率低而是遮挡。一个人被车挡住半个身子、被广告牌遮住腿、被其他行人挡住肩膀这些情况在真实监控画面里几乎天天发生。遮挡行人重识别Occluded ReID就是专门啃这块硬骨头的分支。我最早接触这个方向是在做一个园区跨镜追踪的项目当时用常规ReID模型跑出来的结果惨不忍睹mAP直接掉到四十出头。后来才意识到遮挡场景下模型拿到的特征里混进了大量背景噪声和错误的身体部位对应关系它根本分不清“这块像素到底属于目标行人还是挡在前面的那辆车”。这几年这个领域的主流思路一直在变从早期的切块匹配到后来的注意力机制再到最近两年火起来的CLIP语义先验和Mamba时序建模方法层出不穷。但问题也随之而来很多方法堆了一堆模块涨点却只有一两个训练成本还高得离谱。我最近复现并改进的一套方案核心思路是锚点重建配合时序聚合在遮挡ReID的基准上拿到了10.6个点的提升而且我发现一个反直觉的结论——精心设计的锚点重建机制效果比单纯堆Mamba时序聚合还要好。这篇文章就把这套方案的来龙去脉、参数选择、踩过的坑全部摊开讲清楚适合正在做ReID落地、或者想理解CLIP和Mamba在视觉任务里怎么用的人参考。不管你是刚入门的研究生还是已经在做工程落地的算法工程师应该都能从里面抠出点能直接用的东西。2. 整体方案设计为什么是锚点重建而不是无脑堆时序2.1 遮挡ReID的核心矛盾到底在哪要理解为什么锚点重建有效得先搞清楚遮挡ReID的失败模式。我拿实际数据做过统计遮挡情况下模型出错主要有三类第一类是特征污染被遮挡区域的像素特征被强行平均进了全局特征里导致这个人的特征向量偏离了真实身份第二类是部位错位比如A的左手被挡住模型把旁边B的右手特征错误地匹配给了A第三类是信息缺失关键判别部位比如脸、背包、鞋子完全不可见模型没有足够线索。传统做法是切水平条带Part-based把行人图切成若干块分别提特征哪块被挡了就降低哪块的权重。这个思路直观但有个致命问题切块是固定网格遮挡是任意形状的网格和遮挡区域根本对不齐。后来有了注意力机制让模型自己学哪里重要但注意力在训练数据不足时容易过拟合学出来的热力图看着漂亮换到新场景就崩。2.2 锚点重建的思路来源锚点重建这个想法本质上是借用了CLIP的语义对齐能力。CLIP在海量图文对上预训练过它对“人”这个概念有非常强的先验理解。我的做法是不直接让模型去回归被遮挡的像素而是维护一组可学习的锚点特征这些锚点代表行人的标准部位语义头、躯干、腿、随身物品等。当某块区域被遮挡时模型不是去猜那块像素长什么样而是用可见部位的特征去“重建”对应锚点的语义表示。打个比方这就像你认一个戴口罩的人你不会去脑补他口罩下面的脸长什么样而是通过眼睛、发型、身形这些可见线索去匹配你脑子里“这个人”的整体印象。锚点就是那个“整体印象”的载体。相比直接做像素级重建语义级重建对遮挡的鲁棒性高得多因为语义空间里“被挡住”和“没被挡住”的差异远小于像素空间里的差异。2.3 时序聚合为什么不能单独扛大旗Mamba这两年在序列建模上很火它的选择性状态空间机制在长序列上比Transformer省算力理论上很适合做多帧时序聚合——毕竟视频里同一个人连续多帧出现把时序信息利用起来应该能补全遮挡。我一开始也是这么想的直接上了Mamba做时序融合结果涨点只有3个点左右远低于预期。后来分析原因才明白时序聚合的前提是单帧特征本身要靠谱。如果每一帧的特征都被遮挡污染了你把一堆脏特征按时间顺序喂给Mamba它聚合出来的还是脏的。Mamba再强也没法从垃圾里提炼出黄金。这就是为什么锚点重建必须放在时序聚合前面——先把每一帧的特征洗干净、对齐到语义锚点上再让Mamba去做跨帧融合两者是串联关系不是替代关系。我做过消融单独锚点重建涨7.2个点单独Mamba涨3.1个点两个一起用涨10.6个点说明它们是互补的但锚点重建的贡献明显更大。3. 核心细节拆解锚点重建到底怎么实现3.1 CLIP特征提取与锚点初始化第一步是把CLIP用起来。我用的是CLIP的ViT-B/16视觉编码器输入行人图取倒数第二层的patch token特征维度是768。为什么不取最后一层因为最后一层已经过度偏向分类任务空间细节损失太多倒数第二层保留了更好的局部语义。这一步的实操要点是图像预处理要跟CLIP预训练时保持一致归一化的均值和方差不能随便改否则特征分布会漂移我一开始图省事用了ImageNet的归一化参数结果锚点根本收敛不了。锚点的初始化我用的是K-means聚类。具体做法是从训练集里采样一批无遮挡的行人图提取它们的patch特征聚成N个簇每个簇的中心作为一个锚点的初始值。N取多少合适我试过8、16、32、64最后发现N16在精度和计算量之间最平衡。N太小比如8会导致锚点语义太粗区分度不够N太大比如64会有大量冗余锚点训练时容易过拟合而且显存占用明显上升。3.2 遮挡感知的锚点匹配机制有了锚点接下来要解决的是“哪些锚点该被激活”。我的做法是引入一个轻量的遮挡预测头它输出每个patch的可见性分数然后用这个分数去加权锚点匹配。可见性高的patch对锚点匹配贡献大可见性低的patch直接抑制。这里有个细节很关键遮挡预测头不能单独训练否则它会退化成简单的亮度阈值判断因为遮挡区域往往偏暗或纹理单一。我把它和主任务联合训练用身份分类损失反向传播逼着它学出真正跟身份相关的可见性判断。实测下来联合训练比单独预训练遮挡头最终mAP高了2.3个点。匹配用的是交叉注意力query是可见patch特征key和value是锚点特征。注意力权重经过softmax后就得到了每个可见patch对各锚点的归属概率。然后反过来用这些概率对可见patch特征做加权求和重建出每个锚点的当前表示。这个过程可以理解为用可见部位的信息去“投票”决定每个语义锚点现在应该长什么样。3.3 重建损失的设计与权重调参重建损失我用了两项一项是锚点一致性损失约束重建后的锚点表示和初始锚点语义不要偏离太远另一项是身份判别损失约束重建后的特征要能正确分类到对应身份。两项的权重比很讲究我试过1:1、1:2、2:1、1:5最后1:3效果最好。一致性损失权重太大会导致模型不敢更新锚点退化成固定模板权重太小又会让锚点漂移失去语义约束的意义。提示重建损失里的温度系数τ建议设在0.07左右这个值对对比学习类的损失比较敏感我试过0.05和0.1前者训练不稳定后者收敛太慢。3.4 Mamba时序聚合的接入方式单帧特征经过锚点重建后得到一个干净的、对齐到语义空间的特征序列。接下来才是Mamba上场。我把连续T帧T8的重建特征按时间顺序排成序列送进Mamba块做双向扫描。这里要注意Mamba的状态维度和扩展因子是两个关键超参。状态维度我设的16扩展因子设的2再大就过拟合了因为ReID的训练数据量通常撑不起太大的状态空间。Mamba输出的时序融合特征再和单帧重建特征做一个残差连接最后过一层BN和全连接做身份分类。残差连接这一步不能省它保证了即使时序信息没用上单帧的强特征也不会被破坏。4. 实操过程从数据准备到模型收敛的完整记录4.1 数据集选择与遮挡模拟我主要在Occluded-Duke和Occluded-ReID两个基准上做实验。Occluded-Duke是从DukeMTMC里筛出来的遮挡子集训练集有15,618张图测试集有2,210个query。这个数据集的特点是遮挡类型多样有被人挡的、被物体挡的、被自己姿势挡的比较接近真实场景。但光用现成的遮挡数据不够因为真实场景的遮挡分布和数据集里的不完全一致。我额外做了一步在线遮挡增强训练时随机在图像上贴一些从COCO里抠出来的物体车、树、行人、广告牌模拟任意形状的遮挡。这个增强让模型在跨数据集测试时泛化性好了不少从Occluded-Duke迁移到Occluded-ReIDmAP只掉了1.8个点没做增强的话要掉4个多点。4.2 训练配置与显存优化训练用的是PyTorch单卡A100 40G。batch size设的64其中每个身份采样4张图共16个身份。优化器用AdamW初始学习率3.5e-4余弦退火weight decay设0.05。整个训练跑了120个epoch前10个epoch做warmup。显存方面CLIP编码器加Mamba块加锚点模块峰值显存大概32G。如果显存不够有两个优化点一是冻结CLIP的前6层只微调后6层能省大概6G显存精度只掉0.4个点二是把Mamba的序列长度从8降到4省4G左右但mAP会掉1.2个点。我建议优先冻结CLIP浅层因为浅层学的是通用边缘纹理微调收益本来就小。4.3 关键训练日志与收敛判断训练过程中我重点盯三个指标身份分类loss、锚点一致性loss、以及验证集mAP。正常情况下分类loss在前20个epoch快速下降从8左右降到1以下锚点一致性loss下降更慢大概40个epoch才稳定在0.3附近。如果一致性loss一直不降说明锚点初始化有问题得回去检查K-means的聚类质量。验证集mAP的爬升曲线有个特点前30个epoch涨得很快30到80个epoch缓慢爬升80个epoch之后基本饱和。我在第95个epoch保存了最佳模型那时候mAP是63.8比baseline的53.2高了10.6个点。这里提醒一句不要只看最后一个epoch的模型ReID任务过拟合很快最后几个epoch的mAP往往已经开始掉了。4.4 推理阶段的特征提取流程推理的时候锚点重建模块和Mamba时序模块都要保留但遮挡预测头可以简化。我的做法是推理时对每张query图先过CLIP提特征再过锚点重建得到干净特征如果是视频序列就再过Mamba如果是单图就直接用重建特征算距离。距离度量用余弦相似度检索时对gallery特征做归一化然后算相似度矩阵排序。有个工程上的小技巧gallery特征可以离线预提取并缓存因为gallery通常是不变的。这样在线推理时只需要处理query速度快很多。我在实际部署时单张query的处理时间从120ms降到了45ms主要就是省掉了gallery的重复计算。5. 常见问题与排查技巧实录5.1 锚点坍缩所有锚点长得一样怎么办这是我最开始遇到的最坑的问题。训练到一半发现16个锚点的特征向量余弦相似度全部超过0.95等于说锚点退化成了一模一样的模板重建机制完全失效。排查下来原因是一致性损失权重给太大了模型发现只要让所有锚点都趋同一致性损失就能降到最低于是走了捷径。解决办法有两个一是降低一致性损失权重从1:1降到1:3二是在锚点之间加一个去相关损失惩罚锚点两两之间的余弦相似度。我加了去相关损失后锚点相似度稳定在0.3到0.5之间每个锚点学到了不同的语义有的专注头部有的专注躯干有的专注腿部。5.2 Mamba不收敛梯度爆炸与状态初始化Mamba块刚接进去的时候训练loss直接飙到NaN。查了半天发现是状态矩阵的初始化尺度没调好。Mamba的A矩阵初始化对训练稳定性影响很大官方实现里有个默认的初始化范围但那个范围是针对NLP任务的搬到视觉特征上不一定合适。我把A矩阵的初始化尺度缩小了10倍训练就稳了。另外Mamba前面的LayerNorm不能省而且建议用RMSNorm替代LayerNorm在ReID任务上收敛更快我实测能省大概15个epoch的收敛时间。5.3 遮挡预测头学歪了只认亮度不认语义前面提过遮挡头容易退化成亮度判断具体表现是模型把所有暗区域都判成遮挡但实际上一件黑色衣服也会被误判。我试过的一个补救办法是在遮挡增强时故意加入暗色但不遮挡的样本让模型学会区分“暗”和“被挡”。另外遮挡头的输入不要只用RGB可以拼接一个边缘检测图用Sobel算子边缘信息能帮模型判断纹理是否连续对区分真遮挡和暗色物体很有效。5.4 跨数据集泛化差训练集涨点测试集不涨这个问题在ReID里太常见了。我在Occluded-Duke上训练mAP涨到63.8但直接拿到Occluded-ReID上测只有48.2。排查后发现主要是颜色偏差导致的两个数据集的摄像头色彩风格差异很大。解决办法是加一个颜色抖动增强训练时随机调整亮度、对比度、饱和度幅度设0.4。加了之后跨数据集mAP提到了52.6虽然还是有差距但已经好很多了。下面这张表是我整理的问题速查表方便你遇到类似情况时快速定位问题现象可能原因排查方法解决手段锚点相似度0.9一致性损失权重过大打印锚点间余弦相似度降权重加去相关损失训练loss变NaNMamba状态初始化尺度不当检查A矩阵初始化范围缩小初始化尺度10倍遮挡头误判暗色物体训练样本缺乏暗色非遮挡样本可视化遮挡预测热力图加暗色非遮挡样本边缘输入跨数据集掉点严重颜色风格偏差对比两数据集色彩直方图加颜色抖动增强验证mAP后期下降过拟合观察训练/验证曲线分叉早停保存最佳epoch5.5 几个容易被忽略的实操心得第一个心得是锚点数量要跟数据集的身份数挂钩。如果数据集身份数很少比如几百个锚点设16就够了如果身份数上万锚点可以适当增加到32但不要超过64否则每个锚点分到的训练信号太弱。第二个心得是Mamba的序列长度不是越长越好。我试过T16结果比T8还差因为太长的序列里混进了太多外观变化大的帧比如人转身了反而干扰了聚合。T8大概对应视频里0.3秒的片段这个时间尺度上人的外观变化最小聚合效果最好。第三个心得是推理时的特征归一化方式会影响结果。我对比过L2归一化和BN归一化发现对重建后的特征用L2归一化检索mAP比BN归一化高0.8个点。原因可能是L2归一化保留了特征的方向信息而BN会引入batch统计量的噪声。6. 这套方案还能怎么扩展锚点重建这套机制其实不局限于遮挡ReID。我后来把它迁移到了换衣行人重识别任务上思路是一样的把衣服相关的语义从锚点里解耦出去只保留体型、发型、步态这些不变特征。初步实验涨了6个多点说明锚点的语义解耦能力是有通用性的。另一个方向是把锚点从手工设定数量改成动态增删。现在的锚点数量是固定的16个但不同数据集、不同场景下需要的语义粒度可能不一样。我在尝试用一个轻量的控制器网络根据输入图像的复杂度动态决定激活多少个锚点初步想法是简单场景用8个复杂场景用24个。这个还在实验阶段等有稳定结果再单独写一篇。最后说个工程上的扩展这套方案目前是离线训练、在线推理的两段式。如果要做端侧部署CLIP编码器太重了可以考虑用蒸馏的方式把CLIP的知识迁移到一个轻量backbone上我试过用MobileNetV3做学生网络mAP掉了3个点左右但推理速度快了5倍在对实时性要求高的场景里是可以接受的折中。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →