链接:https://arxiv.org/pdf/2004.09164.pdf
代码:https://github.com/Xiangyu-CAS/AICity2020-VOC-ReID
该文章是CVPR 2020 Vehicle ReID赛道的第二名方案,下面从数据预处理、网络模块以及后处理三个方面简单的介绍下本文的思想:
1 本文方法
1.1 数据预处理
数据增强模块:作者通过观察训练集发现数据集中车体图背景区域占比较大,所以车体图是可以进一步裁剪的,在这里作者使用模型推理得到的车体图heatmap作基准朝外以固定阈值扩张得到增强的数据集(裁剪的数据集)
1.2 网络模块
网络模块如下图所示:主干模型backbone、average mean pooling策略和损失函数(circle loss和triplet loss)
backbone: resnet50-ibn-a \ resnet101-ibn-a \ resnext101_ibn_a 三个基准backbone
池化层:generalized mean pooling,具体公式就是下图的样子,其实p趋近于无穷的时候就是最大池化、等于1 的时候就是平均池化。
损失函数:circle loss 和 triplet loss
由于本次比赛训练集分为真实数据集和合成数据集。其中真实数据集有真实的车辆ID标签和摄像头标签,合成数据集有方向、颜色等标签,所以本方案除了第一步的车辆ID作损失外,还加入了方向模块和摄像头模块。
Vehicle ReID -车辆ReID:车辆ID作为标签训练,backbone使用 resnet50-ibn-a \ resnet101-ibn-a \ resnext101_ibn_a 三个基准backbone,损失函数使用circle loss+ triplet loss ,任意两张车体图的距离计算公式为:
Orientation ReID -方向ReID:方向模块使用合成数据集的方向标签,由于方向总共有360度,将其平均拆分为36个区间作为方向标签。backbone使用 resnet50-ibn-a,损失函数使用softmax, 任意两张车体图的方向距离计算公式为:
Camera ReID -摄像头ReID:摄像头模块使用真实数据集的摄像头ID作为标签, backbone使用 resnet50-ibn-a,损失函数使用circle loss+ triplet loss ,最终计算两幅车辆图的摄像头相似度就是:
VOC Fusion.:最终计算两张图的相似度就是
这样做的好处是:进一步剔除同方向车和同摄像头拍摄的车(同视角)体对真实标签带来的影响,因为往往同方向的车和同摄像头拍摄的车(同视角)很相似。
1.3 后处理
Image to track:测试阶段,传统的解决方法是计算query图像和gallery图像距离。由于一条track中的图片都是相同id的车辆,但是一条track中的图片往往有不同的视角,所以可以将每个gallery的图片特征使用该track的平均特征替换;
Re-rank:Person ReID的常用策略。
2 实验
2.1 实验细节
图像大小320x320,预处理: 水平翻转,随机裁剪,color jitter, 随机erase;此外还尝试了其它的数据增强方法比如随机patch, augmix,随机旋转和随机blur,但是这些效果都不好。为了构造pair-wise损失,数据使用参数p和k进行采样,分别表示每个mini-batch的类别数目和每类的实例数,本实验中分别取值为p=4,k=16; 训练阶段使用resnet50-ibn-a作为车辆、方向、相机ReID的backbone,训练使用GTX-2080-Ti GPU 共训练12 epoch,并在训练的第一个epoch固定特征层,从第二个epoch全部放开实验,学习率的衰减从3.5e-4到7.7e-7
2.2 数据集
真实数据CityFlow 和合成数据VehicleX,
2.3 其他研究和实验
将CityFlow的前95个id作为验证集其他作为训练集。
损失函数影响:对比实验发现circle+tripletloss效果最好,mAP29.7%;
数据影响: 加入合成数据mAP提升10%,再加入增强的真实数据mAP提升5%;
VOC融合影响:车辆ReID 加入方向ReID后mAP提升3%, rank1 提升5%; 再加入摄像头ReID后mAP提升3%, rank1 提升5%