Reid strong baseline知识蒸馏【附代码】

本项目是在Reid strong baseline基础上进行的更新,实现的知识蒸馏。项目暂未加入目标检测部分,后期会不定时更新,请持续关注。

本项目Reid所用数据集为Markt1501,支持Resnet系列作为训练的baseline网络。训练采用表征学习+度量学习的方式,蒸馏特征蒸馏【暂未更新逻辑蒸馏】。

注:各位在私聊我咨询问题的时候,请先好好看看文档说明,并说明是在什么操作下,哪段代码遇到的问题,这样也好帮大家给出相应的建议~

项目说明

1.仅支持markt1501数据集

2.支持resnet网络系列训练(未蒸馏)

3.支持resnet系列特征自蒸馏训练(暂未更新离线蒸馏和逻辑蒸馏)

4.可自由选择教师网络和学生网络(本项目的特点)

5.支持评价指标的测试


目录

Reid训练

知识蒸馏训练

教师网络&学生网络选择

测试

Reid相关资料学习链接

后期计划更新


度量学习采用三元组损失函数

数据集:mark1501(将数据集mark1501放在data文件夹下)

baseline网络:支持Resnet系列,例如resnet18、resnet34、rensnet_ibn等

Reid训练

python tools/train.py --model_name resnet50_ibn_a --model_path weights/ReID_resnet50_ibn_a.pth --IMS_PER_BATCH 8 --TEST_IMS_PER_BATCH 4 --MAX_EPOCHS 120

model_name:可支持的baseline网络

支持:resnet18,resnet34,resnet50,resnet101,resnet50_ibn_a

接着会出现下面的内容:

=> Market1501 loaded
Dataset statistics:
  ----------------------------------------
  subset   | # ids | # images | # cameras
  ----------------------------------------
  train    |   751 |    12936 |         6
  query    |   750 |     3368 |         6
  gallery  |   751 |    15913 |         6
  ----------------------------------------
  
2023-05-15 14:30:55.603 | INFO     | engine.trainer:log_training_loss:119 - Epoch[1] Iteration[227/1484] Loss: 6.767, Acc: 0.000, Base Lr: 3.82e-05
2023-05-15 14:30:55.774 | INFO     | engine.trainer:log_training_loss:119 - Epoch[1] Iteration[228/1484] Loss: 6.761, Acc: 0.000, Base Lr: 3.82e-05
2023-05-15 14:30:55.946 | INFO     | engine.trainer:log_training_loss:119 - Epoch[1] Iteration[229/1484] Loss: 6.757, Acc: 0.000, Base Lr: 3.82e-05
2023-05-15 14:30:56.134 | INFO     | engine.trainer:log_training_loss:119 - Epoch[1] Iteration[230/1484] Loss: 6.760, Acc: 0.000, Base Lr: 3.82e-05
2023-05-15 14:30:56.305 | INFO     | engine.trainer:log_training_loss:119 - Epoch[1] Iteration[231/1484] Loss: 6.764, Acc: 0.000, Base Lr: 3.82e-05
​

每个epoch训练完成后会测试一次mAP:

我这里第一个epoch的mAP达到75.1%,Rank-1:91.7%, Rank-5:97.2%, Rank-10:98.2%。

测试完成后会在log文件下保存一个pth权重,名称为mAPxx.pth,也是用该权重进行测试。

2023-05-15 14:35:59.753 | INFO     | engine.trainer:print_times:128 - Epoch 1 done. Time per batch: 261.820[s] Speed: 45.4[samples/s]
2023-05-15 14:35:59.755 | INFO     | engine.trainer:print_times:129 - ----------
The test feature is normalized
2023-05-15 14:39:51.025 | INFO     | engine.trainer:log_validation_results:137 - Validation Results - Epoch: 1
2023-05-15 14:39:51.048 | INFO     | engine.trainer:log_validation_results:140 - mAP:75.1%
2023-05-15 14:39:51.051 | INFO     | engine.trainer:log_validation_results:142 - CMC curve, Rank-1  :91.7%
2023-05-15 14:39:51.051 | INFO     | engine.trainer:log_validation_results:142 - CMC curve, Rank-5  :97.2%
2023-05-15 14:39:51.052 | INFO     | engine.trainer:log_validation_results:142 - CMC curve, Rank-10 :98.2%
​

知识蒸馏训练

支持网络为ResNet系列。

参数说明(基本参数和上面训练一样,只是多了kd):

--model_name:模型名称,支持Resnet,resnet18_kd, resnet34_kd, resnet50_kd, resnet101_kd

--model_path:预权重路径

--kd:开启蒸馏模式

--feature_loss_coefficient:特征蒸馏的权重,默认0.03

这里用的蒸馏为在线式蒸馏(自蒸馏),暂未更新离线式蒸馏。

python tools/train.py --model_name [model name] --model_path [your model weight path] --IMS_PER_BATCH 8 --TEST_IMS_PER_BATCH 4 --kd --feature_loss_coefficient 0.03
=> Market1501 loaded
Dataset statistics:
  ----------------------------------------
  subset   | # ids | # images | # cameras
  ----------------------------------------
  train    |   751 |    12936 |         6
  query    |   750 |     3368 |         6
  gallery  |   751 |    15913 |         6
  ----------------------------------------
resnet50_kd loading pretrained model weight...
label smooth on, numclasses: 751
ready kd train!
​

训练后会在logs文件下保存权重,命名格式为mAP_KD_xx.pth。下面是resnet50蒸馏前后第一个Epoch评价指标对比,还是有提升的【由于本人硬件环境受限,只是给大家把功能进行了实现】。

resnet50
Validation Results - Epoch: 1
2023-05-17 20:08:53.642 | INFO     | engine.trainer:log_validation_results:156 - mAP:39.2%
2023-05-17 20:08:53.642 | INFO     | engine.trainer:log_validation_results:158 - CMC curve, Rank-1  :65.6%
2023-05-17 20:08:53.642 | INFO     | engine.trainer:log_validation_results:158 - CMC curve, Rank-5  :80.3%
2023-05-17 20:08:53.642 | INFO     | engine.trainer:log_validation_results:158 - CMC curve, Rank-10 :85.0%
​
resnet50_kd:[layer3作为教师网络]
2023-05-17 20:22:07.030 | INFO     | engine.trainer:log_validation_results:153 - Validation Results - Epoch: 1
2023-05-17 20:22:07.131 | INFO     | engine.trainer:log_validation_results:156 - mAP:47.9%
2023-05-17 20:22:07.131 | INFO     | engine.trainer:log_validation_results:158 - CMC curve, Rank-1  :73.5%
2023-05-17 20:22:07.131 | INFO     | engine.trainer:log_validation_results:158 - CMC curve, Rank-5  :85.7%
2023-05-17 20:22:07.139 | INFO     | engine.trainer:log_validation_results:158 - CMC curve, Rank-10 :88.9%

教师网络&学生网络选择

教师网络采用深层网络,浅层网络为学生网络。

具体的教师网络和学生网络的选择可以看engine/trainer.py第46行至58行。

此处默认resnet中的layer3为教师网络,layer1,layer2为学生网络。具体的效果可以根据自己实际任务去尝试。采用特征蒸馏,暂未更新逻辑蒸馏。

       elif kd:
            score, feat, layer_out_feat = model(img)
            loss = loss_fn(score, feat, target)
            teacher_feature = layer_out_feat[1].detach()  # 取出教师层
            '''
            (rannge(idx,len(layer_out_feat)),中的idx可以决定哪个作为教师)
            idx=1表示layer4为教师网络,layer3,layer2,layer1为student
            idx=2表示layer3为教师网络,layer2,layer1为student
            idx=3表示layer2为教师网络,layer1为student
            '''
            for index in range(2, len(layer_out_feat)):  # layer4, layer3, layer2, layer1
                if index != 2:  # 排除自己
                    loss += torch.dist(layer_out_feat[index], teacher_feature) * feature_loss_coefficient

测试

python tools/test.py --TEST_IMS_PER_BATCH 4 --model_name [your model name] --model_path [your weight path]

可以进行mAP,Rank的测试


Reid相关资料学习链接

数据集代码详解:Reid训练代码之数据集处理_爱吃肉的鹏的博客-CSDN博客

Reid损失函数理论讲解:Reid之损失函数理论学习讲解_表征学习和度量学习_爱吃肉的鹏的博客-CSDN博客

Reid度量学习Triplet loss代码讲解:Reid度量学习Triplet loss代码解析。_爱吃肉的鹏的博客-CSDN博客

reid strong baseline代码学习:

Reid strong baseline 代码详解_爱吃肉的鹏的博客-CSDN博客

预权重链接:

链接:百度网盘 请输入提取码 提取码:yypn

如果项目对你有用,麻烦点个Star

注:本项目暂时为免费开源,后期完善后会考虑适当收费【毕竟也是自己辛苦弄出来的】

项目代码

GitHub - YINYIPENG-EN/reid_strong_baseline_KD: reid strong baseline Knowledge distillation(reid知识蒸馏)

后期计划更新

1.引入知识蒸馏训练(已于2023.05.26更新)

2.加入YOLOX

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: person_reid_baseline_pytorch是一个基于PyTorch框架的人员识别基线模型。它可以用于训练和测试人员识别模型,以识别不同人员之间的差异和相似之处。该模型提供了一些基本的功能,如数据加载、模型训练、模型测试等,可以帮助用户快速搭建和测试自己的人员识别模型。 ### 回答2: person_reid_baseline_pytorch是一个基于PyTorch框架的人体重识别模型。该模型采用卷积神经网络(Convolutional Neural Network,简称CNN)架构,采用多个卷积层和池化层进行特征提取,最后经过全连接层得到人物特征向量,实现了对人体进行识别。 该模型的训练数据集一般采用Market1501数据集,它包含超过1501个不同身份的超过32000张图片,是一个非常大且具有代表性的数据集,训练出的模型能够具有很好的泛化能力。 在训练过程中,除了使用标准的交叉熵损失作为损失函数外,还使用Triplet Loss作为损失函数的一种变形。该损失函数能够比较好地处理重识别中的最大间隔问题,并且能够实现对同一身份的多张图片之间的特征相似度比较。 对于测试集的预测部分,该模型采用的是余弦相似度进行特征向量相似度计算,相似度越高则说明两个图片中的人物越有可能是同一个人,可以实现良好的识别结果。 总的来说,person_reid_baseline_pytorch基于PyTorch框架实现的人体重识别模型,通过CNN架构进行特征提取,使用Triplet Loss进行训练,使用余弦相似度进行特征向量相似度计算,能够实现对人体进行高效准确的识别。 ### 回答3: person_reid_baseline_pytorch 是一个基于 PyTorch 框架的行人重识别算法基线模型,它实现了一个简单但功能齐全的行人重识别框架,可以训练和测试基于清晰照片的行人重识别任务。 该模型包含了基本卷积神经网络(CNN)的搭建和训练,其中包括几个关键部分:数据加载、模型定义、训练和测试。它使用数据增强技术和三元损失函数来训练模型,目的是使相同人的图像对与不同人的图像对之间的距离最大化。 person_reid_baseline_pytorch 采用 Market-1501 数据集进行测试,并在该数据集上取得了不错的结果。该数据集包含 1501 个行人,共有 12936 张图像,其中包括 6 种视角和多种行为。该算法读取图像数据并将之前处理后的行人图像输入神经网络,以便为每个图像计算行人的特征向量。然后,使用相关算法来比较图像对的距离,并确定它们是否属于同一人。该算法的性能指标包括准确度、精度和召回率等。 总之,person_reid_baseline_pytorch 提供了一个简单但完整的框架和基线模型,可以作为进一步解决行人重识别问题的基础。无论是学术界还是商业界,这种算法都有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃肉的鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值