作者|快乐
本文是香港理工大学章雷老师和他的学生在图像增强领域的又一项颠覆性成果。它将深度学习技术与传统的3DLUT图像增强技术相结合,获得了一种更加灵活高效的图像增强技术。该方法能以1.66 ms的速度增强4K分辨率的图像
论文:https://www4.comp.polyu.edu.hk/~cslzhang/paper/PAMI_LUT.pdf
代码:https://github.com/HuiZeng/Image-Adaptive-3DLUT
数字一(one)
摘要
近年来,基于学习的方法已经成为图像增强的主流方案。然而,这些图像增强方法要么效果不好,要么需要大量的计算量和内存占用,严重影响了这些方法在高分辨率图像中的实际应用。
本文提出了一种图像自适应三维查找表的图像增强方法,该方法具有超快的速度和稳健的增强效果。3DLUT是传统图像编辑领域的常用方案,但这些查找表往往需要手动调整和固化。本文首次提出了从标记数据集中学习3DLUT的成对/成对学习方法。更重要的是,学习后的3DLUT具有图像自适应的特点,可以灵活地增强图像。所提出的方法使用端到端的方式同时学习3DLUT和小网络。小网络用于根据输入图像学习查找表的融合权重,融合后的3DLUT应用于输入图像以获得期望的输出。所提出的方法仅包含少于600K的参数,并且可以以少于2ms的速度处理4K分辨率的图像。该方法具有超快的推理速度,也优于其他图像增强方法。
本文的贡献主要包括以下三点:
用深度学习的方法学习3DLUT并用于自动图像增强是第一个方案。更重要的是,该方法学习的3DLUT是自适应的,可以更灵活地用于图像增强。所提出的方法仅具有小于600K的参数,并且可以以小于2ms的速度处理4K分辨率的图像。在两个公共数据集上,它优于其他SOTA图像增强方案。
注射毒品
方法
上图是本文提出的方案的框架图,其中包括多个benchmark 3DLUT和一个小型CNN网络。参考3DLUT可以保证从输入到输出的颜色变换得到更好的包含,而CNN用于学习3DLUT的融合权重,将多个3DLUT融合成一个新的3dlut,最后将得到的3d lut用于图像变换。
3DLUT和三线性插值
3DLUT是一种经典、有效、应用广泛的图像增强技术。3DLUT的示意图如下图所示。3DLUT定义了一个包含20个元素的网格。每个都定义了输入RGB颜色和相应的输出RGB颜色,转换的精度由m控制。
给定m和索引RGB颜色可以通过均匀分散RGB颜色空来获得。不同的3DLUT具有不同的输出RGB颜色,这在所提出的方法中是可学习的参数。当M=33时,每个3DLUT包含108K个参数。
基于3DLUT的颜色变换可以通过两种操作来实现:查找和三线性插值。给定输入RGB颜色,可以通过以下公式执行查找操作:
其中,和表示颜色值。输入RGB颜色定位完成后,其八个最近邻将用于三线性插值,得到输出RGB。三次线性插值可描述如下:假设,,则三次插值公式如下:
其中就有。上面的三次插值过程是可微的,很容易推导出梯度。因为每个输入的三次插值结果是完全独立的,所以可以用GPU进行并行加速。
学习图像自适应3D LUTs
传统的基于3DLUT的图像增强方法主要有两个局限性:3DLUT多为手工设计,需要设计人员丰富的经验,耗费大量时间;一个3DLUT只能处理固定的变换,很难适应整个场景的变换。虽然现有的相机和图像编辑工具提供了多个lut集供用户手动选择以实现不同的增强效果,但这种交互模式不够灵活。
为了解决上面提到的第一个限制,作者提出使用数据驱动的方法来生成3 DLUT。为了解决上面提到的第二个限制,模型应该具有内容自适应的特性,所以作者提出了3DLUT来学习图像自适应。
一个很自然的想法就是通过场景分类来选择不同的3DLUT,这也是很多相机和图像编辑工具常用的方案。然而,这种硬决策方案有几个缺陷:很难将多种可能的场景正确地分类到预定义的类别中,因为不同的类别具有不同的3 dluts需要大量的3 dluts来尽可能的覆盖整个场景;分类器的训练独立于3DLUT,这导致了次优的组合方案。如果场景分类是错误的,所选择的3DLUT将很有可能产生非常差的结果。
在本文中,作者采用了一种更有效的学习图像自适应3DLUT的方法:同时学习N个3d lut和一个小的CNN模型。对于输入图像,其最终增强输出可描述如下:
并表示由CNN模型预测的内容自适应权重。该方法只需要少量的3 dluts进行图像变换,同时采用软加权策略获得图像内容的自适应变换效果。此外,考虑到像素变换的独立性,上述操作可以进一步简化如下:
即可以先进行3DLUT融合,再进行图像变换。这种处理方法进一步提高了该方法的推理速度。下表显示了所提出的方法中的CNN模型的参数配置,其包括五个卷积、一个丢弃层和一个全连接层。整个CNN模型包含269个参数。
学习标准
接下来,介绍优化的目标函数。目标函数定义如下:
其中表示了CNN模型和3DLUT,并表示了一些损失函数和正则化项。
如上所述,所提出的方法可以用成对数据或非成对数据来训练。我们先来看看配对训练的损失函数。这是一个简单的常规损失函数,如L1、均方误差等。这里,作者选择了一个简单的MSE损失函数,其定义如下
接下来,我们来看看不成对数据的损失函数。这里借鉴了GAN的思想来训练不成对的数据。前面提到的3DLUT和CNN可以看作是生成器,只需要引入一个鉴别器。此时,发电机通过以下损耗进行训练:
其中就有。鉴频器的损耗函数定义如下:
其中,前两项是标准判别损失,最后一项是用于稳定性训练的梯度惩罚项。那么总损失函数定义为:
正规化
我们可以用前面提到的损耗和SGD/Adam优化器来训练3DLUT和CNN。但是得到的3DLUT有不平滑的现象,如下图A所示。这种局部陡峭的现象将导致变换图像中的伪像。为了使学习到的3DLUT更加稳定和鲁棒,作者引入了两个正则化项。
平滑正则化.为了将输入RGB稳定地变换到期望的颜色空而不引入伪像,3DLUT的输出RGB应该具有局部平滑度。全变差(TV)是图像恢复领域中一种经典的平滑正则化技术。作者将其引入3DLUT。此时TV正则化的定义如下:除了3DLUT的光滑度,CNN预测的内容自适应权重也很重要,作者还引入了正则化来提高得到的3DLUT的光滑度。的总平滑正则项描述如下:
单调性正则化.除了光滑性,单调性也适合作为3DLUT应该具备的一个属性。为此,作者设计了以下单调正则项:它代表了标准的ReLU运算。
最终培训损失和实施
通过整合上述两个正则项,最终损失函数定义如下:
其中就有。
实现方面,基本框架是Pytorch,三线性插值用CUDA并行实现。训练优化器为Adam,Batch=1,学习率固定为0.0001和0.0002,随机切割、随机镜像等数据增强。n 3 dluts的初始化如下:第一个是全同映射,其他初始化为0。CNN全连接层的bias初始化为1,保证初始阶段的权重预测为1。
3
实验
培训:麻省理工学院-Adobe FiveK,HDR+。评估标准:SSIM PSNR。直接看结果吧。
下图显示了使用建议的方法由三个不同的图像生成的3DLUT以及最终的增强结果。可以看出,该方法生成的结果比固定3DLUT更灵活,效果更好。
下图展示了在FiveK数据集上,提出的方法和其他SOTA方法的指标对比和视觉效果。可以看出,提出的方法不仅具有更好的指标,而且具有更好的视觉效果。
下面比较了所提出的方法和其他SOTA方法在HDR+数据集上的指数和视觉效果。
同时,作者也给出了不同图像编辑工具和提出方法的处理效果对比,如下图所示。
最后,作者给出了不同图像增强方法的推理速度对比,如下图所示。还有比这个速度更神奇的吗?当以1.66ms的速度处理4K图像时,我只能表达我的感受,但我不能快速响应。
这是全文的结尾。对其感兴趣的同学建议阅读原文。最后,期待作者尽快开放源代码。
NeurIPS 2020就业结果已经发布,欢迎各位作者投稿。