卷积层的参数量与计算量方式

卷积层的参数量与计算量

最近这两天翻了一下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的卷积核

  1. 进行一次卷积操作:kxkxc(乘法) + (kxk-1) x c + c-1(加法)

  2. 在特征图上进行一组操作的次数: (c x 2 x k x k - 1) x h x w

  3. 输出O个特征图:o x (c x 2 x k x k - 1) x h x w

  4. 实际上总的操作数还有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

  1. 进行一次卷积操作:kxkx1(乘法) + (kxk-1) x 1(加法)
  2. 在特征图上进行一组操作的次数: 1 x(2 x k x k - 1)x h x w
  3. 输出c个特征图,总的计算量为:c x 1 x(2 x k x k - 1)x h x w
  4. 实际上总的操作数还有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的卷积核

  1. 进行一次卷积操作:1x1xc + c - 1

  2. 在特征图上进行一组操作的次数: h x w x (2 x c - 1)

  3. 输出O个特征图:o x h x w x (2 x c - 1)

  4. 实际上总的操作数还有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