空洞卷积(膨胀卷积)(Dilated Convolution / Atrous Convolution)

膨胀卷积的基础操作图解:

卷积之后的尺寸公式:

  • W×H 是输入尺寸

  • Fw​×Fh​ 是卷积核尺寸

  • P 是填充大小

  • S 是步长

  • R 是膨胀率

  • ⌊x⌋ 表示向下取整

实例(膨胀率不同):

  • 输入尺寸:W=8×H=8

  • 卷积核尺寸:Fw=3×Fh=3

  • 填充:P=1P=1

  • 步长:S=1S=1

代码实例:

import torch
import torch.nn as nn

# 固定参数
input_size = (8, 8)        # 输入尺寸 W×H
kernel_size = (3, 3)       # 卷积核尺寸 Fw×Fh
padding = 1                # 填充 P
stride = 1                 # 步长 S

# 定义输入张量:batch_size=1, 通道数=1, 尺寸=8x8
x = torch.randn(1, 1, input_size[0], input_size[1])

# 定义不同膨胀率的卷积层
dilations = [1, 2, 3, 4]  # 膨胀率 D

for dilation in dilations:
    # 创建膨胀卷积层
    conv = nn.Conv2d(
        in_channels=1,
        out_channels=1,
        kernel_size=kernel_size,
        stride=stride,
        padding=padding,
        dilation=dilation  # 膨胀率 D
    )
    
    # 计算输出尺寸
    with torch.no_grad():
        output = conv(x)
    
    # 理论计算验证
    effective_kernel_w = dilation * (kernel_size[0] - 1) + 1
    w_out = (input_size[0] + 2 * padding - effective_kernel_w) // stride + 1
    
    # 打印结果
    print(f"Dilation={dilation}:")
    print(f"  理论输出尺寸: {w_out}x{w_out}")
    print(f"  实际输出尺寸: {output.shape[2]}x{output.shape[3]}\n")

输出:

Dilation=1:
  理论输出尺寸: 8x8
  实际输出尺寸: 8x8

Dilation=2:
  理论输出尺寸: 6x6
  实际输出尺寸: 6x6

Dilation=3:
  理论输出尺寸: 4x4
  实际输出尺寸: 4x4

Dilation=4:
  理论输出尺寸: 2x2
  实际输出尺寸: 2x2

官方文档:Conv2d — PyTorch 2.6 documentation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值