本文承接上篇:
五、建立多模态网络:Packnet-SAN(2021)
[10] Sparse Auxiliary Networks for Unified Monocular Depth Prediction and Completion (CVPR2021)
在Packnet-SS中,lidar数据作为监督信号参与了网络的损失函数优化,但本身并没有输入到网络,而且监督信号只在训练阶段使用,推理阶段仍然仅使用相机数据。在这篇文章中,作者设计了一种新的稀疏辅助网络(SAN),利用稀疏卷积的特性学习lidar数据的特征,结合camera数据的深度估计网络,组合成了多模态的深度补全网络,在训练和推理阶段均可使用lidar信息,得到更加细致的结果(在没有lidar数据的情况下,深度估计网络可以单独使用)。
SAN网络的核心在于稀疏卷积的引入。文章指出,由于lidar数据的稀疏性,使用普通卷积不仅会浪费很多算力,而且会学到错误的空间信息,梯度也会被无效信息平均掉。所以本文引入闵可夫斯基卷积(Minkowski convolutions)[11](一种高效广义的稀疏卷积,可解决高维问题):
[11] 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks(CVPR 2019)
[11]原文是高维形式,在SAN网络中仅使用二维形式:
C代表坐标矩阵,F代表特征向量,稀疏卷积tensorS 仅考虑深度D>0的点的集合。SRB(稀疏残差块)由多个分支组成,每个分支代表不同个数的稀疏卷积:
数据经过SRB后,再经过稠密化层(Densification Layer),可以得到由稀疏特征重组的稠密矩阵P:
SAN网络即由多个SRB和Densification Layer组成。然后通过可学习的权重W和偏置b,与RGB图像输入的深度估计网络进行多尺度的融合,同时网络还设置了skip层,确保两个网络都可以独立运行,不会互相影响而退化。深度估计网络基线采用PackNet[3] 和BTS[12](PackNet结果更好),整个网络结构如下:
[12] From Big to Small: Multi-Scale Local Planar Guidance for Monocular Depth Estimation (CVPR2021)
损失函数方面,深度估计Dp和深度补全Dc网络使用相同的gt计算相同的尺度不变的对数损失(SILog)[13]:
[13] Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (CVPR 2014)
总损失函数如下:
六、使用环视多相机时空约束:Full Surround Monodepth (2021)
[14] Full Surround Monodepth from Multiple Cameras (CVPR 2021)
与Valeo类似,TRI后续的研究也从单相机扩展到环视,通过环视360°的深度估计,可以像激光雷达一样重建出360°的点云。但在Valeo的SVDistNet[15]和OmniDet[16]中,未能用到多相机之间的约束,本文的主要贡献是提出了多相机之间的时空上下文约束、位姿一致性约束,使单网络更好地支持多相机,同时可以给出绝对尺度。另外还提出两种mask: 非共视区域mask和自遮挡区域mask。限制条件是多相机的内外参为已知。
1.多相机时空上下文约束
如图所示,假设有三个相机,那三个相机之间存在固定已知的空间约束(来自于标定的外参),同时还有时间的约束(来自PoseNet的输出),所以第i和第j个相机图像在target和source帧之间的时空关系可以表示为:
如下图所示,2-3行代表时间上下文相机图像和光度损失,4-5行代表空间上下文图像和光度损失,最后一行代表时空上下文的光度损失,可以看出时空上下文可以增大不同相机之间的共视区域,并减小光度损失。
2.多相机位姿一致性约束
由于多个相机安装在同一台车身上,所以随着车身的移动,多相机的位姿变化应该是一致的。但是因为各自在不同的坐标系,PoseNet预测的位姿变换是独立的。所以作者通过把所有相机的坐标系都转换为前视相机的坐标系,然后用位姿一致性损失对多相机的位姿变换进行约束:(旋转和平移分别计算)
由于多相机之间的外参是固定已知的,通过时空上下文约束和位姿一致性约束,可以直接得到绝对尺度的深度。而monodepth2[4]等一系列无监督方法给出的相对尺度的结果,并用中值恢复的方法进行尺度恢复。因为本文涉及多相机,所以作者也给出了一种多相机一致性中值恢复的方法:
实验结果显示网络直接输出的绝对尺度比使用中值恢复的结果还要好。
3.非共视区域mask和自遮挡区域mask
除了运动目标和相机静止情况的影响,由于多相机的位姿差距很大,彼此存在着较大的非共视区域,同时由于相机安装的原因,单相机视角也存在一定的遮挡区域,把这些区域算进损失函数同样会对结果产生比例影响。所以作者除了使用automask[4]外,还使用了非共视区域mask和自遮挡区域mask。其中自遮挡区域因为和相机安装位置有关,可以采用手动标注,且只需要一次。非共视区域mask作者提出用最近邻插值的方法,根据多相机warp的结果分析得到。由于需要用到网络的输出,所以在训练过程中随时更新。方法类似于文献[17]:
[17]提出,在图像重构的过程中,由于视角的差异,并不是每个像素都能在原图中找到相应的位置,可能超出边界,这样的像素需要用mask给去掉,否则会影响梯度的后向传播。本文与[17]不同的是,[17]只使用了时间维度的约束,本文采用了时空约束。
本文的FSM方法同样可以用在单相机和双目相机深度估计上,作者都进行了相应实验结果好于同期的其他模型。最后提出,未来将打破每个相机内参外参均为已知的设定,建立支持自标定的更加泛化的模型。
七、从针孔扩展到一般相机模型:Neural Ray Surfaces(2020)
[18] Neural Ray Surfaces for Self-Supervised Learning of Depth and Ego-motion (CVPR 2020)
上文介绍的方法都是针对针孔相机模型,如果要在自动驾驶设备上落地使用,必须扩展到鱼眼等一般相机。与Valeo使用Cam-conv[19](相关原理在Valeo(上)博客中详细介绍)不同,Cam-conv需要事先根据已知的相机模型以及各项参数计算图像的坐标矩阵、FOV map等,与图像一并输入网络来适应不同相机的模型,而这篇文章使用了非参数化的方式,不需要任何相机标定信息和先验知识,通过学习每个像素的投影向量的方式学习一般相机模型,不限于针孔、鱼眼、后视镜和水下相机等(如上图所示)。
[19] CAM-Convs: Camera-Aware Multi-Scale Convolutions for Single-View Depth (CVPR 2019)
[20] 证明了针孔相机的参数可以通过无监督学习的方式得到:
对于一般相机模型,作者借鉴了一篇较古老的论文[21]中提到的概念:ray surface,投影光线表面,即用每个像素对应的投影光线方向来描述一般相机模型。但[21]不是基于机器学习的方法,一些计算公式不可微。本文对这个方法进行了扩展,提出了可用网络学习的可微形式。
[21] A general imaging model and a method for finding its parameters (ICCV 2001)
网络结构上,作者除了一般的depthnet和posenet,增加了一个Ray Surface decoder,用来输出每个像素对应的单位光线表面向量(unitary ray surface vector),再用同样基于target和source图像重构的光度损失、L1损失、平滑损失等(类似monodepth2[4])作为监督信号进行优化,只是此时图像重构过程中的像素坐标匹配同样需要学习:
作者假设这里使用的照相机是中心化的,且对于所有像素点,中心向量是相同的:
对于target图像上的任意像素点p,其对应的3D点P可用中心向量S、深度值D和网络预测的单位光线表面向量Q表示:
现在我们需要在source图像中找到P的投影点p',可以得到它的方向应该为:(Sc和St的位姿由PoseNet预测得到)
现在可以通过简单的搜索方式来确定光线表面向量与r方向最接近的像素点j即为我们要找的p':
由于argmax函数是不可微的,作者采用softmax函数作为近似代替:
整个过程的原理如下图所示,(b)中的p1对应的向量Q1为与Pj-Sc最相似的向量:
另外,作者还提出了两种优化的方法,一是可以用先验知识对ray surface进行初始化,然后学习残差,可以更好地接近真实模型,二是为了减少计算量,坐标匹配过程可以只在source图像临近的区域进行搜索,即基于patch的搜索,可以显著提高效率。
通过基于resnet 和PackNet baseline的对比实验以及已知参数和未知参数的对比实验,证明了未知参数的NRS-PackNet效果由于同期模型。作者提出未来的研究方向是向基于非中心化的、环视相机的推广。博主认为这篇文章的思路是非常惊艳的,只是目前看来只适用于单相机或者内参基本一致的多相机,还不能推广到异构的环视系统,同样的,Valeo目前也没有相关工作。所以异构的环视多相机系统仍是一个相当大的挑战。
更多深度估计分享请点赞关注留言。