反卷积

作者: HelloSam | 来源:发表于2020-10-26 16:25 被阅读0次

    有关反卷积的文章:

    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就向上取整.

    相关文章

      网友评论

          本文标题:反卷积

          本文链接:https://www.haomeiwen.com/subject/fnoamktx.html