参考代码:None
介绍:经典的自监督深度估计方法已经在KITTI数据集上取得了较为不错的效果,但是在一些室内或是相机能够自由移动(KITTI场景下相机固定在车上)的场景下,现有的经典自监督深度估计算法就出现了问题。这篇文章研究的便是这些场景下的自监督深度估计,在该文章中指出自监督深度估计在这些场景下性能出现较大幅度下降是因为如下两点原因:
- 在这些场景下深度的范围是变化比较大的,特别是在一些室内场景下,随着视角的变化图像中深度的范围会存在较大范围变化。而在KITTI的场景下最远处是天空其深度的变化范围相对来讲比较小;
- 在KITTI数据场景下摄像头是被固定在车辆上的,犹豫是刚性连接其运动主要体现在摄像头的径向平移运动上,其在旋转分量上的变化相对较小。而上述提到的室内或是相机自由运动的场景,其同时在平移和旋转上存在变化量,这就是得对应Pose估计网络部分难以胜任对应任务,从而导致深度估计性能的下降;
对于上面两点文章专门提出了对应的解决方案,其具体为:
这篇文章对于pose估计问题是通过残差级联优化的形式进行解决,在之前的一篇文章:
Unsupervised Depth Learning in Challenging Indoor Video: Weak Rectification to Rescue
在这篇文章中也明确指出影响自监督深度估计网络性能的点在输入数据平移和旋转属性上,其在不同数据集下的对比差异见下图:
因而在这篇文章中提出了一种数据预处理的方案,也就是通过如下几步实现训练数据筛选:
文章的整体方法是参考自MonoDepth2的,其结构见下图所示:
相比MonoDepth2方法文章主要是提出了两个子模块:
这里设target图像为 I t I_t It,source图像为 I t ′ I_{t^{'}} It′,这里是需要估计出target图像对应的深度结果 D t D_t Dt,估计出来的pose变量为 T t → t ′ T_{t\rightarrow t^{'}} Tt→t′。在已知相机内参数 K K K的情况下source到target的映射描述为:
I t ′ → t = I t ′ ⟨ p r o j ( D t , T t → t ′ , K ) ⟩ I_{t^{'}\rightarrow t}=I_{t^{'}}\langle proj(D_t,T_{t\rightarrow t^{'}},K)\rangle It′→t=It′⟨proj(Dt,Tt→t′,K)⟩
映射之后的图像会与真正的target图像做光度重构误差度量:
ρ ( I t , I t ′ → t ) = α 2 ( 1 − S S I M ( I t , I t ′ → t ) ) + ( 1 − α ) ∣ ∣ I t , I t ′ → t ∣ ∣ 1 \rho(I_t,I_{t^{'}\rightarrow t})=\frac{\alpha}{2}(1-SSIM(I_t,I_{t^{'}\rightarrow t}))+(1-\alpha)||I_t,I_{t^{'}\rightarrow t}||_1 ρ(It,It′→t)=2α(1−SSIM(It,It′→t))+(1−α)∣∣It,It′→t∣∣1
对于有多个source图像的情况其光度重构误差描述为:
L A = ∑ t ′ ρ ( I t , I t ′ → t ) L_A=\sum_{t^{'}}\rho(I_t,I_{t^{'}\rightarrow t}) LA=t′∑ρ(It,It′→t)
在target图像的引导下会对深度的结果进行平滑约束:
L s = ∣ ∂ x d t ∗ ∣ e − ∂ x I t + ∣ ∂ y d t ∗ ∣ e − ∂ y I t L_s=|\partial_xd_t^*|e^{-\partial_xI_t}+|\partial_yd_t^*|e^{-\partial_yI_t} Ls=∣∂xdt∗∣e−∂xIt+∣∂ydt∗∣e−∂yIt
其中 , d ∗ = d / d ˉ d^{*}={d}/{\bar{d}} d∗=d/dˉ代表的是经过均值归一化之后的深度图。这里也同样采用了MonoDepth2中的auto-mask的机制去排除那些存在运动非静止的目标。对于帧间还做了帧间深度连续约束:
L c = ∣ D t − D ˉ t ′ → t ∣ D t + D ˉ t ′ → t L_c=\frac{|D_t-\bar{D}_{t^{'}\rightarrow t}|}{D_t+\bar{D}_{t^{'}\rightarrow t}} Lc=Dt+Dˉt′→t∣Dt−Dˉt′→t∣
其中, D ˉ t ′ → t \bar{D}_{t^{'}\rightarrow t} Dˉt′→t代表的是深度按照之前图像映射的流程映射的结果。则整体的损失函数被描述为:
L = L A + τ L s + γ L c L=L_A+\tau L_s+\gamma L_c L=LA+τLs+γLc
其中, τ = 0.001 , γ = 0.05 \tau=0.001,\gamma=0.05 τ=0.001,γ=0.05。
由于输入视频序列中深度范围变化比较大,这篇文章中通过attention机制构建scale network的形式(其结构见图1左边)对输入的图像生成对应的scale参数。这里scale参数并不是直接预测的形式得到,而是通过在预先设定范围内估计概率分布并通过积分的形式得到:
S = ∑ s = 0 D m a x s × s o f t m a x ( S ˉ ) S=\sum_{s=0}^{D_{max}}s\times softmax(\bar{S}) S=s=0∑Dmaxs×softmax(Sˉ)
在下表中展示了是否使用attention和概率分布回归对性能的影响:
只使用一阶pose估计不能很好估计平移与旋转分量,则文章通过下图所示的残差级联优化的形式得到最后的pose估计结果,其对应的网络结构由两部分组成:PoseNet和Residual PoseNet,分别完成初始pose估计和级联pose估计。则其流程图见下图所示:
使用 t i ′ t_i^{'} ti′代表迭代为 i i i时( i = 0 i=0 i=0时为原本source图像)时的图像,按照计算得到的pose其在本次迭代时输入warp之后的source图像为:
I ( t i ′ → t ) → t = I t i ′ → t ⟨ p r o j ( D t , T ( t i ′ → t ) → t r e s − 1 , K ) ⟩ I_{(t_i^{'}\rightarrow t)\rightarrow t}=I_{t_i^{'}\rightarrow t}\langle proj(D_t,T_{(t_i^{'}\rightarrow t)\rightarrow t}^{res-1},K)\rangle I(ti′→t)→t=Iti′→t⟨proj(Dt,T(ti′→t)→tres−1,K)⟩
而整体的pose其实就是迭代累积的形式:
T t ′ → t = ∏ i T t ′ → t , i = … , k , … , 1 , 0 T_{t^{'}\rightarrow t}=\prod_iT_{t^{'}\rightarrow t},i=\dots,k,\dots,1,0 Tt′→t=i∏Tt′→t,i=…,k,…,1,0
迭代估计次数对性能的影响:
综上,上述两个模块对于整体性能的影响: