本节为ML/DL-复习笔记【十】- 分组卷积和深度可分离卷积的区别,主要内容包括:分组卷积与深度可分离卷积的参数量分析。
最早出现分组卷积是AlexNet,由于单块GPU显存的限制,需要将网络部署在两张显卡上,分别进行训练最后再融合,Alex认为分组卷积可以增加filter之间的对角相关性,组内特征独立发挥最终预测作用,而不与其他特征组合,减少耦合增加鲁棒,并且可以减少训练参数。
1. 分组卷积-Group Convoluition
下图代表标准卷积操作,若输入特征图尺寸为
H
×
W
×
c
1
H\times W\times c_1
H×W×c1,卷积核尺寸
h
1
×
w
1
×
c
1
h_1\times w_1\times c_1
h1×w1×c1,输出特征图尺寸
H
×
W
×
c
2
H\times W\times c_2
H×W×c2,标准卷积层的参数量为:
(
h
1
×
w
1
×
c
1
)
×
c
2
(h_1\times w_1\times c_1)\times c_2
(h1×w1×c1)×c2【一个滤波器再输入特征图
h
1
×
w
1
×
c
1
h_1\times w_1\times c_1
h1×w1×c1大小的区域内操作,输出结果为1个数值,所以需要
c
2
c_2
c2个滤波器】。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200831092144937.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tldmluX3poYW9femw=,size_16,color_FFFFFF,t_70#pic_center)
下图表示分组卷积操作,将输入特征图按照通道分成
g
g
g组,则每组输入特征图的尺寸为
H
×
W
×
c
1
g
H\times W\times \frac{c_1}{g}
H×W×gc1,对应的卷积核尺寸为
h
1
×
w
1
×
c
1
g
h_1\times w_1\times \frac{c_1}{g}
h1×w1×gc1,每组输出特征图尺寸为
H
×
W
×
c
2
g
H\times W\times \frac{c_2}{g}
H×W×gc2。将
g
g
g组结果拼接,得到最终尺寸为
H
×
W
×
c
2
H\times W\times c_2
H×W×c2的输出特征图,参数量:
h
1
×
w
1
×
c
1
g
×
c
2
g
×
g
=
h
1
×
w
1
×
c
1
×
c
2
×
1
g
h_1\times w_1\times \frac{c_1}{g}\times\frac{c_2}{g}\times g=h_1\times w_1\times c_1\times c_2 \times \frac{1}{g}
h1×w1×gc1×gc2×g=h1×w1×c1×c2×g1
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200831092654436.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tldmluX3poYW9femw=,size_16,color_FFFFFF,t_70#pic_center)
可以看到,参数量获得了很大的下降,组间信息无法沟通与传递,所以也会带来一定的问题,所以后面有了shffuleNet,通过通过混洗解决组间信息沟通的问题,与下文提到的深度可分离卷积属于两个不同的思路。
2. 深度可分离卷积
下图a表示标准卷积,假设输入特征图尺寸为
D
F
×
D
F
×
M
D_F \times D_F \times M
DF×DF×M ,卷积核尺寸为
D
K
×
D
K
×
M
D_K \times D_K \times M
DK×DK×M,输出特征图尺寸为
D
F
×
D
F
×
N
D_F \times D_F \times N
DF×DF×N,标准卷积层的参数量为:
(
D
K
×
D
K
×
M
)
×
N
(D_K \times D_K \times M) \times N
(DK×DK×M)×N。
下图b代表深度卷积,图c代表逐点卷积,两者合起来即深度可分离卷积。深度卷积负责滤波,尺寸为
(
D
K
,
D
K
,
1
)
(D_K,D_K,1)
(DK,DK,1),共
M
M
M个,作用在输入的每个通道上;逐点卷积负责转换通道,尺寸为
(
1
,
1
,
M
)
(1,1,M)
(1,1,M),共
N
N
N个,作用在深度卷积的输出特征映射上。
深度卷积参数量为
(
D
K
×
D
K
×
1
)
×
M
(D_K \times D_K \times 1) \times M
(DK×DK×1)×M,逐点卷积参数量为
(
1
×
1
×
M
)
×
N
(1×1×M)×N
(1×1×M)×N ,所以深度可分离卷积参数量是标准卷积的
D
K
×
D
K
×
M
+
M
×
N
D
K
×
D
K
×
M
×
N
\frac{D_K×D_K×M+M×N}{D_K×D_K×M×N}
DK×DK×M×NDK×DK×M+M×N$ = \frac{1}{N} + \frac{1}{D_K^2}$。
为了便于理解,和分组卷积类比,假设
M
=
N
M=N
M=N。深度卷积其实就是
g
=
M
=
N
g=M=N
g=M=N的分组卷积,只不过没有直接将
g
g
g组结果拼接,所以深度卷积参数量是标准卷积的
1
/
N
1/N
1/N。逐点卷积其实就是把
g
g
g组结果用
1
×
1
1\times 1
1×1conv 拼接起来,所以逐点卷积参数量是标准卷积的
1
/
D
K
2
1/D_K^2
1/DK2。(只考虑逐点卷积,之前输出的特征图上每一个点是由输入特征图
D
K
×
D
K
D_K\times D_K
DK×DK区域内的点计算得到的;而逐点卷积输出上每一个点是由
1
×
1
1\times 1
1×1区域内的点计算得到的)。自然,深度可分离卷积参数量是标准卷积的
1
/
N
+
1
/
D
K
2
1/N+1/D_K^2
1/N+1/DK2。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2204cd150c8a433b8655018a697258e4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN5Lya566X5ZG955qE6LW15Y2K5LuZ,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center)
深度可分离卷积降低参数量的同时,必然造成精度的损失,原因可能是通道数太少导致特征图的维度太少,获取到的有效信息较少。
但是以Xception为例,包含大量深度可分离卷积的模型训练核推理速度反而较慢,猜测可能的原因是这种卷积分组的方式虽然降低了模型的参数量,但是计算零碎且分散,导致速度下降。
参考:
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210507161723379.JPG#pic_center)