Press "Enter" to skip to content

YOLOv6被官方正式收录,甚至性能还超越了v7?

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

作者丨happy

 

论文链接: https://arxiv.org/pdf/2209.02976

 

代码链接: https://github.com/meituan/YOLOv6

 

YOLOv6(已取得YOLO作者的许可,不再是YOLOv6-MT)是美团技术团队面向工业应用设计的单阶段目标检测方案,在吸收了近年来大量”先进知识”后取得了SOTA性能,可参考上图。相关指标简要描述如下:

 

YOLOv6-N取得了35.9%@COCO,吞吐量达[email protected] T4 GPU;

 

YOLOv6-S取得了43.5%@COCO,吞吐量达495FPS,超越了YOLOv5-S,YOLOX-S,PPYOLOE-S;

 

Quantized-YOLOv6-S取得了43.3%@COCO,吞吐量达869FPS;

 

YOLOv6-M/L 分别取得了49.5%@COCO、52.3%@COCO,同等速度下性能超出其他方案。

 

简要概括

 

关于YOLOv6,其新颖设计主要包含以下几个方面:

 

Network Design:在骨干方面,对于小模型,作者采用RepBlock进行构建;在大模型方面,我们采用CSPStackRepBlock进行构建;在Neck方面,作者延续了YOLOv4与YOLOv5的PAN架构,同时采用RepBlock与CSPStackRepBlock进行增强;在Head方面,作者对”解耦头”进行了简化并将其命名为”Efficient Decouple Head”;

 

Lable Assignment:在标签分配方面,作者对TOOD、YOLOX、SiouLoss、ObjectBox以及ATSS等方案进行了评估,最终确认TAL更为有效且训练友好;

 

Loss Function:损失函数一般包含cls loss、box-regression loss以及object loss。作者对齐进行了系统性分析并最终选择VariFocal Loss作为分类损失,SIoU/GIoU作为回归损失;

 

Industry-handy Improvement:作者还引入了自蒸馏与更长训练周期等技巧进一步提升性能;

 

Quantization and Deployment:为弥补重参数模型的量化损失,作者采用RepOptimizer对YOLOv6进行训练以得到PTQ友好的权值;作者还锦衣采用QAT、通道蒸馏以及图优化等技术进一步追求极致性能。最终Quantized-YOLOv6-S以869FPS(batch=32)吞吐量取得了新的SOTA性能42.3%。

 

各部件改进介绍

 

Network Design

 

上图给出了YOLOv6整体架构示意图,我们主要从Backbone、Neck、Head三个维度进行简要介绍。

 

Backbone:相比多分支架构,单路径架构具有高并行度与低访存占用优势,具有跟高的推理效率。RepVGG借助重参数化技术取得了优异的速度-精度均衡。因此,作者设计了一种高效重参数模块EfficientRep(见下图a),在推理阶段EfficientRep则可以折叠为下图b所示的结构,进而使得所得骨干能更好利用硬件计算资源达成更低的推理延迟。注:EfficientRep仅用于小模型。针对大模型,作者借鉴CSP思想构建了下图c所示的CSPStackRepBlock模块。

 

Neck:多尺度特征集成对于目标检测非常重要,作者对YOLOv4和YOLOv5采用PAN架构进行了改进:对于小模型,采用RepBlock替换CSPBlock;对于大模型,采用CSPStackRepBlock进行替换。作者YOLOv6的Neck命名为Rep-PAN。

 

Head:不同于其他检测方案,YOLOv6采用了一种”Hybrid-channel”策略构建了一种更高效”解耦头”。具体来说,作者将中间3×3卷积数量减少为1,宽度随Neck进行调整。这种改动可以进一步减少计算量并取得更低推理延迟。

 

Anchor-free:受益于更高的泛化性与预测结果解码的简单性,其后处理耗时可以进一步降低。作者采用了FCOS类型的方案。

 

Label Assignment

 

标签分配是目标检测非常重要的一环,SimOTA是YOLOX采用的方案,它一种动态分配方案。作者发现:SimOTA会导致训练速度变慢,还不定时的导致训练不稳定。因此,作者选用了其他替代方案:TAL。TAL源自TOOD一文,对此感兴趣的同学可以查阅: 51.1AP!单阶段检测器的新纪录,TOOD:即插即用的检测器换头术,显着提升性能 。作者发现: 相比SimOTA,TAL可以带来更多的性能提升,同时有助训练稳定性 。

 

Loss Function

 

目标检测包含两个子任务:分类与定位。

 

对于分类损失,作者在对Focal Loss、VariFocal Loss(VFL)、PolyLoss进行评估后选择VFL作为默认损失;

 

对于回归损失,作者在对GIoU、DIoU、CIoU、a-IoU以及SIoU等进行评估后,对小模型采用SIoU损失,大模型采用GIoU损失。

 

此外,源自FCOS的目标损失有助于在后处理阶段过滤掉低质边框。作者层尝试将其引入YOLOv6,但发现:目标损失并未带来正面作用。

 

Industry-handy Improvements

 

在实际应用中,为进一步提升性能,作者还引入以下涨点技巧:

 

More Training Epochs: 将训练周期从300提升到400;

 

Self-distillation:对分类与回归均添加了蒸馏机制;

 

Gray-border of Images

 

Quantization and Deployment

 

对于工业应用,量化已成为加速的标配。常用量化技术有PTQ与QAT两种。但是,由于YOLOv6的重参数机制的重度依赖性,PTQ会导致大幅性能下降,同时难以集成QAT技术。有鉴于此,作者引入了以下两点:

 

RepOptimizer:作者采用该方案对YOLOv6进行重构并得到了PTQ友好的权值。从下图可以看到:RepOpt训练得到的特征分布大幅收缩,这有益于后续的PTQ量化;

 

Sensitivity Analysis:作者将量化敏感的操作转为浮点计算以进一步提升PTQ性能。在敏感性分析方面,作者采用了MSE、SNR以及Cosine Similarity等进行度量。

 

QAT with Channel-wise Distillation:作者进一步采用QAT技术提升量化性能。作者基于RepOptimizer构建QAT。此外,作者还引入了通道蒸馏技术,可参见下图。

 

实验结果

 

上面三个表给出了不同YOLO方案在不同平台下的推理速度对比,毫无疑问:YOLOv6具有最优的性能-速度均衡,即同等速度我性能高,同等性能我速度快。

 

模型部署

 

关于模型部署,作者提供了ONNX、OpenCV、OpenViNO、TensorRT等方式,相关部署方式可参考如下链接:

 

ONNX:https://github.com/meituan/YOLOv6/tree/main/deploy/ONNX

 

OpenCV: https://github.com/meituan/YOLOv6/tree/main/deploy/ONNX/OpenCV

 

OpenViNO: https://github.com/meituan/YOLOv6/tree/main/deploy/OpenVINO

 

TensorRT: https://github.com/meituan/YOLOv6/tree/main/deploy/TensorRT

 

三方资源

 

除了上述YOLOv6官方提供的部署方案外,还可以关注一下下面的部署:

 

NCNN-Android:https://github.com/FeiGeChuanShu/ncnn-android-yolov6

 

TNN-C++:https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/tnn/cv/tnn_yolov6.cpp

 

MNN-C++:https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/mnn/cv/mnn_yolov6.cpp

 

ONNX-C++:https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/ort/cv/yolov6.cpp

 

此外,不想自己部署,只想体验还可以关注一下:

 

HuggingFace:https://huggingface.co/spaces/nateraw/yolov6

 

Colab:https://colab.research.google.com/github/mahdilamb/YOLOv6/blob/main/inference.ipynb

 

最后,如果想在自己的数据集上训练就可以关注一下如下博客:https://blog.roboflow.com/how-to-train-yolov6-on-a-custom-dataset/

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。