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

tech2025-08-05  5

项目主页:https://aupendu.github.io/iterative-dehaze(代码暂未公布)

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

目录

1. 摘要2. 网络结构2.1 Transmission Map Estimation Network2.2 Atmospheric Light Estimation Network2.3 Iterative Dehazing Network2.3.1 Recurrent Dehazing Formulation2.3.2 Iterative Updater Mechanism2.3.3 Dehazing Network Architecture2.3.4 Loss Function 2.4 Stage-wise Training and Fine Tuning 3. 读后感4. 文章纠错(笔误)

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
最新回复(0)