paper地址:https://arxiv.org/abs/2209.02976
6月底发布的源码,9月初终于发布了技术报告。细节部分欢迎去原文中扣,这里只做各部分的一些讲解和个人理解。
目录
摘要
上来先说,yolov6大量地吸收了最近的网络设计、训练策略、测试技术、量化和优化方法的想法,就是说没有什么很吸睛的创新,就是一堆缝合。然后说明,yolo作者已经慷慨许可了他们把这个算法命名为yolov6(因此不要说他们蹭热度了)。
关于精度和性能对比,看下面这张图就差不多明白了。
一、介绍
介绍了yolov6出来的动机和背景:
(1)来自RepVGG的重参数化是一种优越的技术,在检测(已有的yolo版本)中尚未得到很好的利用(实际上同时期的yolov7里也用到了)。同时,作者认为小型网络和大型网络不一样,对大型网络来说,对RepVGG块进行简单地模型缩放不切实际。
(2)基于重参数化的检测器的量化也要调整
(3)考虑真正的服务环境中的部署(以前的算法往往在高功耗的v100上比),我要换个平台赛道比比
(4)新的标签分配和损失函数出来啦,得试试
(5)加点新的策略tricks,不增加推理时间就行
总结yolov6的贡献:
- 同时在分类和回归中加入了自蒸馏策略
- 做了很多实验验证不同的标签分配策略、损失函数、数据增强技术,找到了最好的组合
二、方法介绍
YOLOv6的新设计包括以下组件:网络设计、标签分配、损失函数、数据增强、为了工业方便的改进、量化和部署:
2.1 网络设计
- Backbone:yolov6的小型网络(跟v5和其他的版本一样,yolov6提供yolov6-n、yolov6-s等好几个规模的网络)中,使用RepBlock为基本模块;yolov6的大型网络,用了他们自己修改的一个高效CSP块,取名叫CSPStackRep块。
(a)和(b)表示了RepBlock,(a)表示训练的时候,RepVGG block接一个ReLU,(b)表示推理的时候,RepVGG块被替换成了RepConv
(c)CSPStackRep块的结构
- Neck:参考YOLOv4和v5用的PAN,结合backbone里的RepBlock或者CSPStackRep,提出了一个Rep-PAN
- Head:类似YOLOX的解耦头,更高效化了(微调)。YOLOv6里采用的是anchor-free的检测头(YOLOX、FCOS),是anchor point-based,而不是keypoint-based
2.2 标签分配
SimOTA的训练太慢,而且容易陷入不稳定的训练。 实验发现TAL(Task alignment learning)更好。
2.3 损失函数
分类损失用的是VFL(VariFocal Loss),回归损失用的是SIoU/GIoU
2.4 为了工业部署便利的相关tricks
更多的epoch、自蒸馏、图片边缘放置灰色边界(有助于检测边界的object)
2.5 量化和部署
用了 训练后量化(PTQ)和量化感知训练(QAT)