深度学习论文: YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications及其PyTorch实现 YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications PDF: https://arxiv.org/pdf/2209.02976.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks
1 概述
YOLOv6 支持检测模型训练、评估、预测以及模型量化、蒸馏等全链路开发流程,同时支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大简化工程部署时的适配工作。
2 YOLOv6
2-1 Network Design
Backbone: RepVGG 主干在小型网络中具有更强的特征表示能力,但是随着参数和计算成本的爆炸式增长,RepVGG 在大模型中难以获得较高的性能,因此在小模型(n/t/s)中,使用RepBlock,大模型(m/l)中,使用CSPStackRep Blocks。
Neck: YOLOv6 的 Neck 采用 YOLOv4 和 YOLOv5 修改后的 PAN。同时使用 RepBlocks (n/t/s) 或 CSPStackRep Blocks(m/l) 进一步增强 Neck 以获得 Rep-PAN。
Head: 采用hybrid-channel strategy 简化 Decoupled Head,使其更高效,称为Efficient Decoupled Head
2-2 Label Assignment
Task alignment learning: TAL t通过一个新的 anchor alignment metric 来在 anchor level 衡量 task-alignment 的水平。
2-3 Loss Function
Classification Loss: VariFocal Loss (VFL)提出了非对称的加权操作。针对正负样本有不平衡的问题和正样本中不等权的问题,来发现更多有价值的正样本。因此选择 VariFocal Loss 作为分类损失。 Box Regression Loss: SIoU Loss在小模型上提升明显,CIoU Loss在大模型上提升明显,因此选择SIoU(for n/t/s)/GIoU (for m/l) 损失作为回归损失。Distribution Focal Loss (DFL) 和 Distribution Focal Loss (DFL) v2可以带来一定的性能提升,但是对效率影响较大,因此弃用。
Object Loss: Object loss首先用在FCOS中,用来过滤低得分样本,YOLOX用它来加速收敛和提升性能。但是加入YOLOv6后,性能下降明显,因此YOLOv6不采用Object loss。
2-4 Industry-handy improvements
More training epochs 训练epoch次数从300到400 Self-distillation Self-distillation的效果还是很明显的
Gray border of images 通过训练时 Early Stop 强数据增强及推理时图像 Resize 优化策略,修复了前期版本中输入尺寸对齐到 640x640 后精度损失的问题,提升了现有模型的实际部署精度。
|