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

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-472230.html

到了这里,关于Reid strong baseline知识蒸馏【附代码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5剪枝与知识蒸馏【附代码】

    剪枝和知识蒸馏均属于模型轻量化设计,剪枝是将已有网络通过剪枝的手段得到轻量化网络,可分为 非结构化剪枝 和 结构化剪 ,该技术 可以免去人为设计轻量网络 ,而是通过计算各个权重或者通道的贡献度大小,剪去贡献度小的权重或通道,再 经过微调训练恢复精度 ,

    2024年02月05日
    浏览(50)
  • 通俗易懂的知识蒸馏 Knowledge Distillation(下)——代码实践(附详细注释)

    第一步:导入所需要的包 第二步:定义教师模型 教师模型网络结构(此处仅举一个例子):卷积层-卷积层-dropout-dropout-全连接层-全连接层 第三步:定义训练教师模型方法 正常的定义一个神经网络模型 第四步:定义教师模型测试方法 正常的定义一个神经网络模型 第五步:

    2024年02月12日
    浏览(29)
  • 详解视觉BEV3D检测模型: Fast-BEV: A Fast and Strong Bird‘s-Eye View Perception Baseline

    本文介绍一篇视觉BEV3D检测模型: Fast-BEV ,论文收录于 NeurIPS2022 。 目前大多数现有的BEV感知方案要么需要相当多的资源来执行车端推理,要么性能不高。本文提出了一种简单而有效的框架,称为 Fast-BEV ,它能够在车载芯片上执行更快的BEV感知。为了实现这一目标,本文通过试

    2024年02月02日
    浏览(31)
  • 【知识蒸馏】知识蒸馏(Knowledge Distillation)技术详解

    参考论文:Knowledge Distillation: A Survey        ​ 近年来,深度学习在学术界和工业界取得了巨大的成功,根本原因在于其可拓展性和编码大规模数据的能力。但是, 深度学习的主要挑战在于,受限制于资源容量,深度神经模型很难部署在资源受限制的设备上。如嵌入式设备

    2024年01月23日
    浏览(27)
  • 知识蒸馏之自蒸馏

    知识蒸馏之自蒸馏@TOC 本文整理了 近几年顶会中的蒸馏类文章(强调self- distillation) ,后续可能会继续更新其他计算机视觉领域顶会中的相关工作,欢迎各位伙伴相互探讨。 注意力蒸馏 (Attention distillation) :用于把大网络学习到的注意力特征图(attention map)迁移到小网络中

    2024年02月06日
    浏览(27)
  • 知识蒸馏实战:使用CoatNet蒸馏ResNet

    知识蒸馏(Knowledge Distillation),简称KD,将已经训练好的模型包含的知识(”Knowledge”),蒸馏(“Distill”)提取到另一个模型里面去。Hinton在\\\"Distilling the Knowledge in a Neural Network\\\"首次提出了知识蒸馏(暗知识提取)的概念,通过引入与教师网络(Teacher network:复杂、但预测精度优

    2024年02月06日
    浏览(40)
  • Reid训练代码之数据集处理

    本篇文章是对yolov5_reid这篇文章训练部分的详解。 该项目目录为: . |-- config # reid输入大小,数据集名称,损失函数等配置 |-- configs # 训练时期超参数定义 |-- data # 存储数据集和数据处理等代码,以及yolov5类别名称等 |-- engine # 训练和测试mAP,rank等相关代码 |-- layers # loss定义

    2023年04月26日
    浏览(34)
  • 人工智能大模型技术基础系列之:模型蒸馏与知识蒸馏

    作者:禅与计算机程序设计艺术 模型蒸馏(Model Distillation)是将一个复杂的大型机器学习模型压缩到更小且效率更高的模型上的一种技术。它可以让用户获得更高质量的模型,同时降低计算资源占用和部署成本。目前国内外多种公司在使用模型蒸馏技术,如阿里巴巴在内部业

    2024年02月05日
    浏览(40)
  • 知识蒸馏学习

    知识蒸馏 ----教师和学生模型:将已训练完善的模型作为教师模型,通过控制“温度”从模型的输出结果中“蒸馏”出“知识”用于学生模型的训练,并希望轻量级的学生模型能够学到教师模型的“知识”,达到和教师模型相同的表现。 本质上属于 迁移学习 优点: 1.节省成

    2024年02月09日
    浏览(27)
  • 知识蒸馏学习记录

    最近在学习降噪处理不良天气的算法过程中,接触到了知识蒸馏,该算法作为一个深度学习通用算法,不仅广泛应用在自然语言处理方面,在计算机视觉等领域也广受追捧。 简单来说,知识蒸馏就是将一个大的教师网络萃取到一个小的学生网络中,即完成一个知识迁移的过程

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包