论文:Transmission Map and Atmospheric Light Guided Iterative Updater Network for Single Image Dehazing

论文题目及作者
项目主页:https://aupendu.github.io/iterative-dehaze(代码暂未公布)

博客题目:
论文阅读:Transmission Map and Atmospheric Light Guided Iterative Updater Network for Single Image Dehazing
(由于博客题目有100个字符的限制,而上述题目102个字符(不信你数数),所以题目只能去掉阅读二字)

1. 摘要

    本文提出了一种基于迭代更新的Iterative Prior Updated Dehazing Network (IPUDN)。该网络包含三个部分,一个是初始传输率网络,一个是初始大气光网络,还有一个是迭代去雾网络。三个网络分开训练,最后结合在一起微调。

2. 网络结构

2.1 Transmission Map Estimation Network

    该网络使用DCPDN中稠密链接的编码器-解码器结构(后期写这篇博客时补上(已补上,这篇博客))。该模型的使用SSIM作为损失函数而不是MSE。

2.2 Atmospheric Light Estimation Network

    大气光网络结构如图1:
在这里插入图片描述

图1 大气光网络结构

    该网络使用堆叠的卷积层,每个卷积层后都添加了group normalization和ReLU激活函数。大小为7 × 7,步幅为2的最大池化层用于减少空间尺寸。大的最大池化核能减少像物体颜色这样的局部因素的影响。该网络最后还是用全局最大池化层,该思想来自于DCP的想法。第五部分消融实验对比了全局最大池化层和全局均值池化层的结果。
    该网络计算每个颜色通道对应的大气光,因为逐通道计算大气光能更好的处理雾图中的偏色问题。同时该网络使用MSE作为损失函数。

2.3 Iterative Dehazing Network

    迭代去雾网络的结构如下图:
在这里插入图片描述

图2 迭代去雾网络结构

    关于该图的描述,文章有误。如图中黄色标记处所示,两个地方出错。正确应该如下: X A ( t − 1 ) = { I , A , I ′ ( t ) , A ′ ( t − 1 ) } X_A(t - 1) = \{I, A, I^\prime(t), A^\prime(t - 1)\} XA(t1)={I,A,I(t),A(t1)} X T ( t − 1 ) = { I , T , I ′ ( t ) , T ′ ( t − 1 ) } X_T(t - 1) = \{I, T, I^\prime(t), T^\prime(t - 1)\} XT(t1)={I,T,I(t),T(t1)}。详情请看原文3.4.2或本博客2.3.2处。

    该网路主要采取两个主要策略。第一,迭代更新传输率和大气光的策略。第二,使用基于LSTM(Long Short-Term Memory)的循环卷积神经网络,用于维护时间跨步依赖性。下面分别介绍该网络中的三个部分。

2.3.1 Recurrent Dehazing Formulation

    去雾网络如图2(a)所示,包含了四个主要部分:(a) 输入特征提取 f i n f_{in} fin,(b) 循环层 f L S T M f_{LSTM} fLSTM,(c) 提取高级特征的连续6个残差块 f r e s f_{res} fres,(d) 去雾图像重构的输出层 f o u t f_{out} fout。网络公式化如下:
y ( t ) = f i n ( X ( t − 1 ) ) , h ( t ) = f L S T M ( h ( t − 1 ) , y ( t ) ) , I ′ ( t ) = f o u t ( f r e s ( h ( t ) ) ) (1) \begin{array}{r} y(t)=f_{in}(X(t-1)), \\ h(t)=f_{L S T M}(h(t-1), y(t)), \\ I^{\prime}(t)=f_{o u t}\left(f_{r e s}(h(t))\right) \end{array} \tag{1} y(t)=fin(X(t1)),h(t)=fLSTM(h(t1),y(t)),I(t)=fout(fres(h(t)))(1)

    其中 X ( t − 1 ) = { I , T , A , I ′ ( t − 1 ) , T ′ ( t − 1 ) , A ′ ( t − 1 ) } X(t-1) = \{I, T, A, I^\prime(t - 1), T^\prime(t - 1), A^\prime(t- 1)\} X(t1)={I,T,A,I(t1),T(t1),A(t1)}。当 t = 1 t = 1 t=1时,有 I ′ ( 0 ) = I , T ′ ( 0 ) = T , A ′ ( 0 ) = A I^\prime(0) = I, T^\prime(0) = T, A^\prime(0) = A I(0)=I,T(0)=T,A(0)=A f L S T M f_{LSTM} fLSTM f i n f_{in} fin的输出 y ( x ) y(x) y(x)和上一阶段 f L S T M f_{LSTM} fLSTM的输出 h ( t − 1 ) h(t - 1) h(t1)作为输入。第一个卷积块之后的LSTM有助于在连续的时间步长中保持依赖关系,从而使后续状态中的中间特征之间能够进行交互。

    文中没有介绍当 t = 1 t = 1 t=1时, h ( t − 1 ) h(t - 1) h(t1)的取值。还有需要注意的地方,我一开始看文章以为在一次迭代中,LSTM模块执行多次,即LSTM输出结果送回LSTM输入,这样多次往返。看到后面才知道原来不是,每一次迭代LSTM只执行一次,只不过LSTM输入需要使用上一次迭代LSTM的输出。

    与传统的LSTM不同,文中在每个时间步骤中递归使用整个模型,这大大减少了所需的模型大小。本文的卷积LSTM公式化如 ( 2 ) (2) (2)。LSTM接收 f i n f_{in} fin的输出和阶段 t − 1 t-1 t1 f L S T M f_{LSTM} fLSTM的输出 h ( t − 1 ) h(t - 1) h(t1)。LSTM中间结果有:an input gate i ( t ) i(t) i(t)、a forget gate f ( t ) f(t) f(t)、an ouput gate o ( t ) o(t) o(t)和 a cell state c ( t ) c(t) c(t)。公式化如下:
y ( t ) = f i n ( X ( t − 1 ) ) , i ( t ) = σ ( W i y ⊗ y ( t ) + W i s ⊗ h ( t − 1 ) + b i ) , f ( t ) = σ ( W f y ⊗ y ( t ) + W f s ⊗ h ( t − 1 ) + b f ) , o ( t ) = σ ( W o y ⊗ y ( t ) + W o s ⊗ h ( t − 1 ) + b o ) , g ( t ) = tanh ⁡ ( W g y ⊗ y ( t ) + W g s ⊗ h ( t − 1 ) + b g ) , c ( t ) = f ( t ) ⊙ c ( t − 1 ) + i ( t ) ⊙ g ( t ) , h ( t ) = o ( t ) ⊙ tanh ⁡ c ( t ) (2) \begin{array}{r} y(t)=f_{i n}(X(t-1)), \\ i(t)=\sigma\left(W_{i y} \otimes y(t)+W_{i s} \otimes h(t-1)+b_{i}\right), \\ f(t)=\sigma\left(W_{f y} \otimes y(t)+W_{f s} \otimes h(t-1)+b_{f}\right), \\ o(t)=\sigma\left(W_{o y} \otimes y(t)+W_{o s} \otimes h(t-1)+b_{o}\right), \\ g(t)=\tanh \left(W_{g y} \otimes y(t)+W_{g s} \otimes h(t-1)+b_{g}\right), \\ c(t)=f(t) \odot c(t-1)+i(t) \odot g(t), \\ h(t)=o(t) \odot \tanh c(t) \end{array} \tag{2} y(t)=fin(X(t1)),i(t)=σ(Wiyy(t)+Wish(t1)+bi),f(t)=σ(Wfyy(t)+Wfsh(t1)+bf),o(t)=σ(Woyy(t)+Wosh(t1)+bo),g(t)=tanh(Wgyy(t)+Wgsh(t1)+bg),c(t)=f(t)c(t1)+i(t)g(t),h(t)=o(t)tanhc(t)(2)

    其中 σ \sigma σ为sigmoid函数, ⊙ \odot 为逐元素相乘, ⊗ \otimes 为卷积操作。

2.3.2 Iterative Updater Mechanism

    本文算法如下:
算法

    当开始迭代时,传输率网络 Γ \Gamma Γ和大气光网络 Λ \Lambda Λ已经训练完毕。两个网络以雾图 I I I作为输入,并分别输出相应的传输率图 T T T和大气光 A A A。去雾网络将传输率图和大气光以及雾图作为输入,并迭代对图像进行去雾,其中传输率图和大气光也被更新。
    第 t t t步时,去雾网络的输入为 X ( t − 1 ) X(t - 1) X(t1)。其包含静态和动态的数据。静态数据为 I I I T T T A A A,即每次迭代都不会改变的输入。动态数据包括上一次迭代的去雾结果 I ′ ( t − 1 ) I^\prime(t - 1) I(t1),上一次迭代更新的 T ′ ( t − 1 ) T^\prime(t - 1) T(t1) A ′ ( t − 1 ) A^\prime(t- 1) A(t1)。第一步时, I ′ ( t − 1 ) = I I^\prime(t - 1) = I I(t1)=I T ′ ( t − 1 ) = T T^\prime(t - 1) = T T(t1)=T A ′ ( t − 1 ) = A A^\prime(t - 1) = A A(t1)=A
    每一次迭代去雾,传输率图 T T T和大气光 A A A也会随着更新,两个更新网络如图2(b)(c)所示。两个网络细节如下:

网络输入输出更新
传输率更新网络 ∪ Γ \cup_{\Gamma} Γ X T ( t − 1 ) = { I , T , I ′ ( t ) , T ′ ( t − 1 ) } X_T(t - 1) = \{I, T, I^\prime(t), T^\prime(t - 1)\} XT(t1)={I,T,I(t),T(t1)} Δ T \Delta T ΔT T ′ ( t ) = T ′ ( t − 1 ) + Δ T T^\prime(t) = T^\prime(t - 1) + \Delta T T(t)=T(t1)+ΔT
大气光更新网络 ∪ Λ \cup_{\Lambda} Λ X A ( t − 1 ) = { I , A , I ′ ( t ) , A ′ ( t − 1 ) } X_A(t - 1) = \{I, A, I^\prime(t), A^\prime(t - 1)\} XA(t1)={I,A,I(t),A(t1)} Δ A \Delta A ΔA A ′ ( t ) = A ′ ( t − 1 ) + Δ A A^\prime(t) = A^\prime(t - 1) + \Delta A A(t)=A(t1)+ΔA

     ∪ Γ \cup_{\Gamma} Γ ∪ Λ \cup_{\Lambda} Λ中除了最后一个卷积层,其余均采用ReLU激活函数。最后一层卷积层采用tanh激活函数,以使变化可以在正方向和负方向上进行。对于 ∪ Λ \cup_{\Lambda} Λ,作者使用全局平均池来获得单个全局更新,而不是逐像素更新,因为根据经验发现前者是更好的(消融实验)。

2.3.3 Dehazing Network Architecture

    在去雾网络体系结构中, f i n f_{in} fin为单卷积层, f r e s f_{res} fres为6个连续的残差块, f o u t f_{out} fout也是单卷积层。所有卷积层的卷积核大小为3 × 3,填充1 × 1,并且后面接一个ReLU激活函数。本文中,迭代次数为6次。作者做了不同迭代次数的消融实验,详细见原文。

2.3.4 Loss Function

    总损失函数定义如下:
L = L L 1 + λ L P (3) \mathcal{L}=\mathcal{L}_{L 1}+\lambda \mathcal{L}_{P} \tag{3} L=LL1+λLP(3)

    其中, L L 1 \mathcal{L}_{L 1} LL1为mean absolute difference loss, L P \mathcal{L}_{P} LP为感知误差, λ \lambda λ为权重超参数,本文设置为 λ = 0.8 \lambda = 0.8 λ=0.8
L L 1 = 1 N ∑ i = 1 N ∣ I ′ ( t ) − I g t ∣ (4) \mathcal{L}_{L 1}= \frac{1}{N} \sum\limits_{i = 1}^{N}| I^{\prime}(t) - I_{gt} | \tag{4} LL1=N1i=1NI(t)Igt(4)

L P = 1 C H W ∑ c = 1 C ∑ h = 1 H ∑ w = 1 W ∣ ϕ c , h , w ( I ′ ( t ) ) − ϕ c , h , w ( I g t ) ∣ (5) \mathcal{L}_{P}=\frac{1}{C H W} \sum_{c=1}^{C} \sum_{h=1}^{H} \sum_{w=1}^{W}\left|\phi_{c, h, w}\left(I^{\prime}(t)\right)-\phi_{c, h, w}\left(I_{g t}\right)\right| \tag{5} LP=CHW1c=1Ch=1Hw=1Wϕc,h,w(I(t))ϕc,h,w(Igt)(5)

     ϕ \phi ϕ为vgg19体系结构的relu2_2层作为特征提取器。

2.4 Stage-wise Training and Fine Tuning

    本文提出的方法中,存在三种可训练的体系结构:传输率网络,大气光网络和具有更新器机制的去雾网络。训练过程分为三个阶段:第一阶段,分别训练传输率网络和大气光网络;第二阶段,对去雾网络进行训练;第三阶段,将所有三个训练好的网络与多个目标函数一起进行微调。执行此微调以较低的学习速率进行,以在三个网络之间引入精细的依赖关系。

3. 读后感

    文章有许多超参数,例如迭代次数和残差块块数等。作者不知道这些超参数如何设置,所以本文有许多消融实验。虽然复杂,但是方法还是对的。另外本文的迭代思想还是非常值得学习的。

4. 文章纠错(笔误)

    黄标为错误之处。
1) 错误1
在这里插入图片描述

错误改正
X A ( t − 1 ) = { I , A , I ′ ( t − 1 ) , A ′ ( t − 1 ) } X_A(t - 1) = \{I, A, I^\prime(t - 1), A^\prime(t - 1)\} XA(t1)={I,A,I(t1),A(t1)} X A ( t − 1 ) = { I , A , I ′ ( t ) , A ′ ( t − 1 ) } X_A(t - 1) = \{I, A, I^\prime(t), A^\prime(t - 1)\} XA(t1)={I,A,I(t),A(t1)}
X T ( t − 1 ) = { I , A , I ′ ( t − 1 ) , T ′ ( t − 1 ) } X_T(t - 1) = \{I, A, I^\prime(t - 1), T^\prime(t - 1)\} XT(t1)={I,A,I(t1),T(t1)} X T ( t − 1 ) = { I , T , I ′ ( t ) , T ′ ( t − 1 ) } X_T(t - 1) = \{I, T, I^\prime(t), T^\prime(t - 1)\} XT(t1)={I,T,I(t),T(t1)}

2)错误2
在这里插入图片描述

错误改正
f L S T M f_{LSTM} fLSTM f r e s f_{res} fres
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值