超分任务中的转置卷积、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 在超分任务中比较主流,不过我实测发现跟其他的上采样方式效果差别不大,内存和计算速度上也没啥差别。

相关推荐
LaughingZhu3 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
高洁013 天前
未来三年,AI 落地的五个确定性判断一
人工智能·深度学习·机器学习·transformer·知识图谱
`流年づ3 天前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
成为深度学习高手3 天前
CrossLinear:即插即用的跨相关嵌入,让线性模型也能用好外生变量
人工智能·python·深度学习·数据挖掘
科技苑3 天前
如何打造一个高效的全栖内容制作生态系统?
深度学习
江屿风3 天前
【认识深度学习】【深度学习分类与计算机视觉任务要点解析】流食般投喂
大数据·人工智能·深度学习·计算机视觉·目标跟踪·自然语言处理·语音识别
童园管理札记3 天前
从政策驱动到课堂落地:2026年“人工智能+教育”全景解读与技术实践指南
人工智能·python·深度学习·职场和发展·学习方法
Ivanqhz4 天前
SVD++算法
java·服务器·网络·深度学习·神经网络