知识蒸馏在YOLOv5中的应用

举报
talking_cv 发表于 2020/10/27 16:17:01 2020/10/27
【摘要】 知识蒸馏(knowledge distillation)是模型压缩的一种常用的方法,不同于模型压缩中的剪枝和量化,知识蒸馏是通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。本文将知识蒸馏技术与检测网络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)是模型压缩的一种常用的方法,不同于模型压缩中的剪枝和量化,知识蒸馏是通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。最早是由Hinton2015年首次提出并应用在分类任务上面,这个大模型我们称之为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 模型推理结果展示



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。