用到的数据集
Fattel ,NYU深度数据集
研究现状
数学上,雾图可以表示为无雾图像和整体大气光的凸组合。
去雾主要依赖于景深信息。
早期的研究主要依赖同一幅场景的多个图片。
相关工作
模型先验
- 表面阴影和传输局部不想关的深度图
- dark channel prior(DCP)
- 双层高斯模型处理回归模型来改进DCP
- 基于监督方法的去雾模型
- hase-line来评估传输因子
这些模型都是基于已有的某个雾图假设,对于某些特定的数据可能会失效。
数据先验的网络
启发式的深度cnn在大尺度数据集上的应用
- 可训练的端到端的cnn,输入雾图像,输出相应的传输图
- 多尺度cnn用于单一图像去雾,先用粗糙的网络评估传输结构,然后用另一个精细尺度的网络进行优化
两个问题:1.去雾的领域知识没有用到2.太依赖训练数据的数量和质量,需要大量的数据集
创新点
提出 data-and-prior-aggregated transmission network (DPATN),结合了先验知识和训练数据的优点
融合了先验知识和基于数据驱动的神经网络,提出一种新的残差神经网络用于去雨去雾。
- 需要的数据集更少
- 结合了前馈和反馈神经网络的优点
- 启发式的神经网络
具体方案
{ I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) , t ( x ) = e x p ( − β d ( x ) ) \begin{cases} I(x)=J(x)t(x)+A(1-t(x)),\\ t(x)=exp(-\beta d(x))\\ \end{cases} {I(x)=J(x)t(x)+A(1−t(x)),t(x)=exp(−βd(x))
其中I(x) 为观察到的带雾图像,J(x)为潜在的场景辐射,d(x)为消光系数,t(x)为介质传输,(随景深成指数衰减,取值范围[0,1],用来表示到达摄像头的光照),
去雾的主要目的就是从中 I(x)中恢复J(x),t(x)在式子中扮演关键作用
,为了方便表示,我们t(x)离散地表示为t=[t1,…,tN] ∈ R N \in R^N ∈RN,其中N为带雾图像的像素点个数
t + = t − ϝ ( t ; W ) t^+ =t-\digamma(t;W) t+=t−ϝ(t;W)
其中其中F是带参数W的残差函数,t+是带标识跳过连接的模块的输出。利用这个基本模型,我们的目标简化为学习一个映射F来表示传输的传播残差。采用了跳远连接(skip-connections)
ϝ ( t ; W ) = D ( t ; W D ) + λ p P ( I ) \digamma(t;W)=D(t;W_D)+\lambda _pP(I) ϝ(t;W)=D(t;WD)+λpP(I)
这里W={W D, λ p \lambda _p λp}是可学习的参数,其中WD表示D的传播参数, λ p \lambda _p λp≥0是惩罚P的权重参数
数据子模块
D
(
t
;
W
D
)
=
∑
k
K
ω
ˆ
k
⊗
ϕ
k
(
ω
ˇ
k
⊗
t
)
,
D(t;W_D)=\sum_k^K ωˆ_k ⊗\phi_k(ωˇ_k⊗t),
D(t;WD)=k∑Kωˆk⊗ϕk(ωˇk⊗t),
式中 { ϕ k } k = 1 K \{\phi_k\}_{k=1}^K {ϕk}k=1K表示非线性激活,⊗表示卷积算子和 { ω ˆ k , ω ˇ k } k = 1 k \{ωˆk,ωˇk\}_{k=1}^k {ωˆk,ωˇk}k=1k是每次激活前后的卷积滤波器对。显然,仅用D传播t,必然会丢弃模糊图像丰富的先验信息
先验知子模块
P
P
P
I
(
x
)
→
t
(
x
)
I(x)\rightarrow t(x)
I(x)→t(x)
由(1)式可知,
t
(
x
)
=
∣
∣
I
A
(
x
)
∣
∣
∣
∣
J
(
x
)
−
A
∣
∣
=
I
A
c
(
x
)
J
c
(
x
)
−
A
c
t(x)=\frac{||I_A(x)||}{||J(x)-A||}=\frac{I_{Ac}(x)}{J_c(x)-A_c}
t(x)=∣∣J(x)−A∣∣∣∣IA(x)∣∣=Jc(x)−AcIAc(x)
其中c ∈ { r , g , b } , I A c ( x ) = I c ( x ) − A c \in \{r,g,b\},I_{Ac}(x) =Ic(x)−Ac ∈{r,g,b},IAc(x)=Ic(x)−Ac,是转换后的观测值,以便空气光位于原点。$J(x)满足约束:: αˇIˇc ≤ Jc ≤ αˆIˆc, $ α,ˆαˇ≥0为两个尺度参数和Iˆc和Iˇc 分别表示 I c I_c Ic的最大值和最小值。得到先验模型如下
P ( I ) = Γ [ 0 , 1 ] ( max c ( I A c ( x ) α ˆ I ˆ c − A c , I A c ( x ) α ˇ I ˇ c − A c ) ) P(I)=\Gamma_{[0,1]}(\max _c(\frac{I_{Ac}(x)}{αˆIˆc-A_c},\frac{I_{Ac}(x)}{ αˇIˇc-A_c})) P(I)=Γ[0,1](cmax(αˆIˆc−AcIAc(x),αˇIˇc−AcIAc(x)))
其中 Γ \Gamma Γ[0,1]表示范围[0,1]上的投影。通过在式(6)中设置αˇ=0,我们可以观察到DCP公式是只是P的特例
代价函数
J
(
t
L
,
t
∗
;
{
W
l
}
l
=
1
L
)
=
1
2
∣
∣
t
L
−
t
∗
∣
∣
2
2
J(t^L,t^{*};\{W^l\}_{l=1}^L)=\frac {1}{2}||t^L-t^{*}||_2^2
J(tL,t∗;{Wl}l=1L)=21∣∣tL−t∗∣∣22
优化目标
式(8)
{
min
{
W
l
}
l
=
1
L
∑
s
=
1
S
J
(
t
L
,
t
∗
;
{
W
l
}
l
=
1
L
)
,
s
.
t
.
t
s
L
=
t
s
0
+
∑
l
=
0
L
−
1
F
(
t
s
l
;
W
l
)
.
\begin{cases} \min_{\{W^l\}_{l=1}^L} \sum_{s=1}^SJ(t^L,t^{*};\{W^l\}_{l=1}^L),\\ \\ s.t. \,\, t_s^L=t_s^0+\sum_{l=0}^{L-1} F(t_s^l;W^l). \end{cases}
⎩⎪⎨⎪⎧min{Wl}l=1L∑s=1SJ(tL,t∗;{Wl}l=1L),s.t.tsL=ts0+∑l=0L−1F(tsl;Wl).
链式法则计算梯度比较复杂
我们使用了一种简化的方法
我们将每个滤波器表示为ωk= ∑ i α k , i d i \sum_iαk,i d_i ∑iαk,idi,其中{ d i d_i di}是DCT基,{αk,i}是要学习的滤波器系数集。对于每个变换 ϕ k \phi_k ϕk,我们使用由一组控制点{ p i , q k , i p_i,q_{k,i} pi,qk,i}确定的分段线性函数对其进行参数化,即 ϕ k = ∑ i β k , i , i q k , i \phi_k=\sum_iβ_{k,i},iq_{k,i} ϕk=∑iβk,i,iqk,i其中{ p i p_i pi}是均匀地位于[-1,1]内的预定义位置,{ q k , i q_{k,i} qk,i}是这些位置的函数值,{ β k , i β_{k,i} βk,i}是组合系数。这样就大大减少了DPATN中的参数个数。所要求的 ϕ k \phi_k ϕk的可导性也可以通过这种参数化得到保证。最后,根据文献[20]的建议,利用L-BFGS算法对式(8)进行优化。
- 对大气光A进行估计
最常用的策略[4],[17]是在暗通道中选择几个最亮的像素(例如,0.1%),在这些像素中,选择图像中强度最高的像素作为大气光。在这里,我们改进了基于过滤过程[7 ]的策略, A c = m a x ( m i n i f i l t e r ( I c ) ) A^c=max(minifilter(I^c)) Ac=max(minifilter(Ic)),其中“max”操作输出最大值,“ m i n i f i l t e r minifilter minifilter”表示滑动窗口最小过滤器。利用估计的t和A,我们可以用公式(1)恢复无霾图像。为了避免被零除,J的计算方法是
J ( x ) = A + ( I ( x ) − A ) / ( m a x ( t ( x ) , ϵ ) ) J(x)=A+(I(x)-A)/(max(t(x),\epsilon)) J(x)=A+(I(x)−A)/(max(t(x),ϵ))
其中 ϵ ≥ 0 , 是 一 个 常 量 \epsilon \geq0,是一个常量 ϵ≥0,是一个常量
训练方法
- 基于能量的观点
- 一个轻量的训练框架
简化测试(Ablation study)
- 训练数据
他人多用15000到20000多的训练集
由于加入了丰富的先验知识,而DPATN只需几十个训练数据即可,实验中50个最好
- 优化策略(两种)
- 分层优化
对于第一种方案,我们只需分别计算训练成本相对于各层参数的梯度 - 反向传播
第二个候选方案执行所有参数的联合梯度下降更新。
经过过对比,第二种优于第一种
最终采用联合的反向传播(分层初始化)的优化策略