卷积操作,特征图尺寸大小、感受野、参数量的计算过程

本文详细解析了卷积神经网络中的关键计算概念,包括输出特征图尺寸、感受野、空洞卷积的计算方法及参数量的影响。通过具体公式和实例帮助读者深入理解。

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

1、卷积操作后输出特征图的尺寸大小
  • 如下图所示,卷积核在输入图像进行滑动操作,每滑动一次,计算一次,获取一个值,该值为卷积核提取的当前区域的特征值。
  • 在水平方向上,从左侧开始滑动,滑动的距离为(Input_s - Filter_s),设滑动步长为Stride,那么滑动的次数为 (Input_s - Filter_s) / Stride
  • 未滑动之前,卷积核已经在蓝色位置提取了一个值
  • 所以,在水平方向上的获得的特征图尺寸为 (Input_s - Filter_s)/ Stride + 1
  • 因此下图卷积操作后的输出特征图的尺寸为 (7 - 3)/ 1 + 1 = 5

由上所述,输出特征图尺寸大小Output_s计算公式为:Output_s = (Input_s - Filter_s)/ Stride + 1

注:有padding时,即滑动距离(Input_s - Filter_s)变成了(Input_s - Filter_s + padding)
那么,输出特征图尺寸大小计算公式变为:Output_s =(Input_s - Filter_s + padding)/ Stride + 1

卷积操作示意图

2、感受野计算

感受野的计算,其实是上述特征图尺寸计算反过来,求解特征图尺寸大小为1X1的时候,输入的特征图的大小,根据上面特征图的计算反推过来:Input_s = (Output_s - 1)x Stride + Filter_s。下图为同义不同名的计算过程。此图链接
在这里插入图片描述

3、空洞卷积的感受野、输出特征图大小的计算

参考链接这个链接里,尺寸乘了2,个人认为是错的,k-1是表示size为k的核中间有几个可插入的位置,rate-1表示要插入的0的个数,所以总共要插入(rate - 1)* (k-1) 个0,加上卷积核本身的尺寸,就获得了一层感受野的大小
感受野计算公式

感受野尺寸=(rate-1)*(k-1)+k #k是kernel size

输出特征图的大小:

Output=(W-F+2P)/S+1 #w是上层feature的size,F是kernel size,S是stride

这里普通卷积跟空洞卷积的feature size计算公式都是一样,计算时只需要把空洞卷积的F替换成其感受野(即换成普通卷积的kernel size)。

4、参数量计算

通过上述的感受野计算可知,一个7X7的卷积和的感受野,与堆叠的3x3的卷积核感受野相同,他们的参数量分别如下所示,可见堆叠的3x3卷积在保证感受野不变的情况下,减少了参数量。
在这里插入图片描述

参考文献:

### 膨胀卷积感受野计算 膨胀卷积(Dilated Convolution),也称为孔洞卷积,在标准卷积的基础上引入了一个新的参数——膨胀率(dilation rate)。该技术通过在卷积核的元素之间插入空洞来扩大感受野,而无需增加额外的参数数量或计算量。对于膨胀卷积而言,其感受野计算公式可以基于一般卷积感受野扩展规律推导得出。 假设当前层的感受野大小为 \( F_{\text{后}} \),上一层的感受野大小为 \( F_{\text{前}} \),卷积大小为 \( k \),膨胀率为 \( d \)。则膨胀卷积感受野计算公式可表示为: \[ F_{\text{后}} = (F_{\text{前}} - 1) + k + (k-1)(d-1) \] 其中,\( (k-1)(d-1) \) 是由于膨胀操作导致的有效卷积尺寸增大所引起的附加部分[^4]。 #### 感受野公式的具体解释 上述公式中的每一项都有明确的意义: - \( F_{\text{前}} - 1 \): 表示从前一层继承的基础感受野贡献。 - \( k \): 当前卷积核本身的直接覆盖范围。 - \( (k-1)(d-1) \): 这一部分反映了因膨胀率带来的额外感受野扩张效果。当 \( d=1 \) 时,膨胀卷积退化为普通的卷积;此时此部分值为零,与传统卷积一致[^5]。 以下是用于验证这一公式的简单 Python 实现代码片段: ```python def calculate_receptive_field(k, d, previous_rf): """ Calculate the receptive field size after applying dilated convolution. :param k: Kernel size of the current layer's convolution operation. :param d: Dilation rate used in this convolutional layer. :param previous_rf: Receptive field from the preceding layer. :return: The updated receptive field size post-dilated convolution application. """ return (previous_rf - 1) + k + (k - 1) * (d - 1) # Example usage: kernel_size = 3 dilation_rate = 2 prev_receptive_field = 5 new_receptive_field = calculate_receptive_field(kernel_size, dilation_rate, prev_receptive_field) print(f"The new receptive field is {new_receptive_field}.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值