PCM 2018
论文主要不同点是采用不同的物理模型:I = J + H,雾图=无雾图+雾。所以设计了 Haze Density Prediction Network (HDP-Net)进行雾的浓度的预测,输入雾图得到雾的浓度图,然后通过雾图减去浓度图得到最终的无雾图。
物理模型来自于大气散射模型的衍生:
I h ( x ) = I ( x ) − J ( x ) I_{h}(x)=I(x)-J(x) Ih(x)=I(x)−J(x)
I h ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) − J ( x ) I_{h}(x)=J(x) t(x)+A(1-t(x))-J(x) Ih(x)=J(x)t(x)+A(1−t(x))−J(x)
I h ( x ) = ( A − J ( x ) ) ( 1 − t ( x ) ) I_{h}(x)=(A-J(x))(1-t(x)) Ih(x)=(A−J(x))(1−t(x))
The haze density map could be obtained by extracting the feature value in [ − 1, 1] by CNN。
采用均方误差: L o s s = ∑ ∥ J − ( I − I conv ) ∥ 2 Loss=\sum\left\|J-\left(I-I_{\text {conv}}\right)\right\|_{2} Loss=∑∥J−(I−Iconv)∥2
ps:
本文的重点是:模型的推理,可以作为一个模型创新应用到daytime dehaze,网络采用的也是简单的网络,并不复杂。但后续跟进发现本文最大的一个问题:训练数据集的问题,这是中山大学的一个工作,但是在数据集合成上,很粗糙,采用的是夜间图片切片,然后深度图采用DCP估计,这不是一个合适的做法。不过目前并没有公开的夜间雾图数据集,这个也算是第一个了,虽然质量真的不好!
WACV 2019
本文的创新点主要是网络架构的两点:1)采用latest smoothed dilation technique 取代dilated convolution以消除网格光晕。2)利用gated fusion sub-network进行不同levels上的feature maps的融合。
其次,本文的网络在deraining任务上也效果出众。
本身创新点看起来一般,但是本文的重点是最终的实验部分数据极其出色,远远高出各种SOTA方法(值得复现)。
本文的学习目标也是雾图和无雾图之间的残差(雾!)
r = J − I r ^ = G C A N e t ( I ) L = ∥ r ^ − r ∥ 2 \begin{aligned} r &=J-I \\ \hat{r} &=G C A N e t(I) \\ \mathcal{L} &=\|\hat{r}-r\|^{2} \end{aligned} rr^L=J−I=GCANet(I)=∥r^−r∥2
Experiments
结果极好!
deraining效果
ablation experiment:各集成的创新点也效果明显。
tricks
ps:1)实验可见gated fusion其实作用不大,倒是instance norm作用明显,考虑其他多尺度融合策略,如CVPR2019提出的HRNet的网络部分。2)Loss Function作者也说了,其他Loss如 the perceptual loss通常是可以增加效果的!3)特征图上的attention机制的尝试(基于全局深度图的考虑,它是需要全局信息的,若没有attention只是局部信息)。
IET Image Processing 2018
由于IET的审稿周期较长,本文的内容显得有些寻常。
Generator
在原始的U-Net基础上使用 54 Layer Tiramisu (The one hundred layers tiramisu: Fully convolutional densenets for semantic segmentation,CVPRW2017)结构,据说可以加强数据和梯度的流动,训练参数能大大减少(1M)
Discriminator
采用原生的Patch GAN(Image-To-Image Translation With Conditional Adversarial Networks,CVPR2017),采用70x70
patch discriminator。This removes a good amount of artefacts in the images。
Input shapes are 256,256,3 for generator and 256,256,6 for the discriminator.
Loss
L o s s total = W g a n ∗ L A d v + W L 1 ∗ L L 1 + W v g g ∗ L v g g Loss_{\text {total}}=W_{g a n} * L_{A d v}+W_{L 1} * L_{L 1}+W_{v g g} * L_{v g g} Losstotal=Wgan∗LAdv+WL1∗LL1+Wvgg∗Lvgg
对抗Loss:
L A d v = E ( x , y ) [ log ( D ( x , y ) ] + E ( x , z ) [ log ( 1 − D ( x , G ( x , z ) ) ] L_{A d v} =\mathbb{E}_{(x, y)}[\log (D(x, y)] + \mathbb{E}_{(x, z)}[\log (1-D(x, G(x, z))] LAdv=E(x,y)[log(D(x,y)]+E(x,z)[log(1−D(x,G(x,z))]
Smooth L1 loss:减少光晕,reduce artefacts
L L 1 = E x , y , z [ ∥ y − G ( x , z ) ∥ 1 ] L_{L 1}=\mathbb{E}_{x, y, z}\left[\|y-G(x, z)\|_{1}\right] LL1=Ex,y,z[∥y−G(x,z)∥1]
Perceptual Loss:VGG-19 network(预训练好的网络,仅用做特征图的loss计算),文中采用的是VGG19的POOL-4输出
L v g g = 1 C W H ∑ c = 1 C ∑ w = 1 W ∑ h = 1 H ∥ V ( G ( x , z ) c , w , h ) − V ( y c , w , h ) ∥ 2 2 L_{v g g}=\frac{1}{C W H} \sum_{c=1}^{C} \sum_{w=1}^{W} \sum_{h=1}^{H}\left\|V\left(\mathrm{G}(x, z)^{c, w, h}\right)-V\left(y^{c, w, h}\right)\right\|_{2}^{2} Lvgg=CWH1c=1∑Cw=1∑Wh=1∑H∥∥V(G(x,z)c,w,h)−V(yc,w,h)∥∥22
Weight Parameters
W v g g = 10 , W g a n = 2 , W L 1 = 100 W_{vgg}=10,W_{gan}=2,W_{L1}=100 Wvgg=10,Wgan=2,WL1=100
hyper-parameters
LearningRate=0.001,优化器采用 Adam Optimizer ,设备: Nvidia GTX 950M (2GB) 笔记本
Experiment Results
可以看出实验结果强于3个SOTA方法,但是作者也说了是因为其训练样本相似的问题。其实在NYU Depth Dataset上合成图像做去雾,20.32的PSNR忽略其他因素也就和ECCV2017的AOD-Net差不多,所以从实验部分来看,本文其实并没有太多出彩点,实验部分也并没有太多其他的补充,如果在RESIDE数据集上做测试的话,应该也不会强太多(投稿时RESIDE应该还没发布)。
补充说明:上述结果中的Score竟然是作者自己的评分规则,这也是够奇葩的,尽然还通过了评审,貌似TIP 2015专门有一篇文章(Referenceless Prediction of Perceptual Fog Density and Perceptual Image Defogging)提出了一种评价去雾算法的指标,显然会更具说服力。这里的Score是作者自己分配权重的PSNR和SSIM的权重和……
S c o r e = W P S N R ∗ P S N R + W S S I M ∗ S S I M Score=W_{P S N R} * P S N R+W_{S S I M} * S S I M Score=WPSNR∗PSNR+WSSIM∗SSIM
这里PSNR weight = 0.05,SSIM weight = 1.
ps:
本文能说的点不多,主要是多个论文成果的集成应用。值得学习的是在生成网络的去模糊上,采取了3个tricks。L1 loss + Perceptual Loss + Patch GAN,值得一试,不过这也都是原论文提出的。其次,在计算资源有限时,可以试试这个网络(毕竟作者用笔记本训练的)。
本文是最近发表在arxiv上的出色的工作,用GAN实现的Face Editing,本身与dehaze无关,关注这片文章主要的切入点是想看看他是如何利用Sketch和Color信息的,因为我的想法是在生成模型中Sketch和Color正好是dehaze task的痛点(雾的结果就是两点:edge lose,color shift),所以从这个角度看,该工作和去雾是有联系的。
The encoder of our generator receives input tensor of size 512×512×9: an incomplete RGB channel image with a removed region to be edited, a binary sketch that describes the structure of removed parts, a RGB color
stroke map, a binary mask and a noise.
并没有太多关于color和sketch的处理,不过提取color和sketch的过程论文中看起来还是挺麻烦的,需要很仔细阅读其过程。
ps:1)不要以为网络能学到边缘细节,附加的handicraft feature看起来也很重要。2)VGG loss在实验中证明还是很重要的。
本文的前两点贡献其实没有多大新意,但是其guilded filtering做去halo的后处理的方式值得借鉴。下图可见其post-processing module效果还是比较明显的。
Loss:GAN中常用的loss
l = w 1 l M S E + w 2 l V G G + w 3 l A d v l=w_{1} l_{M S E}+w_{2} l_{V G G}+w_{3} l_{A d v} l=w1lMSE+w2lVGG+w3lAdv
有所不同的是,之前的GAN通常权重w是固定的,本文提出根据不同的haze density采取自适应的权重,即adaptive perceptual loss。
这是由于在大气散射模型中,直接衰减项 J ( x ) t ( x ) \mathbf{J}(x) t(x) J(x)t(x) 表示了雾的浓度,它通常是相关于散射系数 β \beta β的。 More specifically, we propose to use larger w1 under heavy haze situation (i.e., more emphasis on haze removal) and larger w3 under light haze condition (i.e., more emphasis on quality assurance).其他类似工作中都采用fixed weights,所以这点到底有没有work不太好说。
halo artifacts removal
看起来效果比较明显,过程如下:
过程简单明了。
ps:
CVPR 2019,微软亚洲研究院和中科大提出
本文是Human Pose Estimation方面的最新工作,与dehaze关系不大,但文章提出了一种新颖的网络结果,用以解决当前很多网络中multi-scale feature fusion方法中存在的问题。比如在low-level task中常采用的U-Net就存在多次下采样和上采样操作,在特征空间中,下采样必定意味着后续的特征提取会丢失上层信息,导致下层提取的特征天然缺陷,即使最终concatenate到上层特征图,也不能解决其自身“出身不正”问题。
所以文本的学习切入点主要是网络结构的设计,可以作为dehazing network design中的一个尝试,直观上感觉可能会和attention机制类似,但是attention机制是在当前特征图上相对某个特征元素进行单个特征图的全局的关联,而DHNet(本文提出的网络)结构是在不同分辨率的特征图上进行的交叉关联。
High-Resolution Representation,表达的应该就是特征图中时刻关联着高分辨图中提取的特征。
对比已有的网络在不同分辨率特征融合时的操作如下:
高底层交换信息方法(fusion)
ps:
本文粗读至此,重点在于新的fusion思路的点播,可以在自己的使用中尝试看看会不会work,进一步学习可以仔细琢磨作者的开源代码。
在许多图像恢复任务中(如deblur、dehaze、deraining),其恢复方式甚至物理模型都具有很大的相似性,同时GAN在处理这些问题时都取得了不错的结果,故本文提出一个统一的模型来解决这类low-level问题:given an input image y, how to estimate a clear image x of the same scene。
如标题所示,本文的动机源于已有的网络往往只关注最终的结果,而不能保证结果是否符合其物理模型。若不符合物理模型约束,得到的结果会在某些局部结构或者细节上出现错误。所以网络同时能还原图像并且保证其符合物理模型就是本文的目标!
实现的方式就是:在原本GAN的基础上,增加一个判别器,用来判别是否符合物理模型,如下图所示
在去雾任务中,Generator产生的去雾图G(yi)先经过普通的Discriminator判断是否去雾(fake or not),再将其通过大气散射模型合成得到雾图,然后通过判别器判别两个雾图是否同分布。这样保证了,正向得到的去雾图是去雾的,逆向,去雾图后的图符合大气散射模型(根据该模型能合成回原来的雾图),细节问题是合成的时候t和A咋办?真实的无标注图像无法用作训练喽?
Loss Function
L1 loss使得生成的haze-free图像接近ground truth,同时generated dehazed image再合成的雾图与原雾图接近。
L p = ∑ i ∥ y ~ i − y i ∥ 1 \mathcal{L}_{p}=\sum_{i}\left\|\widetilde{y}_{i}-y_{i}\right\|_{1} Lp=i∑∥y i−yi∥1
L g = ∑ i ∥ G ( y i ) − x i ∥ 1 \mathcal{L}_{g}=\sum_{i}\left\|\mathcal{G}\left(y_{i}\right)-x_{i}\right\|_{1} Lg=i∑∥G(yi)−xi∥1
L ~ g = ∑ i ∥ G ( y ~ i ) − x i ∥ 1 \widetilde{\mathcal{L}}_{g}=\sum_{i}\left\|\mathcal{G}\left(\widetilde{y}_{i}\right)-x_{i}\right\|_{1} L g=i∑∥G(y i)−xi∥1
这个Loss有点看不懂了,相当于原雾图去雾后的图合成新雾图再去雾得到的结果和ground truth,这也太繁琐了吧……
判别器loss:两个判别器的常规的GAN loss之和,前两项为真伪判别器,后两项为物理模型判别器。
L a = ∑ i [ log ( D g ( x i ) ) ] + [ log ( 1 − D g ( G ( y i ) ) ) ] + [ log ( D h ( y i ) ) ] + [ log ( 1 − D h ( y ~ i ) ) ] \begin{aligned} \mathcal{L}_{a}=\sum_{i}\left[\log \left(\mathcal{D}_{g}\left(x_{i}\right)\right)\right]+\left[\log \left(1-\mathcal{D}_{g}\left(\mathcal{G}\left(y_{i}\right)\right)\right)\right]+\left[\log \left(\mathcal{D}_{h}\left(y_{i}\right)\right)\right]+\left[\log \left(1-\mathcal{D}_{h}\left(\widetilde{y}_{i}\right)\right)\right] \end{aligned} La=i∑[log(Dg(xi))]+[log(1−Dg(G(yi)))]+[log(Dh(yi))]+[log(1−Dh(y i))]
整体的训练Loss
( G ∗ , D g ∗ , D h ∗ ) = min G max D 1 N { L a + λ ( L p + L g + L ~ g ) } \left(\mathcal{G}^{*}, \mathcal{D}_{g}^{*}, \mathcal{D}_{h}^{*}\right)=\min _{\mathcal{G}} \max _{\mathcal{D}} \frac{1}{N}\left\{\mathcal{L}_{a}+\lambda\left(\mathcal{L}_{p}+\mathcal{L}_{g}+\widetilde{\mathcal{L}}_{g}\right)\right\} (G∗,Dg∗,Dh∗)=GminDmaxN1{La+λ(Lp+Lg+L g)}
判别器使用的也是PatchGAN:减少判别器参数,同时效果很好。
ps:
本文最大的两点是多判别器的引入,以及通过判别器实现物理模型约束。
CVPRW 2018, NTIRE2018-Dehazing Challange
Experiments
S表示single scale,Le表示MSE loss,Lp表示perceptual loss,M表示Multi-Scale
ps:
本文提供的trick应该是很有效的,尤其是对于高分辨率生成任务!
CVPRW 2018, NTIRE2018-Dehazing Challange
本文和前文目标一样,针对高分辨率图像的去雾,但是本文采用的是Cycle-GAN的框架,可以unpair的训练。但是其实结果并不如前文,此处仅单独提出其一些spotlight出来。
CVPR 2018
(abstract来看,工作的创新点并不是太亮眼,可能在当时时间点上是比较创新的工作)
Loss
generator loss:
L A = 1 N ∑ i = 1 N log ( 1 − D ( I i , J ~ i ) ) L_{A}=\frac{1}{N} \sum_{i=1}^{N} \log \left(1-D\left(I_{i}, \widetilde{J}_{i}\right)\right) LA=N1i=1∑Nlog(1−D(Ii,J i))
L P = 1 N ∑ i = 1 N ∥ F i ( G ( I i ) ) − F i ( J i ) ∥ 2 2 L_{P}=\frac{1}{N} \sum_{i=1}^{N}\left\|\mathcal{F}_{i}\left(G\left(I_{i}\right)\right)-\mathcal{F}_{i}\left(J_{i}\right)\right\|_{2}^{2} LP=N1i=1∑N∥Fi(G(Ii))−Fi(Ji)∥22
L T = 1 N ∑ i = 1 N ( ∥ G ( I i ) − J i ∥ 1 + λ ∥ ∇ G ( I i ) ∥ 1 ) L_{T}=\frac{1}{N} \sum_{i=1}^{N}\left(\left\|G\left(I_{i}\right)-J_{i}\right\|_{1}+\lambda\left\|\nabla G\left(I_{i}\right)\right\|_{1}\right) LT=N1i=1∑N(∥G(Ii)−Ji∥1+λ∥∇G(Ii)∥1)
L = α L A + β L P + γ L T \mathcal{L}=\alpha L_{A}+\beta L_{P}+\gamma L_{T} L=αLA+βLP+γLT
其中, α = 1 , β = 150 , γ = 150 , λ = 1 0 − 5 \alpha=1, \beta=150, \gamma=150, \lambda=10^{-5} α=1,β=150,γ=150,λ=10−5
Discriminator loss:
max D 1 N ∑ i = 1 N ( log ( 1 − D ( I i , J ~ i ) ) + log ( D ( I i , J i ) ) ) \max _{D} \frac{1}{N} \sum_{i=1}^{N}\left(\log \left(1-D\left(I_{i}, \widetilde{J}_{i}\right)\right)+\log \left(D\left(I_{i}, J_{i}\right)\right)\right) DmaxN1i=1∑N(log(1−D(Ii,J i))+log(D(Ii,Ji)))
AAAI 2018
和Cycle-Dehaze类似,采用CycleGAN策略实现unpair的训练。
创新点:多尺度的discrimination loss(文中采用的尺度为70x70, 256x256,两个尺度上的D loss)
The classical GAN loss can be described as:
L G A N ( G , D ) = E J ∼ J [ log D ( J ) ] + E I ∼ I [ log ( 1 − D ( G ( I ) ) ) ] \mathcal{L}_{G A N}(G, D)=\mathbb{E}_{J \sim \mathcal{J}}[\log D(J)]+\mathbb{E}_{I \sim \mathcal{I}}[\log (1-D(G(I)))] LGAN(G,D)=EJ∼J[logD(J)]+EI∼I[log(1−D(G(I)))]
本文提出的loss:
L a d v ( G J , D ) = 1 2 ( L G A N ( G J , D l o c ) + L G A N ( G J , D g l o ) ) \mathcal{L}_{a d v}\left(G_{J}, D\right)=\frac{1}{2}\left(\mathcal{L}_{G A N}\left(G_{J}, D^{l o c}\right)+\mathcal{L}_{G A N}\left(G_{J}, D^{g l o}\right)\right) Ladv(GJ,D)=21(LGAN(GJ,Dloc)+LGAN(GJ,Dglo))
原理图:
可以作为一个增强discriminator的trick
本文的loss还是有些不同的
reconstruction loss:并没有采用常见的L2 loss,原文解释是encourage both pixel-level consistency and less blurring (compared with L2 loss),其采用的L1 loss。
L r e c o n ( G J , G t , G A ) = E I ∼ I ∥ I − I ^ ∥ 1 \mathcal{L}_{r e c o n}\left(G_{J}, G_{t}, G_{A}\right)=\mathbb{E}_{I \sim I}\|I-\hat{I}\|_{1} Lrecon(GJ,Gt,GA)=EI∼I∥I−I^∥1
GAN loss采用的是上述multi-scale adversarial loss
L a d v ( G J , D ) = 1 2 ( L G A N ( G J , D l o c ) + L G A N ( G J , D g l o ) ) \mathcal{L}_{a d v}\left(G_{J}, D\right)=\frac{1}{2}\left(\mathcal{L}_{G A N}\left(G_{J}, D^{l o c}\right)+\mathcal{L}_{G A N}\left(G_{J}, D^{g l o}\right)\right) Ladv(GJ,D)=21(LGAN(GJ,Dloc)+LGAN(GJ,Dglo))
同时加入了一个正则loss,用来平滑图像, total variation loss,常用于style-transfer(https://github.com/CortexFoundation/StyleTransferTrilogy)
L r e g ( G t ) = T V ( t ) = ∑ i , j ∣ t i + 1 , j − t i , j ∣ + ∣ t i , j + 1 − t i , j ∣ \mathcal{L}_{r e g}\left(G_{t}\right)=T V(t)=\sum_{i, j}\left|t_{i+1, j}-t_{i, j}\right|+\left|t_{i, j+1}-t_{i, j}\right| Lreg(Gt)=TV(t)=i,j∑∣ti+1,j−ti,j∣+∣ti,j+1−ti,j∣
最终的loss为:
L ( G J , G t , G A , D ) = L a d v ( G J , D ) + λ L r e c o n ( G J , G t , G A ) + γ L r e g ( G t ) \begin{array}{r} {\mathcal{L}\left(G_{J}, G_{t}, G_{A}, D\right)=\mathcal{L}_{a d v}\left(G_{J}, D\right)+\lambda \mathcal{L}_{r e c o n}\left(G_{J}, G_{t}, G_{A}\right)+\gamma \mathcal{L}_{r e g}\left(G_{t}\right)} \end{array} L(GJ,Gt,GA,D)=Ladv(GJ,D)+λLrecon(GJ,Gt,GA)+γLreg(Gt)
实验中的权重参数为:(文章竟然没给权重参数……)