Learning to See in the Dark论文阅读笔记
这是一篇图像增强的论文,作者创建了一个数据集合,和以往的问题不同,作者的创建的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论文阅读笔记的更多相关文章
- 论文阅读笔记 Improved Word Representation Learning with Sememes
论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...
- [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks
[论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks 本文结构 解决问题 主要贡献 算法 ...
- [论文阅读笔记] node2vec Scalable Feature Learning for Networks
[论文阅读笔记] node2vec:Scalable Feature Learning for Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 由于DeepWal ...
- [论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks
[论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问 ...
- [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding
[论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 ...
- [置顶]
人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)
这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...
- Nature/Science 论文阅读笔记
Nature/Science 论文阅读笔记 Unsupervised word embeddings capture latent knowledge from materials science l ...
- 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...
- 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...
随机推荐
- Map的底层实现原理
一,前言 1.1,概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V).Java提供了专门的集合类用 ...
- IIS在已有站点上->添加应用程序命令
已有站点:HTTP80 %systemroot%\system32\inetsrv\APPCMD ADD APP /SITE.NAME:"HTTP80" /path:/Redire ...
- (转)jvm具体gc算法介绍标记整理--标记清除算法
转自:https://www.cnblogs.com/ityouknow/p/5614961.html GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为“GC”, ...
- java通过递归统计文件大小
思路就是通过文件的遍历,对一个文件夹中的非目录文件进行大小统计,并对其中目录文件进行相同的遍历操作,代码如下: package word; import java.io.File; import ja ...
- ADB之安装APK
一.下载安装adb工具 下载安装,cmd测试是否成功 二.连接设备 1.手机打开USB测试 2.测试连接 三.安装应用 adb -s [设备编号] install [apk的完整路径]
- 初识linux&常用命令&目录文件的浏览和管理
Linux系统的主要用途:主要用于服器务器,特别是网络服务 Linux命令格式 命令 [选项] [ 参数] 命令:告诉操作系统做什么,执行什么 选项:说明命令的运行方式(可以改变命令的功能).选 ...
- NC反弹shell的几种方法
假如ubuntu.CentOS为目标服务器系统 kali为攻击者的系统,ip为:192.168.0.4,开放7777端口且没被占用 最终是将ubuntu.CentOS的shell反弹到kali上 正向 ...
- vnode
获取vnode对象 vm.$slots对象下的所有值 vm.$scopedSlots对象的值返回一个函数,该函数执行后返回vnode对象 directives自定义指令中钩子函数的参数3和参数4,例如 ...
- BZOJ1040: [ZJOI2008]骑士 树套环DP
题意:一个图n个点n条边保证点能互相到达,ab有边意味着ab互相厌恶,求一个集合,使得集合里元素最多而且没有人互相厌恶 删去环上一条边树形dp,比如删掉的边连着a,b,那么先dp出不选a的最大值,再d ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...