上采样和PixelShuffle

0、前言

  • 上采样:可以简单的理解为任何可以让你的图像变成更高分辨率的技术。
  • 最简单的方式是重采样和插值:将输入图片input image进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值bilinear等插值方法对其余点进行插值。
  • Deconvolution(反卷积)在CNN中常用于表示一种反向卷积 ,但它并不是一个完全符合数学规定的反卷积操作。
  • 反卷积也被称为分数步长卷积(convolution with fractional strides)或者转置卷积(transpose convolution)或者后向卷积backwards strided convolution。

1、Vision Layer

在PyTorch中,上采样的层被封装在torch.nn中的Vision Layers里面,一共有4种:
① PixelShuffle
② Upsample
③ UpsamplingNearest2d
④ UpsamplingBilinear2d

1.1 PixelShuffle

正常情况下,卷积操作会使feature map的高和宽变小。
但当我们的stride = 1/r < 1 时,可以让卷积后的feature map的高和宽变大——即分辨率增大,这个新的操作叫做sub-pixel convolution,具体原理可以看PixelShuffle《Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network 》的论文。

上采样和PixelShuffle_第1张图片

  • 实现的功能是:将一个H × W的图像变为rH x rW的高分辨率图像(High Resolution)。

  • 原理:通过卷积先得到 r^2 个通道的特征图(特征图大小和输入低分辨率图像一致),然后通过周期筛选(periodic shuffing)的方法得到这个高分辨率的图像,其中rrr为上采样因子(upscaling factor),也就是图像的扩大倍率。

  • 定义:class torch.nn.PixleShuffle(upscale_factor)
    upscale_factor就是放大的倍数,数据类型为int。
    以四维输入 (N, C, H, W) 为例,Pixelshuffle会为 (∗, r^2 x C, H, W) 的Tensor给reshape成 (∗, C, rH, rW) 的Tensor。
    eg:扩大两倍
    输入: (12, 64, 224, 224)
    输出: (12, 16, 448, 448)

 

>>> ps = nn.PixelShuffle(3)
>>> input = torch.tensor(1, 9, 4, 4)
>>> output = ps(input)
>>> print(output.size())
torch.Size([1, 1, 12, 12])


 

你可能感兴趣的:(Computer,vision)