带空洞卷积参数的计算

在CUDNN中进行推断时,若卷积参数设置不当会引发错误。本文深入探讨了Tensorflow中卷积计算的细节,特别是针对VALID和SAME两种填充方式的padding数值及输出尺寸的计算方法。通过解析卷积核在feature map中的占据尺寸,阐述如何解决不同padding情况下步长、填充和输出尺寸的关系。

最近在使用CUDNN做inference,CUDNN没有计算输出尺寸的辅助函数,如果 传给卷积的参数不正确,会报CUDNN_STATUS_BAD_PARAM错误。因此,仔细研究了一下卷积尺寸的计算。

在Tensorflow中,padding不是以数值形式传入,而分为两种:VALID和SAME。所以需要分别计算padding的数值,以及输出的尺寸。以下分别讨论:

1,padding=VALID的情况:

    p=0

    o=\frac{i-\left ( k-1 \right )\times d-2}{s}+1

2,padding=SAME的情况:

    o=i\div s

    

### 空洞卷积参数设置及作用 空洞卷积(也称为膨胀卷积或扩张卷积),是一种特殊的卷积操作,其核心在于通过在卷积核中引入“空洞”来扩大感受野而不增加额外的参数数量。这种技术广泛应用于图像分割、目标检测等领域。 #### 超参数定义 空洞卷积相较于普通卷积新增了一个超参数——**膨胀率(dilation rate)**。该参数决定了卷积核中的元素之间的间隔距离。当 `dilation=1` 时,空洞卷积退化为普通的卷积[^2]。 具体来说,假设卷积核大小为 \(k\),步长为 \(s\),填充量为 \(p\),输入特征图的高度为 \(H_{in}\),则输出特征图高度可以通过以下公式计算: \[ H_{out} = ((H_{in} - 1) \times s + k - 2 \times p) \] 然而,在空洞卷积的情况下,实际的感受野由膨胀率决定,因此有效卷积核大小变为 \(k' = (k-1) \cdot dilation + 1\)。这表明即使保持相同的卷积核大小,更大的膨胀率可以显著扩展模型的感受野而无需增加更多的参数[^3]。 #### 使用方法与场景分析 在深度学习框架如 TensorFlow 或 PyTorch 中实现空洞卷积非常简单。以下是基于 Python 的代码示例展示如何配置这些参数并应用到神经网络层上: ```python import torch.nn as nn # 定义一个具有膨胀卷积的二维卷积层 conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=2, dilation=2) # 输入张量形状为 [batch_size, channels, height, width] input_tensor = torch.randn((1, 3, 32, 32)) output_tensor = conv_layer(input_tensor) print(output_tensor.shape) # 输出张量维度取决于上述公式的计算结果 ``` 此段代码创建了一种特殊形式的卷积运算器,其中设置了 `padding=2`, 和 `dilation=2`. 这样做能够有效地增大局部区域的信息捕获范围,特别适合处理高分辨率数据集或者需要较大上下文关联的任务。 #### 参数的作用总结 - **膨胀率(dilation)**: 控制卷积核内部零填充密度从而调整最终的有效视野宽度。 - **卷积核大小(kernel size)**: 影响基础模式匹配能力以及计算复杂度。 - **步幅(stride)**: 改变采样的稀疏程度进而影响输出尺寸缩小比例。 - **补边(padding)**: 防止边界像素丢失过多信息的同时维持原始空间结构不变。 以上各因素共同协作完成特定视觉任务需求下的高效建模过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值