nn.Conv2d参数详解及输入特征图尺寸的计算

在 PyTorch 中,nn.Conv2d 是一个实现了二维卷积(convolution)函数的神经网络模块。Conv2d 模块的核心部分即卷积运算,其接受的参数包括:

in_channels:输入特征图(feature map)的通道数,即图像的深度(depth);

out_channels:输出特征图的通道数;

kernel_size:卷积核的大小;

stride:卷积核的步幅(stride);

padding:前向计算时在输入特征图周围添加的像素数(padding);

dilation:卷积核的膨胀率(dilation rate)。

下面是各个参数的详细说明:

in_channels:输入特征图的通道数,通常对于 RGB 彩色图像,in_channels 为 3;对于灰度图像,in_channels 为 1。

out_channels:输出特征图的通道数,即过滤器(filter)或卷积核(kernel)的个数,每个卷积核会产生一个输出通道;

kernel_size:卷积核的大小,通常为正方形,可以是单个整数表示正方形大小,也可以是一个元组(tuple)表示不同宽度和高度的大小,如 (3, 5) 表示高度为 3 个像素,宽度为 5 个像素的卷积核;

stride:卷积运算的步幅,通常为正方形,可以是单个整数或是一个元组,表示在水平和竖直方向上卷积核的步幅。例如,stride = 2 表示每次移动卷积核两个像素进行卷积运算;

padding:前向计算时在输入特征图周围添加的像素数,如 padding = 1 表示在每个输入图像的四周添加一圈像素值为 0 的像素;

dilation:卷积核的膨胀率,即卷积核内部增加的虚拟像素点。注意:dilation 不是填充(padding),可通过调整 kernel 和 dilation 的大小比例有效增加局部感受野。默认为 1,表示不增加膨胀,输入数据邻近像素间的间隔不变。

需要注意的是,对于输出特征图的大小,我们可以通过下面这个公式来计算:

W输出=(W-K+2P)/S+1

H输出 = (H-K+2P)/S+1

其中,W 表示输入特征图的宽度,H 表示输入特征图的高度,K 表示卷积核的大小,P 表示 padding 的大小,S 表示卷积核的步幅。

在 CNN 级联中的不同层次,卷积核的具体设置也不同。通常在较浅层,卷积核大小比较小,而在较深层,则更倾向于使用更宽大的卷积核,以便进行更复杂的特征提取。

在进行卷积运算后,输出的特征图的长度和宽度可能会是小数。一个通用的计算公式是:

output size = ⌊ input size − kernel size + 2 padding stride + 1 ⌋ \text{output size} = \lfloor\frac{\text{input size} - \text{kernel size} + 2\text{padding}}{\text{stride}} +1\rfloor output size=strideinput sizekernel size+2padding+1

其中, input size \text{input size} input size 表示输入特征图的长度或宽度大小, kernel size \text{kernel size} kernel size 表示卷积核的大小, padding \text{padding} padding 表示填充的大小, stride \text{stride} stride 表示卷积的步长。 ⌊ ⋅ ⌋ \lfloor \cdot \rfloor 表示向下取整运算。

对于常见的卷积操作,可以简化计算公式:

  1. same padding: 对于使用 same padding 的时候,特征图长度和宽度的大小不变,即:

    output size = input size \text{output size} = \text{input size} output size=input size

  2. valid padding: 对于使用 valid padding 的时候,输出的特征图长度和宽度根据上述公式计算得到。如果得到的是一个小数,通常将其向下取整。

需要注意的是,卷积层的参数选择也会影响特征图的大小。比如,在使用大尺寸的卷积核进行卷积时,会使得特征图的尺寸减小,而使用小尺寸的卷积核则会使得特征图的尺寸增加。

same padding 和 valid padding详解:
same padding 和 valid padding 是卷积操作中常用的两种 padding 方式。

  • same padding:指在卷积操作时,对输入矩阵的周围填充一圈“0”,使得输出矩阵大小与输入矩阵大小相同。在进行 same padding 时,假设输入特征图大小为 W 1 × H 1 W_1 \times H_1 W1×H1,卷积核大小为 F × F F \times F F×F,步长为 S S S,则需要填充的大小 P P P 为:

    P = ( W 1 − 1 ) S + F − W 1 2 P = \frac{(W_1 - 1)S + F - W_1}{2} P=2(W11)S+FW1

  • valid padding:指在卷积操作时,不对输入矩阵进行填充,输出矩阵大小小于输入矩阵大小。在进行 valid padding 时,假设输入特征图大小为 W 1 × H 1 W_1 \times H_1 W1×H1,卷积核大小为 F × F F \times F F×F,步长为 S S S,则输出特征图大小为:

    W 2 = ⌊ W 1 − F S + 1 ⌋ ,    H 2 = ⌊ H 1 − F S + 1 ⌋ W_2 = \lfloor\frac{W_1 - F}{S} + 1\rfloor, \ \ H_2 = \lfloor\frac{H_1 - F}{S} + 1\rfloor W2=SW1F+1,  H2=SH1F+1

如何选择 padding 方式,一般取决于应用场景和实验需求。通常来说,使用 same padding 会对边缘信息的保留更有利,而使用 valid padding 会使得特征图的尺寸更小。在实际应用中,需要根据具体任务和数据情况进行选择。

same padding 或 valid padding判定
padding 的值为 1 时,是一种半 padding,可以同时被认为是 same padding 或 valid padding。

具体来说,当 padding=1 时,如果输入特征图大小为 W 1 × H 1 W_1 \times H_1 W1×H1,卷积核大小为 F × F F \times F F×F,步长为 S S S,则需要填充的大小为 ( F − 1 ) / 2 (F-1)/2 (F1)/2,如果 P = ( F − 1 ) / 2 = 0 P=(F-1)/2=0 P=(F1)/2=0,则不需要进行padding,此时相当于使用 valid padding;如果 P = ( F − 1 ) / 2 = 1 P=(F-1)/2=1 P=(F1)/2=1,则进行一圈padding,此时相当于使用 same padding。如果希望使用不同大小的padding,则需要将 padding 的值设置为所需的具体大小。

在卷积操作中,特征图大小的求取涉及到向上取整和向下取整两种情况,具体如下:

  • 向下取整:当卷积操作中设置的 padding、卷积核大小和步长可以恰好地使得输入特征图按照该参数经过卷积操作后被均分为若干个方格时,特征图的输出大小就可以向下取整。例如,在卷积核大小为 3 × 3 3 \times 3 3×3,步长为 1,padding 为 0 的情况下,对于一个输入特征图大小为 5 × 5 5 \times 5 5×5 的矩阵进行卷积操作,输出特征图大小为 3 × 3 3 \times 3 3×3,这是因为输入特征图可以平均分割为 9 个 3 × 3 3 \times 3 3×3 的方格,每个方格的像素经过卷积运算后被转化为一个输出特征点。
  • 向上取整:当卷积操作中设置的 padding、卷积核大小和步长使得输入特征图无法被均分为若干个方格时,特征图的输出大小需要向上取整。例如,在卷积核大小为 3 × 3 3 \times 3 3×3,步长为 2,padding 为 1 的情况下,对于一个输入特征图大小为 5 × 5 5 \times 5 5×5 的矩阵进行卷积操作,输出特征图大小需要向上取整为 3 × 3 3 \times 3 3×3,这是因为输入特征图无法被均分为若干个 3 × 3 3 \times 3 3×3 的方格,此时必须通过向上取整的方式才能使得所有输入像素被卷积运算覆盖到。

因此,特征图的输出大小需要根据输入特征图大小、卷积核大小、步长和 padding 等参数进行计算。具体应用中需要根据实际情况进行区分。

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
nn.Conv2d是PyTorch中的一个二维卷积层。它有多个参数需要解析。首先,in_channels表示输入的通道数,对于RGB像来说,通道数为3。然后,out_channels表示输出的通道数,可以理解为卷积核的数量。接下来,kernel_size表示卷积核的大小,一般情况下我们使用的是方形的卷积核,所以只需要写一个整数表示卷积核的边长。stride表示卷积核在像上每次平移的步长。padding表示像的填充大小,可以通过在像四周添加0来扩大像的尺寸。dilation表示空洞卷积的扩张率,默认为1。groups表示是否采用分组卷积。bias表示是否添加偏置参数。padding_mode表示填充的模式,默认为零填充。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【PyTorch】nn.Conv2d函数详解](https://blog.csdn.net/See_Star/article/details/127560160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [nn.Conv2d详解](https://blog.csdn.net/weixin_40895135/article/details/130034019)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值