卷积层的参数量与计算量方式
卷积层的参数量与计算量
最近这两天翻了一下shufflenet的论文,里边有一段介绍了ResNet的残差模块与shuffle block的计算量的对比介绍,这里特意去查了一下资料,这里整理记录一下卷积层参数量与计算量的计算方式。
1. 参数量的计算
这里分别以一下几种卷积层的计算,来总结卷积层参数量的计算方式。
由于卷积层共享参数,那么参数量仅于权重、偏置、BN层的alpha与beta有关
1.1 普通卷积
输入特征图为cxhxw
,输出特征图为oxhxw
, (由于padding导致输入输出特征图不变)
普通卷积而言,卷积核的尺寸为k x k x c x o
, 一共有o个kxkxc
的卷积核
权重:k x k x c x o
偏置: o
BN:2 x o
总的参数数目:k x k x c x o + 3 x o
1.2 depth wise卷积
depth wise卷积是指在输入的每个feature map上使用一个卷积核
如果输入特征图为cxhxw
, 那么输出特征图为cxhxw
,(假设由于padding导致输入输出特征图大小不变)
卷积核尺寸k x k x 1 x c
,一共有c个kxkx1
的卷积核。
权重:k x k x c
偏置: c
BN:2 x c
总的参数数目:k x k x c + 3 x c
1.3 point wise卷积
point wise卷积是指使用1x1
的卷积核。
如果输入特征图为cxhxw
, 输出特征图为oxhxw
,(假设由于padding导致输入输出特征图大小不变)
卷积核尺寸1 x 1 x c x o
,一共有o个1 x 1 x c
的卷积核
权重:1 x 1 x c x o
偏置: o
BN:2 x o
总的参数数目:(c+3) x o
1.4 depth wise separable卷积
深度可分离卷积就是采用depth wise卷积加上point wise卷积得到的层,相比较普通卷积而言,可以很大程度上减小参数量
输入特征图为cxhxw
,输出特征图为oxhxw
, (由于padding导致输入输出特征图不变)
需要由两部分组成,第一部分是kxkx1xc
的depth wise卷积, 第二部分是1x1xcxo
的point wise卷积
1.4.1 depth wise卷积
权重:k x k x c
偏置: c
BN:2 x c
总的参数数目:k x k x c + 3 x c
1.4.2 point wise卷积
权重:1 x 1 x c x o
偏置: o
BN:2 x o
总的参数数目:(c + 3) x o
那么depth wise separable卷积的参数为:(k x k + 3 + o) x c + 3 x o
对应的普通卷积的参数量为:k x k x c x o + 3 x o
相比较而言,深度可分离卷积参数量大幅减小。
2. 计算量的计算
这里计算考虑卷积层的加法与乘法操作,总的计算量为加法与乘法操作之和。
考虑一种简单的情况:
输入特征图为cxhxw
,输出特征图为oxhxw
, (由于padding导致输入输出特征图不变)
2.1 普通卷积
卷积核的尺寸为k x k x c x o
, 一共有o个kxkxc
的卷积核
-
进行一次卷积操作:
kxkxc(乘法) + (kxk-1) x c + c-1(加法)
-
在特征图上进行一组操作的次数:
(c x 2 x k x k - 1) x h x w
-
输出O个特征图:
o x (c x 2 x k x k - 1) x h x w
-
实际上总的操作数还有o个卷积核的偏执的加法操作,总的计算量:
o x (c x 2 x k x k - 1) x h x w + o
2.2 深度可分离卷积
针对上述示例的情况,深度可分离卷积对应的操作:第一部分是kxkx1xc
的depth wise卷积, 第二部分是1x1xcxo
的point wise卷积
2.2.1 depth wise卷积的操作
卷积核的尺寸为k x k x 1 x c
, 一共有c个kxkx1
的卷积核, 输出特征图为hxwxc
- 进行一次卷积操作:
kxkx1(乘法) + (kxk-1) x 1(加法)
- 在特征图上进行一组操作的次数:
1 x(2 x k x k - 1)x h x w
- 输出c个特征图,总的计算量为:
c x 1 x(2 x k x k - 1)x h x w
- 实际上总的操作数还有c个卷积核的偏执的加法操作,总的计算量:
c x 1 x(2 x k x k - 1)x h x w + c
2.2.2 point wise 卷积操作
卷积核的尺寸为1 x 1 x c x o
, 一共有o个1x1xc
的卷积核
-
进行一次卷积操作:
1x1xc + c - 1
-
在特征图上进行一组操作的次数:
h x w x (2 x c - 1)
-
输出O个特征图:
o x h x w x (2 x c - 1)
-
实际上总的操作数还有o个卷积核的偏执的加法操作,总的计算量:
o x h x w x (2 x c - 1) + o
深度可分离卷积总的操作 :h x w x [(2 x k x k-1) x c + (2 x c -1) x o)] + c + o