阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation

这篇文章做了啥?

图像的增强,给定图像比较暗,通过增强的操作来增加欠曝光的图像的亮度。
和以往的图像到图像的生成不太一样,这篇文章首先产生了三个亮度的通道,用这三个亮度的通道的逆去乘原图像,得到的最后增强之后的图像
图像增强是一个非线性的过程,尽管很多图像处理软件可以对图像进行增强,但是需要非常专业的能力。一些手机软件提供了自动图像增强的能力,但是这种能力对于弱曝光的图像处理的并不是特别好
最近的深度学习算法能够解决这个问题,但是他们解决这个问题的能力不是特别好,作者举了以下几个例子(说不清楚具体比别人好在哪里的时候,举例子之后再分析可能是一个比较好的切入点)
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation

作者认为的创新之处

作者提出了一个端到端的用于欠曝光图像增强的网络结构,相对于图像到图像的预测,这个网络只image-to-illumination的预测,同时作者设计了基于不同illumination的约束和先验的loss函数
作者搞了一个数据集合,有三千张欠曝光的图像,并且作者请了一些专家进行修饰
作者再之前的和自己建立的数据集合上进行了实验,实验结果无论是定性还是定量都比较好

图像增强模型

如下
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
其中\(I\)是未增强的图片,\(\tilde{I}\)是增强之后的图像,相当于是对正常曝光的图。作者专门解释了一下这个公式为什么work,作者说重要的优点是,亮度图比较简单,而且其中还蕴含着先验知识,如果输出亮度图的话,实际上网络有很强的泛化能力来学到不同光照条件下的复杂的摄影调整。除此之外,通过对illumination map建立约束,模型也能够定制增强之后的结果。比如,通过约束illumination map的局部光滑,对比度可以得到增强,或者 通过约束亮度图的幅度,可以调整增强之后的结果

网络结构

网络结构和pipline如下
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
作者并没有着重说他们的网络结构,只是说了网络结构包含一个local和一个global的模块,能够获取不同尺度的信息,然后因为输出尺寸的比较小,所以能够保证效率的问题

loss函数

阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
loss函数如上,一共包含了三项loss,一个是重建的loss,就是直接比较两幅图像的接近程度
另外一个是smooth loss,就是为了对输出的亮度图进行一个光滑,这是基于两篇文章提出来的理论,表述的是亮度应该是局部光滑(locally smooth)的。
作者说这个smooth loss有两个优点,第一个是可以减少过拟合和增加网络的泛化能力;第二个优点是它可以增加图像的对比度。
作者举了一个例子,比如p和q有相似的亮度的话,那么经过s变换之后,这个在亮度图上的差异应该会被放大
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
所以,需要对这个亮度图进行约束,作者提出的smooth loss如下
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
其中,
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
大致的意思是,如果原图的某个pixel比较smooth的话,那么这一项的loss的系数就会很大,如果原图的某个pixel很sharp的话,那么它对应的亮度图对应的像素的系数会很小。就是如果原图很smooth的话,得到的亮度图应该也是smooth的,如果原图是sharp的话,那么对应的亮度图也应该是sharp的。作者还说道,对于曝光不足的图片,图像内容和细节通常较弱,照明不一致会导致大的梯度。
同时作者还考虑到了color loss,就是计算对应pixel(RGB三通道表示的三维向量)的余弦距离,作者说L2 norm只能够测量两个向量之间的距离,不能够保证他们的方向是一致的,不能够保证color vector有一致的方向,所以L2度量方式可能导致明显的color mismatch。
我感觉这个地方考虑的是角度相似性的问题,比如预测得到的rgb三个通道的向量如果只是和原图的rgb相差一个scale的话,那么应该余弦距离是为0的,但是只差一个scale就是只差一个亮度,这种做法能够保证优化的方向是一致的,至于具体的距离可以交给L2norm

数据集合的建立

在此之前作者提到了另外一个图像增强的数据集合,叫做MIT-Adobe FiveK dataset,但是这个数据集合有一个缺点就是它只用来做普通的图片的数据增强而不是欠曝光的图像的数据增强
所以作者准备做的这个问题,之前没有过类似的数据集合,作者用EOS 5D相机来拍摄图片,同时,在Flicker这个网站上也收集了大约15%的图片,搜索的关键词欠曝光,低光,或者backit等关键词。然后作者说他们雇佣了3个专家来用adobe的lightroom调整图像,用调整之后的图像作为gt进行训练。作者的数据集合包含各种各样的场景,包含了各种各样的亮度。总的来讲,作者的3000张图片中,有2750张图片用来做训练,250张图片用来做测试。值得注意的是,作者现在还没有公开训练数据,只公开了测试数据。

试验step

ablation study

同时作者还在FiveK数据集合上进行了评估,选取了expertC的结果,用4500张进行训练,用测评标准还是SSIM和PSNR。
作者写文章的手法还是值得借鉴的,比如在提出每个loss的时候,会通过实验结果说明每个loss的作用,而不是在提及的时候先阐述一下原理,然后通过实验结果佐证之前的假设;感觉这可以作为写文章的一个手法。
先看一下各个loss的作用,如下图
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
看上图的第二列和第三列,作者想表达的意思是,相对于直接输出的图像,通过输出illumination map的话,可以恢复更多的细节,但是可能不具备比较合理的对比效果或者生动的色彩,所以作者引出了smooth loss。通过对比第三列和第四列,可以发现smooth loss可以增加图像的对度。通过对比第四列和第五列,可以发现颜色并没有mismatch。大概就是颜色并没有失真的这个意思吧。

和sota方法比较

作者列举了几种sota的方法,如下图
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
分别在作者提出的和FiveK数据集合上进行了比较,作者说,相对于其他的方法,作者的方法无论在前景或者是背景上,都能够恢复图像的更多的细节和对比度,而不用牺牲一些图像中过曝光的区域。第二个优点就是作者增强之后的图片显得更加的有生机,以及更加的realistic。
同时,作者在两个数据集合上都做了量化评估,如下表
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
在user study上,作者又重新在flicker上下载了500张图片,来直接用网络进行预测,并且得到了一个实验结果,如下图,这种更加细致的user study其实可以做一个参考写东西的方向
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation
作者一共问了6个问题。比如是否vivid,相对于输入是否是更加的吸引人等。

结论和讨论

作者说他们的网络也有一些局限性,比如在非常暗的环境下并不能恢复出来detail,我感觉emm因为训练数据不够用呗~
还有就是去噪能力不够,感觉训练数据都是非常clean的,除了暗之外,所以这里的shortcoming,感觉意义不是特别大
阅读笔记Underexposed Photo Enhancement using Deep Illumination Estimation

鄙人总结和展望

在结果上如此好,一个是得益于直接输出的是亮度图,另外一个大概就是作者提出的三个loss,和其他的方法比较,没有比较网络参数,这个可能也是一个涨点的原因
作者是第一个做低光图像增强的,之前的网络没有被设计的专门follow这一部分?maybe
能否做一个通用的曝光增强的网络,我的意思是,可以有不同level的亮度,网络都能够输出比较好的试验结果,这个通用的模型是必须的,可以参考一下卷积神经网络里面的attention结构模块,能够attention不同的亮度信息,以及不同的noise程度等等
是否可以在raw上进行无监督的图像生成,因为考虑到了采集图像,并且通过isp后期调整之后的困难?

上一篇:Linux安装Redis 解决make: CC未找到


下一篇:css3中的scroll-behavior属性 让滚动条可以平滑滚动