论文笔记 | 使用深度光照场估计对欠曝光照片进行增强

Underexposed Photo Enhancement using Deep Illumination Estimation | CVPR 2019

工作

  1. 提出了一个通过估计出一个图像到光照的映射来对欠曝光图像进行增强,并在各种光照约束和先验的基础上设计新的损失函数
  2. 准备了一个新的数据集,含有3000张欠曝光的图像,每张图像都经过专业修复
  3. 对所提出的模型在现有的数据和新数据集上进行测试,显示出该方法在质量和处理数量上的优势

方法

图像增强模型

  1. 图像增强任务可以被认为是找到一个函数F使得输入待处理的图像得到目标图像,在最近的基于 Retinex (???) 的方法中,F的反函数被典型地定义为一个光照映射S,与目标图像进行点积得到原图像:在这里插入图片描述
    因此得到S,即可通过其反函数得到F,那么与现有的方法不同的是,作者将S设计为多通道的数据,而不是单通道,来提高其在颜色增强上的效果,尤其是兼顾了不同颜色通道间关联的非线性特点。通过引入作为中间量的光场(Illumination)图,作者训练网络来学习从图像到光照的映射,这样做的优势在于对于自然图像的光照场来讲,其在先验上有相对简洁的表现形式,因此网络可以有更强的泛化能力(???)并且可以有效的针对不同的光照条件实现复杂的摄影增强效果。模型也具有通过设定光照约束对增强效果进行定制化的能力,比如通过对光场进行局部平滑来增强对比度,或着设定偏好的曝光级别来约束光照强度。

网络结构

论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第1张图片

网络结构:输入图像经过resize后(根据代码应该是256x256),通过VGG编码器后分别提取局部和全局特征,并输出低分辨率的光场预测,经过Bilateral Grid Based Upsampling获得高分辨率光场图S,原始图像经过与S逐点相除后得到增强后的图像。

其中值得注意的是, 作者将特征的提取过程分解为全局和局部特征,并用于生成低分辨率的光场图,并采用基于 bilateral grid 的上采样来获得原始分辨率的预测结构,使得大部分的计算是在低分辨率的特征图上进行,提高处理效率。

损失设置

  1. 重建损失:使用L2范数,并规定:
    在这里插入图片描述
    下方的不等式约束是对光场数据的范围进行限制,使得在根据:
    在这里插入图片描述
    进行点积后生成的矩阵中的值上限为1,并且避免S存在大于1的情况,也就是取倒数后使得计算后已经欠曝光的区域更暗。
  2. 平滑损失:使用各个通道图像的梯度累加值:
    特别的是,在计算各点梯度时,考虑到保持局部区域的平滑度,因此设置系数为:
    在这里插入图片描述
    使得损失值的权重在像素亮度变化较小的区域更大,在变化较大的区域则保持离散,基于作者的设想,图像中的欠曝光区域通常亮度变化较小,细节较弱,而大的图像梯度通常是因为场景中不一致的光照条件导致(比如逆光,物体边缘)
  3. 色彩损失:计算合成图像与目标图像间像素RGB颜色向量的夹角,作者未采用L2距离的原因一是重建损失中已经潜在地利用了L2损失,二是L2损失只强调各分量差值的累计,而没有关注颜色向量的方向。并且该方法同样简洁并且快速。
  4. 对比实验显示各项损失所起到的作用:论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第2张图片

训练数据

  1. 作者准备了一个新的含有3000个带标注的图像的数据集,而不是MIT-Adobe FiveK,所给出的原因是后者本身是用于增强普通照片,而不是单纯的欠曝光照片,并且其中只有很小一部分(4%)是欠曝光照片。另外其数据集的光照场景有限,缺少更有难度的比如夜景和非均匀光照条件下的照片。
  2. 具体的数据信息包括:6000x4000分辨率,来自佳能EOS 5D Mark 3和索尼 ILCE-7和Flickr,并请摄影学院的专家进行调整。数据的多样性较好。其中2750张用于训练。

测试结果

  1. 作者分别在上述两个数据集上进行训练,针对两个常用的指标PSNR(,峰值信噪比)和SSIM(结构相似度)进行评估,以下分别是在自制数据集和Adobe数据集的对比:
    论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第3张图片论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第4张图片

  2. 视觉对比:
    作者认为该模型在对比度,细节,色彩还原的自然度上相比其他方法有优势

  3. 用户评价:
    作者向500位参与者征集评分,通过从Flickr采集100张包含各种场景的,并且50%的像素亮度都低于0.3的图像进行测试,用不同的增强方法进行处理,针对6项问题收集参与者评分:
    论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第5张图片

  4. 出现的问题:
    论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第6张图片
    上图展示了该方法,也是其他许多方法都存在的问题,一是对于大面积黑色缺乏纹理的区域,不能做到很好的细节还原;二是处理后的结果存在明显噪声的情况。

Bilateral Grid Based Upsampling

Bilateral Filter

文章中的 Bilateral Grid Based Upsampling 的主要任务是将生成的低分辨率illumination上采样至原分辨率,是图像增强中常见的操作,即考虑到计算耗时,而避免图像增强算子直接在高分辨率图像上进行处理,转而采用将原图下采样到较小的尺寸,经过增强后再上采样至原尺寸,而两次缩放常会导致图像的失真,而基于Bilateral Grid 的上采样方式则在保持低计算量的前提下尽量减少图像数据的损失。Bilateral 指代在图像增强中的一种模式:

论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第7张图片

J表示目标图像,p,q表示图上的坐标,w是与位置有关的权重,而Bilateral Filter的最初形式中,w(p,q)表示为位置坐标间、亮度值间距离的高斯函数值的乘积,其中Bilateral指将亮度空间和位置空间的结合,权重w的计算表示为:

其中g表示高斯函数,计算时q的取值在一个固定大小的窗口范围内,也就是目标图像上一点的像素值与原图上该像素局部各像素的加权和,而之后出现了一些加速算法,典型的是将亮度值作为一个单独的第三个维度。之后又出现了Bilateral Grid,即将空间域和亮度域离散化,形成一个三维的网格,而图像增强的过程在每个网格中可以被近似为一个矩阵运算,该思路发展出了Bilateral Guided Upsample

Joint Bilateral Upsample

在Bilateral Guided Upsample之前,先看一下Joint Bilateral Upsample可能更有助于理解:

求和部分在一个窗口中,采用低分图上的对应的p,q坐标计算有关位置的高斯函数值,采用原图上的p,q位置的像素值计算有关亮度的高斯函数值,即Joint的由来

Bilateral Guided Upsample

核心思路:

  1. 将滤镜在局部区域看作一个线性变换
  2. 利用Bilateral Grid从低分图经过slice操作得到高分结果
  3. 上采样过程中,目标图像上的像素是原图像素在经过对应grid的线性变换后得到,相比一般的插值方式得到的结果在细节上的损失更小
论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第8张图片

这幅图表现了在应用图像增强前后,局部的亮度值的变化情况,比如红框中,增强前后的像素值的映射近似为线性关系,Bilateral Grid中存放的就是对增强算子的函数的近似,在此被简化为一个线性运算,用一个3*4的矩阵表示。
论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第9张图片
该图左侧是采用局部拉普拉斯滤波器进行对比度增强,右侧表示了在不同大小的邻域中,增强前后的亮度值的对应情况,显示在邻域较小时,即使对一个复杂的算子,也可以近似视为一个平滑的曲线,而随着邻域增大,这种关系则变得不明显。
下图左侧是从2维图像中截取一行像素的亮度值表示,以及在只使用数据本身得到的对三种不同的增强算子的仿射变换的拟合值的情况,右侧是在使用平滑操作后,grid中仿射变换的情况:

论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第10张图片 论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第11张图片

总体来说,BGU的流程是首先将高分辨率图像进行降采样,在低分辨率图像中应用图像增强的算子,再从低分图像对中得到低分辨率下的 bilateral grid,随后在原始分辨率图像作为guid,进行slice(这里是三线性插值)得到原始分辨率的颜色转换,最后将转换应用在原始图像上获得增强的高分辨率图像。而 bilateral grid 的求解,作者介绍了两种方法:

  1. 对一个最小二乘问题进行优化,能量函数定义为数据损失和平滑项的和:
论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第12张图片

第一项是在低分辨率图像上进行slice和增强图像的生成,再与使用增强算子或其他增强方法得到的图像作差,后面三项为grid中的仿射变换在空间和亮度维度下的平滑度。

Retinex

  • (该部分移步:原文地址)

HDRNet

本文的网络结构与同用于图像增强的HDRNet相似,在HDRNet中对Bilateral Grid Based Upsample有更详细的描述。
移动图像处理中的一个关键挑战是性能。给定参考成像流程,甚至人工调整的图像对,作者尝试重现增强功能,并实现实时评估,为此引入了一种新的神经网络,灵感来自双边网格处理和局部仿射颜色变换。使用输入/输出图像对,训练一个卷积神经网络来预测双边空间中局部放射模型的系数。学习做出局部、全局和内容相关决策,以近似所需的图像转换。在运行时,神经网络会使用输入图像的低分辨率版本,在双边空间中生成一组仿射变换,使用新的切片节点以边缘保留方式对这些转换进行采样,然后将这些向上采样的转换应用于全分辨率图像。

该算法可在智能手机上实现毫秒级处理高分辨率图像,提供 1080p 分辨率的实时取景器,可获得许多种最先进图像算子的近似质量。与以前的工作不同,其不需要在运行时访问原始的算子。这允许该模型学习复杂的、依赖于场景的转换,这些转换通常缺乏足够的参考可用,例如修图师的摄影编辑。

相机和移动设备产生的高分辨率的图像和视频使图像处理算法面临巨大的性能压力,需要熟练的程序员进行复杂的代码优化。虽然执行系统的贡献已经试图促进高性能可执行文件的实现,但它们需要程序员的专业知识,它们的运行时间成本仍然随着流水线的复杂性而增长,而且它们只有在过滤器的源代码可用时才适用。此外,由于图像增强是主观的,因此通常希望直接从人类调整中学习增强模型,而作者提出了一种机器学习的方法,通过深度网络学习参考滤镜、流水线、甚至主观手动调整照片的效果,可以快速评估,且成本不受其复杂性的影响。我们专注于不对图像进行空间扭曲或添加新的边缘的摄影增强。

作者提出了一种新的网络架构,能够学习丰富的摄影图像增强功能,并能在高分辨率输入上快速评估,通过三个关键策略来实现这一目标。

  1. 引入低分辨率下的Bilateral Grid,其中每个像素的x,y坐标被增强了一个第三维的像素颜色的函数。为了做到这一点,引入了一个新的deep learning节点,执行数据依赖性查找。这使得所谓的slice操作得以实现,它通过考虑像素的输入颜色以及像素的x,y位置,从三维双边网格中重构一个全分辨率的变换图,再对原始图像上应用该变换,获得增强后的图像
  2. 我们遵循先前的工作观察到,从输入到输出的转换往往比直接预测输出更简单,所以采用学习中间层表示,通过一个新的乘法节点将局部的仿射色变换从输入得到增强后的结果
  3. 虽然我们的学习和推理大部分是在低分辨率下进行的,但训练过程中使用的损耗函数是在全分辨率下评估的,这使得我们学习的低分辨率变换直接优化了对高分辨率图像的影响

相关工作

尽管图像增强算法一直是研究的重点,但大多数复杂的算法都很吃资源,无法在移动设备上快速评估,之前的工作已经确定了特定的关键操作,并开发了新的算法来加速这些操作。例如卷积金字塔来加速线性线性平移变量滤波器。同样的,由于边缘感知图像处理的无处不在,许多方法也被提出来加速双边滤波。简单的重采样通常会导致一个无法接受的模糊输出,但这个问题通常可以通过使用一个更复杂的重采样技术来解决。Bilateral Joint Sampling 通过在高分辨率引导图上使用双边滤波器来产生一个片状平滑的边缘感知取样。基于这一思想,通过在双边网格内求解一个紧凑的优化问题,产生最大限度平滑的上采样结果。

Gharbi et al.[2015]专注于学习从input到output的转换,而不是output本身。他们用一个简单的局部模型集合,一个为给定的输入/输出对量身定做的简单的局部模型,近似了一大类复杂的、空间变化的算子。计算算子和拟合公式的任务被放到云端,而移动设备只需要应用公式,从而节省了时间和精力。类似地,Chen用双边空间中的局部affine模型网格近似于图像算子,其参数以类似于引导式滤波器的方式拟合到input/output pair。通过在低分辨率的图像对上执行这种模型拟合,这种技术可以实现实时的设备上计算。

作者的不同之处在于,没有从一对图像中拟合一个模型来近似一个算子的单一实例,而是构建了一个类似于CNN的模型,该模型被训练成将算子应用于任何未见过的输入。这使得我们在运行时不需要原始算子,并提供了学习非算法转换(即手工调整输入/输出图像对)的机会。这也使我们能够优化仿射系数,使算子在全分辨率下运行时的算子模型化,这对随比例尺变化的滤波器来说很重要。

具体工作

提出了一种新的卷积网络架构,可以用来进行快速图像增强,其具有很强的表现力,保留了边缘,并且在全分辨率下只需要有限的计算量。它是完全端到端训练。根据作者的经验,图像增强往往不仅取决于局部图像特征,而且还取决于全局图像特征,如直方图、平均强度甚至场景类别。因此,我们的低分辨率流被进一步拆分为局部路径和全局路径。高分辨率流在全分辨率下工作,执行最小的计算量,但其关键作用是捕捉高频效应,并在需要时保留边缘。为了实现这个目的,我们引入了一个受双边网格处理启发的slicing层,在低分辨率网格的仿射系数的网格中基于学习的引导图执行数据依赖性的查找。考虑到通过用全分辨率引导图对网络习得的低分辨率bilateral grid进行slicing操作获得的高分辨率仿射变换系数,我们对每个像素应用局部颜色变换,来产生最终的输出。这意味着低分辨率流只处理大量的下采样数据,但仍然可以学习中间特征和仿射系数,以重现高频效应。

作者的工作减轻了Chen等人的Bilateral Guided Upsampling [2016]中的参考滤波器在运行时的需求。从某种意义上说,我们寻求的是在给定一个低分辨率版本的图像,预测双边网格中的仿射变换系数。相当于是对各类非线性图像增强算子进行的一个局部的拟合,进而简化了运算,但与同类方法不同的是,所获得的低分辨率bilateral grid不是通过类似Bilateral Guided Upsample中的解决一个线性最小二乘问题所获得,二是完全通过卷积神经网络学习得到。最后损失函数方面,作者不是在仿射系数上应用损耗函数,而是在全分辨率下的最终图像上应用损耗函数,这使我们能够在大部分流程在低分辨率数据上进行的同时,避免丢失高频信息。

流程

论文笔记 | 使用深度光照场估计对欠曝光照片进行增强_第13张图片
解释:

  1. 高分辨率图像降采样为256*256分辨率输入,通过卷积神经网络进行进一步降采样,输入分别使用全卷积网络和全连接层学习局部的和全局的特征
  2. 通过一个像素级的线性计算将局部和全局特征进行融合,作为bilateral grid的仿射变换的系数,其维度为16*16* 8,每个网格中是一个3*4的变换矩阵
  3. 使用从高分辨率图中获得的灰度图guid image (在原文中使用的是RGB通道,作者提出也可以使用经过学习得到的高分辨率特征图,效果会更好但也更耗时),与低分辨率的 bilateral grid进行一个slicing操作,具体是进行了一次三线性插值(可以类比双线性插值,加上了亮度这一维度): 在这里插入图片描述
  4. slicing 获得的输出是高分辨率的per-pixel的变换矩阵的集合,然后在原图的各通道上应用该变换,得到目标增强图像
  5. 关于为何要进行一次slicing获得高分辨率的变换,而不是类似Joint Bilateral Upsample,直接使用低分辨率的grid在原分辨率图像上应用变换,还是没看懂,对slice这个操作还是理解的不到位惹。

你可能感兴趣的:(计算机视觉,深度学习)