20231106
链接:2012.09161.pdf (arxiv.org)
1.为了解决什么问题?
现实视觉世界是连续的,但是我们存放在计算机中的图像却是以离散的二维像素阵列存在。如果我们想训练一个卷积神经网路,我们通常需要将图像调整到相同的大小,这样会牺牲保真度。
2.现有方法瓶颈
现有的隐式神经表征在3D重建任务上取得了成功,但是基于编码器的隐式神经表示方法仅成功表示数字等简单图像,无法表示高保真度的自然图像。
3.本文解决方案
论文中说,他们将图像表示为一组分布在空间维度上的潜在代码。给定一个坐标,解码函数获取坐标信息并查询该坐标周围的局部潜在码作为输入,将预测得出给定坐标的RGB值作为输出。由于坐标是连续的,LIIF可以表示任意分辨率。
!
文中通过具有超分辨率的自监督任务训练具有LIIF表示的编码器,编码器的输入和ground-truth的上采样尺度是连续不断变化的。
4.文章的创新
1.一种连续表示自然和复杂图像的新方法。2.LIIF表示可以表示在训练时没有呈现的更高的分辨率上。3.LIIF表示对于具有大小变化的图像学习任务是有效的。
5.LIIF
在LIIF中,每个连续图像\(I^{(i)}\)被表示为一个二维特征图\(\begin{aligned}M^{(i)}\in\mathbb{R}^{H\times W\times D}\end{aligned}\)。解码函数\(f_\theta\text{ (with }\theta\text{ as its parameters)}\)被所有图片共享,其被参数化为MLP,形式为:
\[s=f_\theta(z,x) \]其中\(z\)是一个向量,\(x\in\mathcal{X}\)为连续图像域中的二维坐标。\(s\in{\mathcal{S}}\)是预测的信号(即RGB值)。
在实验中,假设\(x\)的范围是二维的\([0,2H]\)和\([0,2W]\)。
对于一个定义的\(f_\theta\),每个向量\(z\)可以被认为代表一个函数\(\begin{aligned}f_\theta(z,\cdot):\mathcal{X}\mapsto\mathcal{S}\end{aligned}\),即将坐标映射到RGB值的函数。我们假设\(M^{(i)}\)的\(H\times W\)个特征向量(后面称为潜编码)均匀分布在连续图像域\(I^{(i)}\)的二维空间中(如下图的蓝色圆圈)。
我们为每个特征向量分配一个二维坐标,对于连续图像\(I^{(i)}\),定义在坐标\(x_q\)处的RGB值为:
\[I^{(i)}(x_q)=f_\theta(z^*,x_q-v^*) \]其中\(\text{z*}\)是\(M^{(i)}\)中距离\(x_q\)最近(欧几里得距离)的潜编码,\(\text{v*}\)是潜编码\(\text{z*}\)在图像域的坐标。以上图为例,\(z_{11}^*\)是\(x_{q}\)的\(z^*\),\(v^{*}\)定义为\(z_{11}^*\)的坐标。
使用所有函数共享的函数\(f_{\theta}\),将连续图像表示为一个二维特征图\(M^{(i)}\in\mathbb{R}^{H\times W\times D}\),其被视为\(H\times W\)个潜在代码在2D域中均匀分布。\(\mathop{\mathrm{~}}M^{(i)}\)中每个潜在代码\(z\)表示连续图像的局部片段,负责预测最接近其自身坐标集的信号(如RGB)。
5.1 Feature unfloding
为了丰富\(M^{(i)}\)中的每一个潜在编码的信息丰富程度,我们将\(M^{(i)}\)扩展为\(\hat{M}^{(i)}\)。
在\(\hat{M}^{(i)}\)中,每个潜在编码都变成了原本\(M^{(i)}\)中\(3*3\)相邻的潜在编码的串联。形式上,特征展开被定义为:
对于\(M^{(i)}\)中超出边界的部分直接补0。Feature unfolding后,所有的计算都由\(\hat{M}^{(i)}\)进行。
5.2 局部ensemble
对于式子:
\[\begin{aligned}I^{(i)}(x_{q})=f_{\theta}(z^{*},x_{q}-v^{*})\end{aligned} \]存在预测不连续的问题。如上图中所显示的那样,由于在\(x_{q}\)区域的预测是通过查询其最近的潜在编码来得到\(z^{*}\)的,那么在虚线附近会出现\(z^{*}\)突变的情况。只要\(\boldsymbol{f}_{\theta}\)没有非常完美,对一次跨越虚线的情况都会产生目视效果上的不连续感。
为了解决这个问题,于是将上式改写为:
其中,\(z_t^*\)表示左上、右上、左下、右下四个位置的潜在编码,\(v_{t}^{*}\)是\(z_t^*\)的坐标,\(S_{t}\)表示 \(x_{q}\)和\(v_{t^{\prime}}^{*}\)之间的矩阵,而\(t^{\prime}\)与\(\text{t}\)呈对角关系。
我们事先已经认为潜在特征将在边界外被镜像地填充,因此,上式对于边界附近的坐标也是适用的。
直观上讲,这样做的目的是使得由局部潜在编码所表示的局部片段能够和其周围的局部片段有所重合,进而使得每一个坐标处都有四个独立的潜在编码对其进行独立的预测,且这四个独立预测的结果将进行加权,即为最终的预测结果。
这样就可以在\(z^{*}\)进行变换的时候实现平滑过渡。
5.3 Cell decoding
在实践中,我们希望LILF能够以任意分辨率进行表达。假设我们已经给定了想要的分辨率,那么一种直观的方法就是直接通过\(I^{(i)}\left(x\right)\)的方式来查询像素中心的RGB值。尽管这样的做法已经可以工作的很好了,但是并不是最优的,因为对于某一个查询像素的RGB值和它的size是无关的,而在其分辨率的像素范围内的其他信息却都被丢掉了(除了中心位置)。
为了解决这个问题,文章提出了“cell decoding”,示意图如下所示:
且将\(s=f_\theta(z,x)\)改写为:
\[s=f_\text{cell }(z,[x,c]) \]其中,\(c=[c_{h},c_{w}]\)包含了指定像素的高与宽,\([x,c]\)则表示\(x\)与\(c\)的concat。
在进行连续表达的时候,实验会证明,额外给定一个c的输入是有所裨益的。
6.学习连续的图像表达
学习连续的图像表达的流程示意图为:
在该任务中,训练集为一系列的影像,目标是为一个网络没见过的图片生成连续的表达。
通常的思想是首先训练一个编码器\(E_{\varphi}\),该编码器将影像映射为一个2D的特征图,该2D特征图与LIIF的表达是一致的。而\(f_{\theta}\)对于所有的影像来说,是共享的函数。
自然,我们希望LIIF不仅仅能够很好地表达输入,更重要的是能够形成一个连续的表达,希望其能够在高分辨率下也能够保证高保真,因此,文章设计了超分的自监督任务。
现在,我们对上图中的流程进行详细的描述,对于一张训练图像来说,首先对其进行随机尺度的下采样,作为网络的输入。而GT的获取则是通过将训练影像表示为像素样本 、\(x_{hr}\)、\(s_{hr}\),其中\(x_{hr}\)是像素在影像域的中心坐标,\(s_{hr}\)则为对应的RGB值。编码器\(E_{\varphi}\)将输入的图像映射为一个2D的特征图,该2D特征图将被作为LIIF中的隐含编码。而坐标\(x_{hr}\)则被用于查询\(LIIF\)表达中的值,\(f_{\theta}\)则用于输出对应坐标的RGB值。不妨设\(s_{pred}\)为预测的RGB值,训练损失(在实验中使用了L1损失)在\(s_{pred}\)与GT\(s_{hr}\)之间进行计算。此外,在进行cell decoding的操作时,我们将\(x\)替换为\([x,c]\)。