关于空洞卷积(Atrous Convolution)

内容节选自《神经网络与深度学习》电子版:https://nndl.github.io/

 

对于一个卷积层,如果希望增加输出单元的感受野,一般可以通过三种方式 实现:

  1)增加卷积核的大小;

  2)增加层数,比如两层3×3的卷积可以近似一层5×5 卷积的效果;

  3)在卷积之前进行汇聚操作。

前两种方式会增加参数数量,而 第三种方式会丢失一些信息。

 

空洞卷积(Atrous Convolution)是一种不增加参数数量同时增加输出单元感受野的一种方法,也称为膨胀卷积(Dilated Convolution)。 空洞卷积通过给卷积核插入“空洞”来变相地增加其大小。

如果在卷积核的每两个元素之间插入𝐷−1个空洞,卷积核的有效大小为

   𝐾′=𝐾+(𝐾−1)×(𝐷−1)

其中𝐷称为膨胀率(DilationRate),当𝐷=1时卷积核为普通的卷积核。

D=2时,K' = 3+(3-1)*(2-1) = 5

D=3时,K' = 3+(3-1)*(3-1) = 7

代码

torch.nn.Conv2d ( in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1,

                               groups=1, bias=True, padding_mode='zeros')

in_channels(int) – 输入信号的通道。

out_channels(int) – 卷积产生的通道。

kerner_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kerner_size*in_channels

stride(int or tuple, optional) -卷积步长

padding (int or tuple, optional)- 输入的每一条边补充0的层数

dilation(int or tuple, `optional``) – 卷积核元素之间的间距

groups(int, optional) – 从输入通道到输出通道的阻塞连接数

bias(bool, optional) - 如果bias=True,添加偏置

conv1 = nn.Conv2d(1, 1, 3, stride=1, bias=False, dilation=1)  # 普通卷积 

conv2 = nn.Conv2d(1, 1, 3, stride=1, bias=False, dilation=2)  # dilation就是空洞率,即间隔 

ps:如果希望卷积后大小跟原来一样,需要设置padding = (kerner_size - 1) / 2   if   stride = 1 (步长为1前提下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值