欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

空洞卷积感受野计算以及输出特征大小计算

程序员文章站 2022-03-20 12:13:02
...

空洞卷积

空洞卷积使用方式(pytorch)

常规卷积:

import torch.nn as nn
nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=1)

空洞卷积在pytorch中使用也非常方便,只要在上面的基础上添加dilation参数就可以了

import torch.nn as nn
nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=1, dilation=2)

注意:当dilation=1时,就是常规的卷积,当大于等于2时,才是空洞卷积,一般使用2,4,8,…这样的参数

空洞卷积感受野计算

参考:博客
F = 2 ∗ ( d i l a t i o n − 1 ) ∗ ( k e r n e l − 1 ) + k e r n e l F = 2 * (dilation - 1) * (kernel - 1) + kernel F=2(dilation1)(kernel1)+kernel
以常用的kernel size为3时为例:

dilation=1, F = 2 * (1 - 1) * (3 - 1) + 3 = 3
dilation=2, F = 2 * (2 - 1) * (3 - 1) + 3 = 7
dilation=4, F = 2 * (4 - 1) * (3 - 1) + 3 = 15
dilation=8, F = 2 * (8 - 1) * (3 - 1) + 3 = 31
dilation=16, F = 2 * (16 - 1) * (3 - 1) + 3 = 63

输出特征大小计算

o u t f e a t u r e = ( i n f e a t u r e − F + 2 ∗ p a d d i n g ) / s t r i d e + 1 out_{feature} = (in_{feature} - F + 2 * padding) / stride + 1 outfeature=(infeatureF+2padding)/stride+1
注意:这里的F就是上面的感受野,这个公式也适用于常规的卷积

padding大小计算

不像TensorFlow那样有**padding=‘SAME’**这样的操作,在pytorch中,只能自己手动计算padding的大小,来保证输出的特征大小和输入一样,计算方式不过也简单,就是将上面那个公式转换一下就行了,并令 o u t f e a t u r e = i n f e a t u r e out_{feature} = in_{feature} outfeature=infeature
p a d d i n g = [ ( s t r i d e − 1 ) ∗ i n f e a t u r e + F − s t r i d e ] / 2 padding = [(stride - 1) * in_{feature} + F - stride] / 2 padding=[(stride1)infeature+Fstride]/2
当stride=1时,可以简化为:
p a d d i n g = ( F − 1 ) / 2 padding = (F - 1) / 2 padding=(F1)/2