阅读论文《Deep Bilateral Learning for Real-Time Image Enhancement》
这篇论文提出了一种改进的图像增强方法,主要通过联合双边上采样(JBU)和双边引导上采样(BGU)来提升效果。论文的主要贡献包括:1. 通过学习低分辨率下的仿射变换来优化图像增强;2. 引入双边缘滤波器(JBU)和双边缘上采样(BGU)来保留边缘信息并减少计算量;3. 提出了一种融合全局特征和局部特征的网络架构,通过16×16的特征矩阵进行线性预测,最终生成高分辨率的增强图像。该方法在保持速度快的同时,能够有效消除图像 artifacts,展现出良好的应用效果。
这是2017 siggraph的一篇论文,寒假boss让我看这篇论文我没怎么看懂。最近在公司实习,发现该论文的成果已经移到手机端上了,效果还非常不错。这里我重新温习了一下这篇论文,发现有许多可以借鉴的地方,是一篇非常不错的论文,这里重新叙述一下,谈谈我的理解。
首先说一下这篇文章的整体思路,这篇文章对于图像增强的方法是,将图像首先做下采样,继续卷积下采样几次然后分别学习其全局特征和局部特征,并且结合之后再将其转换到双边网格之中。此外,对输入图像做仿射变换得到引导图,并将其用来引导前面的双边网格做空间和颜色深度上的插值,恢复到和原来图像一样大小。最后将得到的这个feature对原图像做仿射变换,得到输出图像。也就是说,整个过程就是再学习最后的那个变换矩阵。整体架构图如下所示:

在Introduction部分,论文提出其采用的三个核心策略,具体包括:
- 在低分辨率的双网格结构中进行预测,其中每个像素的x、y坐标以及第三维空间均能反映颜色特性,从而在对双网格进行切片操作时,能够有效考虑输入的颜色信息。
- 通过学习输入到输出的变换过程来优化输出结果,而非直接学习输入至输出空间的映射关系,这样整个网络结构的学习目标更加明确。
- 尽管主要操作集中在低分辨率层面上,但为了保持与原始分辨率图像的优化效果,论文在构建损失函数时采用了与原分辨率一致的空间采样策略。
本文在原有研究基础上进行了进一步优化,主要集中在联合双边上采样方法(JBU)的改进上。其中,双边滤波器被应用于高分辨率的引导图,以实现局部平滑的同时保留边缘的上采样。在BGU方法中,通过在双边网格内执行局部仿射变换,并结合引导图进行上采样。具体而言,该论文将BGU中的仿射变换操作通过神经网络进行参数化,从而实现了自适应的上采样效果。
本节内容主要探讨网络架构中主要关注的低分辨率仿射变换学习机制。在图像增强任务中,不仅需要考虑图像的局部特征,还需要深入分析整体特征。例如,直方图、平均亮度以及场景类别(实际上,这里的核心目的是消除仿射变换中的artifacts,单一的全局消除方法无法达到理想效果)。因此,本节将低分辨率特征划分为局部特征和全局特征两个分支路径,最终融合生成一个统一的特征表示,用于描述仿射变换的参数。而对于高分辨率特征部分,主要任务是在减少计算开销的前提下,尽可能保留更多的高频细节信息和边缘特征。为此,我们引入了基于双边网格的slicing节点,该节点在构建引导图的基础上,对低分辨率网格中的仿射变换系数执行与数据相关的查找操作,从而实现上采样过程,最终将变换参数应用到每个像素上,输出经过变换后的图像结果。
低分辨的特征提取
1.Low-level 特征
没有特别值得强调的地方,主要是对图像进行下采样处理,通过一系列stride=2的卷积操作来完成。在实际操作中,首先会对图像进行resize处理,使其尺寸变为256x256,然后再进行特征的下采样操作。公式如下:

在式中,I=1,…,n_S分别表示每个卷积层的索引,c和c′分别表示卷积层通道数的索引。卷积核权重矩阵W',偏置项b^i。激活函数σ采用ReLU,卷积操作采用零填充。
可以看出,图像被缩小了2^{n_S}倍,这具有双重作用:第一,促进模型对低分辨率输入以及最终网格中仿射系数的学习,网络深度越大,网格越粗糙;第二,调节预测结果的复杂度,网络层数越深,能够提取更复杂和抽象的特征。论文中设定网络深度为4层,每层卷积核大小为3x3。使用这种特征提取方法可以显著提升模型性能,如与采用硬编码球面投影对比实验所示。

2.局部特征
较高层次的特征经过进一步处理,经过n_L=2的卷积层进行进一步提取特征。通过设置stride=1,即这部分的分辨率保持不变,同时通道数也保持不变。因此,再加上前面Low-Lebel模块中使用的卷积层,总计共有n_L+n_S层卷积。若希望提高最后网格系数的分辨率,可以通过减少低层特征的stride并增加高层特征的stride来实现,这样总层数保持不变,网络的表现力也不会受到影响。当不具备局部特征时,预测出来的系数会失去空间位置信息。
3.全局特征
全局特征是对Low-Level特征的进一步发展,这里定义G^0:=S^{n_S}。它包含两个stride=2的卷积层,接着三个全连接层,因此,全局特征总计n_G=5层。需要注意的是,这些全连接层要求输入的特征大小是固定的。由于输入图像在特征提取前已被缩放至256x256,因此无需额外处理此问题。

4.融合和线性预测
该方法通过逐点放射变换融合全局和局部特征,通过relu函数进行激活运算,这本质上是仿射变换的叠加,如下式所示:

通过卷积神经网络处理后,得到一个16×16×64的特征矩阵,随后将其输入1×1的卷积层进行操作,输出特征图的空间维度保持为16×16,同时输出通道数为96。

网络的参数图如下所示:

将特征作为双边网格
上述得到的融合特征可以作为第三维已经展开的双边网格:

在本研究中,我们设定d=8,即网格的深度。通过该转换,矩阵A可以被视为一个16×16×8的双边网格,其中每个网格单元都包含一个3×4的仿射颜色变换矩阵。这种转换使得特征提取和操作均在双边域内进行,其对应地在x、y维度上执行卷积操作,通过学习z和c维度之间的相互融合特性。因此,与在双边网格中使用3D卷积相比,前面的特征提取操作表现出更强的表现力,因为后者仅能关联z维度。此外,该方法相较于一般的双边网格具有更好的效果,因为其仅关注c维度上的离散化特性。综上所述,即通过采用2D卷积并将最后一层作为双边网格,可以决定2D空间到3D空间的最优映射关系。
使用可训练的slicing layer进行上采样
这一步骤旨在将上一步骤生成的信息映射到输入图像的高分辨率空间中。通过在双网格结构中执行slicing操作,借助一个单通道的引导图对目标图像A进行上采样。具体而言,该过程利用A的系数进行三次线性插值,其中采样位置由引导图g决定。

这里的\tau(.)=max(1-|.|,0)定义了线性插值方式,其中s_x和s_y分别表示网格和全分辨率原图的高度与宽度比例。值得注意的是,每个像素都被赋予了一个特定的系数,这个系数在仿射变换中保持不变。在网格中,每个像素的深度由对应位置的引导图像素xd决定,具体表示为A_c[i,j,g[x,y]]。这一过程涉及将引导图与网格进行插值运算,插值后得到的每个像素深度值是引导图像素xd与网格深度的差值。值得注意的是,网格中的深度是一个3x4的仿射变换矩阵,插值过程对这个矩阵中的每个元素进行相同的操作,最终生成一个完整的3x4深度图。在实现这一过程时,slicing操作采用了OpenGL库进行优化,通过这一操作,输出图像的边缘得以遵循输入图的边缘,这种保边效果在对比反卷积效果时更加显著,具体效果可通过下图进行观察。通过这一方法,可以将复杂的全分辨率操作分解为许多简单的局部操作(即在每个网格单元内独立处理图像),从而显著提升了计算效率。

实现全分辨的最终输出
后续的处理流程在全分辨率状态下进行,针对输入图像I,提取其特征\phi,承担两个功能:首先,它们可以用于生成引导图g;其次,可以用于对上述得到的全分辨率局部仿射模型进行回归。
1.获得引导图的辅助网络
这里通过以下公式表达引导图的生成,即经过对原始图像的三个通道进行操作后进行叠加得到。

其中,颜色转换矩阵M_c^T由3x3的维度构成,偏置项b和b’分别代表输入和输出空间的偏移量。转换模块\rho_c是一个分段线性函数,包含多个阈值t_{c,i}和对应的梯度a_{c,i},这些参数通过16个relu激活单元的加和得到。

这里的参数M,a,t,b,b’均通过学习获得。值得注意的是,\rho被限定在[0,1]之间,以避免学习到退化的引导图。以下两个图分别展示了颜色转换矩阵以及基于学习获得的引导图的效果:


2.获得最终的输出
最后的输出可以看做是对输入特征做仿射变换后的结果,如下式:

进一步探讨了仿射变换中patch大小(即每个网格对应的像素范围)的影响。较小尺寸通常带来较好的效果,但计算速度较慢;较大尺寸则相反,计算速度加快但效果可能不如较小尺寸。3D双边网格可视化的结果显示,纵轴设置为深度d=8,其主要目的是进行颜色采样,横轴则表示仿射变换对应的值,如图所示。

其他
对比实验及结果这里不再写了,这里简要说一下其限制。通过进一步提取输入图的特征,可以增强其表现效果。例如,采用36个仿射变换系数作用于层级为3的高斯金字塔处理后的输入图,相较于原始的bilateral方法,虽然处理速度会有所降低,但其效果会更加显著,具体效果如图所示。

将该网络应用于增强任务的其他增强任务上,如色彩化、去雾、深度估计等任务的效果均较差,这是因为其基于假设,输出是由输入的局部仿射变换所得到。
参考:
<>
