论文阅读:HardGAN: A Haze-Aware Representation Distillation GAN for Single Image Dehazing

论文题目及作者
代码:https://github.com/huangzilingcv/HardGAN

1. 摘要

    本文提出了Haze-Aware Representation Distillation GAN(HardGAN),用于单幅图像去雾。

2. 网络结构

    下图1展示了生成器结构。对于判别器,文章已说明,使用的是《Image-to-image translation with conditional adversarial networks》中的patch-GAN的判别器。
网络总体结构

图1 生成器结构

Generator

    图中,蓝色HARD模块为Haze-Aware Representation Distillation(HARD)模块。生成器由粗到细分为三层,即图1中的三行。第一层为最粗略层,包含五个HARD模块;第二层为中间层,包含了六个HARD模块;第三层为最精细层,包含了八个HARD模块。
    给定一张雾图 X X X和其对应的Ground-Truth Y Y Y,用 x m n x_m^n xmn y m n y_m^n ymn表示第m层的第n个HARD模块。第一层和第二层的输入分别为 X ↓ X\downarrow X X ↓ ↓ X\downarrow\downarrow X,其中 ↓ \downarrow 代表下采样。

符号解释
    符号举例如图所示, x x x表示模块输入, y y y表示模块的输出。

    第一层和第二层前半部分的输入公式化如下:
x 2 n = A D D ( y 3 n − 1 ↓ , y 2 n − 1 ) (2) x_{2}^{n}=A D D\left(y_{3}^{n-1} \downarrow, y_{2}^{n-1}\right) \tag{2} x2n=ADD(y3n1,y2n1)(2)

x 1 n = A D D ( ( y 3 n − 1 ↓ ) ↓ , y 2 n − 1 ↓ , y 1 n − 1 ) (3) x_{1}^{n}=A D D\left(\left(y_{3}^{n-1} \downarrow\right) \downarrow, y_{2}^{n-1} \downarrow, y_{1}^{n-1}\right) \tag{3} x1n=ADD((y3n1),y2n1,y1n1)(3)

    有了上图的解释, ( 2 ) ( 3 ) (2)(3) (2)(3)就很好理解了。举个例子,当 n = 3 n=3 n=3时,有:
x 2 3 = A D D ( y 3 2 ↓ , y 2 2 ) x_{2}^{3}=A D D\left(y_{3}^{2} \downarrow, y_{2}^{2}\right) x23=ADD(y32,y22)

x 1 3 = A D D ( ( y 3 2 ↓ ) ↓ , y 2 2 ↓ , y 1 2 ) x_{1}^{3}=A D D\left(\left(y_{3}^{2} \downarrow\right) \downarrow, y_{2}^{2} \downarrow, y_{1}^{2}\right) x13=ADD((y32),y22,y12)

    第二层和第三层后半部分的输入公式化如下:
x 2 n = A D D ( y 1 n − 1 ↑ , y 2 n − 1 ) (4) x_{2}^{n}=A D D\left(y_{1}^{n-1} \uparrow, y_{2}^{n-1}\right) \tag{4} x2n=ADD(y1n1,y2n1)(4)

x 3 n = A D D ( ( y 1 n − 1 ↑ ) ↑ , y 2 n − 1 ↑ , y 3 n − 1 ) (5) x_{3}^{n}=A D D\left(\left(y_{1}^{n-1} \uparrow\right) \uparrow, y_{2}^{n-1} \uparrow, y_{3}^{n-1}\right) \tag{5} x3n=ADD((y1n1),y2n1,y3n1)(5)

    其中, A D D ( ⋅ ) ADD(\cdot) ADD()表示逐通道相加, ↑ \uparrow 表示上采样。

HARD模块

    HARD模块结构如图2所示。
HARD模块结构

图2 HARD模块结构

    每个HARD模块包含两个分支。第一个分支(图2下半部分)用于生成每个通道的大气亮度和空间信息。第二个分支(图2上半部分)用于每个通道组合空间信息和大气亮度,它包含了三个子分支,分别用于雾感知图生成,全局大气亮度估计和空间信息插入。
    本文将每个通道的大气亮度编码为1×1×2的矩阵,表示为 γ i g \gamma_i^g γig β i g \beta_i^g βig(即1×1×2矩阵的第三个维度的两个值, i i i表示第 i i i通道),第一分支通过网络学习得到这两个元素。对于第二分支的第一子分支,利用这两个元素和输入图像得到全局大气亮度,公式如下:
G i = γ i g x − μ σ + β i g (6) G_{i}=\gamma_{i}^{g} \frac{x-\mu}{\sigma}+\beta_{i}^{g} \tag{6} Gi=γigσxμ+βig(6)

    其中, μ \mu μ σ \sigma σ为输入 x x x的均值和标准差。
    同样,对于每个通道的空间信息,第一分支将其编码为H×W×2的矩阵,表示为 γ i l \gamma_i^l γil β i l \beta_i^l βil。第二分支的第三子分支,利用这两个元素和输入图像得到:
L i = γ i l x − μ σ + β i l (7) L_{i}=\gamma_{i}^{l} \frac{x-\mu}{\sigma}+\beta_{i}^{l} \tag{7} Li=γilσxμ+βil(7)

    为了自适应地融合大气亮度和空间信息,将输出特征图馈入实例规范化,然后馈入Sigmoid层,以生成每个通道的雾度感知图 A A A,其中 A i A_i Ai表示第 i i i通道的雾度感知图。这种方法可确保我们的模型在遇到不规则类型的雾时更改其焦点。
    融合上述三个特征,得到输出:
y i = ( 1 − A i ) ⊗ G i + A i ⊗ L i (8) y_{i}=\left(1-A_{i}\right) \otimes G_{i}+A_{i} \otimes L_{i} \tag{8} yi=(1Ai)Gi+AiLi(8)

     ⊗ \otimes 表示逐元素相乘。

    不知道是我的理解有问题还是作者写的有问题,这一部分看的我云里雾里。例如,大气亮度如果是逐通道的话,为什么 ( 6 ) (6) (6)中的 x x x没有下标 i i i?又比如,第一分支相同的网络结构,为什么得到两种不同尺寸的输出(1×1×2和H×W×2)。

3. 损失函数

    损失函数包含三部分,分别为:对抗损失,平滑 L 1 L1 L1损失以及感知损失。总损失如下:
L = λ a d v L a d v + λ L 1 L 1 + λ p e r L p e r (9) \mathcal{L}=\lambda_{a d v} \mathcal{L}_{a d v}+\lambda_{L_{1}} \mathcal{L}_{1}+\lambda_{p e r} \mathcal{L}_{p e r} \tag{9} L=λadvLadv+λL1L1+λperLper(9)

    其中, λ 1 = 1.2 \lambda_1 = 1.2 λ1=1.2 λ p e r = 0.04 \lambda_{per} = 0.04 λper=0.04 λ a d v = 0.05 \lambda_{adv} = 0.05 λadv=0.05

3.1 Adversarial Loss

L a d v ( G , D ) = E [ D ( y ) ] − E [ D ( G ( x ) ) ] + λ E [ ( ∣ ∇ D ( α x − ( 1 − α G ( x ) ) ) ∣ − 1 ) 2 ] (10) \mathcal{L}_{a d v}(G, D)=E[D(y)]-E[D(G(x))]+\lambda E\left[(|\nabla D(\alpha x-(1-\alpha G(x)))|-1)^{2}\right] \tag{10} Ladv(G,D)=E[D(y)]E[D(G(x))]+λE[(D(αx(1αG(x)))1)2](10)

    该对抗损失应该只是理论上的。

3.2 Smooth L 1 L1 L1 Loss

     L 1 L1 L1损失公式如下:
L 1 = 1 N ∑ y = 1 N ∑ i = 1 3 α ( Y ^ i ( z ) − Y i ( z ) ) (11) \mathcal{L}_{1}=\frac{1}{N} \sum_{y=1}^{N} \sum_{i=1}^{3} \alpha\left(\hat{Y}_{i}(z)-Y_{i}(z)\right) \tag{11} L1=N1y=1Ni=13α(Y^i(z)Yi(z))(11)

    其中 Y ^ i ( z ) \hat{Y}_i(z) Y^i(z) Y i ( z ) {Y}_i(z) Yi(z)分别为去雾图和Ground-Truth在像素点 z z z上第 i i i通道的值。 N N N为总像素点数, α \alpha α定义如下:

α ( e ) = { 0.5 e 2 ,  if  ∣ e ∣ < 1 ∣ e ∣ − 0.5 ,  otherwise  (12) \alpha(e)=\left\{\begin{aligned} 0.5 e^{2}, & & \text { if }|e|<1 \\ |e|-0.5, & & \text { otherwise } \end{aligned}\right. \tag{12} α(e)={0.5e2,e0.5, if e<1 otherwise (12)

3.3 Perceptual Loss

    感知函数不多赘述,公式如下:
L per = ∑ j = 1 3 1 C j H j W j ∥ ϕ j ( y ) − ϕ j ( y t ) ∥ (13) \mathcal{L}_{\text {per}}=\sum_{j=1}^{3} \frac{1}{C_{j} H_{j} W_{j}}\left\|\phi_{j}(y)-\phi_{j}\left(y_{t}\right)\right\| \tag{13} Lper=j=13CjHjWj1ϕj(y)ϕj(yt)(13)

     ϕ j \phi_j ϕj为预训练的VGG19的第 j j j层激活函数。

4. 其余部分

    其余部分感兴趣的可以去看原文,没什么值得分析的。

5. 总结

    本文提出了一种新颖的多尺度图像去雾网络。 所提出的方法没有明确估计传输图和大气光强度,而是自适应地将局部空间信息和全局大气亮度融合在一起,这些学习方法是通过学习的单个通道的雾度感知图指导的。 在合成和真实雾图像上进行的大量实验证明了本文方法的有效性。 除了具有均匀雾的图像,本文的方法还可以很好地去除图像中的密集非均匀雾。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值