前言

ReID,也就是 Re-identification,其定义是利用算法,在图像库中找到要搜索的目标的技术,所以它是属于图像检索的一个子问题。
为什么会有这个方向呢?来看大背景:随着社会的发展,公共安全成为全社会的一个共同话题,与之相辅相成的视频监控系统也得到了大量的普及。视频监控系统可以直观的再现目标场景,可作为公安侦破案件的强力辅助。在执法部门的工作中,目标的识别和定位是及其关键的一步,然而现有的监控部署下,这个关键步骤几乎是靠着人力完成的。在这个讲究数据和效率的时代,通过人工观察监控录像查找结果显然存在着很大的资源浪费以及效率的低下。另外,由于摄像头的分辨率等硬件缺陷,很难得到清晰的人身图像,因此,已经大力推广的人脸识别技术已不再适用此场景。由于传统人工查询的不便性以及人脸识别的无法应用,研究者思考如何发明一项更合适的技术来取代人脸识别,能在监控领域以机器代替人力分析呢?故此,行人重识别(P-edestrian Re-identification,ReID)的研究也应随之展开。
说白了,在监控拍不到人脸的情况下,ReID可以代替人脸识别来在视频序列中找到我要找到目标对象。那么他的应用就很广了,可以做安防,可以做个人定位,在商场上可以配合推荐系统,搭建出个性化的推荐服务等等。

论文:《Bag of Tricks and A Strong Baseline for Deep Person Re-identification》
论文下载:https://arxiv.org/abs/1903.07071
代码:https://github.com/JDAI-CV/fast-reid

复现结果对比

复现结果:

论文结果:

论文主要贡献

这篇文章是一篇综述类论文,作者收集了当时顶会大量关于reid的论文,并且总结实验,记录不同tricks对涨点的影响,主要有作用的tricks如下:
tricks:

  1. warmup
  2. REA
  3. LS
  4. stride = 1
  5. BNNeck
  6. center loss

warmup

学习率对ReID模型的性能有很大的影响。标准baseline最初以较大且恒定的学习率进行训练。为了获得更好的性能,使用warmup策略提升网络。在实践中,作者设置10个epoch线性增加学习速率,从3.5_10^-5到 3.5_10^-4。然后,学习速率分别在第40个epoch和第70个epoch,从3.5_10^-5 衰减到3.5_10^-6。

论文实现与代码对比:
论文:

fast-reid:

REA

随机擦除图片区域。在reid任务中自然会有很多遮挡的情况,因此随机擦除部分区域很有必要,可以加强模型的泛化性。

论文实现与代码对比:

其中:p(执行随机擦除的概率),scale(擦除区域面积),ratio(纵横比缩放范围),value(填充像素的值)

LS

标签平滑,这是一种正则化策略,主要是通过给one hot加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。

Stride=1

修改resnet的最后下采样的步长从2到1,feature map大小从8 _ 4变到16 _ 8。(Higher spatial resolution always enriches the granularity of feature),更大分辨率的特征图包含更多的特征信息。

BNNeck

triplet loss可以降低同一类向量的距离。ID loss可以加大不同类向量的距离。ID loss主要优化cosine距离,而triplet loss更加关注欧式距离。如果我们同时使用两个loss同时优化特征向量,他们的目标可能不一致。在训练过程中可能出现一个loss降低了另外一个loss一直在震荡或者甚至增加了的现象。BNNeck结构,用ft计算triplet loss,然后用fi计算ID loss。
这样的原因:

  • 正则化平衡了各个维度的,特征是超平面的高斯分布。这样的分布使得ID loss更容易收敛。
  • BNNeck减少了ID loss在ft的限制。ID loss更少的约束使得triplet loss同时更容易收敛。
  • 正则化使得同一个对象的特征更加紧密。

center loss

center loss同时学习每个类的深度特征中心,并惩罚深度特征与其对应的类中心之间的距离,弥补了triplet loss的缺点。center loss函数表示为:

在论文中center loss效果不明显,跨域的时候还掉了不少,fast-reid没加入该loss。

复现代码

下载代码:

git clone https://github.com/JDAI-CV/fast-reid.git

安装环境:

cd fast-reid
conda create -n fastreid python=3.7
conda activate fastreid
conda install pytorch==1.6.0 torchvision tensorboard -c pytorch
pip install -r docs/requirements.txt

下载数据集:
地址:
谷歌云盘
百度云盘
训练:

cd yourPath/fast-reid/
export FASTREID_DATASETS=./datasets/market1501/
python3 tools/train_net.py --config-file ./configs/Market1501/bagtricks_R50.yml MODEL.DEVICE "cuda:0"

复现结果对比

复现结果:

论文结果: