使用ResNet50训练Market1501
- 0x00参考
- 0x01准备数据集
- 0x02搭建模型ResNet50
- 0x03test
- 0x04可视化结果
0x00参考
⭐️郑哲东博士的GitHub
从零开始行人重识别-知乎
全篇对于上手person ReId 具有重要意义
环境:
torch_version=1.13.0+cu117
python_version=3.8.13
torch_version=1.10.2+cu102
python_version=3.6.13
没有的包pip install安装就好了,
修改pip源为清华源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
需要GPU,纯CPU应该不够
0x01准备数据集
Market-1501
很多找找都能下到
首先使用prepare.py
处理数据集,自己下载的数据集文件位置记得改进去
运行完会生成一个pytorch
文件
跑完之后,在pytorch的每个子文件夹中,图像都是按ID来排列的。
对于Market这个数据集,图像文件名就是它的ID/label
0x02搭建模型ResNet50
model.py
中已经改好需要变动的地方:
Market中的类别数是751,原来使用的ImageNet的类别数是1000.
具体来看model.py
的改动:
(continue…)
(win10)笔记本跑的报错
cannot import name ‘PY3‘ from ‘torch._six‘
百度查的说是torch和torchvision版本不匹配,但此前运行别的项目都没这问题
解决办法:重装版本匹配的torch和torchvision,此句可行pip install --user --upgrade torch1.10.0 torchvision0.11.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
写的很乱,总之就是CUDA和pytorch,torchvision版本都要兼容,官网可查
训练
(caiman).../Person_reID_baseline_pytorch-master$ python train.py --gpu_ids 0 --name ft_ResNet50 --train_all --batchsize 32 --data_dir ../data/Market1501/pytorch
14:50终于开始跑
可以看到GPU利用率也很好
昨天做的上不去,一开始以为是训练数据太少,今天才知道装的pytorch和CUDA版本不匹配,还是不能太依赖别人的环境,重建了一个虚拟环境费点时间但是问题有源可寻
查看CUDA是否可用:print(torch.cuda.is_available())
查看CUDA版本:nvcc -V
50分钟训练完
train_acc=99.94%
验证集的准确率到98%
0x03test
1.载入刚刚训练的模型来抽取每张图片的视觉特征
执行命令:
python test.py --gpu_ids 0 --name ft_ResNet50 --test_dir ../data/Market1501/pytorch --batchsize 32 --which_epoch 59
运行结果截图(part)
2. 用抽取的特征去匹配图像
运行evaluate_gpu.py
python evaluate_gpu.py
0x04可视化结果
值得注意的是demo.py
中的14行dataset的位置根据个人的调整
运行命令
python demo.py --query_index 777
或者pycharm直接运行也行,前提是path都改成自己的了,前面几个操作我都在命令行现给的自己放data的路径
运行结果:
嘢,不能显示UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure
agg是一个没有图形显示界面的终端
看到第8行
那把agg改成TKagg试试,TKAGG是有图形界面显示的终端,
修改之后能可视化了,但是看到一下top10就结束了,
查看代码,保存了结果在当前目录下,可以改一下保存路径
这是我的fig.savefig("../data/show.png")
在最后加句plt.waitforbuttonpress()
可以停留运行结果不直接结束直到按键盘
运行结果: