双目重建问题是一个计算机视觉领域一个比较经典的问题。通过两个固定、水平放置的相机,对同一个物体各个角度采集照片,利用成像原理预测物体的深度信息,进行三维场景的重建。

亚像素:面阵摄像机的成像面以像素为最小单位,像素间距为5.2微米。在宏观上可以认为像素是连续的,但是在微观上,5.2微米之间的部分我们称为亚像素,可以利用软件恢复出来。

6 DOF:六自由度,指的是刚体在三维空间中运动的自由度,特别是指刚体可以在前后、上下、左右三个相互垂直的坐标轴上平移,也可以在三个垂直的坐标轴上旋转。

数据集benchmark:立体视觉是计算机视觉中最为重要的方向之一,在视差检测方面KITTIMiddleBury 提供的数据集常被作为Benchmark。

3D重建问题研究上的pipeline如下:

物体【generic objects 】->数据【single images,multiple RGB】->研究方法【shape representations,network architecture,training mechanism】

此外对一些特殊的物体,例如人体、人脸等问题,也有着很多的三维重建的工作。

问题的定义

数据输入为一系列的RGB图片,输出为物体的三维重建的结果。三维重建网络的含义在于学习一个预测器,通过这个预测器学习到物体的三维表达,然后与GT之间计算一个最小的重建误差。

数据的输入形式有单张图片,多张图片,视频流。此外可以添加一些额外的预测信息,例如图像的轮廓,分割的结果以及语义标签进行共同预测。

encoding state

该部分用于提取图片中的深层次的特征将输入I映射到一个潜在的空间中。
$$
x = h(I)
$$
对于映射函数h有以下的要求:

  • 在I空间中相似的两个物体,在x空间中仍然十分的接近。
  • 在x空间中小小的扰动(perturbation)可以反应到I空间中的扰动。
  • 映射函数不受相机参数、位姿的影响。
  • 3D模型和2D图像可以映射到x空间中的同一个点,这样的目的可以消除模型的二义性。

隐空间有多种类型,离散、连续、层级以及开放(disentangled)的空间。

离散的隐空间

最高由Wu等将一个3D的encoding 网络引入三维重建中用于映射一个3D的体素空间。此后标准的vanilla结构的网络,以及他的变种被引入三维重建中,其他工作如pooling layer,RELU,residual networks(resnet)等也被引入三维重建中。

连续的隐空间

一些网络如VAE(variational Autoencoders)或者他的变种,他们的隐空间均设计成连续的。该类型网络将数据映射到高斯分布的一个空间中。利用高斯分布生成一个连续的3D表达。

层级隐空间(hierarchical latent spaces)

一些工作将输入映射到层级空间中,利用特征各个尺度维度的信息,能够很好的完成任务。

解构的表示空间(disentangled representation)

影响图像中物体的成像因素有很多,例如相机的位姿、光照条件等等。通过不同的网络的结构,来解析表示这些部分。

体素解析(volumetric decoding)

体素网格用来表示离散空间中3D物体的3D形状。目标是重建3D体素网格使得它能够与真实的3D物体相近。这样做的一个优点是,很多2D的网络结构可以很轻易的转化成3D的结构。

二次网格: 若当前的网格属于物体则为1,否则为0

概率网格: 每一个像素表示一个该像素属于物体的概率

SDF体素到物体表面的距离: 体素表示该位置到物体表面距离的数值,正数表示内部负数表示外部。

截断距离:定义一个截断规则,将SDF距离进行截断。

上诉四种表示方式中概率网格的表示方式最适合深度学习系统。

低分辨率的3D体素重建

在得到隐空间中的特征表达之后,需要通过一个decoder结构,恢复出物体的三维结构。常用的结构为up-convolutional network,与encoder形成一个镜像映射。使用一些3D卷积结构,从一系列图片中得到物体的三维体素表达。

之后补上:由于对这个领域实在不熟悉,需要先看几篇论文熟悉一下,才能明白作者行文过程所做的分类的含义,以免现在一知半解浪费时间,耽误好文章。