反卷积

2020-10-26  本文已影响0人  HelloSam

有关反卷积的文章:

https://my.oschina.net/u/3702502/blog/1803358

TensorFlow中的经验
1、反卷积的时候:
①如果padding='same',那么就是要扩大两倍,把stride写成2,即strides=2
②如果padding='valid',那么就用O=S(I-1)+k来计算
    其中O是输出的图像的大小,S是步长,I你反卷积的那个图像的大小,K是卷积核大小。就能算出来反卷积后得到的图像的尺寸O.

2、卷积的时候:
①如果padding='same',
1.1 stride=1, 那么卷出来的大小和输入图像大小一样
1.2 stride=2,那么卷出来的效果就是输出图像长宽的除以2,除不开就向上取整,即:
O = \lceil \frac{I} {S} \rceil
②如果padding='valid',那么p=0,就去套公式求输出的大小:
O = \lceil \frac{I-K+1}{S} \rceil

3、全局平均池化
如果有一批特征图,其尺寸为 [ B, C, H, W], 我们经过全局平均池化之后,尺寸变为[B, C, 1, 1]

全局平均池化可以代替view的操作,把图像的长x宽\to1x1

PyTorch中的经验
1、对于卷积,统一公式:
O = \lceil \frac{I-K+2P+1}{S} \rceil
或者是
O=\lfloor \frac{I-K+2P }{S}+1 \rfloor
以上两个公式计算结果是一样的,举例说明:
对于[224,224,3]的输入,用Conv2d(3, 48, kernel_size=11, stride=4, padding=2)得到:
O = \lceil \frac{224-11+4+1}{4} \rceil= ceil(54.5) = 55
O = \lceil \frac{224-11+4 }{4}+1 \rceil= floor(55.25) = 55
即得到:[224,224,3]\to[55, 55, 48]的特征图.

另外
对于池化操作:
O = \lfloor \frac{I-K}{S} +1 \rfloor
注意本来是向下取整的,即在PyTorch中:

nn.MaxPool2d(
    kernel_size,
    stride=None,
    padding=0,
    dilation=1,
    return_indices=False,
    ceil_mode=False,
)

注意这个ceil_mode=False所以是向下取整,但是可以通过调整这个参数变成True之后就变成向上取整了。
常见地有,K=2, S=2O=\frac{I-2}{2}+1=\frac{I}{2}
还可以是,K=3, S=2)=\frac{I-3}{2} + 1, 如果ceil_mode=False就向下取整,如果ceil_mode=True就向上取整.

上一篇 下一篇

猜你喜欢

热点阅读