参考代码:monodepth2
1. 概述
导读:由于图片的准确深度信息获取的代价是比较大的,因而使用带有标注的数据去训练会存在较大的成本。因此近来自监督的方法吸引了较多研究者的注意,本篇文章研究的是单目下的自监督深度估计问题,基于经典的计算机视觉原理,文章将深度估计任务划分为两个互补子功能模块:
1)从目标图像(target image)通过编解码网络预测深度信息;
2)从源图像(source images)和目标图像组成的图像对中去估计出该图像对之间的变换关系(由旋转和平移组成的6维度变换状态);
为了更近一步提升深度估计的性能,文章还提出了更具实际意义的损失函数及策略:
1)使用最小重构误差损失作为最后的损失函数,增加对于视频序列中存在遮挡情况的鲁棒性,以及解决平均重构误差损失带来的模糊问题;
2)使用多尺度预测(统一resize在训练图分辨率上)并计算损失,不仅避免了陷入局部最优,而且使得深度的监督输入图片分辨率下更有指向性,从而减少视觉伪影的产生;
3)使用auto-mask策略去排除违反相机运动假设的像素(像素位置相对静止/低纹理区域等),避免了无关像素的干扰,从而提升训练的鲁棒性;
文章的终极目标是从单张图像里面去估计出深度信息,现有的一些自监督的方法已经可以通过立体图像对和单目视频完成训练。对于单目视频的训练由于没有立体视觉系统的先验信息,因而它需要一个额外的姿态估计网络(文中估计6个维度的变化),从而构建一个可行的自监督深度估计方案。对于立体视觉系统是通过离线的方式完成标定,因而不需要姿态估计网络但是其在遮挡和texture-copy artifacts存在问题(那么借鉴文章中提到的策略那么是不是可以反向提升立体视觉的性能呢?doge…)。
整体上文章的方法清晰,使用的策略也很得当,最后生成的结果与其它一些方法的对比见下图所示:
2. 方法设计
2.1 网络结构
文章方法整体的网络结构由两部分组成:U型结构构建的物体深度信息编解码单元和视频帧对作为输入的姿态估计单元,见图3的(a)(b)图所示。
2.2 自监督训练
这里将当前需要估计的视频帧(测试的时候输入单张图片即可)为目标图像,记为 I t I_t It。对应的前后帧为源图像,记为 I t ‘ = { I t − 1 , I t + 1 } I_{t^{‘}}=\{I_{t-1},I_{t+1}\} It‘={ It−1,It+1}(在使用立体视觉系统的时候其为另外一个摄像头的数据)。其在训练时只使用单目视频那么生成的模型标号为M(monocular),若是立体视频数据训练的则记为S(stereo),若是混合训练的记为MS。
那么文章的方法就是需要从源图像出发根据估计出来的深度信息和姿态信息重建出目标图像,整个优化的过程就是要最小化重建误差。这里将重建误差表示为:
L p = ∑ t ‘ p e ( I t , I t ‘ → t ) L_p=\sum_{t^{‘}}pe(I_t,I_{t^{‘}\rightarrow t}) Lp=t‘∑pe(It,It‘→t)
其中,从源图像到目标图像的映射过程描述为:
I t ‘ → t = I t ‘ ⟨ p r o j ( D t , T t → t ‘ , K ) ⟩ I_{t^{‘}\rightarrow t}=I_{t^{‘}}\langle{pro