Paper name
MonoIndoor: Towards Good Practice of Self-Supervised
Monocular Depth Estimation for Indoor Environments
Paper Reading Note
URL: https://openaccess.thecvf.com/content/ICCV2021/papers/Ji_MonoIndoor_Towards_Good_Practice_of_Self-Supervised_Monocular_Depth_Estimation_for_ICCV_2021_paper.pdf
TL;DR
- ICCV 2021 文章,针对室内场景深度值域范围变化更为明显与 camara pose 变化更为明显的问题提出了解决方案,大幅提升了室内场景的深度预测效果
Introduction
-
背景:当前的深度估计自监督训练方法主要聚焦于室外场景,monodepth2 在 KITTI 上的 AbsRel 指标为 0.106,比有监督方法 DORN 的 0.072 也差不了太多;但是当前的自监督方法在室内场景效果一般不佳,比如在 NYUv2 数据集上的 AbsRel 指标为 0.189
-
难点:室内场景的深度估计网络自监督训练相比与室外场景有两个难点
- 室内场景的深度值域范围变化更为明显(室外因为有天空的存在,最大深度一般都是无穷远)
- 室内场景采集的数据的 camara pose 变化一般更为明显,室外数据大多是自动驾驶场景数据主要是 translation 主导的 pose 变化(一般没有太大的旋转分量)
-
本文针对上面两个问题提出的解决思路:
- depth factorization module:将预测的 depth map 分解为预测一个 global depth scale 和一个 relative depth map,其中 depth scale 通过网络的额外分支预测得到。这样深度预测网络在训练过程中的适应 depth scale 变化的可塑性更好
- residual pose estimation module:在初始的大姿态预测之外,额外进行 residual pose estimation,用于环境旋转 pose 预测不准问题
-
在 EuRoC, NYUv2, 和 7-Scenes 上取得了自监督的 SOTA 结果
Dataset/Algorithm/Model/Experiment Detail
实现方式
- 自监督训练方式与 monodepth2 一致,参考 Unsupervised Scale-consistent Depth and Ego-motion Learning from Monocular Video 增加了尺度一致性损失
Depth Factorization
- monodepth2 中网络预测输出的是经过 sigmoid 的
σ
\sigma
σ,这个值经过线性缩放后取倒数得到预测深度
通常来说 a、b 分别代表已知场景中的最小和最大深度,比如对于 KITTI 数据中 a 是 0.1,b 是 100(需要注意的是这个转换规则的表述和 monodepth2 的代码并不一样,monodepth2 中的 a、b 是逆深度最小值和逆深度范围计算)。作者认为 KITTI 这种室外场景的数据集基于固定的 a、b 是没有问题的,因为不同视频序列中的深度范围一致(因为有天空这个无穷远存在),在室内场景深度分布差异较大, 比如 bathroom (e.g. 0.1m∼3m), lobby (e.g. 0.1m∼10m),使用固定的 a、b 会使得深度分布 scale 差异过大
def disp_to_depth(disp, min_depth, max_depth):
"""Convert network's sigmoid output into depth prediction
The formula for this conversion is given in the 'additional considerations'
section of the paper.
"""
min_disp = 1 / max_depth
max_disp = 1 / min_depth
scaled_disp = min_disp + (max_disp - min_disp) * disp
depth = 1 / scaled_disp
return scaled_disp, depth
-
为了解决室内场景的深度分布差异明显问题,提出了一种解耦的深度表达方式:一个 relative depth map 和一个全局 scale factor
- monodepth2 预测 relative depth map
- self-attention-guided scale regression network:参考 Non-local neural networks 中的 self-attention block 来关注到与获取场景深度 scale factor 相关的区域,比如场景深度最大的区域
获取到 S F S_{F} SF 后,经过两个 residual conv block 和三个全连接层得到全局的 scale factor
-
Probabilistic Scale Regression Head
- 按照上述的流程,直接将一个高维 feature map 映射到一个值上导致训练不稳定,所以参考立体匹配工作(Pyramid stereo matching network)中的 probabilistic scale regression head,将直接回归转换为分类任务进行训练
- 按照上述的流程,直接将一个高维 feature map 映射到一个值上导致训练不稳定,所以参考立体匹配工作(Pyramid stereo matching network)中的 probabilistic scale regression head,将直接回归转换为分类任务进行训练
Residual Pose Estimation
- 迭代多次求取 camera pose,首先网络输入为 target image(
I
t
I_{t}
It ) 和 source image(
I
t
′
I_{t^{'}}
It′ ),预测的 camara pose 将
I
t
′
I_{t^{'}}
It′ 映射为
I
t
0
′
→
t
I_{t_{0}^{'}\to{t}}
It0′→t
然后网络输入为 target image( I t I_{t} It ) 和 I t 0 ′ → t I_{t_{0}^{'}\to{t}} It0′→t,预测得到合成的图片
反复多次迭代的表达形式为
最终通过累乘多次预测的 residual poses 得到最终的预测 pose
实验结果
- EuRoC 数据集实验结果,使用 MH 01, MH 02, MH 04 ,V1 01 and V1 02作为训练集,输入为 rectified 后的数据,输入尺寸为 512x256。使用 V2 01 作为测试集。
其中 ScaleCNN 是 resnet18 + Conv-BN-ReLU;ScaleNet 是 resnet18 + residual blocks;ScaleRegressor 是 a lightweight network with two residual blocks which shares the feature maps from the depth encoder as input,也就是说预测 global scale 的网络直接和 depthnet 公用 backbone 就行 - 与 monodepth2 对比实验结果
- 可视化对比
- nyuv2 上的对比实验结果,在 302 个 sequences 上训练,33 个 sequences 上测试
- nyuv2 数据集上的可视化对比
Thoughts
- 提出了针对室内场景深度估计进行无监督训练的优化方法,额外增加一个 depth 全局 scale 预测模块和 redidual pose 都是小幅增加训练耗时,对测试没有影响