!转载请注明原文地址!——东方旅行者

更多行人重识别文章移步我的专栏:行人重识别专栏

本文目录

  • 一、实现思路
    • 1.数据预处理
    • 2.加载数据集
    • 3.数据处理
    • 4.模型结构指定
    • 5.模型训练(表征学习)
    • 6.编写采样器
    • 7.编写三元组损失
    • 8.针对度量学习对ReIDNet.py进行修改
    • 9.模型训练(度量学习)
    • 10.自定义水平最大池化层
    • 11.编写对齐机制的最小距离算法
    • 12.针对Aligned局部特征分支对三元组损失进行修改
    • 13.针对Aligned局部分支对ReIDNet.py进行修改
    • 14.模型训练(AlignedReID)
    • 15.算法性能测试
  • 二、使用的依赖

一、实现思路

选用Pytorch进行系统实现

1.数据预处理

使用行人检测传统方法HOG+SVM先对Market1501训练集数据进行筛选,无法检测出行人的图片进行删除。

2.加载数据集

编写数据管理类管理数据,生成数据集的索引列表,类型为list,该列表每一项为三元组(图片地址,行人ID,摄像机ID)。
编写数据加载类加载数据,根据数据管理类生成的索引列表,按照列表元素三元组的图片地址读取图片,并生成图片数据集,类型为自定义数据集类(该类继承torch.utils.data中的Dataset),该数据集每一项为一个三元组(图片,行人ID,摄像机ID)。

3.数据处理

模型读取数据(无论是训练还是测试)时,需要对数据进行必要的处理,如尺度统一、水平变换(训练时需要,测试时不需要)、将图片转为张量、归一化等。

4.模型结构指定

基础网络ResNet50,算力不够可以使用AlexNet进行代替,但准确率会受到影响。需要对基础网络进行修改,加上全连接层。在之后编写时Alinged局部分支要加上一个局部特征计算分支,需要加一个卷积层、加一个自定义一个池化层。

5.模型训练(表征学习)

声明数据集处理器、数据集吞吐器、加载模型、设置损失函数、优化器、动态学习率等参数进行模型训练。

6.编写采样器

自定义采样器类RandomIdentitySampler,其可根据指定的数据集(索引列表)与采样数量进行采样,最后返回记录采样数据图片序号的列表迭代器。用于度量学习中。

7.编写三元组损失

需要自定义难样本挖掘三元组损失

8.针对度量学习对ReIDNet.py进行修改

针对度量学习特点对ReIDNet.py进行修改

9.模型训练(度量学习)

声明数据集处理器、数据集吞吐器、采样器、加载模型、设置损失函数、优化器、动态学习率等参数进行模型训练。

10.自定义水平最大池化层

自定义计算局部分支所使用的水平最大池化层

11.编写对齐机制的最小距离算法

根据论文
《AlignedReID: Surpassing Human-Level Performance in Person Re-Identification》
思路编写最小距离算法

12.针对Aligned局部特征分支对三元组损失进行修改

13.针对Aligned局部分支对ReIDNet.py进行修改

14.模型训练(AlignedReID)

15.算法性能测试

测试指标CMC曲线的Rank-N与mAP

二、使用的依赖

# requirements.txt
# 在CMD使用 pip install -r requirements.txt命令安装下列依赖
# 注意更换pip源,否则下载较慢
Numpy==1.19.2
IPython==7.19.0
Pillow==8.0.1
Torch==0.4.1
Torchvision==0.2.2
Matplotlib==3.3.2