1.下载项目:
该项目的文件目录:
|-----config
|-----configs
|-----data
|-----engine
|-----imgs
|-----layers
|-----modeling
|-----solver
|-----tests
|-----tools
|-----utils
以及一些.sh文件
2.pycharm中环境配置:
#conda create -n XXX python=3.6
# CUDA 10.1
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
#ignite 0.1.2的安装包
https://github.com/pytorch/ignite/tree/v0.1.2
或者pip install pytorch-ignite
#yacs pip install yacs
3.数据集与预训练模型
# 需要准备Market501数据集:
链接: https://pan.baidu.com/s/1I7mZLCOoY2ltzR73gN1UjQ 提取码: ab12
注:将该数据集下载后解压并将文件名改为‘market501’,放入data文件夹中。
#准备Resnet50的预训练模型:
链接: https://pan.baidu.com/s/1ryVTfgXw0oNDL-5Ud9ZI4g 提取码: cd34
注:在该项目中新建一个‘models’文件夹,将下载的resnet50-19c8e357.pth(Resnet50预训练模型)放入‘models’文件夹中。
4.修改代码参数
#config/defaults.py:
_C.MODEL.PRETRAIN_PATH = " "(添加预训练模型所在的文件夹路径)
#configs/softmax-triplet.yml:
MODEL:
PRETRAIN_PATH: ‘ ’(添加resnet50-19c8e357.pth的路径)
#tools/train.py:
在开头处sys.path.append('.')之前,添加两行代码:
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)
#修改Experiment-all_tricks-without_center-market.sh:
python tools/train.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('XXXXXXXX/data')" OUTPUT_DIR "('XXXXXXXX/output')"
注:MODEL.DEVICE_ID:需要使用的GPU
DATASETS.NAMES:要训练的数据集文件夹名(‘market1501’)
DATASETS.ROOT_DIR:数据集所在的文件夹
OUTPUT_DIR:自己创建一个文件夹,用于查看训练完后数据(我创建的是‘output’)
5.开始训练:
使用上面修改的Experiment-all_tricks-without_center-market.sh文件:
$ sh Experiment-all_tricks-without_center-market.sh
注:configs/softmax-triplet.yml:
SOLVER:
MAX_EPOCHS: 120 设置训练的轮数
训练结果:
该图为训练完120轮后的结果。
6.进行测试:
训练完后打开’output‘:
resnet50_model_120.pth为训练完120轮后的权重模型。
#tools/test.py:
在开头处sys.path.append('.')之前,添加两行代码:
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)
#configs/softmax_triplet_with_center.yml:
OUTPUT_DIR: "XXXXX"测试结果输出的路径,按自己的喜好即可
#测试依然使用.sh命令,将Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh
进行修改:
python tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('XXXX/data')" TEST.RE_RANKING "('yes')" MODEL.PRETRAIN_CHOICE "('self')" TEST.WEIGHT "('XXXXXX/resnet50_model_120.pth')"
注:MODEL.DEVICE_ID:需要使用的GPU
DATASETS.NAMES:要训练的数据集文件夹名(‘market1501’)
DATASETS.ROOT_DIR:数据集所在的文件夹
TEST.WEIGHT:训练120后的权重模型路径
#在服务器中输入以下命令进行测试:
$ sh Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh
注:测试中出现的问题:
#TypeError: 'Baseline' object is not iterable
将modeling/baseline.py中最下面的 param_dict = torch.load(trained_path)
改为:param_dict = torch.load(trained_path).state_dict()
测试结果:
该测试结果采用的 --config_file='configs/softmax_triplet_with_center.yml'
该测试结果采用的 --config_file='configs/softmax_triplet.yml'