PixelShuffle原理笔记(paper,pytorch实现)

pixel shuffer是一种图像上采样的方法,参考paper

它在Pytorch中的实现为

pixel_shuffle = torch.nn.PixelShuffle(r)
output = pixel_shuffle(input)

或者

torch.nn.functional.pixel_shuffle(input, r)

其中r为上采样倍率。输入输出如下:
在这里插入图片描述
举个例子,比如input的shape是(1, 64, 20, 30), r = 2,
而这个shape对应的是(1, r2C, H, W), 也就是r2C = 2x2xC = 64, 所以C=16,
所以output应该是(1, C, rH, rW),也就是(1, 16, 40, 60)

下面是原理:

paper中提到,之前的上采样通过插值把低分辨率(LR)图像转换到高分辨率(HR),然后在HR特征空间处理,得到超分辨率(SR)图像。

paper提出了一种跳过插值转换HR的步骤,直接从LR特征空间转换为SR图像。

它基于的假设是,在很多SR技术中,高频数据是冗余的,因而可以直接由低频部分得到。

网络的前L-1层如下:
PixelShuffle原理笔记(paper,pytorch实现)_第1张图片
W是conv2D, ϕ \phi ϕ表示非线性激活函数。

最后一层就是把LR转换到SR空间。
公式如下:
PixelShuffle原理笔记(paper,pytorch实现)_第2张图片
公式不太好理解,用图来说明吧
PixelShuffle原理笔记(paper,pytorch实现)_第3张图片可看到经过前L-1层处理后,得到了shape为(N, r2C, H, W)的output,
现在要把它转换为shape为(N, C, rH, rW)的SR图像。

以output中(0, 0)pixel为例,它对应了r2个channel, 把这些channel铺成 r x r的一个大像素,
假如r = 3,那么output中一个pixel有9个channel,它对应右边SR图像中一个3x3的大像素(注意看颜色的对应)。

回到r,每个pixel有r2个channel,把它铺平,成为一个r x r的SR大像素,
所以(r2C, H x W)就成了(C, r x r x H x W), 也就是(C, rH, rW)

这就是公式(4)中的mod(y, r), mod(x, r);
SR图像中大像素与output中小像素的对应关系为在这里插入图片描述

训练的损失函数为pixel-wise MSE
在这里插入图片描述

你可能感兴趣的:(DeepLearning,深度学习,计算机视觉)