这是一篇图像增强的论文,作者创建了一个数据集合,和以往的问题不同,作者的创建的see in the dark(SID)数据集合是在极其暗的光照下拍摄的,这个点可以作为一个很大的contribution
实际上我认为作者实际上是做了三个工作,以及图像去马赛克(demosaic),图像增强(enhancement)和图像去噪(denoise)

denoise

作者在introduction中回顾了以前的工作,包括图像去噪,图像去马赛克的工作,以及图像增强,在图像去噪方面,作者有提及之前的深度学习相关的方法,并且也说有些工作是图像demosaic和denoise同时做的,缺陷就是他们只在合成的数据几何上进行了实验,并没有在真实的数据集合上进行实验

low-light image enhancement

在回顾enhancement作者说,直方图均衡化是一种比较经典的方法,用于图像增强。另外一个比较经典的方法是gamma校正,gamma校正能够补偿暗区域,抑制比较亮的区域
还有一些其他的方法 用于图像增强,比如inverse暗通道,小波变换,视网膜模型,以及亮度图估计
但是现有的图像增强的方法并没有显式的建立图像的噪声模型,并且只是在后处理阶段应用一些现成的去噪算法(图像增强自己paper看的太少,给自己挖个坑)

noise image dataset

作者说,SID是第一个建立的有gt的低光数据集合,所以,contribution还是挺大的

数据集合建立

如下图,

有两种成像阵列,一个是bayer的阵列,一个是X-trans的阵列,总共5094张图片
作者在拍摄每一张暗的图片的时候,都h经过长时间曝光得到一个比较亮的图片,由此构成图片对
作者还说,长时间曝光得到的图片实际上是包含噪声的,我们的target是得到perceptual quality足够高就行,而不是得到高对比度的图片
其实我觉得这种方式采集得到的图像,肯定是包含很多噪声的,但是对于这种任务而言,应该是无关紧要,这种任务的落地场景是黑天拍到的图像想要有黑夜的感觉,这种feeling就是perceptual quality,其实也真不一定需要的是看得清,而是feeling
两个相机拍摄的到的尺寸不一样,并且还挺大的,一个是60004000,一个是42402832

method

在讲坐着的方法之前,作者回顾了之前的是那种方法,一个是traditional的方法,一个是L3的方法,还有就是Burst方法

传统的方法是有一系列的step,比如先白平衡,然后demosaicing,之后denoise,sharpening,color space conversion,gamma correction还有一些其他的东西,最后得到输出的图片,这种方法大概是不同的相机有自己的一套处理算法,isp那种
L3算法则不同,L3算法是用一种large collection of local,linear and learned filters 来近似复杂的非线性piplines
但是作者说,无论是传统的pipline或者是L3 pipline,都不能处理快速的low-light图像,以你为他们不能够处理很大的峰值信噪比
除了上面说的两种方法之外,还有一种burst imageing pipline,这种方法常用在智能手机上,尽管这种方法通过aligning 和blending多张图片,但是这个过程非常的复杂,比如需要密集匹配,可能不能获取一段视频序列,或者会用到lucky imageing

作者的method,从网络结构上来说没啥创新,如下图

输入一个原始的bayer阵列图,作者对像素进行重新排列得到channel为4的数据,
关于重新排列,bayer arrays和X-Trans array不太一样,如下图

bayer用44的blocks重排,X-Trans用66的blocks重排,channel是9因为交换了相邻的元素(不太懂)
输出都是12channel的尺寸为图像一半的image

因为处理的是全分辨率的图像(后面训练的过程貌似crop了),所以需要的网络不能太大,作者这里用了两种网络,一种是CAN,另外一种是Unet

训练

在训练的过程中,作者用了L1 loss,和adam optimizer,
输入的是short-exposed image,输出的是long-exposure的图片,这里的gt,作者用libraw已经处理过,色彩空间是sRGB空间
因为两张图片的尺寸不一样,作者在这里用了两个网络去训练,注意到在训练的时候有一个amplification ratio,作者将这个设置为输入和输出之间的曝光时间比例
同时,对于图像随机crop512*512的尺寸,以及做了一个随机的flip以及rotation
lr一开始设置为1e-4之后减为1e-5
训练4000epoch

实验结果

作者首先展现了一些质量评估的结果,

可以看出,traditional method不能handlenoise以及color bias
所以传统的图像增强方法(如果不对噪声进行建模)的话,produce的图像噪声会非常的严重,因此作者采用了
一种图像去噪的方法BM3D,BM3D是一种非blind的去噪方法,需要指定noise-level的等级,如果指定太小的噪声的话,那么可能会去不干净,如果指定太大的噪声的话,可能会over-smooth,如下图所示

两种噪声是同时存在的,所以BM3D并不能locally adapt to the data,相反,作者的方法显得整体比较和谐

作者还说,如果和BM3D以及burst processing方法比较PSNR/SSIM是不公平的,因为,这些baseline不得不需要一些处理,为了更加公平的比较不同的方法,作者对于这一部分陈述的比较复杂,如何是一个公平的比较法呢,作者用reference image的白平衡参数来减少色彩的偏差(应该是不同方法输出的图片),同时,他们逐个channel的scale图像使得不同方法输出的图像和reference image有相同的mean values

尽管这样,作者并没有用两个指标来评价校正图像的好坏,而是用A/B test
结果如下

在比较难得Sony x300 set上,作者的结果碾压BM3D,在比较简单的Sony x100 set数据集合上,作者的结果与之相当,
作者自己拍摄了一些图片,并且进行了测试,也能够得到良好的实验结果

ablation study

作者的ablation study实验结果如下,这个时候作者用了PSNR和SSIM两个指标

Unet换成CAN的话,略有下降,但是Fuji上升了不少在ssim上升了不少
同时,如果输入的色彩空间是sRGB,会香江很多店,感觉Sony对于色彩空间更加敏感,而Fuji并不是,如果将L1换成SSIMloss的话,指标会波动一些
换成L2loss的话,也差不多把
作者还对比了不同的data arrangement对于实验结果的影响,另外一种数据arrangement不是特别懂,这里就忽略了
下面一个是作者对比了一下,如果将gt进行直方图均衡化,看看会得到什么结果
如果将gt进行直方图均衡化的话,实际上是让网络学习到一种直方图均衡化的能力,实际上作者发现,好像并没有让网络学习到这种东西,而且点掉的非常厉害,因此作者通过分析实验得到的结论是,不用把直方图均衡化纳入到网络的pipline中,可以作为一个postprocess的过程

结论

在结果中,作者讨论了很多,快速低光图像增强非常具有挑战性,因为其含有很少的光子,以及很低的snr,
作者提出的方法的limitation是,必须要手动输入amplification ratio,选取一个amplification ratio是非常的有用的,同时,作者说他们的不同的ccd有不同的网络,实际上通用性不强,我感觉这个如果以后有用的话,也应该是针对不同的相机,所以问题不大
另外作者说网络跑的比较慢,基本上需要0.38-0.66s,来处理一张full-resolution的图片
以及,作者说他希望未来的工作可以集中在图像质量的改善上,以及完善和集成训练步骤

后续工作

搜了一下谷歌学术的引用,感觉引这篇文章的人并不多,而且在此工作上做的我好像一篇都没看到
相反,github上star非常多,不说了,我先下载代码跑跑,看看有没有灵感


作者说他尝试了一下gan的loss,并不能够改变实验结果,文章中有一句话提及到了这个事情(准备亲自试一试这个)
关于讨论部分,作者说了三点
第一个是,算法并没有特别好的结果,有很大提升的空间
第二个是,现有的网络需要输入iso,能够做一个不需要iso的pipline是很有必要的
第三个是,网络的速度可以继续优化

Learning to See in the Dark论文阅读笔记的更多相关文章

  1. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  2. [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks

    [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks 本文结构 解决问题 主要贡献 算法 ...

  3. [论文阅读笔记] node2vec Scalable Feature Learning for Networks

    [论文阅读笔记] node2vec:Scalable Feature Learning for Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 由于DeepWal ...

  4. [论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks

    [论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问 ...

  5. [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding

    [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 ...

  6. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  7. Nature/Science 论文阅读笔记

    Nature/Science 论文阅读笔记 Unsupervised word embeddings capture latent knowledge from materials science l ...

  8. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  9. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

随机推荐

  1. [CF1311B] WeirdSort

    Solution 按照 \(p[i]\) 进行分段,如果某个 \(k\) 不存在 \(p[i]=k\),那么就把 \(i,i+1\) 分割开 处理出每一段的左端点和右端点 进而处理出每段的最小值和最大 ...

  2. C# WPF 时钟动画(2/2)

    模拟实现时钟效果,学习WPF动画好例子,本文承接上文 C# WPF 时钟动画(1/2). 微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# ...

  3. matlab 中 find() 函数用法

    一. 功能: 寻找非零元素的索引和值 二.相关函数语法: ind = find(X) ind = find(X, k) ind = find(X, k, 'first') ind = find(X, ...

  4. intellji IDEA 2019版激活码(亲测可用 2019年10月14日08:53:54)

    MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoiR1VPIEJJTiIsImFzc2lnbmVlTmFtZSI6I ...

  5. Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量

    我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...

  6. [PAT] A1023 Have Fun with Numbers

    [题目大意] 给一个不超过20位的数字,如果将它乘以2得到的数仅仅是原来的数字重新排列得到的,那就输出Yes,下一行输出加倍后的数.如果不是,输出No,下一行输出加倍后的数. [思路] 20位过于庞大 ...

  7. ES读写数据过程及原理

    ES读写数据过程及原理 倒排索引 首先来了解一下什么是倒排索引 倒排索引,就是建立词语与文档的对应关系(词语在什么文档出现,出现了多少次,在什么位置出现) 搜索的时候,根据搜索关键词,直接在索引中找到 ...

  8. JavaDay10(上)

    Java learning_Day10(上) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA&g ...

  9. java回文代码

    import java.util.*; import java.math.BigInteger; import java.util.Scanner; public class Test{ static ...

  10. BZOJ5137&&lg4081(广义后缀自动机,set启发式合并)

    BZOJ5137&&lg4081(广义后缀自动机,set启发式合并) 题面 自己找去 HINT 给定多个文本串,让你查询每个文本串中有多少个本质不同的子串且这个子串只出现在当前这个文本 ...