Reid-strong-baseline训练记录
Reid-strong-baseline训练记录
论文:《Bag of Tricks and A Strong Baseline for Deep Person Re-identification》
代码:https://github.com/michuanhaohao/reid-strong-baseline
本例中文件名为:reid-strong-baseline
路径为:/home/user
数据集准备(选择一个即可)
(1)Market1501
数据集链接http://www.liangzheng.org/Project/project_reid.html
将数据集按照如下格式放好
data
market1501 # this folder contains 6 files.
bounding_box_test/
bounding_box_train/
…
(2)DukeMTMC-reID
数据集链接:https://github.com/layumi/DukeMTMC-reID_evaluation#download-dataset
将数据集按照如下格式放好
data
dukemtmc-reid
DukeMTMC-reID # this folder contains 8 files.
bounding_box_test/
bounding_box_train/
…
预训练权重下载
创造一个新的代码文件:若使用resnet为预训练权重,则输入(1)中代码,若使用seresnet为预训练权重,则输入(2)中代码
(1)ResNet
from torchvision import models
models.resnet50(pretrained=True)
(2)Senet
import torch.utils.model_zoo as model_zoo
model_zoo.load_url(‘the pth you want to download (specific urls are listed in ./modeling/backbones/senet.py)’)
如图所示
运行该文件即可下载resnet50预训练权重。
文件路径修改
在pycharm界面依次点击Edit——Find——Find in Files选择查找修改路径
DATASETS.NAMES:数据集名称
DATASETS.ROOT_DIR:数据文件夹路径
OUTPUT_DIR:输出存放路径
MODEL.PRETRAIN_PATH:预训练权重路径
MODEL.NAME:使用模型名称
训练
可以根据个人需求选择不同的训练方式
如readme中的
根据数据集和损失函数选择,以1为例,记得将指令改为
python3 tools/train.py --config_file=‘configs/softmax_triplet.yml’ MODEL.DEVICE_ID “(‘0’)” DATASETS.NAMES “(‘你的数据集名称,如market1501’)” OUTPUT_DIR “(‘你的输出存放路径,如/home/user/reid-strong-baseline/output’)”
或者也可在选择加入不同的teick训练模型,打开.sh文件就可看到对应的训练代码
本文所采用训练指令如下:
python3 tools/train.py --config_file=‘configs/softmax_triplet_with_center.yml’ MODEL.DEVICE_ID “(‘0’)” MODEL.NAME “(‘resnet50’)” MODEL.PRETRAIN_PATH “(’/home/user/reid-strong-baseline/yuxuanlian/resnet50-19c8e357.pth’)” DATASETS.NAMES “(‘market1501’)” DATASETS.ROOT_DIR “(’/home/user/reid-strong-baseline/data’)” OUTPUT_DIR “(’/home/user/reid-strong-baseline/output’)”
测试
根据不同的测试需求,可以选择不同的测试代码
本文所采用测试代码如下:
python3 tools/test.py --config_file=‘configs/softmax_triplet_with_center.yml’ MODEL.DEVICE_ID “(‘0’)” DATASETS.NAMES “(‘market1501’)” TEST.NECK_FEAT “(‘after’)” TEST.FEAT_NORM “(‘yes’)” MODEL.PRETRAIN_CHOICE “(‘self’)” TEST.RE_RANKING “(‘yes’)” TEST.WEIGHT “(’/home/user/reid-strong-baseline/output/resnet50_model_120.pth’)”
遇到的问题和解决方法
代码测试时报错:‘Baseline’ object is not iterable
将modeling文件夹中的baseline文件中,最下面的
param_dict = torch.load(trained_path)
替换成
param_dict = torch.load(trained_path).state_dict()
测试结果
TEST:
FEAT_NORM: yes
IMS_PER_BATCH: 128
NECK_FEAT: after
RE_RANKING: yes
WEIGHT: /home/user/reid-strong-baseline/output/resnet50_model_120.pth
2021-07-08 17:29:34,822 reid_baseline.inference INFO: Enter inferencing
2021-07-08 17:32:23,070 reid_baseline.inference INFO: Validation Results
2021-07-08 17:32:23,071 reid_baseline.inference INFO: mAP: 94.0%
2021-07-08 17:32:23,071 reid_baseline.inference INFO: CMC curve, Rank-1 :95.6%
2021-07-08 17:32:23,071 reid_baseline.inference INFO: CMC curve, Rank-5 :97.7%
2021-07-08 17:32:23,071 reid_baseline.inference INFO: CMC curve, Rank-10 :98.4%