空洞卷积感受野计算以及输出特征大小计算
空洞卷积
空洞卷积使用方式(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∗(dilation−1)∗(kernel−1)+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=(infeature−F+2∗padding)/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=[(stride−1)∗infeature+F−stride]/2
当stride=1时,可以简化为:
p
a
d
d
i
n
g
=
(
F
−
1
)
/
2
padding = (F - 1) / 2
padding=(F−1)/2
上一篇: 双向选择
下一篇: 两种php调用Java对象的方法