作为刚入门的小白,先找了reid方向的一个baseline来学习,我找的是浙江大学罗浩老师在2019发表的一篇CVPR论文,该论文利用一些tricks来提出了一个更强的baseline,本文主要是运行该论文的代码。
论文题目:《Bag of Tricks and A Strong Baseline for Deep Person Re-identification》
论文地址:https://arxiv.org/abs/1903.07071
代码地址:https://github.com/michuanhaohao/reid-strong-baseline
下面就开始来跑代码,我用的环境配置是:
python3.6+pytorch1.6.0+cuda 10.1+torchvision 0.7.0
我因为是在家,所以是租的服务器,我用的是下面这个,感觉还很不错,注册还送十元代金券,租3090可以免费用四个小时左右,我租的是2080ti。
https://www.autodl.com/register?code=5eb4c04b-ba17-4bb7-9e95-be2c55309631
步骤:
1、先cd到你要存储到的文件夹下,再运行git clone https://github.com/michuanhaohao/reid-strong-baseline
,将项目下载下来。
2、安装项目需要的包,该项目需要安装ignite和yacs这两个包,运行conda install yacs
,对于ignite这个包,作者GitHub上说要安装0.1.2版本,不然可能出错,我试过直接安装,确实后面有点问题,而0.1.2版本好像是python3.7(包括)以下才能用,所以我上面用的是python3.6。我准备来手动安装:
(1)用下面的地址先下载ignite的0.1.2版本的包:
https://github.com/pytorch/ignite/tree/v0.1.2
(2)解压之后cd到文件夹目录下,运行python setup.py install
。
这里有一个情况,我运行的时候报了time out错误(但是我后来运行又没出错,如果没有出错就忽略下面这些)
经过查询之后,是因为访问国外网站超时了,将报错的那一串链接复制到浏览器,下载future-0.18.2.tar.gz
压缩包,然后解压,cd到这个文件夹,运行python setup.py install
,再回到ignite-0.1.2
文件夹,继续运行python setup.py install
,这样就不报错了。
3、准备数据集,这里我因为是想将这个项目先跑通,所以就只下载了Market1501数据集,没有的可以从我之前的博客里去取:
https://blog.csdn.net/qq_41857532/article/details/122968857?spm=1001.2014.3001.5501
下载好后新建一个data文件夹,然后将Market1501数据集放到里面。
4、从下面链接下载预训练权重:
https://download.pytorch.org/models/resnet50-19c8e357.pth
我将其放到了我自己建的models文件夹/root/project/models/resnet50-19c8e357.pth
中,然后将configs文件夹下的四个.yml文件中的PRETRAIN_PATH改为:PRETRAIN_PATH: '/root/project/models/resnet50-19c8e357.pth'
。
5、开始训练。项目中有很多.sh文件,可以用pycharm打开来进行选择,这里需要新建一个文件夹来存放输出,OUTPUT_DIR就是新建的文件夹路径。
我选择的是Experiment-all_tricks-without_center-market.sh
,
使用的指令是:
python3 /root/project/reid-strong-baseline/tools/train.py --config_file='/root/project/reid-strong-baseline/configs/softmax_triplet.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/root/project/data')" OUTPUT_DIR "('/root/project/outputs/softmax_triplet.yml_outputs')"
但是出现报错,如下:
找不到config模块,查询之后,需要在test.py中sys.path.append('.')
前加入下面代码:
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)
训练完成后,我的结果如下:
6、进行测试,和训练一样,要在test.py中sys.path.append('.')
前加入上面那两行代码。TEST.WEIGHT的值是上面你新建的文件夹路径里保存的训练120次的模型的路径,也就是:/root/project/outputs/softmax_triplet.yml_outputs/resnet50_model_120.pth
,然后将configs文件夹下的四个.yml文件中的OUTPUT_DIR改为:/root/project/outputs/softmax_triplet.yml_outputs
,我的指令是
python3 /root/project/reid-strong-baseline/tools/test.py --config_file='/root/project/reid-strong-baseline/configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/root/project/data')" TEST.RE_RANKING "('yes')" MODEL.PRETRAIN_CHOICE "('self')" TEST.WEIGHT "('/root/project/outputs/softmax_triplet.yml_outputs/resnet50_model_120.pth')"
这是加入了re_rangking来进行测试的,运行时报了‘Baseline’ object is not iterable
的错误,查找资料需要将
将modeling文件夹中的baseline文件中,最下面的param_dict = torch.load(trained_path)
替换成param_dict = torch.load(trained_path).state_dict()
最后测试的结果是:
7、可以看到,这个baseline十分强大,取得了非常好的结果。对于其他的.sh文件,也可以自己来进行测试。
参考链接:https://blog.csdn.net/MRZHUGH/article/details/108467892
https://blog.csdn.net/m0_55460164/article/details/118580418?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164507131916780274173890%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164507131916780274173890&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-10-118580418.first_rank_v2_pc_rank_v29&utm_term=reid+strong+baseline+%E4%BB%A3%E7%A0%81&spm=1018.2226.3001.4187