1. 解决了什么问题?
目标检测是计算机视觉中一个重要任务。在边缘设备上,大模型很难取得实时的效果。而使用大量深度可分离卷积的模型则很难取得高准确率。如下图,深度可分离卷积的缺点就是:输入图像的通道信息在计算时被分隔开了。这使得深度可分离卷积(DSC)的特征提取能力和融合能力要比标准卷积(SC)差不少。
MobileNets 使用大量的 1 × 1 1\times 1 1×1卷积,融合单独计算出的通道信息。ShuffleNets 使用 channel shuffle 让通道信息相互交流。GhostNet 则使用一半的标准卷积操作,保持通道间的信息交流。但是, 1 × 1 1\times 1 1×1卷积的计算量很高,channel shuffle 没有触及标准卷积的结果,GhostNet 则退回到了标准卷积。
2. 提出了什么方法?
为了让深度可分离卷积的结果尽可能地近似标准卷积,作者认为,标准卷积和深度可分离卷积可以合作使用。于是将 SC、DSC、shuffle 混合起来,得到 GSConv。GSConv 平衡了模型的准确率和速度,既能轻量化模型,也能保持准确率。如下图,使用 shuffle 操作将 SC 输出的信息充满 DSC 输出的信息。该 shuffle 是一个均匀混合的策略。这样 SC 的信息就能完全混入 DSC 的输出,在不同的通道上均匀地交换局部的特征信息。
如下图,GSConv 的特征图要比 DSC 更接近 SC 的特征图。用 GSConv 构造的 slim-neck 能够将 DSC 的缺陷降至最低,充分发挥 DSC 的优势。
2.1 Why GSConv?
为了加速推理预测,输入图像在主干网络都要经历相似的变换过程:空间信息逐步迁移到通道上。特征图的空间维度缩小、通道变大,会造成语义信息的丢失。通道密集的卷积(SC)计算会最大限度地保留各通道间的隐藏联系,但通道稀疏的卷积(DSC)会完全割断这些联系。
SC、DSC 和 GSConv 的时间复杂度是:
T
i
m
e
s
c
∼
O
(
W
×
H
×
K
1
×
K
2
×
C
1
×
C
2
)
Time_{sc}\sim O(W\times H\times K_1\times K_2\times C_1\times C_2)
Timesc∼O(W×H×K1×K2×C1×C2)
T
i
m
e
D
S
C
∼
O
(
W
×
H
×
K
1
×
K
2
×
1
×
C
2
)
Time_{DSC}\sim O(W\times H\times K_1\times K_2\times 1\times C_2)
TimeDSC∼O(W×H×K1×K2×1×C2)
T
i
m
e
G
S
C
o
n
v
∼
O
[
W
×
H
×
K
1
×
K
2
×
C
2
2
(
C
1
+
1
)
]
Time_{GSConv}\sim O\left[W\times H\times K_1\times K_2\times \frac{C_2}{2}(C_1+1)\right]
TimeGSConv∼O[W×H×K1×K2×2C2(C1+1)]
W , H W,H W,H是输出特征图的宽度和高度。 K 1 × K 2 K_1\times K_2 K1×K2是卷积核的大小。 C 1 C_1 C1是每个卷积核的通道数,也是输入特征图的通道数。 C 2 C_2 C2是输出特征图的通道数。
GSConv 对于轻量级模型效果更明显,将 DSC 层和 shuffle 结合能增强非线性表示能力。但如果 GSConv 贯穿模型使用,模型层数会变得很深,深网络层会阻碍数据流动,增加推理时间。于是作者只在 neck 里面使用 GSConv,neck 接收的特征图通道数最大、空间维度最小。这时的特征图包含的冗余信息较少,无需压缩,注意力模块更能发挥作用。
2.2 Slim-neck
2.2.1 Element Modules
GSConv 的计算复杂度约是 SC 的一半,但它的学习能力却与后者相近。作者提出了 GS bottleneck,如下图 (a) 所示。然后作者使用单阶段聚合方法设计了跨阶段局部网络(GSCSP)模块,VoV-GSCSP。下图 (b) 结构简单、直接,对硬件友好,推理速度快。图 © 和 (d) 则有着更高的特征复用率。
2.3 Improvement tricks for free
作者使用了一些局部特征增强方法,结构简单、计算量低。这些增强方法(注意力机制)能极大地提高模型准确率,但计算成本远低于 neck。这些方法要么在通道信息上计算,要么在空间信息上计算。SPP 关注在空间信息,将 4 个并行分支的结果 concat:3 个最大池化(池化核大小是
5
×
5
,
9
×
9
5\times 5,9\times 9
5×5,9×9和
13
×
13
13\times 13
13×13)以及 1 个从输入过来的短路连接。它通过融合输入的局部和全局特征,解决目标尺度变化的问题。YOLOv5 的 SPPF 大幅提升了计算效率,计算效率
η
c
\eta_c
ηc增长了
277.8
%
277.8\%
277.8%。
η
c
=
[
(
k
1
2
+
k
2
2
+
k
3
2
+
.
.
.
+
k
i
2
−
i
)
−
(
k
1
2
−
1
)
×
i
]
×
100
%
\eta_c=\left[(k_1^2+k_2^2+k_3^2+...+k_i^2-i)-(k_1^2-1)\times i\right]\times 100\%
ηc=[(k12+k22+k32+...+ki2−i)−(k12−1)×i]×100%,
k
i
k_i
ki是 SPPF 模块中最大池化的第
i
i
i个分支的核大小。下图展示了 SPP 和 SPPF 的结构。
SE 是一个通道注意力模块,包括 2 个操作:squeeze 和 excitation。该模块使网络更多关注在信息丰富的特征通道上。CBAM 是一个空间-通道注意力模块。CA 模块避免了由全局池化操作引起的位置信息损失,将注意力放在输入特征图的宽度和高度维度上,有效地利用特征图的空间坐标信息。下图展示了 SE、CBAM 和 CA 模块的结构。注意力模块通常放在主干网络的末尾,取得更好的效果。SPPF 模块可直接放在 head 的开始位置。
2.4 Loss 函数和激活函数
L
i
o
u
=
1
−
I
o
U
,
I
o
U
=
A
∩
B
A
∪
B
L_{iou}=1-IoU, IoU=\frac{A\cap B}{A\cup B}
Liou=1−IoU,IoU=A∪BA∩B
L
c
i
o
u
=
1
−
I
o
U
+
ρ
2
(
b
,
b
g
t
)
d
2
+
α
v
,
α
=
v
1
−
I
o
U
+
v
,
v
=
4
π
2
(
arctan
w
g
t
h
g
t
−
arctan
w
h
)
2
L_{ciou}=1-IoU+\frac{\rho^2(b,b^{gt})}{d^2}+\alpha v,\quad \alpha=\frac{v}{1-IoU+v},\quad v=\frac{4}{\pi^2}(\arctan\frac{w^{gt}}{h^{gt}}-\arctan \frac{w}{h})^2
Lciou=1−IoU+d2ρ2(b,bgt)+αv,α=1−IoU+vv,v=π24(arctanhgtwgt−arctanhw)2
L
e
i
o
u
=
1
−
I
o
U
+
ρ
2
(
b
,
b
g
t
)
d
2
+
ρ
2
(
w
,
w
g
t
)
C
w
2
+
ρ
2
(
h
,
h
g
t
)
C
h
2
L_{eiou}=1-IoU+\frac{\rho^2(b,b^{gt})}{d^2}+\frac{\rho^2(w,w^{gt})}{C_w^2}+\frac{\rho^2(h,h^{gt})}{C^2_h}
Leiou=1−IoU+d2ρ2(b,bgt)+Cw2ρ2(w,wgt)+Ch2ρ2(h,hgt)
A A A 和 B B B 表示 ground truth 框和预测框的像素区域。 C C C是这俩框的最小包围框。 d d d是最小包围框的对角线的欧式距离。 ρ \rho ρ表示 ground truth 框和预测框中心点的欧式距离。 v v v用于评价 ground truth 框和预测框的宽高比是否一致。CIoU 具有一些问题:
∂ v ∂ w = 8 π 2 ( arctan w g t h g t − arctan w h ) × h w 2 + h 2 , ∂ v ∂ h = − 8 π 2 ( arctan w g t h g t − arctan w h ) × w w 2 + h 2 \frac{\partial v}{\partial w}=\frac{8}{\pi^2}(\arctan \frac{w^{gt}}{h^{gt}}-\arctan \frac{w}{h})\times \frac{h}{w^2+h^2},\\\frac{\partial v}{\partial h}=-\frac{8}{\pi^2}(\arctan \frac{w^{gt}}{h^{gt}}-\arctan \frac{w}{h})\times \frac{w}{w^2+h^2} ∂w∂v=π28(arctanhgtwgt−arctanhw)×w2+h2h,∂h∂v=−π28(arctanhgtwgt−arctanhw)×w2+h2w
根据 CIoU 损失的定义,如果 { ( w = k ⋅ w g t , h = k ⋅ h g t ) ∣ k ∈ R + } \lbrace(w=k\cdot w^{gt}, h=k\cdot h^{gt})| k\in \mathcal{R}^+\rbrace {(w=k⋅wgt,h=k⋅hgt)∣k∈R+},CIoU 就退化为了 DIoU 损失, α v \alpha v αv就失效了。此外, ∂ v / ∂ w \partial v / \partial w ∂v/∂w和 ∂ v / ∂ h \partial v / \partial h ∂v/∂h符号相反, ∂ v / ∂ w = − ( h / w ) × ( ∂ v / ∂ h ) \partial v / \partial w=-(h/w)\times (\partial v/\partial h) ∂v/∂w=−(h/w)×(∂v/∂h)。因此, w w w和 h h h中一个增长,另一个就会下降。当 w < w g t w<w^{gt} w<wgt并且 h < h g t h<h^{gt} h<hgt,或者 w > w g t w>w^{gt} w>wgt并且 h > h g t h>h^{gt} h>hgt时就不合理了。
EIoU 就不会有这样的问题,它直接用预测框的 w w w和 h h h作为惩罚项。
Swish 和 Mish 激活函数要比 ReLU 好,它们具有无上界、有下界、平滑、非单调的特性。
swish
(
x
)
=
x
⋅
sigmoid
(
β
⋅
x
)
,
mish
(
x
)
=
x
⋅
tanh
(
log
(
1
+
e
x
)
)
\text{swish}(x)=x\cdot \text{sigmoid}(\beta\cdot x), \quad \text{mish}(x)=x\cdot \tanh(\log(1+e^x))
swish(x)=x⋅sigmoid(β⋅x),mish(x)=x⋅tanh(log(1+ex))
在深度网络,Mish 函数要比 Swish 函数略好一些,Mish 计算量大了,故而需要更多的训练时长。