深入理解——亚像素 / sub-pixel、亚像素卷积

近段时间需要用到亚像素卷积的知识,因此上网查阅了论文和资料,此文是根据网上的博文以及相关论文,依据个人的理解整理而来。

总而言之,拾人牙慧而已。

Content

  • 1 亚像素的定义
    • 1.1 亚像素理解
    • 1.2 何谓亚像素?
    • 1.3 何谓亚像素精度?
  • 2 图像处理中的sub-pixel是什么意思?
  • 3 PixelShuffle
  • 参考文献

1 亚像素的定义

下面的内容引自1-2

1.1 亚像素理解

在相机成像的过程中,获得的图像数据是将图像进行了离散化的处理,由于感光元件本身的能力限制,到成像面上每个像素只代表附近的颜色。例如两个感官原件上的像素之间有4.5um的间距,宏观上它们是连在一起的,微观上它们之间还有无数微小的东西存在,这些存在于两个实际物理像素之间的像素,就被称为“亚像素”。

亚像素实际上应该是存在的,只是缺少更小的传感器将其检测出来而已,因此只能在软件上将其近似计算出来。

如下图所示,每四个红色点围成的矩形区域为实际原件上的像素点,黑色点为亚像素点:
在这里插入图片描述
根据相邻两像素之间插值情况的不同,可以调整亚像素的精度,例如四分之一,就是将每个像素从横向和纵向上当做四个像素点。也就是上面图里的红色点之间有三个黑色点。这样通过亚像素插值的方法可以实现从小矩形到大矩形的映射,从而提高分辨率。

正因为这样的操作,所以在图像超分辨的任务里使用pixel shuffle的方式获得高分辨图像(例如ESPCN)。在一般的反卷积里会存在大量补0的区域,这可能对结果有害。因此pixel shuffle通过亚像素卷积的方式,实现从低分辨图到高分辨图的重构,具体如下所示,通过将多通道feature上的单个像素组合成一个feature上的单位即可,每个feature上的像素就相当于新的feature上的亚像素了。
在这里插入图片描述

下面的内容引自 4

1.2 何谓亚像素?

面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其像素间距为5.2微米。摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。至于“附近”到什么程度?就很困难解释。两个像素之间有5.2微米的距离,在宏观上可以看作是连在一起的。但是在微观上,它们之间还有无限的更小的东西存在。这个更小的东西我们称它为“亚像素”。实际上“亚像素”应该是存在的,只是硬件上没有个细微的传感器把它检测出来。于是软件上把它近似地计算出来。

为了最大限度利用图像信息来提高分辨率,有人提出了Sub-Pixel概念。意思是说,在两个物理像素之间还有像素,称之为Sub-Pixel。

如果原始图像是n行m列的,希望做k细分的Sub-Pixel,这样就有新的行N和列M,有
N = kn
M = k
m
原来相邻4个像素包含的区域现在变成了(k+1)(k+1)的区域了;要填满这个(k+1)(k+1)的区域,从一个小正方形映照到一个大正方形。

1.3 何谓亚像素精度?

亚像素精度是指相邻两像素之间细分情况。输入值通常为二分之一,三分之一或四分之一。这意味着每个像素将被分为更小的单元从而对这些更小的单元实施插值算法。例如,如果选择四分之一,就相当于每个像素在横向和纵向上都被当作四个像素来计算。
在这里插入图片描述
在这里插入图片描述

由上图可知,检测结果为对“插值后图像”处理的结果,由于图像分辨率提高了一倍,故用于表示小圆直径的像素数量也增加了一倍,这就是一阶亚像素元技术。我们在每两个像素之间插值一个像素,这样本来是120万像素的图像,插值后的实际处理图像就是240万像素了,相当于把一个像素拆分为1/2,同理依次有1/3拆分、1/4拆分等,一些优秀的算法甚至可以达到1/100拆分,同时还能保证处理速度。

2 图像处理中的sub-pixel是什么意思?

下面的内容引自 3-5
推特的图像超像素论文(ESPCN)中提到的sub-pixel convolutional neural network是如何实现的?

亚像素卷积,是一种正常卷积的简化形式,并加了很强的假设,结果就是去除了大量的卷积运算。

亚像素卷积的结果一般是一张更大的图片,可用作超分辨率。

一个正常的反 / 逆 / 转置卷积长这样:
在这里插入图片描述
把一个3x3的小图片变成一个5X5的大图片。白色虚线区域全填0。

提出sub-pixel的作者认为,这些白色的填0区域,是无效信息,甚至对求梯度优化有害处。明明可以直接从原图得到信息,何必非要填0呢。
在这里插入图片描述
第一个白色矩阵图片是输入层。 第二、第三个白色张量是隐藏层,做步长为1的正常卷积。 第四个彩色图片,经过子像素卷积,得到最后一张斑斓的大图。

3 PixelShuffle

下面的内容引自 6
PixelShuffle是一种上采样方法,可以对缩小后的特征图进行有效的放大。
可以替代插值或解卷积的方法实现相应倍数的upscale

PixelShuffle(像素重组)的主要功能是将低分辨的特征图,通过卷积和多通道间的重组得到高分辨率的特征图。这一方法最初是为了解决图像超分辨率问题而提出的,这种称为Sub-Pixel Convolutional Neural Network的方法成为了上采样的有效手段。
在这里插入图片描述
要把一张低分辨输入转变为高分辨输出,论文ESPCN中提出用基于特征抽取和亚像素卷积的方法来扩大特征图,将特征图从低分辨空间转换到高分辨空间中去。

上图中左侧第一部分是用于对图像的特征进行抽取。而后在倒数第二层生成 r*r 个通道特征图,这里 r 就是希望上采样的倍数

pixelshuffle的主要功能就是将这 r*r 个通道的特征图组合为新的 w?r,h?r 的上采样结果。具体来说,就是将原来一个低分辨的像素划分为rr个更小的格子,利用rr个特征图对应位置的值按照一定的规则来填充这些小格子。按照同样的规则将每个低分辨像素划分出的小格子填满就完成了重组过程。在这一过程中模型可以调整 r*rshuffle通道权重 不断优化生成的结果。

主要实现了这样的功能:N * (C * r * r) * W * H ——>> N * C * (H * r) * (W * r)

利用这些方法可以来改进特征图上采样过程中出现的问题,特别是在图像超分辨和图像增强的算法中需要对特征图进行上下采样的过程,可以解决插值和解卷积的一些人工痕迹问题。

参考文献

[1] 亚像素
[2] 亚像素理解
[3] 图像处理中的subpixel是什么意思?
[4] 亚像素与halcon
[5] Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network
[6] PixelShuffle特征图的上采样的方法