行人重识别Deep person reid复现:

最近有接触一个行人重识别相关的项目,网上没有找到很详细的教程复现,这里记录下自己根据官方说明文档的测试流程,也是对先人前辈的工作做一个搬运,另外也用来给自己做备忘录,希望能够带给大家一点点参考。
源码网址:https://github.com/KaiyangZhou/deep-person-reid 论文网址:https://arxiv.org/abs/1910.10093 训练好的模型:https://kaiyangzhou.github.io/deep-person-reid/MODEL_ZOO 数据集下载:Market-1501 操作系统:Linux

“我试了在Windows下配置环境,在执行setup.py时出问题了,在Linux服务器上很正常。感觉应该是自己笔记本GPU显卡驱动不正常,也不太会配置,看源码好像是用了CUDA的,估计是这个问题。”

1、 配置源码环境

由于网速一般,在配置环境加载的同时,我跑去网址下载了源码数据集,节省等待时间,关于网速有时候真的感觉太难了。

#**如果网速不错可以直接使用下面这行命令下载源码**
 git clone https://github.com/KaiyangZhou/deep-person-reid.git
# 然后重新创建一个python版本为3.7的虚拟环境,命名为torchreid
conda create --name torchreid python=3.7
#激活环境
conda activate torchreid
#找到你所下载的源码文件夹
cd deep-person-reid-master/
# 安装环境依赖,这个前提是保证你已经找到正确的源码路径以及各包版本正确
pip install -r requirements.txt

基于opencv行人检测 总结_linux

# 安装torch和torchvision(选择适合你电脑的cuda版本)
# 具体可以查看pytorch官网网站,有对应命令可以选择
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch

关于查看系统、gpu、cuda版本等的命令我用的是以下两条:

uname -a # 显示电脑以及操作系统的相关信息
nvidia-smi # 查看显存的使用情况

可以看到我的CUDA是11.0所以选择对应命令安装torch和torchvision即可

基于opencv行人检测 总结_linux_02


这里安装pytorch的时候可能会出现问题,可以输一下pip list命令来检查下环境中的包版本是不是正确,不过安装的时候不报错就没事。

# 最后一步安装torchreid的setup.py这个执行文件,环境就配置完成
python setup.py develop

2、 数据集在这里直接使用的是Market1501数据,需要先到网址下载这个数据,然后解压后,放置到源码"deep-person-reid-master"——>“reid-data”——>"market1501"文件夹下面。我的文件目录是下面这样的:

基于opencv行人检测 总结_linux_03

3、 在deep-person-reid-master文件夹下面新建一个py文件,我命名为getstart30.py把官网上的这一段代码复制粘贴上即可。

# 模块引入
import torchreid
# 加载数据管理器
datamanager = torchreid.data.ImageDataManager(
    root='reid-data',
    sources='market1501',
    targets='market1501',
    height=256,
    width=128,
    batch_size_train=32,
    batch_size_test=100,
    transforms=['random_flip', 'random_crop']
)
# 构建模型、优化器和lr_scheduler
model = torchreid.models.build_model(
    name='resnet50',
    num_classes=datamanager.num_train_pids,
    loss='softmax',
    pretrained=True
)

model = model.cuda()

optimizer = torchreid.optim.build_optimizer(
    model,
    optim='adam',
    lr=0.0003
)

scheduler = torchreid.optim.build_lr_scheduler(
    optimizer,
    lr_scheduler='single_step',
    stepsize=20
)
# Build engine
engine = torchreid.engine.ImageSoftmaxEngine(
    datamanager,
    model,
    optimizer=optimizer,
    scheduler=scheduler,
    label_smooth=True
)
# 进行培训和测试
engine.run(
    save_dir='log/resnet50',
    max_epoch=60,
    eval_freq=10,
    print_freq=10,
    test_only=False
)

4、现在在cmd里面输入执行命令就可以执行简单的训练和测试了。

python getstart30.py
=> Start training
epoch: [1/60][10/404] time 0.174 (0.220) data 0.000 (0.011)   eta 1:28:59 loss 6.9710 (6.7484) acc 0.0000 (0.6250) lr 0.000300
epoch: [60/60][400/404] time 0.178 (0.180) data 0.000 (0.000)   eta 0:00:00 loss 1.0796 (1.0766) acc 100.0000 (100.0000) lr 0.000003
=> Final test
##### Evaluating market1501 (source) #####
Extracting features from query set ...
Done, obtained 3368-by-2048 matrix
Extracting features from gallery set ...
Done, obtained 15913-by-2048 matrix
Speed: 0.0189 sec/batch
Computing distance matrix with metric=euclidean ...
Computing CMC and mAP ...
** Results **
mAP: 67.4%
CMC curve
Rank-1  : 85.0%
Rank-5  : 93.1%
Rank-10 : 95.7%
Rank-20 : 97.4%
Checkpoint saved to "log/resnet50/model/model.pth.tar-60"
Elapsed 1:15:48
``

该训练执行了1小时15分48秒,
今天一上午就暂时先做了这样一个简单的测试训练,
接下来要学习下Torchreid这个工程的源码文件,
看下如何才能处理自己的数据进行行人识别的工作。