YOLOv6 学习笔记

概况

yolov6 出来的时候 yolov7 已经出了。
在这里插入图片描述

YOLOv6设计主要包含以下几个方面:

  • 网络架构设计:对于Backbone和Neck,延续了YOLOv4和YOLOv5的PAN架构思想并使用了重参思想进行了改进;关于Head部分,作者对Decoupled Head进行了简化并将其命名为Efficient Decouple Head(EDH)
  • 标签匹配:对TaskAlign、SimOTA、ObjectBox以及ATSS等进行了评估,最终确认TaskAlign更为有效且训练友好;
  • 损失函数:损失函数一般包含cls loss、box-regression loss以及object loss。YOLOv6进行了系统性分析并最终选择VariFocal Loss作为分类损失,SIoU/GIoU作为回归损失;

REPVGG 重参思想

重参思想: ACNet, DBB, MobileOne

第一次出现多分支结构应该是在Inception中(如果不是,请各位指正),就获得了高性能收益,加上不同分支应用不同卷积核,能获得不同感受野,后续出现的ResNet,其残差结构也是多路结构。但是需要注意的是,多路结构需要保存中间结果,显存占有量会明显增高,只有到多路融合时,显存会会降低。这里如下图所示:
在这里插入图片描述
同时,由ShuffleNet论文中提到的网络高效推理法则:模型分支越少,速度越快。所以,可想而知,多分支结果虽然会带来高性能收益,但是,显存占用明显增加,且模型推理速度会一定程度降低,这在工业场景上是不实用的

我们都知道VGG几乎都是由3×3卷积堆叠而成,而现在加速库,比如NVIDIA的cudNN,Intel的MKL和相关硬件对3×3的卷积核有非常好的性能优化,而在VGG中几乎都是3×3卷积。
因此,VGG利用现有加速库会得到更好的性能优化,从下表就就可以看出,在相同channels、input_size和batchsize条件下,不同卷积核的FLOPs和TFLOPs和用时,可以看出3×3卷积非常快。
在GPU上,3×3卷积的计算密度(理论运算量(Theoretical FLOPs/Time usage)除以所用时间)可达1×1和5×5卷积的4倍。

在这里插入图片描述
VGG是一个直筒性单路结构,由上述分析可知,单路结构会占有更少的内存,因为不需要保存其中间结果,同时,单路架构非常快,因为并行度高。同样的计算量,大而整的运算效率远超小而碎的运算。

多分支结构会引入网络结构的约束,比如Resnet的残差结构要求输入和卷积出来的张量维度要一致(这样才能相加),这种约束导致网络不易延伸拓展,也一定程度限制了通道剪枝。对应的单路结构就比较友好,非常容易改变各层的宽度,这样剪枝后也能得到很好的加速比。
RepVGG主体部分只有一种算子:3×3卷积+ReLU。在设计专用芯片时,给定芯片尺寸或造价,可以集成海量的3×3卷积-ReLU来达到高效率。此外单路架构的省内存特性也可以帮降低存储单元。
综上所述,提出了RepVGG结构,如图所示:
在这里插入图片描述

对应论文中从Step1到Step2的变换过程,涉及conv于BN层融合,1×1卷积与identity转化为等价的3×3卷积的形式;
结构重参化的最后一步也就是上图中Step2 => Step3, 这一步就是利用卷积可加性原理,将3个分支的卷积层和bias对应相加组成最终一个3×3卷积的形式即可。
这里,大家可能既然把BN、identity、1×1卷积和conv_3×3都融合在一起了,为什么不干脆把ReLU也融合进去呢?其实也是可以将ReLU层进行融合的,但是需要进行量化,conv输出tensor的值域直接使用relu输出的值阈,就可以完成conv和relu合并。无量化动作的优化是无法完成conv+relu的合并。
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/4cf9836aa1bd4287a00e4901c7c35dc4.png#pic_center =600x) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1792354eb74d4297a55fe23f547337de.png#pic_center =600x)

整体架构改进

网络架构设计:
在Backbone方面,YOLOv6在小规模模型(n/t/s模型)采用RepBlock进行构建;对于大规模模型(m/l模型)采用CSPStackRepBlock进行构建;
在Neck方面,YOLOv6延续了YOLOv4与YOLOv5的设计思想,依旧使用的是PAN-FPN架构,同时采用RepBlock(n/t/s模型)与CSPStackRepBlock(m/l模型)进行特征的增强;
在Head方面,对Decoupled Head进行改进,最终使用Efficient Decouple Head;
在这里插入图片描述

正负样本匹配

anchor-free 的机制,和之前的 yolo 比较不一样。

yolo v6 有三个版本
第一版本是 SimOTA
第二版本是 TaskAlign; 论文发布基于2.0.
第三版本 加入 anchor base 辅助收敛的情况。

TaskAligned样本匹配

标签分配是目标检测非常重要的一环,SimOTA 作为OTA 的一个简化版本在YOLOX中被提出,SimOTA 减少了额外的超参数并保持了性能。在YOLOv6的早期版本中使用了SimOTA作为标签分配方法。然而,在实践中发现引入SimOTA会减慢训练过程。同时可能会使训练陷入不稳定。因此,YOLOv6 2.0 版本找到了一个替代SimOTA的匹配方法,TaskAlign。

YOLOv6实验发现,相比SimOTA,TaskAlign可以带来更多的性能提升,同时有助训练稳定性。
任务对齐学习(TAL)首次在TOOD中提出,其中设计了分类得分和bbox质量的统一度量。IoU被此度量替换以分配对象标签。在一定程度上,任务不一致的问题(分类和bbox)得到了缓解。
TOOD的另一个主要贡献是关于任务对齐头(T-head)。T-head堆叠卷积层以构建交互特征,在T-head上使用任务对齐预测器(TAP)。PP-YOLOE通过用ESE Attention取代T-head中的Layer Attention,从而改进了T-head,形成ET-head。
然而,ET-head会降低模型推理速度,并且不会带来精度增益。因此,保留了高效Decoupled Head设计。

在这里插入图片描述

损失函数

VFL loss 分类损失函数

引入非对称的加权操作,对正样本只是普通的 BCE 加一个自适应的 IoU 加权。对负样本是标准的 Focal Loss.
在这里插入图片描述

DFL 损失函数 Distribution Focal Loss

主要是将框的位置建模成一个 general distribution,让网络快速的聚焦于和目标位置距离近的位置的分布。
在这里插入图片描述

SIoU 损失

近年来,常用的边界框回归损失函数包括IoU、GIoU、CIoU、DIoU loss等等,这些损失函数通过考虑预测框与目标框之前的重叠程度、中心点距离、纵横比等因素来衡量两者之间的差距,从而指导网络最小化损失以提升回归精度,但是这些方法都没有考虑到预测框与目标框之间方向的匹配性。
SIoU 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快了网络模型的收敛,并且在小规模模型(n/t/s模型)上可以一定程度上提升精度。
通过在 YOLOv6s 上采用 SIoU loss 进行实验,对比 CIoU loss,平均检测精度提升 0.3% AP。
因此,YOLOv6对小模型采用SIoU损失,大模型采用GIoU损失。
在这里插入图片描述

相关推荐

  1. YOLOv6 学习笔记

    2024-02-22 21:44:02       41 阅读
  2. YOLOv7 学习笔记

    2024-02-22 21:44:02       39 阅读
  3. yolov10 学习笔记

    2024-02-22 21:44:02       7 阅读
  4. YOLOX 学习笔记

    2024-02-22 21:44:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 21:44:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 21:44:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 21:44:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 21:44:02       18 阅读

热门阅读

  1. RESTful API如何使用它构建 web 应用程序。

    2024-02-22 21:44:02       29 阅读
  2. 前端碎碎念

    2024-02-22 21:44:02       27 阅读
  3. 时域去噪:从理论到实践

    2024-02-22 21:44:02       29 阅读
  4. C++从入门到精通 第十六章(STL常用算法)

    2024-02-22 21:44:02       27 阅读
  5. Springboot整合第三方技术-消息

    2024-02-22 21:44:02       30 阅读
  6. 2024/2/20

    2024-02-22 21:44:02       25 阅读
  7. leetcode算法刷题——链表

    2024-02-22 21:44:02       26 阅读
  8. 系统的讨论素数筛法——OI数论

    2024-02-22 21:44:02       33 阅读