目录
1 设置自己的数据集
1.1使用作者提供的dataset格式
也就是说不修改输入输出格式,直接改路径
1)修改数据集的路径。红色部分是之前的,绿色部分是修改后的。我这里使用的的是绝对路径。
2)检查数据集格式和正则化规则
假设使用的数据为1501格式的数据集。
configs/softmax_triplet_with_center.yml:
则去找到其对应的class。
data/datasets/__init__.py
训练集和测试集的路径是在代码中设置的
data/datasets/market1501.py
下面是正则化规则,也就是如何根据文件名读取标签,输出为文件路径,人物id,相机id
data/datasets/market1501.py
检查上述规则是否符合自己的数据集,不符合则修改代码。market1501 数据集的格式为pid_camid_frameid.jpg
1.2新建dataset格式
market1501返回了三项,但没有返回frame id。作者测试时只把跨相机的样本作为gallery,但我考虑全部样本.。因此我需要frame id 这个属性,测试时把不同frame id 的全部图像作为gallery,也就是除去他本身外的所有图像。
(1)新建一个类Market1501_ignore_cam,类似于market1501.py中的代码,只不过改下正则化规则。然后在_init_.py 中引用此类。
(2)修改dataloader
(3)修改train和test 的读数据部分
engine/inference.py:
2 测试时设置是否只采用跨相机的样本
utils/reid_metric.py
3 训练
训练修改cfg文件
tools/train.py
3.1 修改模型
修改name 预训练类型 目前有self imagenet random 三种。random不指定预训练路径。
3.1.1参数解读
self 是自己的模型,类型为self时会接续训练,只需把start设置为0,则可以当作第0个epoch。
数据集 名称 batch数 线程数
数据集resize后的大小 以及数据增强
模型保存路径
更多参数对照configa/defaults.py添加到yaml文件。例如 MODEL是组名,NECK等是属性名。
3.1.2使用自己的模型
首先将配置文件的model name 改为定义的模型名称
然后去modeling/baseline.py定义该模型,并赋值给self.base
inplane是网络最后一层输出的通道数目
4测试
修改权重路径
权重模型要和MODEL一致。
此时OUTPUT_DIR为测试结果保存的路径
5本篇博客的不足
笔者暂时没搞懂代码中的 ignite.engine 的使用方法。另外,没涉及数据增强和Rerank。
本文修复了作者的若干bug,若有代码需求请在评论区回复。