!转载请注明原文地址!——东方旅行者
更多行人重识别文章移步我的专栏:行人重识别专栏
本文目录
一、实现思路
选用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