空洞卷积(Dilated convolutions)与感受野的理解

本文深入探讨了空洞卷积(Dilated Convolutions)的基本原理,对比普通卷积,详细解释了空洞卷积如何通过在卷积核中插入零来扩大感受野,从而在不增加参数数量的情况下捕获更大范围的上下文信息。

最近在读‘MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS’这篇论文,里面提到了DILATED CONVOLUTIONS,即空洞卷积,下面我就来介绍一下它的基本原理。
Firstly,我们应该知道普通卷积的基本操作过程,如下图所示:
在这里插入图片描述
上图是具体的计算过程,卷积核为单个,我们接下来看普通卷积感受野的理解:
在这里插入图片描述
上图中输入图片的大小为10x10,通过3x3的卷积核运算,得到(10-3+1)x(10-3+1)大小的future maps,在output1中每一个像素点,即图中的红色框所所对应的输入图片的区域大小为3x3,这就是第一次卷积后神经元对应的感受野大小为3x3。
在这里插入图片描述
上图中进行了第二次卷积,output2中的神经元对应上一层的感受野为3x3,即output1中的红色区域,接下来是理解的重点啦,要想得到output2的输出大小,在原始输入图像上要用多大的卷积核进行卷积?看图就得知,为5x5大小的卷积核,得嘞,这就是output2的神经元对应输入图像的感受野大小为5x5,即第一张图的5x5红色区域。再进行更多次的卷积操作,感受野也是类似的理解。
Sendly,我们来看空洞卷积,看图说话:
在这里插入图片描述
上图是dilated convolution等于2的情形,左图为普通卷积,右图为空洞卷积,蓝色的圆即为添加的0。
举例说明:
输入图片的大小为224x224,采用3x3的卷积核,dilated convolution等于2,即在每两个像素点间插入一个0,卷积核变为3+3-1=5大小,即5x5,接下来的卷积操作和普通卷积操作一样,得到220x220大小的输出future maps,每一个神经元对应的上一层的感受野为5x5大小的区域。
输入图片的大小为224x224,dilated convolution等于4时,即在每两个像素点间插入三个0,卷积核变为3+(3-1)x3=9大小,即9x9,接下来的卷积操作和普通卷积操作一样,得到208x208大小的输出future maps,每一个神经元对应的上一层的感受野为17x17大小的区域。
其实上述的感受野大小计算方法可以理解为一种逆运算,y = x - f + 1,y 为输出图片的大小,x 为输入图片的大小,f 为卷积核的大小,当我们知道 y 时,便可以计算 f ,f = x - y + 1。这种方法适用于以上两种卷积的感受野计算,在这里,我没有考虑padding的加入。原理应该类似。
例:
输入图片的大小为224x224,第一次采用3x3的卷积核,dilated convolution等于2,得到220x220大小的输出future maps,每一个神经元对应的上一层的感受野为5x5大小的区域,第二次卷积,得到216x216大小的输出future maps,每一个神经元对应的上一层的感受野为5x5大小的区域,而对应最初的输入图片的感受野大小为f = 224 - 216 +1 = 9,即9x9。

附小福利:https://fomoro.com/projects/project/receptive-field-calculator

### 空洞卷积中的感受野概念及计算 #### 感受野定义 感受野是指神经网络中某个特定位置的输出所依赖于输入图像上的区域大小。对于普通的卷积操作而言,其感受野卷积核尺寸决定;而对于空洞卷积,则由于引入了膨胀率参数 \(L\) ,使得实际的感受野被进一步扩展[^1]。 #### 空洞卷积简介 空洞卷积Dilated Convolution 或 Atrous Convolution),是一种特殊的卷积形式,在标准卷积的基础上增加了额外的空间间隔——即所谓的“孔隙”。这些孔隙通过调整膨胀系数实现更大范围的信息捕获能力而不增加模型复杂度或降低分辨率[^2]。 #### 感受野计算公式 假设当前层之前各层已经累积形成的基础有效视野半径为\(R_{prev}\),则应用一层具有膨胀因子\(d_i\) 和滤波器宽度\(k_i\)空洞卷积之后的新感受野可以按照下面这个递归关系式得到: \[ R_{new} = (R_{prev}-1)\times d_i+k_i \] 其中, - \(R_{prev}\): 前一阶段累计下来的有效视场直径; - \(d_i\): 当前处理单元采用的具体扩张比例/步幅值; - \(k_i\): 卷积核心本身的物理尺度长度。 上述表达式的含义在于考虑到了因为空间跳跃采样而导致的实际覆盖面积增大效应。 #### 示例代码展示如何动态更新每经过一次新的空洞卷积后的总感受野变化情况 ```python def calculate_receptive_field(layers, initial_rf=1): """ Calculate the receptive field size after applying dilated convolutions. Parameters: layers (list of tuples): List where each element is a tuple containing kernel size and dilation rate. Example: [(3, 1), (3, 2)] initial_rf (int): Initial receptive field before any convolutional layer Returns: int: Final calculated receptive field """ rf = initial_rf for k_size, dilation_rate in layers: rf = (rf - 1) * dilation_rate + k_size return rf # Example usage with two consecutive dilated convolution operations layers_info = [(3, 1), (3, 2)] final_rf = calculate_receptive_field(layers=layers_info) print(f"The final receptive field is {final_rf}") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值