橦言无忌

一个不想改变世界的程序媛

三维重建调研

摘要

3D重建的调研文章,正在进行中~

3D重建领域调研~

传统三维重建

按传感器是否向物体发射光源分为:

  • 主动式:发射光源,依靠返回信息来解析深度信息
    • 结构光
    • TOF激光飞行时间
    • 三角测距法
  • 被动式:从多视角的RGB图中用多视图几何原理来解析图像
    • 单目视觉
    • 双目/多目视觉
    • 基于消费级的RGB-D相机

经典三维重建算法:SFM,多视图几何

结构光

将编码的光源照射到物体上,由相机拍摄后通过运算单元来转换成深度信息

缺点

容易受环境光干扰,所以室外体验差
检测距离增加,精度变差

改进

增大功率
改变编码方式

TOF激光飞行时间法

连续发射光脉冲,根据接收返回光的时间差或相位差来计算目标距离。

缺点

需要极为精确的时间测量模块,成本高

优点

测量距离远,受环境光干扰少

改进

提高计时器良品率,降低成本
算法性能优化

三角测距法

优点

近距离精度高

缺点

精度与距离有关,距离越大,精度越差

单目视觉

一部摄像头作为采集设备,一段时间内获得的连续图像的视差来进行三维重建

缺点

低成本,易部署
单张图像可能对应无数真实物理世界场景,这是个病态的问题

分类

  • 离线重建
    • 运动恢复法,SFM
  • 在线重建
    • 渐进式
      • REMODE
      • SVO
    • 直接式

现状

目前这种算法广泛应用于手机等移动设备中,常见的算法有SfM,REMODE和SVO等

双目/多目视觉

利用左右相机得到两幅矫正图像,找到左右图片的匹配点,然后根据几何原理恢复环境的三维信息。

缺点

左右相机的图片匹配算法精确度直接影响重建效果
多目的缺点,多个相机的图片匹配,需要消耗更多时间,实时性差

分类

  • 全局匹配, GM
  • 本全局匹配, SGBM
  • 局部匹配, BM

现状

理论上,可以较精确的恢复精度信息,实际受拍摄环境约束无法保证精度,常见方法有SGM,SGBM等

基于消费级的RGB-D

微软的Kinect v1和v2

现状

最早,由帝国理工大学的Newcombe等人于2011年提出的Kinect Fusion开启了RGB相机实时三维重建的序幕。此后有 Dynamic Fusion, Elastic Fusion, Fusion 4D, Volumn, Bundle Fusion等算法。

基于深度学习的三维重建算法

主要在三个方向的应用

给传统的重建算法提供优化思路

典型文章:Code SLAM1,CVPR 2018年的best paper提名奖

利用CNN提取img几何信息,实现单目相机的稠密SLAM,主要贡献在于用DL方法从单张图像中提取若干基函数来表示场景的深度,这些基函数可以较大解决传统方法中的优化问题。

传统方法与DL方法结合,优势互补

多传感器,多算法的融合来提高算法的鲁棒性,比如,深度学习算法在不可见部分的建模有天然优势,传统算法是很难做到的。

模仿动物视觉,直接进行三维建模

动物或人类根据大脑而不是严格的几何计算来进行三维重建,深度学习中,有一系列利用单张图像来来三维重建,原理上单张图失去了深度信息而无法回复,DL做的是利用一些经验信息来进行估计。

深度学习算法给传统算法做优化

利用CNN在图像特征匹配上的优势

  • DeepVO,其基于深度递归卷积神经网络(RCNN)直接从一系列原始RGB图像(视频)中推断出姿态,而不采用传统视觉里程计中的任何模块,改进了三维重建中的视觉里程计这一环。

  • BA-Net,其将 SfM 算法 BA(Bundle Adjustment)优化算法作为神经网络的一层,以便训练出更好的基函数生成网络,从而简化重建中的后端优化过程。

  • Code SLAM,如之前所提,其通过神经网络提取出若干个基函数来表示场景的深度,这些基函数可以简化传统几何方法的优化问题。

深度学习与传统算法优势互补

CNN-SLAM13将CNN预测的致密深度图和单目SLAM的结果进行融合,在单目SLAM接近失败的图像位置,如低纹理区域,其融合方案给予更多权重于深度方案,提高了重建的效果。

深度学习单挑大梁,直接进行三维重建

三维重建领域主要的数据格式有四种:

• 深度图(depth map),2D图片,每个像素记录从视点到物体的距离,以灰度图表示,越近越黑;

• 体素(voxel),体积像素概念,类似于2D之于像素定义;

• 点云(point cloud),每个点都含有三维坐标,乃至色彩、反射强度信息;

• 网格(mesh),即多边形网格,容易计算。

因而,依据处理的数据形式不同我们将研究简要分为三部分:1)基于体素;2)基于点云;3)基于网格。而基于深度图的三维重建算法暂时还没有,因为它更多的是用来在2D图像中可视化具体的三维信息而非处理数据。

基于体素(voxel)

讲2D的卷积拓展到3D进行三维重建

  • Depth Map Prediction from a Single Image using a Multi-Scale Deep Network, 2014
    用深度学习做三维重建的开山之作,基于体素形式,其直接用单张图像使用神经网络直接恢复深度图方法,将网络分为全局粗估计和局部精估计,并用一个尺度不变的损失函数进行回归。

  • 3D-R2N2: A unified approach for single and multi-view 3d object reconstruction, 2016
    使用Encoder-3DLSTM-Decoder的网络结构建立2D图形到3D体素模型的映射,完成了基于体素的单视图/多视图三维重建(多视图的输入会被当做一个序列输入到LSTM中,并输出多个结果)。

缺点:提升精度即需要提升分辨率,而分辨率的增加将大幅增加计算耗时(3D卷积,立次方的计算量),也就是,计算量大,并且分辨率和精度难平衡

基于点云

  • A Point Set Generation Network for 3D Object Reconstruction From a Single Image, 2017
    用点云做三维重建的开山之作,最大贡献在于解决了训练点云网络时候的损失问题,因为相同的几何形状可能在相同的近似程度上可以用不同的点云表示,如何用恰当的损失函数来进行衡量一直是基于深度学习用点云进行三维重建方法的难题。
  • Point-Based Multi-View Stereo Network, 2019
    对场景的点云进行处理,融合三维深度和二维纹理信息,提高了点云的重建精度

优点:简单、统一的结构,在几何变换和变形时更容易操作;

缺点:点云的点之间缺少连接性,缺乏物体表面信息,而直观的感受就是重建后的表面不平整

基于网格

网格的表示方法具有轻量、形状细节丰富的特点,重要是相邻点之间有连接关系。因而研究者基于网格来做三维重建。我们知道,网格是由顶点,边,面来描述3D物体的,这正好对应于图卷积神经网络的 M=(V,E,F) 所对应。

  • Pixel2Mesh,用三角网格来做单张RGB图像的三维重建

Pixel2Mesh的算法:

  • 对于任意图像都初始化一个椭球体作为初始三维形状;
  • 网格分为两个部分:
    • CNN来提取图像特征;
    • 用图卷积来表示三维网格结构;
  • 对三维网格不断变形,最终输出物体形状

模型通过四种损失函数来约束形状,取得了很好的效果。贡献在于用端到端的神经网络实现了从单张彩色图直接生成用网格表示的物体三维信息。

各自有缺点和使用范围

方式 原理 优点 缺点
主动 结构光 编码结构光 在一定范围内精度高;
对物体本身的颜色和纹理稳健
容易受环境光干扰,室外体验差;
随检测距离增加而精度变差
TOF飞行时间 反射光时间差 检测距离远;
受环境光干扰较少
整体价格昂贵;
分辨率较低
三角测距法 几何三角相似性 成本较低;
近距离精度高
远距离误差大;
计算量相对较大;
被动 单目视觉 单目视觉 算法成熟,计算量较小;
成本最低,易部署;
单图可对应多个实际物理场景,歧义大;
精度和算法的稳定性较差;
双目/多目视觉 多目几何视觉 成本较低;
理论上可精确恢复精度信息;
多摄像头可提高重建精度;
计算量大,实时性差;
环境干扰导致精度难保证;

参考资料

三维重建算法综述|传统+深度学习方式

// 代码折叠