EnlighenGAN 使用指南
- EnlightenGAN 网络结构 = 生成器(带自注意力机制的 U-Net)+ 判别器(两个全局-局部鉴别器)
- 优化目标
- 环境搭建和训练自己的数据
暗光图像增强:
优点在于,可以不用成对数据,一个场景的暗光/正常光的两张图。
EnlightenGAN 论文:https://arxiv.org/abs/1906.06972
EnlightenGAN 项目代码:https://github.com/VITA-Group/EnlightenGAN
EnlightenGAN 网络结构 = 生成器(带自注意力机制的 U-Net)+ 判别器(两个全局-局部鉴别器)
EnlightenGAN整体的方法和思想:
-
全局-局部鉴别器(PatchGAN来鉴别真/假)就像是一个帮你检查画面的专家。全局鉴别器会检查整个画面的光照情况,而局部鉴别器会更关注画面中的一些细节。他们会告诉你哪些地方需要改善,比如哪些地方需要增加亮度,哪些地方需要更清晰的细节。
-
自注意力机制,保留原始画面的特征和细节。它会非常小心地修改画面,使得画面变得更亮、更清晰,但同时也会确保不丢失原始画面的特色。
输入是,图中第二幅灰色图: -
是把原图转为灰度图
-
归一化灰度图
-
1 - 归一化灰度图,突出暗部部分
-
相当于注意力机制,重点关注暗部部分
EnlightenGAN 主干网络是 U-Net。
最后是,全局-局部鉴别器:
-
全局鉴别器(上图第一个灰色块,判断生成的图像和真实图像之间的整体光照差异,改善图像的全局光照特征):对抗性损失来最小化真实图像和输出图像的光照分布的距离。但全局鉴别器,对于一些暗场景下存在明亮区域的图像,适应性不够。
-
局部鉴别器(上图第二个灰色块,判断生成的图像和真实图像之间的局部细节差异。改善图像的细节特征):用的 PatchGAN来鉴别真/假 来鉴别真/假。从输出图像和真实图像中随机采样 5 个图像块(上图),来判断是真实图像还是模型增强出来的图像。解决全局鉴别器带来的局部曝光不足或过度的情况了。
流程:U-Net 得到特征图,和注意力图,像素相乘,加到原图上,得到增强结果。
优化目标
生成器损失-特征保持损失:最小化输入图像和生成图像在相同层和通道上特征差异,生成图像中保留的原始特征和结构。
- L S F P ( I L ) = 1 W i , j H i , j ∑ x = 1 W i , j ∑ y = 1 H i , j ( ϕ i , j ( I L ) − ϕ i , j ( G ( I L ) ) ) 2 \mathcal{L}_{SFP}(I^L)=\frac{1}{W_{i,j}H_{i,j}}\sum_{x=1}^{W_{i,j}}\sum_{y=1}^{H_{i,j}}(\phi_{i,j}(I^L)-\phi_{i,j}(G(I^L)))^2 LSFP(IL)=Wi,jHi,j1∑x=1Wi,j∑y=1Hi,j(ϕi,j(IL)−ϕi,j(G(IL)))2
I L I^L IL表示暗光图像(没有增强的图)。
G ( I L ) G(I^L) G(IL)表示增强后的图。
增强前、后只改变亮度,语义、结构、内容都不能改变,需要一种叫 特征保持的损失。
判别器损失-非饱和损失:
- 全局判别器,把增强后的图、真实图输入到全局判别器,进行真假判别
- 局部判别器:从增强后的图、真实图随机裁剪 5 个图像块,输入局部判别器,进行真假判别
非饱和损失是:不是对真、假样本的输出强制约束一个数,而是相对约束,真样本数据大于假样本、假样本数据小于真样本。
- D R a ( x r , x f ) = σ ( C ( x r ) − E x f ∼ P t a l [ C ( x f ) ] ) , ( 1 ) D R a ( x f , x r ) = σ ( C ( x f ) − E x r ∼ P t a l [ C ( x r ) ] ) , ( 2 ) \begin{aligned}D_{Ra}(x_{r},x_{f})&=\sigma(C(x_{r})-\mathbb{E}_{x_{f}\sim\mathbb{P}_{\mathrm{tal}}}[C(x_{f})]),\quad(1)\\\\D_{Ra}(x_{f},x_{r})&=\sigma(C(x_{f})-\mathbb{E}_{x_{r}\sim\mathbb{P}_{\mathrm{tal}}}[C(x_{r})]),\quad(2)\end{aligned} DRa(xr,xf)DRa(xf,xr)=σ(C(xr)−Exf∼Ptal[C(xf)]),(1)=σ(C(xf)−Exr∼Ptal[C(xr)]),(2)
D R a ( x r , x f ) D_{Ra}(x_{r},x_{f}) DRa(xr,xf) 表示判别器对真实图像和生成图像的输出,即判别器判断真实图像为真实样本的概率。
D R a ( x f , x r ) D_{Ra}(x_{f},x_{r}) DRa(xf,xr) 表示判别器对生成图像和真实图像的输出,即判别器判断生成图像为真实样本的概率。
x f x_f xf 是假样本、 x r x_r xr 是真样本、 C ( x f ) C(x_{f}) C(xf) 是判别器输出、 σ \sigma σ 是将判别器的输出进行映射,将其范围限制在0到1之间。
全局判别器损失:
局部判别器损失:
最后整个EnlightenGAN的loss为:
环境搭建和训练自己的数据
请猛击:EnlightenGAN的运行环境搭建和训练自己的数据