YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications

paper地址:https://arxiv.org/abs/2209.02976

源码github地址:GitHub - meituan/YOLOv6: YOLOv6: a single-stage object detection framework dedicated to industrial applications.


6月底发布的源码,9月初终于发布了技术报告。细节部分欢迎去原文中扣,这里只做各部分的一些讲解和个人理解。


目录

摘要

一、介绍

二、方法介绍

2.1 网络设计

2.2 标签分配

2.3 损失函数

2.4 为了工业部署便利的相关tricks

2.5 量化和部署


摘要

        上来先说,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)

猜你喜欢

转载自blog.csdn.net/jiangqixing0728/article/details/126760731