主要贡献
1)提出了名为Spk2Imgnet的端到端的卷积神经网络,来从脉冲数据流中重建动态场景。这是第一个使用端到端神经网络来解决脉冲相机图像重建的方法。
2)提出了一种层级结构来渐进地探索时间关联性,使得神经网络可以同时处理来自噪声和高速移动的挑战。
3)研究了脉冲生成机制。基于分析,提出了一个脉冲模拟器,用来生成模拟脉冲流以及相关的真值图像,并且构建了一个脉冲数据集来训练脉冲相机图像重建网络。
4)真实数据集以及合成数据集上的结果显示所提出的网络很对动态场景取得了目前最佳的重建效果。
关于脉冲相机的讨论
脉冲生成
脉冲相机由像素阵列构成,每一个像素都对到达光线进行持续地累加。一旦到达阈值
θ
\theta
θ,脉冲被激发,积分器复位。积分器上的瞬时电荷量可以表示为:
A
(
t
)
=
∫
0
t
α
⋅
I
(
x
)
d
x
m
o
d
θ
(1)
A(t)=\int_0^t\alpha\cdot I(x)dx \mod\theta\tag{1}
A(t)=∫0tα⋅I(x)dxmodθ(1)
其中,
α
\alpha
α是光电转化率。
理想情况下,像素可以在任意时刻
t
k
t_k
tk发射脉冲,也就是说:
∫
0
t
k
α
⋅
I
(
x
)
d
x
=
k
θ
\int_0^{t_k}\alpha\cdot I(x)dx=k\theta
∫0tkα⋅I(x)dx=kθ
也就是说
A
(
t
k
)
=
0
A(t_k)=0
A(tk)=0。这里
k
k
k表示脉冲序号。然而,由于电路技术的局限性,脉冲的读取时间被量化,一个像素只能以离散时间信号
S
(
n
)
S(n)
S(n)的方式读出脉冲。具体来说,像素周期性地在
t
=
n
T
,
n
=
1
,
2
,
.
.
.
t=nT,n=1,2,...
t=nT,n=1,2,...时刻(
T
T
T是很短的时间间隔)检查脉冲flag,如果脉冲flag在
t
=
n
T
t=nT
t=nT时刻被置位,则读出
S
(
n
)
=
1
S(n)=1
S(n)=1,并且重置flag。否则读出
S
(
n
)
=
0
S(n)=0
S(n)=0。
由于光线连续到达,所有传感器上像素都同时独立地工作,当一定量的光子到达时发射脉冲。传感器使用高速采样来检查每一个像素的脉冲状态(0或1),生成
H
×
W
H\times W
H×W的脉冲帧。随着时间的推移,相机将产生一系列脉冲帧,即
H
×
W
×
N
H×W×N
H×W×N的二进制脉冲流
S
(
x
,
y
,
n
)
S(x,y,n)
S(x,y,n),如图1(b)所示。
图像重建
问题描述
图像重建是脉冲相机的基础问题。我们使用 S n ∈ { 0 , 1 } W × H S_n\in\{0,1\}^{W\times H} Sn∈{0,1}W×H来表示第 n n n帧脉冲帧,用 I n I_n In来表示第 n n n次采样的瞬时光强。脉冲相机图像重建的目标是从二值脉冲流 { S n } , n = 1 , 2 , ⋅ ⋅ ⋅ N \{S_n\},n=1,2,\cdot\cdot\cdot N {Sn},n=1,2,⋅⋅⋅N中恢复原始的光强 { I n } , n = 1 , 2 , ⋅ ⋅ ⋅ N \{I_n\},n=1,2,\cdot\cdot\cdot N {In},n=1,2,⋅⋅⋅N。
挑战
一个直观的重建
I
n
I_n
In的方式是采用传统相机模型,在曝光窗口内积累光子。考虑到每个脉冲对应一定量的光子,我们可以通过数脉冲数量的方式来估计
I
n
(
x
,
y
)
I_n(x,y)
In(x,y),也就是:
I
^
n
(
x
,
y
)
=
θ
∣
ϕ
n
∣
⋅
∑
i
∈
ϕ
n
S
i
(
x
,
y
)
(3)
\hat{I}_n(x,y)=\frac{\theta}{|\phi_n|}\cdot \sum_{i\in\phi_n}S_i(x,y)\tag{3}
I^n(x,y)=∣ϕn∣θ⋅i∈ϕn∑Si(x,y)(3)
其中
ϕ
n
\phi_n
ϕn是虚拟曝光窗口。然而,很难选择一个合适的虚拟曝光窗口。图2展示了使用不同虚拟曝光窗口进行重建的结果。
使用小曝光窗口的短期光子积累可以比较好地重建出快速移动物体的轮廓,但是重建存在很多噪声。这是因为短时间间隔的到达光子数是一个满足泊松分布的随机变量,所以信号是不稳定的。同时,脉冲读取时间的量化效应也会导致噪声。另一方面,使用大曝光窗口的长期光子积累可以稳定观测到的光线信号,但是会导致运动模糊。这是由于运动物体上的点会被投影到图像传感器的不同像素上。
为了解决这一问题,我们提出了一种全新的针对脉冲相机的图像重建方法,通过结合短期光子积累以及长期光子积累的优势,来有效处理由噪声或者高速运动带来的挑战。
脉冲相机重建网络
总体框架
为了从二值脉冲流中重建动态场景,我们设计了端到端可训的脉冲相机重建网络,命名为Spk2ImgNet。整体框架如图3所示。
Spk2ImgNet使用
S
k
S_k
Sk附近一系列连续的脉冲帧
S
k
=
{
S
k
+
i
}
,
i
=
±
1
,
±
2
,
⋅
⋅
⋅
\mathcal{S}_k=\{S_{k+i}\},i=±1,±2,\cdot\cdot\cdot
Sk={Sk+i},i=±1,±2,⋅⋅⋅作为输入,使其可以探索时间关联性,生成高质量的重建
I
^
k
\hat{I}_k
I^k.
为了充分利用时间关联性,我们提出了层级系统来渐进地探索时间关联性。具体来说,Spk2ImgNet主要包含了三个部分:空间自适应地亮度推测模块(SALI, spatially adaptive light inference),特征提取模块(FE, feature extractor)和基于运动对齐的图像重建模块(MAIR, motion-aligned image reconstruction)。首先,输入的脉冲流会被分成五段有重叠的短期脉冲块 { B l 2 , B l 1 , B k , B r 1 , B r 2 } \{\mathcal{B}_{l_2},\mathcal{B}_{l_1},\mathcal{B}_{k},\mathcal{B}_{r_1},\mathcal{B}_{r_2}\} {Bl2,Bl1,Bk,Br1,Br2},亮度推测模块会被用在这些脉冲块上来自适应地利用局部时间相关性,产生一些粗略估计 { I ~ l 2 , I ~ l 1 , I ~ k , I ~ r 1 , I ~ r 2 } \{\tilde{I}_{l_2},\tilde{I}_{l_1},\tilde{I}_{k},\tilde{I}_{r_1},\tilde{I}_{r_2}\} {I~l2,I~l1,I~k,I~r1,I~r2}。其中, { l 1 , l 2 } \{l_1,l_2\} {l1,l2}以及 { r 1 , r 2 } \{r_1,r_2\} {r1,r2}是对称分布在 k k k点旁的参考帧时间帧。特别地,亮度推测模块是空间自适应的,它可以自动调整时间尺度,以适应各种运动和光条件。然后,五个贡献权重的特征提取模块被用来对粗略重建提取深度特征 { F l 2 , F l 1 , F k , F r 1 , F r 2 } \{F_{l_2},F_{l_1},F_{k},F_{r_1},F_{r_2}\} {Fl2,Fl1,Fk,Fr1,Fr2}。最后,为了进一步提升重建质量,一个基于运动对齐的图像重建模块被用来探索长期时间相关性,同时避免运动模糊。在这一模块中,首先使用金字塔可变性模块来将参考帧特征对齐关键帧特征,生成对齐的参考帧特征 { F ‾ l 2 , F ‾ l 1 , F ‾ r 1 , F ‾ r 2 } \{\overline{F}_{l_2},\overline{F}_{l_1},\overline{F}_{r_1},\overline{F}_{r_2}\} {Fl2,Fl1,Fr1,Fr2}。然后,对齐的参考帧特征联合关键帧特征用啦重建高质量的图像 I ^ k \hat{I}_k I^k。
空间自适应的亮度推测
考虑到光强在极短时间内几乎恒定的事实,我们首先探究局部时间相关性来推测不同时刻的瞬时光强。然而,由于场景内容的多样性,一个固定的时间尺度很难有效处理场景中的全部像素。比如,对于高速运动的动态场景,应该使用极小的时间尺度来避免运动模糊。相反地,对于亮度极低的场景,一个相对场的时间尺度应该被用来积累足够的光子信息,完成图像纹理的重建。为了解决这个问题,我们提出了空间自适应的亮度推测模块,如图4所示。来自适应地探索局部时间相关性,使其可以适应不同的运动以及光照条件。首先,应用多尺度光推理模块对不同时间尺度的瞬时光强进行交互。然后,采用空间自适应选择模块,自动选择合适的时间尺度。
多尺度光照推测
几个平行的,不同时间尺寸的可学习滤波器被运用在输入的短期脉冲块
B
t
∈
R
H
×
W
×
N
\mathcal{B}_t\in \mathbb{R}^{H\times W\times N}
Bt∈RH×W×N,然后用特定的空间尺寸生成一个粗略的瞬时光强估计:
H
t
(
i
)
=
h
i
(
M
i
∘
B
t
)
(4)
H_t(i)=h_i(M_i\circ\mathcal{B}_t)\tag{4}
Ht(i)=hi(Mi∘Bt)(4)
其中
M
i
M_i
Mi表示第
i
i
i个分支的时间mask,
h
i
(
⋅
)
h_i(\cdot)
hi(⋅)表示可学习的时间滤波操作,主要由串联的卷积和激活函数组成,
∘
\circ
∘表示元素级乘法。
空间自适应的时间尺度选择
使用注意力模块产生一组调制系数图:
[
W
t
(
1
)
,
⋅
⋅
⋅
,
W
t
(
m
)
]
=
a
(
[
H
t
(
1
)
,
⋅
⋅
⋅
,
H
t
(
m
)
]
)
(5)
[W_t(1),\cdot\cdot\cdot,W_t(m)]=a([H_t(1),\cdot\cdot\cdot,H_t(m)])\tag{5}
[Wt(1),⋅⋅⋅,Wt(m)]=a([Ht(1),⋅⋅⋅,Ht(m)])(5)
然后网络可以更加聚焦于合适尺寸的重构结果。这里
m
m
m是分支的数量,
[
,
]
[,]
[,]表示特征串联。SALI的输出是一堆基于不同时间尺度,放缩后的粗略估计:
I
~
t
=
[
W
t
(
1
)
∘
H
t
(
1
)
,
⋅
⋅
⋅
,
W
t
(
m
)
∘
H
t
(
m
)
]
(6)
\tilde{I}_t=[W_t(1)\circ H_t(1),\cdot\cdot\cdot,W_t(m)\circ H_t(m)]\tag{6}
I~t=[Wt(1)∘Ht(1),⋅⋅⋅,Wt(m)∘Ht(m)](6)
在本文中,SALI被分别用在五个短期脉冲块
{
B
l
2
,
B
l
1
,
B
k
,
B
r
1
,
B
r
2
}
\{\mathcal{B}_{l_2},\mathcal{B}_{l_1},\mathcal{B}_{k},\mathcal{B}_{r_1},\mathcal{B}_{r_2}\}
{Bl2,Bl1,Bk,Br1,Br2}上,产生了中间的粗估计块
{
I
l
2
,
I
l
1
,
I
k
,
I
r
1
,
I
r
2
}
\{\mathcal{I}_{l_2},\mathcal{I}_{l_1},\mathcal{I}_{k},\mathcal{I}_{r_1},\mathcal{I}_{r_2}\}
{Il2,Il1,Ik,Ir1,Ir2}来粗略描述不同时刻的瞬时光强。
特征提取
然后,我们从每一个粗略估计中提取深度特征
F
t
F_t
Ft,可以表示为:
F
t
=
f
t
(
I
~
t
)
(7)
F_t=f_t(\tilde{I}_t)\tag{7}
Ft=ft(I~t)(7)
其中,
f
t
(
⋅
)
f_t(\cdot)
ft(⋅)表示特征提取操作。受到残差块优秀表现的启发,我们也使用残差块来构建我们的特征提取模块,如图5所示。此外,为了促进学习,该子网络采用了长跨越连接来进行残差学习。为了降低网络的复杂性,
f
t
(
⋅
)
f_t(\cdot)
ft(⋅)的参数所有分支贡献。
基于运动对齐的图像重建
最终,一个运动对齐的模块被串联,用来探索长期时间相关性,并且在不引入运动模糊的情况下精细化重建结果。
金字塔可变性特征对齐
为了提升重建的质量,我们在避免运动模糊的情况下进一步探究了长期时间关联性。为了这个目的,我们引入了基于可变性卷积的金字塔可变性对齐(PDA, pyramid deformable alignment)模块来将参考帧特征 { F l 2 , F l 1 , F r 1 , F r 2 } \{F_{l_2},F_{l_1},F_{r_1},F_{r_2}\} {Fl2,Fl1,Fr1,Fr2}对齐关键帧特征 F k F_k Fk。
除了优秀的转换建模能力,可变性卷积也被广泛运用在没有准确运动估计的特征对齐上。在可变卷积中,额外的偏置被习得,来增强空间采样位置。特别地,为了有效处理大规模复杂运动,我们采用了又粗到细的可变性对齐。如图6所示,给定参考帧特征
F
t
,
t
∈
{
l
2
,
l
1
,
r
1
,
r
2
}
F_t,t\in\{l_2,l_1,r_1,r_2\}
Ft,t∈{l2,l1,r1,r2}以及关键帧特征
F
k
F_k
Fk,我们将特征降采样为
L
L
L层特征,也就是
{
F
t
(
t
)
}
\{F_t^{(t)}\}
{Ft(t)}和
{
F
k
(
l
)
}
,
l
=
1
,
2
,
⋅
⋅
⋅
,
L
\{F_k^{(l)}\},l=1,2,\cdot\cdot\cdot,L
{Fk(l)},l=1,2,⋅⋅⋅,L。通过金字塔认证,我们首先使用粗略估计,在低尺度上对齐特征,然后将对齐后的特征和学习到的偏移量传播到较高尺度来细化估计。
l
l
l层对齐的参考帧特征可以这样计算:
F
‾
t
(
l
)
(
p
)
=
∑
i
=
1
n
ω
i
⋅
F
t
(
l
)
(
p
+
p
i
+
Δ
p
i
(
l
)
)
⋅
c
i
(
l
)
(8)
\overline{F}_t^{(l)}(p)=\sum^n_{i=1}\omega_i\cdot F_t^{(l)}(p+p_i+\Delta p_i^{(l)})\cdot c_i^{(l)}\tag{8}
Ft(l)(p)=i=1∑nωi⋅Ft(l)(p+pi+Δpi(l))⋅ci(l)(8)
其中
p
=
(
x
,
y
)
p=(x,y)
p=(x,y)是中心坐标,
n
n
n是采样位置的数量,
ω
i
\omega_i
ωi是第
i
i
i个权重,
p
i
p_i
pi是第
i
i
i个固定偏置。
Δ
c
i
(
l
)
\Delta c_i^{(l)}
Δci(l)和
Δ
p
i
(
l
)
\Delta p_i^{(l)}
Δpi(l)是根据第
l
−
1
l-1
l−1层偏移量、第
l
l
l层的参考帧特征
F
t
(
l
)
F_t^{(l)}
Ft(l)和关键帧特征
F
k
(
l
)
F_k^{(l)}
Fk(l)学习到的调节参数和偏移量。
基于特征融合的可靠性
有了对齐后的特征
{
F
‾
l
2
,
F
‾
l
1
,
F
‾
k
,
F
‾
r
1
,
F
‾
r
2
}
\{\overline{F}_{l_2},\overline{F}_{l_1},\overline{F}_{k},\overline{F}_{r_1},\overline{F}_{r_2}\}
{Fl2,Fl1,Fk,Fr1,Fr2},我们使用一个特征融合模块(如图7所示)进行特征融合。由于物体遮挡以及光照变化的存在,一些区域的对齐可能是不可靠的。为了有效集成对齐的特征,我们引入了一个可靠性估计器(RE, reliability estimator)来测量对齐特征中每一个像素的可靠性。为了获得对齐特征
F
‾
t
,
t
∈
{
l
2
,
l
1
,
r
1
,
r
2
}
\overline{F}_t,t\in\{l_2,l_1,r_1,r_2\}
Ft,t∈{l2,l1,r1,r2}的可靠性图,我们将
F
‾
t
\overline{F}_t
Ft沿着关键帧特征
F
k
F_k
Fk输入到可靠性估计器
e
t
(
⋅
)
e_t(\cdot)
et(⋅)中,生成可靠性地图:
A
t
=
e
t
(
[
F
‾
t
,
F
k
]
)
(9)
A_t=e_t([\overline{F}_t,F_k])\tag{9}
At=et([Ft,Fk])(9)
在可靠性地图的辅助下,一个鲁棒的融合被用在重建的最后阶段:
I
^
k
=
g
(
[
A
l
2
∘
F
‾
l
2
,
A
l
1
∘
F
‾
l
1
,
F
k
,
A
r
1
∘
F
‾
r
1
,
A
r
2
∘
F
‾
r
2
,
]
)
\hat{I}_k=g([A_{l_2}\circ \overline{F}_{l_2},A_{l_1}\circ \overline{F}_{l_1},F_k,A_{r_1}\circ \overline{F}_{r_1},A_{r_2}\circ \overline{F}_{r_2},])
I^k=g([Al2∘Fl2,Al1∘Fl1,Fk,Ar1∘Fr1,Ar2∘Fr2,])
其中
g
(
⋅
)
g(\cdot)
g(⋅)表示基于联合卷积和激活层的重建函数。
损失函数
由于高质量的中间估计可以提升最终重建的质量,我们采用了一个层级的损失函数来优化我们的网络,可以表达为:
L
=
λ
∑
t
∈
ϕ
k
∑
i
=
1
m
∣
∣
H
t
(
i
)
−
I
t
∣
∣
1
+
∣
∣
I
^
k
−
I
k
∣
∣
1
(11)
\mathcal{L}=\lambda\sum_{t\in\phi_k}\sum_{i=1}^m||H_t(i)-I_t||_1+||\hat{I}_k-I_k||_1\tag{11}
L=λt∈ϕk∑i=1∑m∣∣Ht(i)−It∣∣1+∣∣I^k−Ik∣∣1(11)
第一项是用来生成中间估计而第二项是用来生成最终的高质量重建的。
λ
\lambda
λ是平衡两项损失的参数,
ϕ
k
=
{
l
2
,
l
1
,
k
,
r
1
,
r
2
}
\phi_k=\{l_2,l_1,k,r_1,r_2\}
ϕk={l2,l1,k,r1,r2}。
实验