ReID中PCB模型输出维度_零基础实战行人重识别ReID项目-基于Milvus的以图搜图

3c6b0e94a69742266d88388ef23a0b91.png

近期正在学习ReID,完全零基础,打算复现几种主流的ReID算法,并进行工程化落地。

学习目标:掌握ReID的算法原理、实现方案,动手搭建网络模型,在数据集上复现算法。

学习内容:阅读相关资料、论文、开源代码,复现算法,工程化落地。

第一阶段,ReID的基本概念

包括 ReID的定义、常用数据集、评价指标、实现思路

推荐一个视频教程:云从科技:详解跨镜追踪(ReID)技术实现及应用场景

a89c1867f0c7d71b14af899b03a4958c.png

这个博客对视频进行了总结:行人重识别(ReID) --技术实现及应用场景

1.ReID定义:全称Person Re-Identification,主要解决跨摄像头跨场景下行人的识别与检索。该技术可以作为人脸识别技术的重要补充,可以对无法获取清晰拍摄人脸的行人进行跨摄像头连续跟踪,增强数据的时空连续性。

2.技术难点:相机拍摄角度,图片模糊不清楚,室内室外环境变化,行人更换服装饰配,冬季夏季风格差异,白天晚上光线差异等。

3.常用数据集:Market1501、DukeMTMC-reID、CUHK03

e991c4b01e2310e9cc2efd9756ba09dc.png
  • Market1501: http://liangzheng.com.cn/Project/project_reid.html
  • DukeMTMC-reID: sxzrt/DukeMTMC-reID_evaluation
  • CUHK03: CUHK Re-ID

4.评价指标

  • Rank1:首位命中率
  • mAP:平均精度均值
  • CMC:累计匹配曲线

参考:Sherlock:一个强力的ReID basemodel

行人重识别(Person Re-ID)【一】:常用评测指标

5.实现思路

a.检索图经过网络抽取图片特征(Feature) ;

b.底库里的所有图片全部抽取图片特征(Feature) ;

c.将检索图与地库图的特征计算距离(例如欧式距离) ;

d.根据计算距离进行排序,排序越靠前表示是相似率越高。

6.实现方案

方案一:表征学习

基于SoftmaxLoss(分类损失)与 ContrastiveLoss(对比损失) Rank1: 79.51% mAP: 59.87%

Z.Zheng,L.Zheng,andY.Yang. A discriminatively learned cnn embedding for person re-identification. arXiv preprint arXiv:1611.05666, 2016.

方案二:度量学习

基于Triplet Loss(三元损失)的ReID Rank1: 84.92% mAP: 69.14%

A.Hermans, L. Beyer, and B. Leibe. In defense of the triplet loss for person re-identification. arXiv preprint arXiv:1703.07737, 2017.

F. Schroff, D. Kalenichenko, and J. Philbin. FaceNet: A Unified Embedding for Face Recognition and Clustering. In CVPR, 2015. 1, 2, 3, 5

方案三:局部特征学习

3.1 基于局部区域调整的ReID Rank1: 80.31% mAP: 57.53%

L. Zhao, X. Li, J. Wang, and Y. Zhuang. 2017. Deeply-learned part-aligned representations for person re-identication. In CVPR.

3.2 基于姿态估计局部特征调整 Rank1: 84.14% mAP: 63.41%

C. Su, J. Li, S. Zhang, J. Xing, W. Gao, and Q. Tian. 2017. Pose-driven Deep Convolutional Model for Person Re-identication. In CVPR.

3.3 PCB, 2018年1月文章, 现在较好的Baseline, Rank1:93.8% mAP:81.6%

Y. Sun, L. Zheng, Y. Yang, Q. Tian, and S. Wang. Beyond part models: Person retrieval with refined part pooling. arXiv preprint arXiv:1711.09349, 2017.

第二阶段:复现算法

选取PCB方案,搭建网络,训练模型

PCB使用修改版的ResNet-50作为骨干网,下图是ResNet不同层数的网络结构,

b34cc5c6fe76d247fa9deb2a142f0df1.png

图片来自ResNet论文: Deep Residual Learning for Image Recognition

ResNet论文中指出,Downsampling is performed by conv3 1, conv4 1, and conv5 1 with a stride of 2.

所以,原始的ResNet-50 的下采样倍数为2^5 = 32倍,即输入的图像到输出的特征图缩小了32倍。

而PCB论文中指出,输入尺度为384x128(高比宽为3:1),经过骨干网络后,输出的特征图尺度为24x8,

所以下采样比例为16,因此,ResNet-50中 conv5_1的stride需要由2改为1.

结合下图,介绍PCB的流程:

5629ce9ec7759bfd3e4a7c64bd3290e3.png

1.输入图像( 尺度为 高384 x 宽128 x 通道3) 送入修改后的ResNet-50,输出特征图T,尺度为 高24 x 宽8 x 通道2048

2.将T在高的维度上等分为6份,分别执行平均池化,得到向量g,尺度为 6 x 1 x 1 x 2048

3.对向量g执行1x1卷积,得到向量h,尺度为6 x 1 x 1 x 256

4.对每个向量h送入 256 x 751 全连接层的分类训练

疑问:

1.得到6个分类向量后,行人分类是怎么处理的?

2.如果这6个向量的分类结果不同,是采用投票机制得出最终标签吗?若6个值都不同怎么处理?

解答:

分类时,使用6个g向量或者6个h向量的拼接结果来表示图像的特征进行分类,因此不存在上述的问题2.

6个g向量的拼接是12288维的向量, 6个h向量的拼接是1536维的向量。

使用拼接的g向量能够达到更高的精度,但计算量也相对更大。

参考项目:https://github.com/layumi/Person_reID_baseline_pytorch

从train.py中的第215行可以看出,训练阶段,对6个全连接层的结果分别计算softmax,进行累加后,再计算交叉熵损失值:

a79121bb723533b547044d3f39a9dfc0.png

从test.py的第158行可以看出,提取特征时,取的是上述流程图中的g,即尺度为6x2048的特征向量:

94fe887f59e3eb173ceb26eea7057d78.png

在实现细节上,代码中分别对6个分片除以它们的2范数,目的是降低不同维度上取值范围的差异性(可以理解为归一化)。

论文提供了两个变种的方案:

Variant 1. 将所有h向量平均,得到单个h向量,送入全连接层进行分类训练;测试阶段,将g或h进行拼接,再进行分类。

Variant 2. 网络结构不变,只是将全连接层进行权值共享。

以及IDE ( 论文 Person reidentification: Past, present and future中的方案,本文对其进行了相应的改进)

并给出了不同方案的测试结果:

9bbaa4787e52e42f07f65b4879788246.png

推荐一个网站:https://www.paperswithcode.com/

专门用于查找论文复现的项目代码,比如PCB的搜索结果:

1cc4359e9ec4a49d81c6e504b5250e85.png

进去之后,发现有很多github的项目,

PCB的训练过程已在百度AI Studio上使用PaddlePaddle进行复现,源码:

https://aistudio.baidu.com/aistudio/projectdetail/468702

项目仍在更新维护中,欢迎提出宝贵意见。

第三阶段:工程化落地

这里隆重介绍一款开源的特征向量相似度搜索引擎 Milvus

https://www.milvus.io/cn/

官方提供了【基于 Milvus 和 VGG 实现以图搜图】项目的源码:

milvus-io/bootcamp

内置了VGG网络用于提取图像特征,用户只需要提供训练集和待测试的图片即可,特征提取、匹配过程对用户完全透明。

可参考官网的博客:

【Milvus带你实现轻松搭建以图搜图系统】CSDN-专业IT技术社区-登录

本人使用Market-1501的bounding_box_test文件夹中19732张图片作为底库,使用query文件夹中的图片进行检索,效果如下:

8404a3744099308c2cb206b5862275f8.png

Milvus提供的以图搜图解决方案中,使用的骨干网络是VGG-16,图片需要resize为224*224再送入进行特征提取,最终展示出来的效果是1:1的。

而Market-1501数据集中的图片都是细长条状的,因此目前默认环境还不太符合实际应用场景。

下一步工作:

修改展示界面中图像的宽高比、骨干网络的输入尺度、提取特征的骨干网络。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值