参考代码:manydepth
论文名称:The Temporal Opportunist: Self-Supervised Multi-Frame Monocular Depth
1. 概述
导读:这篇文章借鉴了多视图深度估计中的cost-volume方法(参考:cost-volume概念),并将其引入到单目的自监督深度估计网络中。这里将原来的双目图像换成了一对前后帧图像,从而去构建cost-volume克服之前的单目深度估计中的scale ambiguity问题。此外,为了克服单目情况下cost-volume的训练问题,文章提出了一系列的策略进行解决,如运动目标的滤除,从而极大提升了单目深度估计的性能。
笼统上看文章的方法是单目视觉与立体视觉的组合,其具有:
- 1)自监督的深度估计网络,在预测的时候可以输入一帧图像也可以输入多帧图像,自然多帧图像带来的效果更好;
- 2)对于图像中运动的目标和静止的场景往往会对深度估计网络带来影响,对此文章通过引入有效的损失函数与训练策略去解决了这个问题;
- 3)对于单目深度估计中scale ambiguity的问题,文章借鉴立体视觉中的cost-volume,利用单目的视频序列构建cost-volume;
文章的方法在单帧图像输入和多帧图像输入情况下进行深度估计的效果见下图所示:
文章将深度估计中的一些方法在使用时需要的条件进行了分析,这些方法的要求为:
- 1)需要多帧图像作为输入;
- 2)相机不能静止;
- 3)深度估计训练时需要知道相机的位姿,甚至是测试时;
- 4)图像中没有移动的目标;
然后,将文章提出的方法与这些方法在使用限制上进行对比,见下表所示:
2. 方法设计
2.1 网络结构
文章的网络结构见下图所示:
从上图可以看到算法主要由:相机位姿估计网络,cost-volume构建,深度估计网络组成。
相机位姿估计网络:
这里使用相邻的两帧图像去估计相机的位姿 T t → t + n , n ∈ { − 1 , 1 } T_{t\rightarrow t+n},n\in\{-1,1\} Tt→t+n,n∈{
−1,1}(文章中并没有使用未来帧,因而 n = − 1 n=-1 n=−1),则位姿被描述为:
T t → t + n = θ p o s e ( I t , I t + n ) T_{t\rightarrow t+n}=\theta_{pose}(I_t,I_{t+n}) Tt→t+n=θpose(It,It+n)
cost-volume构建:
cost-volume在文章算法中描述的是在不同深度下相邻帧像素上的差异,不过文章中并不是在图像的维度进行,而是在特征(stride=4)的维度上。按照最小深度和最大深度值: d m i n , d m a x d_{min},d_{max} dmin,dmax(文章中对于这两个超参数的设置是通过自适应的方式进行的,这个在后面的cost-volume部分进行说明)在 I t I_t It光轴的垂直方向上划分多个平面 P \mathcal{P} P,之后在源图像的特征上使用计算得到的相机位姿信息和相机内参矩阵对特征进行变换得到 F t + n → t , d , d ∈ P F_{t+n\rightarrow t,d},d\in\mathcal{P} Ft+n→t,d,d∈P。之后cost-volume就是在变换后的源图像特征与目标图像特征上做绝对值差得到的。之后再与目标图像的特征组合起来经过解码器得到深度估计图。
深度估计网络:
这里深度估计的时候是使用了多帧的信息,因而深度估计部分被描述为:
D t = θ d e p t h ( I t , I t − 1 , … , I t − N ) D_t=\theta_{depth}(I_t,I_{t-1},\dots,I_{t-N}) Dt=θdepth(It,It−1,…,It−N)
也就是文章使用过往帧的数据作为输入去预测深度,代码中将其设置为 N = 1 N=1 N=1。之后在图像的维度上进行了重构误差监督,重构的过程描述为:
I t + n → t