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层如下:
在这里插入图片描述
W是conv2D, ϕ \phi ϕ表示非线性激活函数。

最后一层就是把LR转换到SR空间。
公式如下:
在这里插入图片描述
公式不太好理解,用图来说明吧
在这里插入图片描述可看到经过前L-1层处理后,得到了shape为(N, r2C, H, W)的output,
现在要把它转换为shape为(N, C, rH, rW)的SR图像。

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

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

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

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

总结一下,pixel shuffle主要解决图像的上采样问题,那么如何通过深度学习来学到上采样的像素信息?作者把上采样的像素信息放在了channel里,用CNN的channel来储存信息。
通过把channel的信息展开,就得到了上采样之后的图像。

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值