Paper Reading 1: Weakly Supervised Visible-Infrared Person Re-Identification via Heterogeneous Expert Collaborative Consistency Learning (ICCV 2025)
August 25, 2026
Paper Reading
Post
Blog
ICCV 2025 Poster Weakly Supervised Visible-Infrared Person Re-Identification via Heterogeneous Expert Collaborative Consistency Learning
https://arxiv.org/abs/2507.12942
Task
在可见光和红外成像差距大的情况下判断两个不同模态的行人图像是否属于同一人 在没有跨模态身份对应标签的条件下,利用单模态身份标签推断跨模态身份关系,并学习模态不变、身份判别的行人特征表示。
Challenge
- 全监督方法需要大量跨模态身份标签
- 半监督单模态标签缺失导致跨模态伪标签不可靠
- 无监督方法性能上限受到伪标签质量限制
方法:
- 可见光标签-可见光分类器-预测红外样本身份:不能建立稳定身份对应
- 训练时batch内可能没有同一身份的两个样本,或者外表变化大不能实现稳定跨模态一致性学习
Insight
- 跨模态标注难,只用单模态标签
- ReID核心在于识别身份的对应而非标签
- 现有方法产生的伪标签存在噪声,需要对可信度进行分层
- 不同模态信息具有互补性,对同一身份的判别线索不同
Novelty
架构
- 构建两个模态各自的分类专家
- 使用共享encoder学习跨模态共同特征
- 保留模态特定结构,使用共享分类器
方法
- 提出CRE机制对不同可信度的跨模态关系使用不同策略
- 先进行模态内专家学习,再进行跨模态协同一致性学习,通过专家预测建立弱监督,再用弱监督用预测出来的关系训练模型提升encoder和专家能力
- 只使用单模态身份标签,用预测一致性构造跨模态监督
创新方向?
- 标签隐私受限?联邦学习的弱监督跨模态ReID,隐私保护的身份匹配,不暴露原始标签的关系学习
- 专家对错误身份给出高置信预测(需要实验验证是否会发生此问题)
- 开放集,不同模态身份集合不一定完全一致
整体架构
phase 1: epoch 0-19, 单模态专家预训练 phase 2: epoch 0-119, CMCL跨模态协作学习 CMA生成伪标签 Common/Specific/Remain分类 CMO loss, Triplet loss:跨模态一致性 Weak loss,用于epoch30+
骨干网络
models/agw.py
每个模态有独立的浅层卷积resnet50的rgb_layers, ir_layers捕获模态内部特征,共享深层网络common_layers学习跨模态共享语义特征
分类器
models/__init__.py
self.classifiers1,2,3 分别为RGB、IR、phase2启用的公共专家
class ImageClassifier(nn.Module):
def init(self, args):
self.classifier = nn.Linear(2048, args.num_classes, bias=False)
self.l2_norm = Normalize(2)
def forward(self, x_bn):
x_score = self.classifier(x_bn)
return x_score, self.l2_norm(x_bn)
使用比backbone更高的学习率
流程
- 独立模态专家训练 RGB $\rightarrow$ RGB分类损失,IR$\rightarrow$ IR分类损失, RGB、IR Triplet损失相加得到total_loss,每个模态专家用该模态自身的标注数据独立训练
- CMA跨模态匹配
wsl.py特征提取:每个epoch开始时用当前模型提取所有样本的特征,用分类分数作为跨模态匹配依据 生成匹配对:v2i_dict,i2v_dict匹配对分类: common pair 匹配一致,高置信度i in i2r_pair_dict.keys() and i2r_pair_dict[i] == r:common_dict specific pair 单项匹配,中置信度r not in i2r_pair_dict.values() and i not in i2r_pair_dict.keys():specifit_dict remain pair 匹配冲突,低置信度 - 保存特征到memory bank,用于计算CMO Loss
- CMCL跨模态协作学习
CMO loss跨模态一致性损失:
用classifier3,RGB,IR$\rightarrow$common
dtd_features = bn_features.detach()dtd_rgbcls_out = model.classifier1(dtd_features)[0]dtd_ircls_out = model.classifier2(dtd_features)[0]分离梯度,公共专家梯度不回传到特征提取阶段r2i_entropy = infoEntropy(r2i_cls)i2r_entropy = infoEntropy(i2r_cls)w_r2i = r2i_entropy / (r2i_entropy + i2r_entropy)w_i2r = i2r_entropy / (r2i_entropy + i2r_entropy) 信息熵加权selected_rgb_memory = cma.vis_memory[translated_cmo_ir_label].detach()mem_r2i_cls, _ = model.classifier2(selected_rgb_memory)cmo_criterion = torch.nn.MSELoss()r2i_cmo_loss = w_r2i * cmo_criterion(dtd_i2i_cls[common_ir_indices], mem_r2i_cls)i2r_cmo_loss = w_i2r * cmo_criterion(dtd_r2r_cls[common_rgb_indices], mem_i2r_cls)CMO loss对齐memory bank特征和当前预测 跨模态Triplet Loss common pairs标签构建跨模态Triplettri_rgb_indices = torch.isin(rgb_ids, common_matched_rgb)selected_tri_rgb_ids = rgb_ids[tri_rgb_indices]translated_tri_rgb_label = torch.nonzero(common_rm[selected_tri_rgb_ids])[:,-1]matched_tri_rgb_features = torch.cat((selected_tri_rgb_features, ir_features), dim=0)matched_tri_rgb_labels = torch.cat((translated_tri_rgb_label, ir_ids), dim=0)tri_loss_rgb = args.tri_weight * model.tri_criterion(matched_tri_rgb_features, matched_tri_rgb_labels)将RGB身份标签通过common pairs映射到IR身份标签,然后在同一特征空间学习 模态内部伪标签学习 specific pairs由公共专家使用伪标签做交叉分类specific_rgb_indices = torch.isin(rgb_ids, specific_matched_rgb) `selected_r2c_cls = r2c_cls[rgb_indices] Weak loss弱监督损失 在epoch30之后,对remain pairs使用,对每个样本找到匹配标签对应的最小概率,惩罚概率低于最小概率的标签,软约束