本文主要对基于学习的多视角立体视觉中的第一篇深度学习方法:MVSNet进行翻译和解读,以及添加一些个人的理解,并且在文章中介绍MVSNet两个评价指标的原理(distance metric、percentage metric)
摘要
提出一种端到端的深度学习体系结构:从多视图图像,推断深度图。
网络:
- 提取深度视觉图像特征
- 通过可微单应变形,在ref视椎体(ref camera frustum)上,构建三维损失立方
- 应用3D卷积,对初始深度图,进行正则化和回归;然后使用参考图像,对初始深度图,进行细化,以生成最终的输出
创新点:
使用基于方差的损失度量,灵活地适应任意N视图的输入,这个度量将多个特征映射为一个损失特征
在DTU上训练,在Tanks and Temples上评估。
通过后处理,生成点云,与之前的技术相比,方法更好、速度更快。
泛化性强,不通过微调也可以有较好的效果
1. Introduction
Review
MVS:从重叠图像,估计出稠密的表示
MVS传统方法:
使用手工制作的相似性度量和工程正则化,计算密集的对应关系,恢复3D点。
局限:场景的 低纹理、镜面反射 区域,导致重建不完整。
最近的算法:
accuracy较好,但completeness需要提高
基于CNN的方法:
基于学习,引入全局语义信息(如:镜面反射的先验)
【立体匹配】适合使用CNN方法:图像对已经预先校正,问题变成水平像素方向的【视差估计】,不需要考虑相机参数。
【MVS】与立体匹配不同,输入图像是任意相机几何体,给学习方法的使用带来很大问题
SurfaceNet:提前构建彩色体素立方体(Colored Voxel Cubes),将所有图像像素颜色和相机信息,组合到单个的volume中,作为网络输入
LSM,Learned Stereo Machine:直接利用,可微的 投影/非投影,实现端到端的训练/推理。
这两种方法:都利用 regular grids 的体积表示,因为3D体积巨大的内存消耗,导致网络难以扩展。
LSM:仅处理【低体积分辨率】的合成对象;
SurfaceNet:采用启发式分治策略,大规模重建需要很长时间。
本文方法:
每次计算一个深度图,而不是一次计算整个3D场景。
-
【一个ref图像】和【多个src图像】作为输入,推断ref的深度图。
-
key insight:可微单应变形 (differentiable homography warping )
该操作隐式编码网络中的相机几何,从二维图像特征,构建三维损失立方,支持端到端训练。
相机几何(camera geometry):应该指的是相机与物体之间的几何关系。
- 提出一种基于方差的度量
可以适应输入中任意数量的src
该度量:将多个特征,映射为volume中的一个损失特征。
-
将损失立方(Cost Volume)进行多尺度3D卷积,回归初始深度图。
-
利用ref图像,对深度图进行细化,提高边界区域的accuracy。
与SurfaceNet和LSM的不同:
为了进行深度图推断,本文的3D Cost Volume建立在 camera frustum 上,而不是regular Euclidean space。
下面是一个相机椎体的示意图。
- 本文方法:将MVS重建问题,解耦为。更小的逐视图深度图估计问题,使大规模重建成为可能。
实验:
在DTU上训练和评估
经过简单的后处理,completeness和overall 与之前的相比最优。
在Tanks and Temples上验证泛化能力
不需要精调
运行时间比之前的技术更快
2. Related Work
MVS Reconstruction
MVS方法分为:
1)直接点云重建:直接操作3D点,依靠传播策略逐渐加密重建,传播顺序进行,难以并行化,处理时间较长
2)体积重建:将三维空间,划分为规则的网格,估计每个体素是否附着在曲面上,空间离散化错误,高内存消耗
3)深度图重建:最灵活,将复杂的MVS问题解耦为相对较小的逐视图深度图估计问题,每次只关注一个参考和几个源图像
Learned Stereo
深度学习技术:用来更好地匹配 成对的patch
在立体匹配(Stereo Matching)中,一般都会构建 Cost Volume,来计算视差图,根据视差图生成深度图
Cost Volume
https://www.zhihu.com/question/366970399/answer/1340892604
cost volume 表示 pixel-wise matching cost
x : ref img 中的一个 pixel
X_i : 在ref的拍摄方向上,给定深度 d_i 处,对应的三维点
x_i :X_i 投影到 matching img 上的位置
cost volume记录的就是x和x_i的matching cost或相似程度
ref img 和 matching img 都已知相对位姿,ref img 中的一个pixel 沿着拍摄方向确定 search space,投影到matching img上形成epipolar line。
ref img上的一个pixel只能对应于matching img中epipolar line上的pixel。
在Search Space中取不同深度,得到不同的点 (d_1, d_2, …, d_9),分别对应epipolar line上的点 (x_1, x_2, …, x_9)
对于每一个x_i和x,根据其邻域信息,计算matching cost,得到x_i与x的匹配程度
以上面的 (x_1, x_2, …, x_9)为例,可以得到9个matching cost,可以构成一个vector。
这个vector表示: x点在matching img上关于(d_1, d_2, …, d_9)的matching cost
ref img上的每个pixel形成一个vector,组合在一起形成一个三维的tensor,就是cost volume(损失立方)
Learned MVS
SurfaceNet
LSM
3. MVSNet
主要过程:
- Image Feature Extract:N input image --> deep feature
- Differentiable Homography:deep feature --> feature volumes
- Cost Metric:feature volumes --> cost volumes
- Cost Volume Regularization:cost volume --> probability volume
- Initial Estimation:probability volume --> depth map
- Depth Map Refinement:depth map --> refined depth map
3.1 Image Feature
MVSNet第一步:提取N个输入图像 { I i } i = 1 N \{I_i\}^N_{i=1} { Ii}i=1N的深度特征 { F i } i = 1 N \{F_i\}^N_{i=1} { Fi}i=1N。
使用:八层的2D卷积网络
在第三层和第六层,步长为2,将特征进行下采样,尺寸缩减为原来的一半。特征塔划分为三个scales。
每个scale内部,使用两个卷积层,提取更高级别的图像表示。
除了最后一个绿色的卷积,其余每个层都是Conv+batch-normalization+ReLU。
与常见的匹配任务类似,在所有的特征塔之间,参数共享,实现高效学习。
一个特征塔内部的结构:(输入图像为WxH)
Content | Kernel Size | Filter Number | Stride | Output |
---|---|---|---|---|
Conv+BN+ReLU | 3 x 3 | 8 | 1 | 8 x W x H |
Conv+BN+ReLU | 3 x 3 | 8 | 1 | 8 x W x H |
Conv+BN+ReLU | 5 x 5 | 16 | 2 | 16 x W/2 x H/2 |
Conv+BN+ReLU | 3 x 3 | 16 | 1 | 16 x W/2 x H/2 |
Conv+BN+ReLU | 3 x 3 | 16 | 1 | 16 x W/2 x H/2 |
Conv+BN+ReLU | 5 x 5 | 32 | 2 | 32 x W/4 x H/4 |
Conv+BN+ReLU | 3 x 3 | 32 | 1 | 32 x W/4 x H/4 |
Conv | 3 x 3 | 32 | 1 | 32 x W/4 x H/4 |
整个2D网络的输出,共32个通道,每个通道的特征尺寸降低至 W/4 x H/4
通道的增加,弥补了尺寸的减小
同时,每个图像都提取这样的一个32 x W/4 x H/4 的特征
3.2 Cost Volume
第二步:从提取的特征和输入相机中,构建3D cost volume。
在reference camera frustum 上构建损失立方。
I 1 I_1 I1:ref
{ I i } i = 2 N \{I_i\}^N_{i=2} { Ii}i=2N:src
{ K i , R i , t i } i = 1 N \{K_i,R_i,t_i\}^N_{i=1} { Ki,Ri,t