普通卷积

 

1. 公式

 

计算公式

参数量=(filter size * 前一层特征图的通道数 )* 当前层filter数量

计算量 = 参数量*  输出图的尺度 

 

详细如下:

输入卷积:Win * Hin * Cin
卷积核:k * k
输出卷积:Wout * Hout * Cout

参数量:(即卷积核的参数)
k * k * Cin * Cout
或者:(k * k * Cin + 1) * Cout (包括偏置bias)
计算量:
k * k * Cin * Wout * Hout * Cout

 

 

2. 详解

2.1 参数量计算

【卷积层的参数量】

VGG-16为例,Conv1-1,输入224x224x3  ,64个 3x3 filter,输出feature map 224x224x64 。

则Conv1-1的参数量为3x3x3x64  。

同理,可以计算其它卷积层的参数量。感兴趣的同学可以自己动手算一下。

【全连接层的参数量】

上面已经说过卷积层的参数量计算方法了,那如何计算全连接层的参数量?其实和卷积层参数量的计算方法是一样的。

VGG-16最后一次卷积得到的feature map为7x7x512  ,全连接层是将feature map展开成一维向量  1x4096。实际上,我们就是用4096个 的filter去做卷积(可以理解为是一个卷积层)。

我们就可以计算第一个FC的参数量7x7x512x4096  。

1亿啊,这个数字好大的。这也是为什么说:全连接层参数冗余。全连接层参数就可占整个网络参数80%左右,好吓人的。

 

2.1 参数量计算

【卷积层的计算量】

一次卷积的计算量,如何计算呢?

以VGG-16为例,Conv1-1,输入 224x224x3 ,64个 3x3 filter,输出feature map112x112x64  。

feature map中的每一个像素点,都是64个 3x3 filter 共同作用于原图计算一次得到的,所以它的计算量为 3x3x64 。

已经知道单个像素的计算量,那乘以feature map所有像素,就是一次卷积的计算量:  112x112x3x3x3x64。

 

【全连接层的计算量】

全连接层的计算量,如何计算呢?其实和卷积层计算量的计算方法是一样的

VGG-16最后一次卷积得到的feature map为7x7x512  ,全连接层是将feature map展开成一维向量 1x4096 。则FC层的计算量为 7x7x512x1x4096。

 

 

通过以上讨论可以发现:我们需要减少网络参数时主要针对全连接层;进行计算优化时,重点放在卷积层。

 

 

参考:https://zhuanlan.zhihu.com/p/77471991

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐