目录
1.网络改进
- 网络设计:Backbone:与其他主流架构相比,RepVGG骨干网络在推理速度相近的情况下,在小型网络中具备更多的特征表示能力,而由于参数和计算成本的爆炸性增长,它很难被扩展以获得更大的模型。YOLO v6把RepBlock作为我们小型网络的构建模块。对于大型模型,我们修改了一个更有效的CSP块,名为CSPStackRep块。Neck:YOLOv6的颈部采用了YOLOv4和YOLOv5之后的PAN拓扑结构。用RepBlocks或CSPStackRep Blocks来增强颈部,以实现Rep-PAN。Head:简化了解耦头,使其更加有效,称为高效解耦头。
2.网络结构
- 依旧由backbone、neck和head组成。
- backbone:设计了一个高效的可重新参数化的骨干,称为EffificientRep
- neck:Rep-PAN
- head:高效解耦头
(1)EffificientRep
- RepVGG 主干在小型网络中具有更强的特征表示能力,但是随着参数和计算成本的爆炸式增长, RepVGG 在大模型中难以获得较高的性能,所以设计了一个高效的可重新参数化的骨干,称为EffificientRep
- 将 Backbone 中 stride=2 的普通 Conv 层替换成了 stride=2 的RepConv层
- 将原始的 CSP-Block 都重新设计为 RepBlock,其中 RepBlock 的第一个 RepConv 会做 channel 维度的变换和对齐
- 将原始的 SPPF 优化设计为更加高效的 SimSPPF

(2)Rep-PAN
- Rep-PAN 基于 PAN 拓扑方式,用 RepBlock 替换了 YOLOv5 中使用的 CSP-Block,对整体 Neck 中的算子进行了调整

(3)高效解耦头
- YOLOv5的检测头是一个耦合头,而FCOS和YOLOX的同类产品则将这两个分支解耦,并且在每个分支中引入额外的两个3×3卷积层以提高性能。在YOLOv6中,我们采用混合通道策略来建立一个更有效的解耦头。
- 具体来说,我们将中间的3×3卷积层的数量减少到只有一个。头部的宽度由骨干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。

2.损失函数
- YOLO v6的损失也由 分类损失 ,回归损失 组成
(1)分类损失
- 针对正负样本有不平衡的问题和正样本中不等权的问题,来发现更多有价值的正样本。因此选择 VariFocal Loss 作为分类损失
(2)回归损失
-
SIoU Loss在小模型上提升明显, GIoU Loss在大模型上提升明显,因此选择SIoU (for n/t/s) / GIoU (for m/l) 损失作为回归损失。
-
SIoU 损失是使用距离成本、形状成本 和 IoU成本定义的。角度成本在距离成本中使用。以下是SIoU公式:
-

-
Distance cost(距离损失):描述了中心点之间的距离,其惩罚代价与角度代价呈正相关,当𝛼→0时,Distance cost的贡献大大降低。相反,𝛼越接近pi/4,Distance cost贡献越大。

-
角度成本:

-
Shape cost(形状损失):形状成本是处理纵横比不匹配的部分。作者考虑的两框之间的长宽比,是通过计算两框之间宽之差和二者之间最大宽之比(长同理)来定义的,大体思路和CIOU类似,只不过CIOU可以的考虑是两框整体形状的收敛,而SIoU是以长、宽两个边收敛来达到整体形状收敛的效果。

(3)obj损失(未选择)
- 作为一个像FCOS和YOLOX一样的anchor-free框架,我们已经在YOLOv6中尝试了object loss。不太幸运的是,它并没有带来很多好的效果,所以选择丢弃了obj损失。