知识蒸馏在YOLOv5中的应用
一、YOLOv5简介
1.1 概述
YOLOv5官方提供的主要有四个模型,s,m,l和x,每个模型的时延以及精度各不相同,具体如下所示:
(引用自https://github.com/ultralytics/yolov5)
图1 YOLOv5模型曲线
1.2 YOLOv5改进点总结
YOLOv5不同于之前的版本,主要有以下几个方面:
1、 自适应anchor计算
在YOLOv5网络运行之前,根据用户数据集来对anchor进行聚类,生成和数据集适配度最高的一组anchor,免去了用户手动修改anchor的操作。
2、 Focus结构
图2 YOLOv5中Fusion操作
上述表示的是将4*4*3的特征图转换为2*2*12的特征图,然后再进行卷积操作。这种切片操作类似于一种Atrous的形式,主要是可以充分利用feature map的特 征信息,避免不必要的损失,这个trick也可以加速模型的收敛速度。
3、 网络的缩放
前面提到YOLOv5的模型簇总共有4个,分别是s,m,l和x,那个这四种模型数根据什么进行区分的呢,查看代码不难发现,主要是对整个网络定义了depth_multiple和width_multiple两个参数。
Depth_multiple对应的是yolov5中backbone的深度,即CSP单位中残差组件的个数,CSP结构如下所示:
图3 YOLOv5中CSP结构示意图
从s到x,对应CSP结构中,残差组件数量也会相应的增加。Yolov5中,网络的不断加深,也在不断增加网络特征提取和特征融合的能力。width_multiple则对应网络的宽度,即卷积核的channel数量从s到x,对应CSP结构中,卷积核的channel也会相应的增加,提高了模型的学习能力。
4、 训练中正负样本的选择
在之前的YOLOv3和YOLOv4模型中,通过判断anchor与gt bbox之间的IoU值作为区分正负样本的依据,找到和anchor之间IoU最大的那个,作为正样本。而YOLOv5则是计算宽高比匹配,如果宽高比大于阈值,那么就将bbox设置为背景并过滤掉。对于剩下的正样本bbox,计算落到feature map上的哪个grid中,并且利用四舍五入的方式,取临近的两个grid也作为负责预测的一起来进行检测。如下所示:
图4 YOLOv5中Grid匹配
绿点表示该Bbox中心,现在需要额外考虑其2个最近的邻域网格也作为该bbox的正样本anchor
二、知识蒸馏介绍
知识蒸馏(knowledge distillation)是模型压缩的一种常用的方法,不同于模型压缩中的剪枝和量化,知识蒸馏是通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。最早是由Hinton在2015年首次提出并应用在分类任务上面,这个大模型我们称之为teacher(教师模型),小模型我们称之为Student(学生模型)。来自Teacher模型输出的监督信息称之为knowledge(知识),而student学习迁移来自teacher的监督信息的过程称之为Distillation(蒸馏)。具体介绍,参见上一篇博客《一分钟带你认识深度学习中的知识蒸馏》。
三、ModelArts市场模型YOLOv5蒸馏实践
ModelArts模型市场中的YOLOv5目标检测算法目前已经支持知识蒸馏,相比于低时延的模型网络精度更高。用户可以通过下面的一个案例,来入门和熟悉知识蒸馏在检测网络中的使用流程。
3.1 准备数据集
数据集使用kaggle公开的Images of Canine Coccidiosis Parasite的识别任务,下载地址:https://www.kaggle.com/kvinicki/canine-coccidiosis。用户下载数据集之后,发布到ModelArts的数据集管理中,同时进行数据集切分,默认按照8:2的比例切分成train和eval两种。
3.2 订阅市场算法YOLOv5
进到模型市场算法界面,找到YOLOv5算法,点击“订阅”按钮
图5 市场订阅YOLOv5算法
然后到算法管理界面,找到已经订阅的YOLOv5,点击同步,就可以进行算法训练
图6 算法管理同步订阅算法
3.3 训练student网络模型
起一个YOLOv5的训练作业,model_name=s,数据集选用3.1发布的已经切分好的数据集,选择好输出路径,点击创建,具体创建参数如下:
图7 创建student网络的训练作业
得到训练的模型精度信息,如下:
图8 student模型训练结果
可以看到student的模型mAP精度在0.924。
3.4 训练teacher网络模型
下一步就是训练一个teacher模型,按照YOLOv5文档的描述,这里选择l模型,新起一个训练作业,具体参数如下:
图9 teacher模型训练作业参数
得到的模型精度,具体如下:
图10 teacher模型训练结果
可以看到teacher的模型精度在0.942。
3.5 使用知识蒸馏提升student模型精度
有了teacher网络,下一步就是进行知识蒸馏了,按照官方文档,需要填写teacher model url,具体填写的内容就是3.4训练输出路径下面的train url目录,注意train url输出路径下需要保证有model目录,同时需要添加参数use_offline_kd=True,teacher_model_name=l, 具体模型参数如下所示:
图11 采用知识蒸馏的student模型训练作业参数
得到模型精度在评估结果一栏,具体如下:
图12 使用知识蒸馏之后的student模型训练结果
可以看到经过知识蒸馏之后的student的模型精度提升到了0.937,精度相比于之前的student网络提升了1.3%百分点。
3.6 在线推理部署
训练之后的模型就可以进行模型部署了,具体点击“创建模型”
图13 创建模型
界面会自动读取模型训练的保存路径,点击创建:
图14 导入模型
模型部署成功之后,点击创建在线服务:
图15 部署在线服务
部署成功就可以进行在线预测了:
图16 模型推理结果展示
- 点赞
- 收藏
- 关注作者
评论(0)