卷积神经网络相关计算

1. 求特征图大小及感受野

参考博客:关于感受野的理解与计算

                   感受野计算总结

某一个网络有三个操作,输入大小为200×200,第一层为卷积层,卷积核的大小为5×5,stride为2,padding为1;第二层为池化层,池化大小为3×3,stride为1;第三层为卷积层,卷积核大小为3×3,padding为1,stride为1.求每一层特征图的大小及感受野。

 

感受野的计算示意图:

具体公式如下,第n层感受野大小=上一层感受野大小+(第n层卷积核大小-1)乘以本层以前所有stride的乘积

 2. 求卷积计算量

分别计算以下两个操作所需要的乘累加操作次数
1、输入3×20×20图片,经过一个kernelsize = 3×3,stride=2的convolution层,输出一个5×10×10的特征图
2、输入3×20×20图片,经过一个kernelsize = 3×3,stride=2 的depthwise convolution层,输出一个5×10×10的特征图

要计算这两个题,首先要搞懂的就是什么是乘累加操作.

卷积的操作的本质就是乘累加操作,即卷积核上元素与图像对应的位置的元素相乘然后累加。以下图为例,计算生成图中4时的乘累加次数等于3×3,这里3代表这卷积核的大小,即为了生成新的元素4,做了9次操作运算。

那么为了下面红色的整个新的特征图呢?操作次数就为3×3×3×3 = 27,其中第一个3×3就是上述生成一新个元素所需要的操作数,那么后面的3×3自然表示了要生成的新元素个数,也就是新的特征图的大小

因此我们可以得到,卷积的乘累加操作数量 = 卷积核的维度 * 输出特征图的维度 ---------------------------------->公式1

对于单张特征图,假定卷积核的大小为Df,输出特征图的大小为Dk,则卷积的乘累加操作数量  = Df × Df ×Dk × Dk

那么实际上就如题中所述,大多数卷积操作输入输出都不可能只是一张特征图的,那么这时候该如何计算呢?请看下图。

该图表达了一个标准的卷积操作。Dk为卷积核的大小,M为卷积核的深度(也代表着输入特征图channel数),因此该卷积操作卷积核实际可以表示为Dk×Dk×M,然后共用N个这样的卷积核,就可以新的生成N个特征图,则生成特征图可以表示为Df×Df×N。(这里Df为输出特征图的大小)。

我们仍然套用公式1,不过此时卷积核的维度不在是二维的,而是三维的,是Dk × Dk × M,输出特征图的维度也是三维的,是Df×Df×N,因此操作的次数为:Dk × Dk× M × Df × Df × N.

可以看出就是在单张特征图的情况下后面多了一项 × M × N。其实前面的简单情况下相当于M=N=1,即输入特征图的channel = 输出特征图的channel =1 。

 因此第一问的答案就是:10×10×3×3×3×5 = 13500。

第二问就涉及到了轻量化网络mobilenet的相关知识了。mobilenet之所以能够轻量化就是采用了depthwise separable convolution的卷积方式。depthwise separable convolution的方式可以分为两个步骤,第一个就是depthwise convolution,第二步就是pointwise convolution

什么是depthwise convolution呢?depthwise convolution是针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。

还是以上的例子来说,假设输入特征图为Df × Df × M,此时我们输入的每一个特征图,都采用一种卷积核进行操作,卷积核大小为Dk × Dk,卷积后的特征图为Df × Df × M。我们仍可以套用上面红色的公式,只不过此时相当于M等于1了,因为一个卷积核只对一个特征图操作,即厚度为1。然后N就等于下图中的M了,此时的操作数就为:Df × Df × Dk × Dk × M

什么是pointwise convolution呢?pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。

经过上述depthwise convolution后,特征图的大小为Df × Df × M。但是我们最终生成的是 Df × Df × N。此时可以用普通卷积的方法,用N个大小为1×1×M的卷积核即可。则此时的计算量为:Df × Df × 1 × 1 × M × N = Df × Df  × M × N

因此最采用 depthwise separable convolution方式的操作数为:

Df × Df × Dk × Dk × M + Df × Df  × M × N

因此第二问的结果为:10×10×3×3×3 + 10×10 ×3× 5 = 4200

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值