社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【深度学习】YOLOv6被官方正式收录,甚至性能还超越了v7?

机器学习初学者 • 2 年前 • 1007 次点击  
 作者丨happy      编辑丨极市平台

导读

 

已取得YOLO作者的许可,不再是YOLOv6-MT!一起来看看YOLOv6有哪些亮点提升

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

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

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

  • YOLOv6-N取得了35.9%@COCO,吞吐量达1234FPS@Tesla 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"策略构建了一种更高效"解耦头"。具体来说,作者将中间3x3卷积数量减少为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/

往期精彩回顾




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/147045
 
1007 次点击