一些上采样操作笔记

所谓上采样简单的讲就是将一幅图像的分别率提高,比如原始图像是256*256,经过2倍的上采样变为了512*512的图像。最常见的实现方式是插值,比如双线性插值,立方插值等,还有一些卷积方式的上采样操作,比如反卷积,亚像素卷积等。

下面介绍一些相关的上采样操作:

Unpooling

Unpooling是CNN中max pooling的逆操作。这是从2013年纽约大学Matthew D. Zeiler和Rob Fergus发表的《Visualizing and Understanding Convolutional Networks》中引用的:因为max pooling不可逆,因此使用近似的方式来反转得到max pooling操作之前的情况。

它的实现方式是:Unpooling操作需要记住在做max pooling之前的size以及最大值对应的位置,然后将对应位置填上最大值,其余位置置为0即可,便得到上采样后的结果。其实现示意图如下图所示:

å¨è¿éæå¥å¾çæè¿°

反卷积

与Unpooling不同,使用反卷积来对图像进行上采样是可以习得的。通常用来对卷积层的结果进行上采样,使其回到原始图片的分辨率。反卷积也被称为分数步长卷积(convolution with fractional strides)或者转置卷积(transpose convolution)或者后向卷积backwards strided convolution。

PixelShuffle

正常情况下,卷积操作会使feature map的高和宽变小。

但当我们的stride<1时,可以让卷积后的feature map的高和宽变大——即分辨率增大,这个新的操作叫做sub-pixel convolution,具体原理可以看ESPCN这篇论文,pytorch中相应的实现方法名叫做PixelShuffle。

å¨è¿éæå¥å¾çæè¿°

pixelshuffle算法的实现流程如上图,其实现的功能是:将一个H × W的低分辨率输入图像(Low Resolution),通过Sub-pixel操作将其变为rH x rW的高分辨率图像(High Resolution)。

但是其实现过程不是直接通过插值等方式产生这个高分辨率图像,而是通过卷积先得到r**2个通道的特征图(特征图大小和输入低分辨率图像一致),然后通过周期筛选(periodic shuffing)的方法得到这个高分辨率的图像,其中r为上采样因子(upscaling factor),也就是图像的扩大倍数。其输入输出可以表示如下:

输入: (N,C*upscale_factor**2,H,W)
输出: (N,C,H*upscale_factor,W*upscale_factor)

例如:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值