超分任务中的转置卷积、pixelshuffle 和插值上采样

前言

超分任务中,有两种上采用的方式:

  1. 先插值上采样,再进行卷积操作;
  2. 先卷积操作,再插值上采样。

一般随着训练的推进,2方法会比1方法获取更加高频且准确的信息,而且2方法比1方法计算开销小。下面讲讲常见上采样方式。

1. 转置卷积

以2维卷积来进行演示,输入一个4 x 4的单通道图像,卷积核取1个4 x 4的,假设这里取上采样比例为2,那么我们的目标就是恢复成一个8 x 8的单通道图像。

首先通过fractional indices从原input中创建一个sub-pixel图像,其中白色的像素点就是原input中的像素(在LR sapce中),灰色像素点则是通过zero padding而来的。

用一个4 x 4的卷积核来和刚才生成的sub-pixel图像进行stride=1的卷积,首先发现卷积核和sub-pixel图像中非零的像素进行了第一次有效卷积(图中紫色像素代表被激活的权重),然后我们将sub-pixels整体向右移动一格,让卷积核再进行一次卷积操作,会发现卷积核中蓝色像素的权重被激活,同理绿色和红色(注意这里是中间的那个8×8的sub-pixel图像中的白色像素点进行移动,而每次卷积的方式都相同)。

最后我们输出得到8 x 8的高分辨率图像(HR图像),HR图像和sub-pixel图像的大小是一致的,我们将其涂上颜色,颜色代表卷积核中权重和sub-pixel图像中哪个像素点进行了卷积 (也就是哪个权重对对应的像素进行了贡献)。最后我们输出得到8 x 8的高分辨率图像(HR图像),HR图像和sub-pixel图像的大小是一致的,我们将其涂上颜色,颜色代表卷积核中权重和sub-pixel图像中哪个像素点进行了卷积(也就是哪个权重对对应的像素进行了贡献)。

但是转置卷积很容易遇到一种叫做 "uneven overlap"(不均匀重叠) (棋盘格伪影)的现象. 具体来说, 当kernel_size 无法被 stride整除时, 反卷积就会出现这种不均匀重叠的现象。原则上,神经网络可以通过仔细学习权值来避免这种情况,但在实践中,神经网络很难完全避免这种情况。

2. pixelshuffle

上述卷积操作中,可以看出,紫、蓝、绿、红四部分是相互独立的,那么,可以将这个4 x 4的卷积核分成4个2 x 2的卷积核如下:

因此,我们可以直接对原始图像(未经过sub-pixel处理)直接进行2 x 2的卷积,并对输出进行周期筛选(periodic shuffling)来得到同样的8 x 8的高分辨率图像。

所以 pixelshuffle 讲白了就是将通道维度的数据拿来填充。本质在于学习通道插值的过程。

pytorch 中,定义为以下的类:

python 复制代码
class torch.nn.PixleShuffle(upscale_factor)

这里的upscale_factor就是放大的倍数,数据类型为int。

以四维输入(N,C,H,W)为例,Pixelshuffle会将为(b,C r^2,H,W)的Tensor给reshape成(b,C,rH,rW)的Tensor。形式化地说,它的输入输出的shape如下:

输入: (N,C x upscale_factor2 ^2 ,H,W)

输出: (N,C,H x upscale_factor,W x upscale_factor)

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

3. 插值上采样

用一般的upsample方法(最近邻, 双线性插值等)进行resize, 对特征图进行放大,然后在放大的特征图基础上进行卷积.

4. 总结

pixelshuffle 在超分任务中比较主流,不过我实测发现跟其他的上采样方式效果差别不大,内存和计算速度上也没啥差别。

相关推荐
麻雀无能为力1 小时前
深度学习计算
人工智能·深度学习
北诺南兮4 小时前
大模型算法面试笔记——多头潜在注意力(MLA)
笔记·深度学习·算法
Fuxiao___5 小时前
OpenVLA-OFT+ 在真实世界 ALOHA 机器人任务中的应用
人工智能·深度学习·计算机视觉
Dev7z5 小时前
基于Swin Transformer的肝脏肿瘤MRI图像分类与诊断系统
人工智能·深度学习·transformer
java1234_小锋6 小时前
PyTorch2 Python深度学习 - 张量(Tensor)的定义与操作
开发语言·python·深度学习·pytorch2
柚子味的羊7 小时前
TorchIO:超级好用的3D医学图像处理package
深度学习·医学图像处理·torchio
算法打盹中7 小时前
深入解析 Transformer 模型:以 ChatGPT 为例从词嵌入到输出预测的大语言模型核心工作机制
人工智能·深度学习·语言模型·chatgpt·transformer·1024程序员节
电鱼智能的电小鱼8 小时前
基于电鱼 ARM 工控机的井下设备运行状态监测方案——实时采集电机、电泵、皮带机等关键设备运行数据
arm开发·人工智能·嵌入式硬件·深度学习·机器学习·制造
xiao5kou4chang6kai48 小时前
如何通过机器学习(如K-means、SVM、决策树)与深度学习(如CNN、LSTM)模型,进行全球气候变化驱动因素的数据分析与趋势预测
深度学习·机器学习·kmeans·生态环境监测·全球气候变化
沉迷单车的追风少年9 小时前
Diffusion Model与视频超分(2):解读字节开源视频增强模型SeedVR2
人工智能·深度学习·aigc·音视频·强化学习·视频生成·视频超分