0%

相似性度量方法

Samise

Learning to Compare Image Patches via Convolutional Neural Networks

这篇文章讲了使用 孪生神经网路做patch的相似性度量。但是他的输出是全连接 只有1个输出,损失了空间位置的相关性。

image-20210204085426652

图像质量评价

Deep Neural Networks for No-Reference and Full-Reference Image Quality Assessment

image-20210204092039515

这个文章是用来做图像质量评价的。输入两个VGG结构类似的孪生神经网络 对两个patch计算得到两个全连接特征,特征融合是将两个特征向量以及他们的插值concat 然后输入后面两个共享权重的全连接(patch weight estimate ...)。上面一个全连接输出一的是 该patch的权重,下面一个全连接输出的是 该Patch 的打分。最终的输出是所有随机采样的patch的加权平均。

图象配置

动态场景、视频增强复原

动态场景HDR

早期的算法有将所有图象像素强度大概对齐到一定水平,然后使用光流算法完成图象空间对齐,最后再融合输出, 也有使用CNN实现光流的但是本质都是在图象层面完成了空间对齐。这篇文章作者将HDR看作图象到图象的转换,认为CNN有容忍偏差的能力,不需要显式的对齐图片,因此全用一个网络完成。

Deep HDR Reconstruction of Dynamic Scenes 这篇文章就是使用CNN在图象层面完成对齐,再使用CNN对对齐后的图象融合

20210331203224

HDR-GAN: HDR Image Reconstruction from Multi-Exposed LDR Images with Large Motions

image-20210203172029335

感觉这个文章和上面一篇区别不大,就是引入了GAN 他还是需要参考图的(图中的L1损失)。只不过生成器结构更复杂了。使用了多尺度的结果,左边浅蓝色是下采样的过程。文章还提到 最中间那个 + 连接 是有特征对齐的作用(浅紫色块处的+连接)。

### 视频重建

EDVR: Video Restoration with Enhanced Deformable Convolutional Networks

image-20210203152356503

主体结构如上图。主要流程为 ->输入特征提取 --> 特征对齐模块 -> 特征融合模块 -> 重建输出。核心是特征对齐模块和融合模块。

特征对齐模块的设计使用了可变性卷积 和 特征金子塔的结构。如下图。特征融合模块的一个重要的设计是 作者考虑到不同帧间即便对齐了,但是由于信息量的差异,应该有不同的权重,因此加入了注意力。

应该是端到端损失 据说不好训练

image-20210203152951344

动态场景去噪

Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

这篇文章和上面那篇很相似。特征对准的方式几乎一样。只不过多了一个非局部模块。整个流程对去噪任务做了特定的设计。

视频去模糊

Spatio-Temporal Filter Adaptive Network for Video Deblurring

image-20210203154242212

这篇文章视频去模糊的结构分为了三个模块 特征提取模块、STFAN模块、重建模块。可以看出,这篇文章的空间对齐和去模糊操作也都是在中间的特征空间完成的。但是这个STFAN模块采用了不同与可变性卷积的特征对齐方式。不过和上面的类似,他们都是采用了隐式的空间对齐方法,即网络中集成了可以完成空间对齐的结构,但是 本质上的约束都是来自最后的端到端的监督损失。

作者提出了一个 FAC layer 用于完成特征对齐和去模糊的操作。具体的流程:特征提取网络对当前帧提取特征得到Et STFAN模块则使用卷积对三元组输出处理得到 两个滤波器,一个是对齐滤波器一个是去模糊滤波器(图中的Falign deblur)。将估计的对齐滤波器(包含了复杂的运动参数)和上次迭代的 Ht-1(应该就是代表上一帧的去模糊后的特征图) 通过 FAC层得到一个对齐后的特征,同理去模糊滤波器也这么用。最后将两个特征concat(concat特征包含了这一帧去模糊的结果和上一帧去模糊后的特征图经过对齐后的结果)。 使用另一个解码器得到输出,同时concat的结果会传递到下一帧的计算。

FAC 层

很直观 这个为啥可以对其特征?

image-20210203160054986

损失函数

也是很简单 一个MSE 一个感知损失

UNET-GAN

A U-Net Based Discriminator for Generative Adversarial Networks

主要思想

文章的工作主要是针对 GAN 的判别器的改进。使用一个U-NET作为判别器,判别器的编码部分输出对图象的全局分类结果,判别器的解码部分输出对图象像素级的判别。因此这个判别器既能判别全局也能判别局部信息。同时作者结合了 最新的正则化技术 MixCup 提出了个一致性正则化损失 。

主要内容

研究背景

GAN 目前从三个研究角度进行,即大规模训练、网络结构设计和正则化技术。尽管近年来取得了很大的进展,但如何综合具有全局语义连贯、长程结构和细节准确性的图像仍然具有挑战性。对抗器的好坏会直接影响生成器的效果。在目前最先进的GAN模型中,作为分类网络的鉴别器只学习一种表示,因此它通常要么关注全局结构,要么关注局部细节。合成样本的分布随着训练过程中生成器的不断变化而变化,容易忘记之前的任务 (在判别器训练的背景下,学习语义、结构和纹理可以被认为是不同的任务) .....

结构

image-20210225152057705

结构很简单 ,使用UNET 判别器可以同时输出去全局和局部判别。对于全局判别的标签就是和输入图像一样的 0/1的值。除此之外,还是用了MixCut正则技术

CutMix

20210331203434

mixcut用在对判别器的训练。通常判别器输入要么是正样本要么是负样本。而MixCut就是复制粘贴的方式结合在一起输入网络(M就是二值掩膜)。对应的标签按照 正负样本 面积比例给的。除此之外还有 Mixup,Cutout

  • Mixup:将随机的两张样本按比例混合,分类的结果按比例分配;
  • Cutout:随机的将样本中的部分区域cut掉,并且填充0像素值,分类的结果不变;
  • CutMix:就是将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配

CutMix优点:

  1. 在训练过程中不会出现非信息像素,从而能够提高训练效率;
  2. 保留了regional dropout的优势,能够关注目标的non-discriminative parts;
  3. 过要求模型从局部视图识别对象,对cut区域中添加其他样本的信息能够进一步增强模型的定位能力
  4. 不会有图像混合后不自然的情形,能够提升模型分类的表现;
  5. 训练和推理代价保持不变

https://blog.csdn.net/weixin_38715903/article/details/103999227

损失函数

从上述结构不难看出 生成器的损失函数 包含两项 一个是编码器的全局判别损失和解码器的像素级判别损失。而训练对抗器的损失由于加入了CutMix操作,作者又提出了一个一致性损失,更充分的利用了像素判别的优势。

image-20210225153426059

这个式子的意思是 将 真实图片 x 和 生成器生成的假的图片 fake 首先使用Mask将二者混合后 输入 判别器,解码出的像素级判别的结果 1 和 将x 和 fake 分别输入判别器得到各自的得分后再使用Mask混合得到结果2 ,这两个结果应该一致。因此最终判别器的损失:

image-20210225153858202

但是对于全局判别器的Mix 标签 这里的设置和 以往的不同 以往Mix后的全局标签设置是按照正负样本面积比例计算的一个介于0-1之间的值。而作者这里 Mix标签设置为固定的0。用于约束编码器的输出。

In contrast to [47], the class label c ∈ {0, 1} for the new CutMix image x˜ is set to be fake, i.e. c = 0. Globally the mixed synthetic image should be recognized as fake by the encoder Denc U ,otherwise the generator can learn to introduce the CutMix augmentation into generated samples, causing undesirable artifacts.

实验

MixCut图象的生成概率 p 在前n个epoch是从0到0.5逐步提高的。以给生成器足够的时间学习生成较真实的图片。避免判别器过早的训练稳定。一开始生成器生成的太假 判别mix难度太小。

  1. 将成对的低-正常光照图分解为 HSV 格式,将低光照图的V替换为高光照的V通道,替换整体和正常光照图相似,但是会有一定的色差和畸变,光照越低的原图,噪声退化越严重
1577263236106
  1. 相机成像模型 Retinex 中为I * R 根据相机成像模型,这个应该是非线性的

  2. 局部光照一致性 距离高斯分布的局部 变分 离边缘位置越远,得到边缘的梯度损失权重越大 正处于边缘位置的最小

  3. LIME 对于 黑色区域和暗区域也不能很好的区分 因此对黑色区域也存在过曝 LIME中 可以看出r矫正之后 光照值整体变大,相应的过曝区域变少。KinD中对 光照估计依然很低 但是反射率图 却没那么过曝 呈现黑色 主要是Kind训练时加入了纯黑的图片 低光照图是黑色 对应的强光照图也是黑色

    1577371572408
  • 对黑色区域和暗区域区别? 估计出光照图后 根据对黑色区域的预测 加以抑制对应的光照图 ?
  • attention guid 学习提取暗区域的 方法是 提取高低光照图中的V的差值 max(R/G/B) 即高光照中V较大的区域而 弱光照图中V较小的区域即为暗区域 同理 黑色区域也是如此
  • 其实 KindD的图像分解效果 总是 <= LIME 尤其是在对于纯黑色区域
15720100311301

LIME 传统光照分解

优点 :

  1. 图像分解效果较好 图像增强的最终结果不会太糟,对一般的图像都有普适性

缺点:

  1. 使用DMB3去噪效果远不如深度学习方法的效果
  2. 会有一些颜色失真的情况 也没办法应对
  3. 光照调节不够灵活 只能通过r矫正来 改变光照程度 并且也会有一定的过曝

KinD Net 基于深度学习的方法

优点:

  1. 图像分解网络不需要大量的高质量图片训练 只需曝光度不同的图片就可以完成整个网络的训练
  2. 光照调节灵活
  3. 含有针对特定数据集的去噪重建网络 这一点效果相对LIME直接使用DMB3效果要好很多

缺点:

  1. 在其他未fine turn数据上的光照分解网络性能 <= LIME 根据约束优化分解网络 在不使用大量优质参考图像训练的条件下 不如直接采用传统方法估计光照 这样估计的结果肯定不会太差 例如仅在LOLDataset上训练的分解网络在其他数据上效果较差
  2. 图像分解由于没有直接满足 I = L*R LIME中若 I = 0 I/L= R必定等于0 而 kind中 I != LR 只是近似 因此 当 I = 0 R 依然会趋于过曝 当然二者都有不同程度的过曝 因此LIME对黑色的区域分解结果比LIME还差

Fully Convolutional Color Constancy with Confidence-weighted Pooling

综合二者

分解网络

  1. 采用传统方法估计光照图 即相对全变分
  2. 使用深度学习的方法 来对上一步的光照图优化 如何优化?
    • 使用 U-Net 拟合高低光照图片之间的距离 不收敛? ???
  3. 使用深度学习的方法来调整光照强度 1. 手动设置 调节增益参数 2. 数据上训练得到最优的固定的光照调整网络

重建网络

  1. 去噪 需要无噪声的图像 和有噪声的低光照图像 LOLDataset
  2. 颜色矫正 可以使用无噪声合成数据训练 / 对比度调整

只估计光照图

网络输出没加sigmoid 导致一开始损失很大 百千级别

1578965212749

使用kinD的梯度损失,外加初始亮度损失会使结果优化不出来(此时Loss<1),同时最后一行一列补0/不补0没区别

1578966176923

使用rtv损失,并且不加亮度约束损失,中间整体损失在0.5附近时,效果较真实,但是当损失进一步收敛,epoch20时此时极端化,可见此时亮度损失已经偏离正常值。而且亮度图中明显可见小斑点,我觉得可能是rtv权重不是连续的导致的,四角会出现光晕

加上sigmoid函数收敛的很慢 主要是 在卷积输出为很大的时候 经过sigmoid的输出趋近1 此时的梯度实际很小

实际加sigmoid的输出效果和不加的差不多

1578969926566

加上sigmoid之后 loss rs 的比重需要减小 否则会使得高低光照图都接近很暗 不能增强

细节调整

考虑prelu BN层对网络的影响

无监督图像增强方法

一些想法

  1. 因为传统图像增强方法例如直方图均衡化 他们可以作为先验知道CNN约束
  2. CNN中 应用 Retinex 模型的优点在于基于这种先验 可以使用更小的网络 来完成任务 而直接端到端的增强方式 需要更大的网络去拟合,也就是先验的存在降低了对网络拟合能力的需求
  3. 但是Retinex针对过曝的图像不友好,因为I./R的原因。而有的文章使用 曲线的方式 来增强 网络输出曲线的参数,不同像素位置的曲线不同,那么他的调整效果不同,具体的 可以增强也可以压缩像素值,而这一点是Retinex做不到的。但是感觉这种学习曲线参数和使用CNN直接端到端的映射区别不大呀。可是依然使用小网络实现了不错的效果。
  4. 借鉴图像先验来设计损失函数 例如 Gray-World color constancy

可以考虑的出发点

  • 可不可以设计 “多专家” 的网络学习过程,即多种传统方法的增强结果做损失函数约束 + 基于图像理论设计的损失函数 来共同优化网络的学习,增加的第二项目的是 根据传统增强方法中存在的 缺陷而设计的损失函数。这样出来的结果会不会优于传统方法。
    1. 第一项的损失是为了约束网络的学习方向,可以考虑计算训练过程中的 结果来 动态 调整各项损失权重
    2. 通过什么方法 改善 Retinex 结构 的缺点?
  • GAN类方法的优点
  • 使用对偶估计的方法,来加强对过曝光的适应性,将传统方法使用CNN实现
    1. 文中 对反转的输入图像做光照估计 可以很好的抑制过曝光区域,将 三张图融合 来达到更好的效果
    2. 但是这么做 算法的实时性不行,一方面本来传统的光照估计方法速度不是很快,如果做两遍更浪费时间,另一方面,它融合需要计算各个图像的质量然后计算融合权重,这也是很耗费时间的步骤。
    3. 使用CNN来改造有如下好处:
      1. 尽量用一个网络来同时对输入图像和反转图像进行光照估计,减少计算量。
      2. 使用CNN来学习三张图的融合权重,自适应的目的 会不会效果更好。
      3. 可以根据已有数据来离线学习,效果会更好?
    4. 光照估计可以考虑全局 和 局部特征提取,KinD 的照明估计 由于学习的是局部小patch信息 而传统CNN的方法是全局优化 看起来更自然。

Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

主要贡献

  1. 提出了第一个不依赖于成对训练图像的低光照图像增强卷积神经网络
  2. 设计了一个 可以近似像素映射的 image-specific 曲线以及通过迭代方式形成的高阶曲线。这种特定于图像的曲线可以在很大的动态范围内有效地执行像素映射。
  3. 在没有参考图像的情况下,通过设计 特定的 任务相关的损失函数来训练深度网络 这种方法存在巨大的潜力。
  4. 640 x 480输入图像 500 FPS

主要方法

光照增强曲线 LE-curve

​ 作者说受 P图软件的 曲线调整的启发,有了这个思想。希望设计一个 可以自动增强图像的曲线,其中自适应曲线参数仅依赖于输入图像。这种曲线的设计要有如下性质:

  • 增强后图像的每个像素值都应在归一化范围[0,1]内,以避免溢出截断导致的信息丢失;
  • 曲线应该是单调递增的,以保持相邻像素的差异(对比度); 就是本来输入低光照图像较亮的区域输出对应也应该更亮,而不是反而变暗。
  • 这种曲线可微,可以反向传播。

从上述需要的三个条件可以看出,作者设计的这种曲线感觉和 图像直方图调整的那个曲线不是一回事。这个曲线就是一个对输入图像的像素经过一个非线性映射然后输出吧,类似gamma的增强方法?所以这个曲线得满足单调可谓等的性质,与gamma不同的是,这个曲线参数由CNN输出,其不同像素位置的曲线参数不同,而gamma是全局用一条曲(但是文中这么设计我觉得仅仅是曲线是单调递增得并不能保证相邻像素输出得对比度差异,因为相邻像素使用得曲线参数不一样,虽然两条曲线都是递增得,但是分别对应映射输出后得值不一定依旧保证输入之前的相对大小关系,可能这种情况通过后面的损失函数,网络训练完之后便不会出现了吧),换句话说就是不同像素位置的 映射方式不同。具体设计的曲线 如下式子:

\[L E(I(\mathbf{x}) ; \alpha)=I(\mathbf{x})+\alpha I(\mathbf{x})(1-I(\mathbf{x}))\]

​ 上式中 \(I(\mathbf{x})\) 为输入图像的x位置的像素值,\(\alpha\)为曲线调整的参数,由CNN输出决定,不同的\(\alpha\)对应不同形状的曲线参数,具体可见下图。例如当\(\alpha\)=-1时,就是一个二次曲线,输入输出的映射关系为二次关系。同理。 ​ 同时将上式迭代,可以构成更高阶的曲线。

\[L E(I(\mathbf{x}) ; \alpha)=I(\mathbf{x})+\alpha I(\mathbf{x})(1-I(\mathbf{x}))\]

​ 最后,每个像素位置的\(\alpha\)参数都不同,也就是不同位置的 曲线映射方式不一样,所以CNN输出的\(\alpha\)其实是和输入图像大小一样的。而由于有n次迭代,每次迭代分别对 RGB 三通道使用独立的\(\alpha\) 所以最终CNN输出的feature map的尺寸应该是n x 3 x W x H大小的。如下图:

1589469658310

上图 b 可以看出:

  • 对于迭代一次的曲线,当\(\alpha = -1\) 为二次曲线,即输入x > 输出y; 这种情况对于过曝的像素可以压缩它的像素值。
  • ... 当\(\alpha = 0\) 为恒等映射,输入输出不变
  • ... 当\(\alpha = 1\)时,曲线为凸函数,即 输入x < 输出y; 这种情况可以增大像素值,对应光照增强。

因此这种曲线调整的方式 不仅有可以增强低曝光区域像素的能力,还可以压缩过曝区域的像素。

DEC-Net

​ 就是常规的CNN,主要是轻量。他的输出特征为A,通道数为迭代次数x3(RGB),尺寸和输入图像一样。

损失函数 Non-Reference Loss Functions

​ 我觉得这就是最关键的地方吧,感觉前面说的曲线的方式 和 传统的CNN学习端到端的像素映射没什么区别,不能决定它不用参考图像来训练。

  • 可能 增加 a 的曲线方式可以增强 CNN的非线性性?可以试试去掉后面的曲线调整部分,直接CNN输出增强后的图像,然后用这个损失函数来做看效果。

空间一致性损失 Spatial Consistency Loss

\[L_{s p a}=\frac{1}{K} \sum_{i=1}^{K} \sum_{j \in \Omega(i)}\left(\left|\left(Y_{i}-Y_{j}\right)\right|-\left|\left(I_{i}-I_{j}\right)\right|\right)^{2}\]

​ 作者描述的这个损失的目的是,保留输入图像和输出图像对应位置像素和相邻像素之间的差异。其中K表示局部区域像素数,\(\Omega(i)\)是像素位置\(i\)的上下左右四个领域位置。\(Y,I\) 分别表示增强后的图像和输入图像。感觉这个式子和局部梯度相似性很像。

曝光控制 Exposure Control Loss

​ 为了抑制过曝和欠曝的出现,用这个损失函数来控制图像整体曝光水平。这项就是衡量局部区域(16x16)的像素值的平均水平与 常数E例如0.6之间的差距。作者说这个E取[0.4, 0.7]差别不大。

\[L_{e x p}=\frac{1}{M} \sum_{k=1}^{M}\left|Y_{k}-E\right|\]

颜色恒常损失Color Constancy Loss

​ 基于 Gray-World color constancy hypothesis 这个规则,对于一幅有着大量色彩变化的图像,R,G,B, 三个分量的平均值趋于同一灰度值。 从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”。也就是一个正常的彩色图像,R,G,B三通道的平均值应该都相等。避免

\[L_{c o l}=\sum_{\forall(p, q) \in \varepsilon}\left(J^{p}-J^{q}\right)^{2}, \varepsilon=\{(R, G),(R, B),(G, B)\}\]

上式含义显而易见。设计了色彩恒常性损失,以纠正在增强的过程中可能出现的颜色偏差。

光照平滑 Illumination Smoothness Loss

这个损失就 类似 Retinex中的局部光照一致性原理。即局部区域的 a 参数应该是一样的。

实验

​ 使用SICE数据集中的 2422张训练,其余的测试。 每张图resize到512x512进行训练。

各项损失函数的作用

​ 作者分别去掉四项损失中的一项,进行训练得到的结果如下:

1589508112377
  • 去掉 spa损失,对比度细节下降,如空中的白云。
  • 去掉 esp损失,图像暗区域的曝光度降低,没能成功增强暗区域
  • 去掉 col 颜色恒常损失,可以看出图片整体颜色出现偏色
  • 没有 tv 光照平滑损失,图像出现严重伪影

各项参数的影响

1589508544279

​ 网络深度-通道数-迭代次数。可以看出对比def三个图,可以看出 迭代一次的曲线增强能力太弱,因此需要更多次的迭代来合成高阶曲线,这样曲线具有更强的调整能力。

训练数据的影响

​ 作者 做了三类训练数据

  1. 原本DEC训练数据中的一部分900张 只有欠曝光的图像。DEC_low
  2. DARK FACE数据集中收集的 9000张 低光照数据集,也是只有低光照数据集。DEC_large_L
  3. 使用数据增广的方法,包含了 过曝光和欠曝光图像,从1,2部分获得的数据集 4800张 DEC_large_LH
1589509475989

​ 由图c,d可以看出,如果训练数据中不含有过曝光数据,最终网络会对原本光照正常的区域造成过曝光,但是如果低光照数据多,对暗区域增强的能力要强。因此

  1. 训练数据集中必须有 过曝光图像,防止过曝
  2. 低光照训练图像多的话,网络的增强能力要强。

最终对比结果

1589509826164

UMLE: Unsupervised Multi-discriminator Network for Low Light Enhancement*

亮点

这三类 鉴别器的设计,有效性有待考究,但是从原理上讲的通,它通过 高通/低通滤波器 提取颜色 和 文理部分,分别输入鉴别器。所以可以借鉴用外加手段实验输入图像信息分离的 思路 分开处理。优点类似 今年CVPR2020上的那个频率分解的思路,它是用两个不同卷积率的差去分离频率信息。

另一个采用了鉴别器生成器权重共享的策略,至少证明这个 东西不会影响效果,是轻量化的一个小trick。然后使用不同的CPAM对编码器的编码特征提取。

主要贡献

  1. 提出了一个实时的 基于 不成对图像训练的 低光照图像增强网络
  2. 使用了 多个 鉴别器,分别从 光照、纹理、和多尺度三个方面 来组合对抗损失 (创新点)
  3. 设计了 注意力模块,由通道注意力 和 像素注意力串接而成的 CPAM (最大池化+平均池化组成的像素注意力)
  4. 生成器 和 鉴别器 的 编码部分共享权重,说是可以提高训练的稳定性,并减少模型的大小

主要内容

结构

image-20201230103849874

​ 主要结构 不必 多说 很清晰。主要要注意以下几个点:

  • 共享编码区的权重 提高了训练的稳定性,减少了模型大小
  • 采用了 三个 鉴别器
    • 多尺度鉴别器就是 在三个不同尺度各一个鉴别器来鉴别真假。因为仅仅一个全局鉴别器很难同时关注所有的区域,大尺度可以更好的关注大区域,小尺度可以更好关注细节区域
    • 颜色鉴别器:注意 图上 未画出。实际在图像输入颜色鉴别器之前首先使用了 一个低通滤波器,以过滤纹理边缘信息,使得鉴别器只关注 颜色
    • 纹理鉴别器:同上,输入鉴别器前,通过高斯高通滤波器提取出了 纹理细节,避免颜色影响。接着再编码->CPAM->分类输出结果。
image-20201230104605270
image-20201230104650389

上式是论文贴的 低通滤波器。

损失

  1. 对抗损失
  2. 循环一致损失 EnlightenGAN 中提出 由于不成对缺乏 很好的约束 ,所以它采用了 自监督损失(输入输出VGG),但是这里也用了VGG损失,也用了 循环一致损失,为啥?不过可以看出文章作者并未多提 循环一致这个事儿,说明不是创新点。
  3. 颜色损失:论文中 单独列出,我以为包含在 对抗损失之中?
  4. 保留损失:就是输入输出 VGG损失
  5. 重建损失:就是输入输出的L1距离 不知道为啥要这个损失 感觉 还不如VGG
image-20201230105254104

实验结果

论文 从以下几个方面做实验:

  1. 和其他方法的定量对比 在 ETH数据集上对比 。
  2. 和其他方法做 USER STUDY实验
  3. 消融实验 , 验证 三种对抗其 和 CPAM 模块的作用、
  4. 在 应用 上,和SLAM 检测 这两个具体任务结合 分别验证对他们带来的性能提升。

SID-NISM: A Self-supervised Low-light Image Enhancement Framework

主要思路

  1. 类似RetinexNet 的方法构建分解网络,但是在是无监督的 多以区别在于 它 将低光照图的 直方图均衡化版本作为高亮度版本一起分解,构建场景一致性损失。
  2. 考虑了噪声,I = R X L + N
  3. 第二阶段的 光照调整方法 不是gamma 矫正,是作者自己提出的新的函数 这个可以借鉴

主要内容

image-20201231103107211

损失函数

image-20201231103305198

均衡后的图像的 分解产生的 R 要和 低光照图直接分解产生的R 一致

image-20201231103339686

光照平滑和一致损失,第一项表明 光照分段平滑,以反射率图的梯度加权。第二项以高低光照图自身梯度加权,是为了让在两张图中都是边缘的地方损失小,非共同边缘的地方损失大,即两张光照图的边缘一致。这和RetinexNet中的损失一致

image-20201231103645591

第一项,意思为增强后的图像的 梯度要比原图像放大beta倍,当然 计算原输入图像 S 的梯度的时,滤掉了梯度较小的地方。第二项是,输入图像的 HSV中的H通道和 分解R的 H通道要一致,防止颜色乱变。

image-20201231103920053

最后一项是噪声 一致的 ,输入图像乘 噪声估计图N ,约束噪声的大小。(不知道为啥)

光照调整

image-20201231104256103

​ 这个阶段是整篇文章比较有意思的地方。它分析了直接用GAMMA矫正来调整光照图带来的问题,然后针对它进行了改进,提出了一个新的光照调整函数。

​ 具体的,图像R的对比度由于暗区域的过度增亮而被破坏。最终增强图像的照明水平仍然不足,因为明亮区域几乎没有变化。一句话总结就是,gamma矫正过分的提高了暗区域的光照,导致R*L 乘回去之后,R衰减的太少,使得整体效果显得过增强。对于亮区域gamma 矫正又几乎不调整,导致亮区域的低光光照被拉低。按它的思路应该是 暗区域亮度拉升变缓,以抑制R的过曝,亮区域亮度要再提高免得亮区域亮度乘上系数后又被压缩回去了。(是这样嘛???)

​ 按照上述逻辑 作者提出的曲线波形是NIMS的形状,表达式为:

image-20201231105830496
image-20201231105852294

首先对光照图的像素亮度进行聚类,(两类)。分为亮像素和暗像素,去亮像素区的最小亮度值作为T,计算yita。参数 yita 的意义在于,在NISM下将亮像素的最小照明值映射到0.8

Self-supervised Image Enhancement Network: Training with Low Light Images Only

主要贡献

  • 基于最大熵和 Retinex 模型,构建了一个无监督的低光照图像增强网络,不需要paired图像训练。甚至是可以只用一张图像训练网络。
  • 提出的网络速度很快

主要方法

​ 文章的思想是。设计一个网络,分解产生 反射率图 和 光照图。而为了实现自监督的目的,即仅仅使用低光照图像来训练,就需要设计一系列的损失函数来约束网络学习的方向。这里主要就用到了熵最大化的约束条件。熵最大化就是当图像的直方图分布服从均匀分布时,它的熵最大,因此 反射率图的学习 很大程度上是依赖这个熵最大化约束,否则在没有参考的正常图像的情况下没法学到合理的 反射率。

损失函数

  1. 重建损失,和常规的一样

  2. 反射率图 R 的约束:

    \[l_{R}=\left\|\max _{c \in R, G, B} R^{c}-F\left(\max _{c \in R, G, B} S^{c}\right)\right\|_{1}+\lambda\|\triangle R\|_{1}\]

    其中 \(F(.)\) 代表直方图均衡化后的结果。第一项的含义为,取输入低光照图像的最大亮度通道(并非固定的R,G,B中的一个),对它做直方图均衡化,并将这个作为网络输出的反射率图的最大通达的参考结果。第二项对反射率图的梯度约束的作用是抑制噪声。

    使用最大像素通道的目的:

    • 对于弱光图像,最大通道对其视觉效果的影响最大
    • 如果选择其他通道,则可能会出现通道值的饱和,因为控制住最大通道得像素值不饱和,那么其他低于他的像素值肯定不会饱和。
    • 如果我们选择其中一个颜色通道,比如R, G或B通道,就不符合自然图像规律。

    使用直方图均衡化的原因

    • 直方图均衡化可以大大提高图像的信息熵。
  3. 光照图的约束,采用的即为Retinex-Net 这篇文章中的损失

\[ \mathcal{L}_{i s}=\sum\left\|\nabla I_{i} \circ \exp \left(-\lambda_{g} \nabla R_{i}\right)\right\| \]

  1. 综合上述,即为本文的损失函数

优点

​ 大部分基于模型的方法,其实就是类似上述设计一个根据各种先验设计损失函数,然后将损失函数转换到频域使用FFT加快计算,不断迭代得到增强结果。上式设计的损失函数其实也可以类似优化,但是作者是使用一个小网络来完成的,之所以选用后者的方法,有如下原因:

  1. 使用传统的FFT优化,在每一张图像增强的过程中都需要 迭代优化,而且损失函数越复杂,计算量就越大,不同图像迭代次数也不一样时间开销也不一样。

  2. 同时,传统的解决方案不能利用大数据,以前的数据处理对新的数据处理毫无帮助。

  3. 与有监督的CNN方法比,这种方法不需要精心设计的训练数据就能达到较好的效果,且精心设计的参考图像不一定能包含实际需要的所有场景,泛化能力不好。相对基于模型的传统方法,本文的算法在计算速度上有有优势。

网络结构

1590054658337

​ 关于结构,卷积层和sigmod层的叠加也可以产生可以接受的结果。然而,如果添加一些concat层,增强结果将变得更加清晰。作者还采用了上采样和下采样的结构,这样的结构可以起到抑制噪声的作用,但是有些场合中会带来模糊的效果。

实验

实验细节

​ 使用LOL dataset中的485张 低光照图像训练,15张做测试。batch_size = 16,path_size=48x48

训练时间的影响

​ 作者训练了1000epoch,没20epoch在测试集上计算一次 各种指标,包括GE CE GMI SSIM NIQE.... 最终的结论是,取在 200epoch输出的模型参数。因为随着 epoch的增加,虽然一些表征清晰度的指标会效果变好,但是像SSIM这种有参考图像的指标会越来越差,这是因为噪声的影响。所以为了在噪音和清晰度之间保持一个平衡,选择在200epoch停止。

重复稳定性

​ 这部分实验目的就是 反复训练几次,对比每次训练的结果是不是可以反复复现。结论是 一些指标不是特别稳定,这可能是由于 L1 损失函数的解不唯一的原因?但是 整体出来的视觉效果差不多,所以说 该文方法可重复复现,具有稳定性。

与其他方法对比

Progressive Retinex: Mutually Reinforced Illumination-Noise Perception Network for Low Light Image Enhancement

贡献

  • 提出了一种基于Retinex模型的 渐进式训练结构,低光图像的照度和噪声以一种相互增强的方式被感知,即光照估计和去噪交替进行训练。一方面用训练的光照图知道去噪网络训练,接着反过来去噪模型知道光照估计,如此交替
  • 提出了两个基于 全point-wise CNN的 光照估计和噪声估计网络
  • 在真实和合成数据集上均效果良好