前言:本文别名DynamicDepth (github),如本文的名字所示,本文着重处理的就是动态场景下的多帧自监督深度估计问题。因为MVS在动态场景下会失效,所以在动态区域的多帧深度并不可靠。现在的已有方法例如ManyDepth,利用teacher-student网络结构,让多帧部分的网络在不可信区域向单帧部分的网络学习,但是所谓不可信区域的判断准则仅仅是依靠多帧深度和单帧深度的差异来计算的,不一定准确。所以DynamicDepth提出的核心论点就是显示地构建动态区域的优化。
会议/期刊:2022ECCV
论文题目:《Disentangling Object Motion and Occlusion for Unsupervised Multi-frame Monocular Depth》
论文链接:Disentangling Object Motion and Occlusion for Unsupervised Multi-frame Monocular Depth
开源代码:AutoAILab/DynamicDepth(github.com)
YouTube:[ECCV 2022] Disentangling Object Motion and Occlusion for Unsupervised Multi-frame Monocular Depth - YouTube
先前的工作都是存在以下缺陷:
首先我们来回顾一下动态场景会对多帧深度学习造成什么样的影响?
如下图所示,在MVS的静态假设下,我们认为被拍摄的物体没有移动。从 t 时刻和 t−1 时刻观察该物体,他们的位置都在 W ′ W^′ W′(两条线相交于一点),因此他们在图象上的对应区域是 C t C_t Ct 和 C t − 1 C_{t−1} Ct−1 。但是在实际场景中,物体已经从 W t − 1 W_{t−1} Wt−1 移动到 W t W_t Wt ,在图像上匹配的区域应该是 C t − 1 d C_{t−1}^d Ct−1d 和 C t C_t Ct 。
用动画来表示:
为了避免这种匹配错误,本文提出的DOMD模块先利用预训练的分割网络分割出人,车等动态区域,得到分割掩码 ( S t − 1 , S t ) (S_{t−1}, S_t) (St−1,St),和两帧图片 ( I t − 1 , I t ) (I_{t−1}, I_t) (It−1,It) 作为输入,生成解耦后的图片 I t − 1 d I_{t-1}^d It−1d
M o : ( I t , I t − 1 , S t − 1 , S t ) ↦ I t − 1 d \mathrm{M}_{\mathrm{o}}:\left(I_{t}, I_{t-1}, S_{t-1}, S_{t}\right) \mapsto I_{t-1}^{d} Mo:(It,It−1,St−1,St)↦It−1d
具体来说,我们首先使用单帧深度先验网络 θ D P N θ_{DPN} θDPN 来预测初始深度先验 D t p r D^{pr}_t Dtpr , D t p r D^{pr}_t Dtpr用于将 C t C_t Ct 重投影到 C t − 1 d C^{d}_{t-1} Ct−1d , C t − 1 d C^{d}_{t-1} Ct−1d表示 t-1 时刻相机看 W t W_t Wt点的像素块。最后,得到 I t − 1 d I_{t-1}^d It−1d。该过程用公式可以表达如下, p i t − 1 pi_{t-1} pit−1 表示映射关系:
C a = I a ⋅ S a , C t − 1 d = π t − 1 ( π t − 1 ( C t , D t p r ) ) , I t − 1 d = I t − 1 ( C t − 1 → C t − 1 d ) C_{a}=I_{a} \cdot S_{a}, \quad C_{t-1}^{d}=\pi_{t-1}\left(\pi_{t}^{-1}\left(C_{t}, D_{t}^{p r}\right)\right), \quad I_{t-1}^{d}=I_{t-1}\left(C_{t-1} \rightarrow C_{t-1}^{d}\right) Ca=Ia⋅Sa,Ct−1d=πt−1(πt−1(Ct,Dtpr)),It−1d=It−1(Ct−1→Ct−1d)
这个过程有点像crop-粘贴的操作,其结果是,t时刻帧不再有动态物体
该过程如下所示:
在DOMD进行crop-粘贴的操作之后,图片中已不存在动态物体,但是新的问题又出现了,那就是遮挡区域,如下图的输入部分,我们可以看到crop后的部分区域是黑色的,因为该部分实际被遮挡了,因此本文在构建cost volume的时候需要考虑到被遮挡的情况。如上图所示,被遮挡部分的特征被临近部分的数据所填充,这样可以促进训练的梯度流向附近的non-occluded区域。
cost values的公式计算:
C V i = ∣ F t − F i w ∣ 1 , F i w = π t ( π t − 1 − 1 ( F t − 1 d , p i ) ) C V_{i}=\left|F_{t}-F_{i}^{w}\right|_{1}, \quad F_{i}^{w}=\pi_{t}\left(\pi_{t-1}^{-1}\left(F_{t-1}^{d}, p_{i}\right)\right) CVi=∣Ft−Fiw∣1,Fiw=πt(πt−1−1(Ft−1d,pi))
我们使用帧 i t − 1 , i t , i t + 1 {i_{t−1},i_t,i_{t+1}} it−1,it,it+1 进行训练,使用 i t − 1 , i t {i_{t−1},i_t} it−1,it 进行测试。本文的所有动态对象都是由预训练好的语义分割模型EffcientPS得到
由上图可知,DynamicDepth相比于之前的工作,其深度预测更准确,特别是在Cityscapes上,原因是该数据集包含更多动态对象。
具体来说,其贡献可以总结为以下几点:
但Dynamic依然存在的问题是:利用了预训练的分割网络,导致预测的深度结果和分割网络的性能密切相关
单目多帧自监督深度估计(2021-2022)研究进展 - 知乎 (zhihu.com)