dn cnn 感受野大小受限_CNN的特征图、感受野、参数量、运算量计算

本文详细介绍了卷积神经网络(CNN)中不同类型的卷积操作,包括正常卷积、空洞卷积、分组卷积和深度可分离卷积。内容涵盖卷积操作介绍、特征图计算、感受野计算、参数量和运算量的计算方法。通过这些计算,可以理解和优化CNN模型的复杂性和效率。同时,提供了相关资源链接以便进一步学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

f2c16a85f8f786cd4597ea1c684ac6c7.png

卷积神经网络CNN被LeCUN提出以后,出现了许多改进的卷积计算,在空间上有空洞卷积(dilated convolution),在通道上有分组卷积(group convolution)、深度可分离卷积(depth-wise separable convolution)。下面总结一下,不同的卷积运算,如何计算特征图大小、感受野尺度、参数量、运算量。

卷积操作介绍

正常的卷积操作:

对于图像矩阵来说,卷积操作就是一个固定大小(比如3*3)的滑动窗口,在图像上滑过,每次滑过的地方做逐像素的点乘操作。

如下图所示:

f03e5aa0566aaa151cddb8949d9d45c9.png

卷积操作有四个参数,分别是卷积核的大小F*F,卷积核的个数K, 卷积核滑动时的跳步(stride)S,以及对原图/特征图边缘进行0填充的个数P。

其中,F,S,P决定了卷积运算之后特征图的大小,K决定了输出特征图的维度。

对于padding的方式来说,tensorflow有“valid”和“same”两种,valid就是不填充,把卷积不到的地方去掉,same是把卷积不到的地方填充0,使得能够完成最后一次卷积,比如5*5卷积,最后只剩下四行,那么特征图会补充最后全为0的一行,以达到正常的卷积计算。声明一点,当stride=1时,使用same的padding方式得到的特征图大小将会跟原图大小一致。

空洞卷积:

bcfb259807fc77f026767bf654ceb774.png

空洞卷积如上图所示,就是在卷积的时候,间隔地去做计算。里面有个参数是空洞率dilation,dilation表示两个相邻计算元素的距离,比如dilation=3表示空两个单元。

据说空洞率思想来自于小波分解(wavelet decomposition),用于图像分割和生成等需要做稠密像素预测的任务上,主要是为了解决因池化计算带来的尺度降低。空洞卷积最大的优点就是能够在不降低特征图尺度的前提下提高感受野。知乎上也有对空洞卷积最为细致的探讨:https://www.zhihu.com/question/54149221。

分组卷积与深度可分离卷积:

6a9c4e97b24a16d6808f4b590df12194.png

上图左边是正常卷积,输出的每一个特征图都由输入特征图运算得到。右边是分组卷积,输出输出的特征图只由自己的组内的输入特征图得到。当把分组的组数设为输入通道数,分组卷积变成深度可分离卷积。分组卷积主要是为了减少参数量和计算量。这里有更详细介绍。

特征图计算

正常卷积的特征图计算公式:

equation?tex=O%3D%5Clfloor+%5Cfrac%7BI%2B2P-F%7D%7BS%7D+%5Crfloor+%2B+1

其中O是输出的特征图大小,I是输入的特征图大小,P是填充的数量,F是卷积核大小,S是步长。

空洞卷积的特征图计算公式:

equation?tex=O%3D%5Clfloor+%5Cfrac%7BI%2B2P-F-%28F-1%29%28dilation-1%29%7D%7BS%7D+%5Crfloor+%2B+1

这里可以把空洞卷积核的大小看成是F+(F-1)(dilation-1),这样就比较好记。

感受野计算

正常卷积感受野计算公式:

equation?tex=l_k+%3D+l_%7Bk-1%7D%2B%5B%28f_k-1%29%5Cprod_%7Bi%3D1%7D%5E%7Bk-1%7DS_i%5D%3D1%2B%5Csum_%7Bj%3D1%7D%5E%7Bk%7D%5B%28f_j-1%29%5Cprod_%7Bi%3D0%7D%5E%7Bj-1%7DS_i%5D

一个详细的计算例子。

空洞卷积感受野计算公式:

先计算空洞卷积的对应卷积核大小:

equation?tex=f_k+%3D+k+%2B+%28dilation-1%29%2A%28k-1%29+%3D+1+%2B+%28k-1%29%2Adilation

再把

equation?tex=f_k+ 代入上式计算,值得一提的是感受野的计算不考虑padding。

参数量计算

正常卷积参数量计算:

5ad399e8f05f94b0eb46289fc68e87a7.png

卷积层:卷积核个数确定输出的channel,输入的channel决定的每个卷积核的厚度。

池化层:不需要可学习的参数。

全连接层:其实跟卷积层计算差不多,卷积层可以看成是参数共享的全连接网络。

分组卷积参数量计算:

参考这篇知乎文章:https://zhuanlan.zhihu.com/p/65377955,结论是分组卷积参数量是正常卷积的1/g倍,g是分组数。深度可分离卷积参数量是标准卷积的

equation?tex=%7B1%7D%2F%7BN%7D+%2B+%7B1%7D%2F%7BD_K%5E2%7D。其中N是输入特征图通道数即分组数,
equation?tex=D_k 是卷积核大小。分别是深度分离卷积+1*1卷积带来的结果。

运算量计算

假设输入特征图:

equation?tex=W_%7Bin%7D%2AH_%7Bin%7D%2AM

输出特征图:

equation?tex=W_%7Bout%7D%2AH_%7Bout%7D%2AN

卷积核大小:

equation?tex=D_k%2AD_k

则标准卷积计算量:

equation?tex=D_k%2AD_k%2AM%2AW_%7Bout%7D%2AH_%7Bout%7D%2AN

深度可分离卷积计算量:

equation?tex=D_k%2AD_k%2AW_%7Bout%7D%2AH_%7Bout%7D%2AN%2BM%2AW_%7Bout%7D%2AH_%7Bout%7D%2AN

参考链接

1、Convolutional Neural Networks cheatsheet

2、CS231n Convolutional neural network for visual recognition

3、The Most Intuitive and Easiest Guide for Convolutional Neural Network

4、A Comprehensive Introduction to Different Types of Convolutions in Deep Learning

5、理解分组卷积和深度可分离卷积如何降低参数量

6、深度可分离卷积计算量与参数量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值