代码:https://github.com/BookerDeWitt/MSBDN-DFF
目录
1. 摘要
本文提出了基于U-Net的Multi-Scale Boosted Dehazing Network with Dense Feature Fusion(MSBDN-DFF)。该方法基于以下两个原则,boosting(提升)和error feedback(错误反馈)。
2. 提出的方法
文章中Section Ⅲ分为两个部分描述该网络,即3.1和3.2。3.1题目为Multi-Scale Boosted Dehazing Network,但是除了一张图(图1)外及几句极其简单的话语,其余都是描述解码器中的SOS Boosted Module。3.2题目为Dense Feature Fusion Module,这一小节题目和标题描述的一致。所以我觉得更好的排版应该是先给出关于整体网络的简单描述,之后再重新编排两节用于描述本文的核心创新点会好一点。
我重新编排了文章的结构,个人感觉更好理解文章。当然读者可以完全不用管编排,直接阅读内容即可。
2.1 Multi-Scale Boosted Dehazing Network
网络总体结构如图1所示。
如图1所示,该网络包含三个组件,分别为:编码器 G E n c G_{Enc} GEnc、boosted解码器 G D n c G_{Dnc} GDnc和特征修复模块 G R e s G_{Res} GRes。
2.2 SOS Boosted Module
受Strengthen-Operate-Subtract(SOS) boosting方法的启发,本文设计了一个多尺度boosted解码器。本小节只详细介绍 G D n c G_{Dnc} GDnc中SOS Boosted模块,对于整体结构可以查看源代码或者图1。
1) Boosting in image dehazing
该算法是在《Boosting of image denoising algorithms》这篇文章中提出的,最初是用于图像去噪。SOS boosting算法公式化如下:
J
^
n
+
1
=
g
(
I
+
J
^
n
)
−
J
^
n
(2)
\hat{J}^{n+1}=g\left(I+\hat{J}^{n}\right)-\hat{J}^{n} \tag{2}
J^n+1=g(I+J^n)−J^n(2)
为了方便对照原文,以后都采用与文章公式相同的编号,而不是另起炉灶。
其中,
J
^
n
\hat{J}^{n}
J^n是第
n
n
n次迭代的预测结果,
g
(
⋅
)
g(\cdot)
g(⋅)为去雾操作,
I
+
J
^
n
I + \hat{J}^{n}
I+J^n表示用雾图
I
I
I增强
J
^
n
\hat{J}^{n}
J^n。和去噪的公理相似,上述公式已被证明,对于指标PoH(见下),可以促进图像去雾性能。
定义PoH(Portion of Haze,雾的部分)为:
P
o
H
(
J
)
=
(
1
−
T
)
A
/
J
PoH(J) = (1 - T) A / J
PoH(J)=(1−T)A/J。
公理1:一幅图像经由去雾方法
g
g
g,对于指标PoH可以获得更好的结果,即相同场景但是会有更少的雾。
根据公理1,
(
2
)
(2)
(2)中SOS boosting算法可以提升去雾效果,即:
P
o
H
(
J
^
n
+
1
)
<
P
o
H
(
J
^
n
)
(3)
{PoH}\left(\hat{J}^{n+1}\right)<{PoH}\left(\hat{J}^{n}\right) \tag{3}
PoH(J^n+1)<PoH(J^n)(3)
文章中提到,关于公理1的证明见补充材料,但是我没找到相应的补充材料,主要是大概率我会看不懂,所以我就没去找。
有了公理1,作者根据SOS boosting算法,提出了一个深度boosted网络,即本小节的解码器。
2) Deep boosted dehazing network
在U-Net网络中,编码器为雾特征提取的模块,解码器为无雾图像复原的模块。为了逐步复原从特征修复模块
G
R
e
s
G_{Res}
GRes中得到的结果
j
L
j^L
jL,作者结合了SOS boosted算法提出了解码器
G
D
n
c
G_{Dnc}
GDnc。
G
D
n
c
G_{Dnc}
GDnc整体结构如图1所示,下面为
G
D
n
c
G_{Dnc}
GDnc中其中一个模块,即SOS boosted模块的图解,见图2(e)。
对于第
n
n
n层的SOS boosted模块,首先对上一层得到的特征图
j
n
+
1
j^{n+1}
jn+1(因为这里是倒着数的)进行上采样,然后用同一层对应的编码器得到的特征图
i
n
i^{n}
in进行相加,送入到修复单元
G
θ
n
n
\mathcal{G}_{\theta_n}^n
Gθnn中,结果减去上采样后的
j
n
+
1
j^{n+1}
jn+1最为最终第
n
n
n层的SOS boosted模块的输出,即
j
n
j^n
jn。公式表达如下:
j
n
=
G
θ
n
n
(
i
n
+
(
j
n
+
1
)
↑
2
)
−
(
j
n
+
1
)
↑
2
(4)
j^{n}=\mathcal{G}_{\theta_{n}}^{n}\left(i^{n}+\left(j^{n+1}\right) \uparrow_{2}\right)-\left(j^{n+1}\right) \uparrow_{2} \tag{4}
jn=Gθnn(in+(jn+1)↑2)−(jn+1)↑2(4)
其中,
↑
2
\uparrow_{2}
↑2表示2倍上采样操作,
G
θ
n
n
\mathcal{G}_{\theta_n}^n
Gθnn表示第
n
n
n层参数为
θ
n
\theta_n
θn的可训练修复单元。在每一个修复单元中,都使用了残差组。
在解码器的最后一层中,使用一个卷积层从最后的特征图中得到最终的无雾图像
J
^
\hat{J}
J^。
这里有一点需要特别注意,如上图所示,编码器和解码器中红色框中的两部分才是对应的编码解吗结构。即编码器红框输出的结果为 i 2 i^2 i2,解码器红框输出结果为 j 2 j^2 j2。明白了这一点,就清楚为什么 i 2 i^2 i2和 j 2 j^2 j2是在同一条水平线上了。
3) Alternatives to SOS boosted module
这一部分主要介绍在解码器中使用图2(a)(b)(c)(d)四种模块的情况。感兴趣的看原文,这里不过多赘述。在后面消融实验中证明了SOS boosted模块效果是最好的。
2.3 Dense Feature Fusion Module
U-Net体系结构固有地在几个方面受到限制,例如,在编码器的下采样过程中缺少空间信息,并且在非相邻层级的特征之间缺少足够的连接。
很好理解,下采样一定会丢失空间信息;U-Net只在水平上有联系,而在竖直上没有联系,所以非相邻层级之间会缺少信息交互。
受back-projection algorithm(Bilateral back-projection for single image super resolution)启发,为了增强非相邻层级特征之间的连接,本文提出了DFF模块。本文描述了解码器中DFF模块的使用,关于编码器可以相应的推导出。编码器中第
n
n
n层中DFF模块的框架如图3所示。
公式化如下:
j
~
n
=
D
d
e
n
(
j
n
,
{
j
~
L
,
j
~
L
−
1
,
⋯
,
j
~
n
+
1
}
)
(10)
\tilde{j}^{n}=\mathcal{D}_{d e}^{n}\left(j^{n},\left\{\tilde{j}^{L}, \tilde{j}^{L-1}, \cdots, \tilde{j}^{n+1}\right\}\right) \tag{10}
j~n=Dden(jn,{j~L,j~L−1,⋯,j~n+1})(10)
其中, j n j^n jn为解码器第 n n n层中的boosted特征图(即SOS Boosted Module的输出), j ~ n \tilde{j}^n j~n为第 n n n层DFF模块的输出, L L L为网络层级数, { j ~ L , j ~ L − 1 , ⋯ , j ~ n + 1 } \{\tilde{j}^{L}, \tilde{j}^{L-1}, \cdots, \tilde{j}^{n+1}\} {j~L,j~L−1,⋯,j~n+1}为解码器中前面所有 ( L − n ) (L-n) (L−n)层DFF模块的输出。下面关于每次用一个增强特征 j ~ L − t , t ∈ { 0 , 1 , ⋯ , L − n − 1 } \tilde{j}^{L-t},t \in \{0, 1, \cdots, L-n-1\} j~L−t,t∈{0,1,⋯,L−n−1},增强当前boosted特征 j n j^n jn的介绍。更新过程如下:
a. 计算第 t t t次迭代, j t n ( j 0 n = j n ) j_t^n(j_0^n = j^n) jtn(j0n=jn)和 j ~ L − t \tilde{j}^{L-t} j~L−t的差距 e t n e_t^n etn:
e t n = p t n ( j t n ) − j ~ L − t (11) e_{t}^{n}=p_{t}^{n}\left(j_{t}^{n}\right)-\tilde{j}^{L-t} \tag{11} etn=ptn(jtn)−j~L−t(11)其中, p t n p_t^n ptn为投影操作,将 j t n j_t^n jtn下采样到和 j ~ L − t \tilde{j}^{L-t} j~L−t相同维度。
b. 更新 j t n j_t^n jtn:
j t + 1 n = q t n ( e t n ) + j t n (12) j_{t+1}^{n}=q_{t}^{n}\left(e_{t}^{n}\right)+j_{t}^{n} \tag{12} jt+1n=qtn(etn)+jtn(12)
其中, q t n q_t^n qtn为反投影操作,将 e t n e_t^n etn上采样到和 j t n {j}_t^{n} jtn相同维度。c. 迭代完以前所有增强特征(即 t t t取遍 { 0 , 1 , ⋯ , L − n − 1 } \{0, 1, \cdots, L-n-1\} {0,1,⋯,L−n−1}),得到现在最终的增强特征 j ~ n \tilde{j}^n j~n。
超分中的back-projection algorithm, p t n p_t^n ptn和 q t n q_t^n qtn是未知的。本文则直接采用了卷积/反卷积层学习相应的下采样/上采样操作。为了避免过多参数,本文采用stride=2的方式实现 p t n / q t n p_t^n/q_t^n ptn/qtn。
相应地,编码器中第
n
n
n层的DFF模块定义如下:
i
~
n
=
D
e
n
n
(
i
n
∣
i
~
1
,
i
~
2
,
⋯
,
i
~
n
−
1
)
(13)
\tilde{i}^{n}=\mathcal{D}_{e n}^{n}\left(i^{n} \mid \tilde{i}^{1}, \tilde{i}^{2}, \cdots, \tilde{i}^{n-1}\right) \tag{13}
i~n=Denn(in∣i~1,i~2,⋯,i~n−1)(13)
根据上述解码器中的详细介绍,该部分可以相应的推导出。这里不作赘述。
通过和先前的特征进行融合,弥补了U-Net损失的空间信息。
2.4 Others
其余部分,例如实验细节,实验结果,消融实验等,感兴趣的可以去阅读原文。
3. 读后感
本文两个核心创新点,SOS Boosted Module和DFF Module,都是从其他领域(去噪和超分),得到启发的。这也验证了我的导师经常说的,阅读论文不能仅限于自己那个狭隘的领域(我的方向是图像去雾),在阅读自己方向的论文的同时,也要多多阅读相邻领域。
本文提出的网络非常大,参数量巨大,效果也好,有种大力出奇迹的感觉。
最后是一点最近的心路旅程。上次更新是在差不多十天前了,这一个多星期经历了很多事情,对我的打击很大,让我坚信我不是搞科研的这块料。但生活总要继续,毕业论文终究会到来,所以还是拿起论文继续努力吧。