[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019

Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference

1. Intro

Multi-view stereo (MVS) 目标是根据多角度图像以及校准的相机,恢复出三维场景。新的机器学习(learned)方法在MVS中相比传统方法表现出色。然而在大多数learned MVS方法中,由于cost volume regularization严重消耗内存,使得方法可扩展性差,无法应用于高分辨率场景。

本文在原本MVSNet基础上,在cost volume regularization一步采用多层gated recurrent unit (GRU)而非 3D CNN,内存消耗由立方增长降低到平方增长,可以应用于高分辨率场景。

本文首先验证了Recurrent MVSNet在常规数据集DTU,Tanks and Temples, ETH3D上表现,甚至出色于MVSNet。 之后又在大规模场景中验证,详细分析了内存消耗。

2. MVSNet (R-MVSNet)

MVSNet为一个端对端的网络结构(end to end)。输入为一张参考图像(reference image)以及多张源图像(source images),输出为参考图像的深度图。

[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019_第1张图片

2.1 Images to Deep Features

[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019_第2张图片
I m a g e s   { I i } i = 1 N → 2 D    C N N s D e e p   F e a t u r e s   { F i } i = 1 N \mathrm{Images}\, \begin{Bmatrix} \mathbf{I}_{i} \end{Bmatrix}_{i=1}^N \xrightarrow{2D\,\,CNNs} \mathrm{Deep\,Features}\, \begin{Bmatrix} \mathbf{F}_{i} \end{Bmatrix}_{i=1}^N Images{Ii}i=1N2DCNNs DeepFeatures{Fi}i=1N

对于每一张图像Images,使用8层CNN提取Deep Features。第3、6层strides设置为2,使网络Feature tower逐渐缩小为三个等级,如图。每个等级中,两层卷积层用于提取图像高维特征,每一个卷积层后均有一个batch-normalization (BN)层,以及一个ReLU层,除了最后一个卷积层。所有参数在各个网络中共享。

经过2D网络,产生N个 32-channel Deep Features (Feature maps), 大小在每个方向上为源图象的 1 4 \frac{1} {4} 41 。即为 F i → H 4 × W 4 × F ( 32 ) \mathbf{F_{i}}\to\frac{H}{4}\times\frac{W}{4}\times{F(32)} Fi4H×4W×F(32)

2.2 Deep Features to Feature Volumes (Differentiable Homography)

[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019_第3张图片
D e e p   F e a t u r e s   { F i } i = 1 N → w a r p F e a t u r e   V o l u m e s   { V i } i = 1 N \mathrm{Deep\,Features}\, \begin{Bmatrix} \mathbf{F}_{i} \end{Bmatrix}_{i=1}^N \xrightarrow{warp} \mathrm{Feature \, Volumes}\, \begin{Bmatrix} \mathbf{V}_{i} \end{Bmatrix}_{i=1}^N DeepFeatures{Fi}i=1Nwarp FeatureVolumes{Vi}i=1N

此处为文章创新点之一。提出了一个基于单应变换的由2D转换3D的方法。

具体过程为将每一张源图象(Source images)的Deep Features (2D) 通过可微的单应变换,warp到参考图像 (Reference image) 相机前面的平行平面上,这些平行平面表示了不同的深度平面。公式如下:
H i ( d ) = K i ⋅ R i ⋅ ( I − ( t 1 − t i ) ⋅ n 1 T d ) ⋅ R 1 T ⋅ K 1 T \mathbf{H}_i(d) = \mathbf{K}_i\cdot\mathbf{R}_i\cdot(\mathbf{I}-\frac{(\mathbf{t}_1-\mathbf{t}_i)\cdot\mathbf{n}_1^T}{d})\cdot\mathbf{R}_1^T\cdot\mathbf{K}_1^T Hi(d)=KiRi(Id(t1ti)n1T)R1TK1T
其中 K i 、 K 1 T 、 R i 、 R 1 T 、 t 1 、 t i \mathbf{K}_i、\mathbf{K}_1^T、\mathbf{R}_i、\mathbf{R}_1^T、\mathbf{t}_1、\mathbf{t}_i KiK1TRiR1Tt1ti 均为各个图像对应的相机内部参数,相机旋转矩阵,相机位移向量。 d d d 表示深度, I I I 为单位矩阵。

此过程类似于将每一张图像投影到参考图像 (Reference image) 相机前面的平行平面,只不过投影的为各个图像的Deep Features。如图:

[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019_第4张图片

经过变换,得到N张图像对应的Feature Volumes,其结构为
V i → H 4 × W 4 × D × F ( 32 ) \mathbf{V_{i}}\to\frac{H}{4}\times\frac{W}{4}\times{D}\times{F(32)} Vi4H×4W×D×F(32), D D D表示深度平面个数。

2.3 Features Volumes to Cost Volume

[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019_第5张图片
F e a t u r e   V o l u m e s   { V i } i = 1 N → V a r i a n c e C o s t   V o l u m e   C \mathrm{Feature \, Volumes}\, \begin{Bmatrix} \mathbf{V}_{i} \end{Bmatrix}_{i=1}^N \xrightarrow{Variance} \mathrm{Cost \, Volume}\, \mathbf{C} FeatureVolumes{Vi}i=1NVariance CostVolumeC
这一步将N个Feature Volumes合并为一个Cost Volume C \mathbf{C} C 其过程为对N张Feature Volumes逐个像素取方差:
C = ∑ i = 1 N ( V i − V i ‾ ) 2 N \mathbf{C} = \frac{\sum_{i =1}^N(\mathbf{V}_i-\overline{\mathbf{V}_i})^2}{N} C=Ni=1N(ViVi)2
此过程可以处理任意多输入图像,得到 C \mathbf{C} C结构为: C → H 4 × W 4 × D × F ( 32 ) \mathbf{C}\to\frac{H}{4}\times\frac{W}{4}\times{D}\times{F(32)} C4H×4W×D×F(32)

取方差 (Variance)的过程得到了各个图像 (不同角度)之间同一深度位置特征的差异大小,差异大小表明了特征的匹配程度,若无差异,则说明此深度位置的点为多个角度投影的交点,即深度确定。

2.4 Cost Volume Regularization

从此一部分开始,R-MVSNet与MVSNet不一致。

[论文笔记]Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference-CVPR 2019_第6张图片

C o s t   V o l u m e   C → G R U + S o f t m a x P r o b a b i l i t y   V o l u m e   P Cost\, Volume \, \mathbf{C} \xrightarrow{GRU+Softmax} Probability\, Volume\, \mathbf{P} CostVolumeCGRU+Softmax ProbabilityVolumeP
R-MVSNet中采用的方法是沿着深度方向,顺序逐步处理Cost Volume C \mathbf{C} C, 具体来讲为Convolutional GRU。这种Regularization方法效果与3D CNN相差无几,但在内存占用方面有着更高的效率。

Convolutional GRU: Cost Volume C \mathbf{C} C 可以看作D个cost maps { C ( i ) } i = 1 D \begin{Bmatrix}{\mathbf{C}(i)}\end{Bmatrix}_{i = 1}^D {C(i)}i=1D于深度方向前后连接在一起。如果我们定义 { C r ( i ) } i = 1 D \begin{Bmatrix}{\mathbf{C}_r(i)}\end{Bmatrix}_{i = 1}^D {Cr(i)}i=1D为经过regularized的输出,那么根据GRU顺序处理的理念, C r ( t ) \mathbf{C}_r(t) Cr(t)应当与 C ( t ) \mathbf{C}(t) C(t)以及所有以前的 { C ( i ) } i = 1 t − 1 \begin{Bmatrix}{\mathbf{C}(i)}\end{Bmatrix}_{i = 1}^{t-1} {C(i)}i=1t1有关。如图所示,这样,网络就可以沿深度方向收集上下文信息。

C r ( t ) \mathbf{C}_r(t) Cr(t)计算:
C r ( t ) = ( 1 − U ( t ) ) ⊙ C r ( t − 1 ) + U ( t ) ⊙ C u ( t ) \mathbf{C}_r(t) = (1-\mathbf{U}(t))\odot\mathbf{C}_r(t-1)+\mathbf{U}(t)\odot\mathbf{C}_u(t) Cr(t)=(1U(t))Cr(t1)+U(t)Cu(t)
其中 U ( t ) \mathbf{U}(t) U(t)为update gate, 决定是否当前步骤update, C r ( t − 1 ) \mathbf{C}_r(t-1) Cr(t1)是上一步骤输出结果, C u ( t ) \mathbf{C}_u(t) Cu(t)可以看作是这一步骤updated的结果,按照如下定义:
C u ( t ) = σ c ( W c ∗ [ C ( t ) , R ( t ) ⊙ C r ( t − 1 ) ] + b c ) \mathbf{C}_u(t) = \boldsymbol{\sigma}_c(\mathbf{W}_c*[\mathbf{C}(t),\mathbf{R}(t)\odot\mathbf{C}_r(t-1)]+\mathbf{b}_c) Cu(t)=σc(Wc[C(t),R(t)Cr(t1)]+bc)
其中 R ( t ) \mathbf{R}(t) R(t)为reset gate,用于确定上一步骤 C r ( t − 1 ) \mathbf{C}_r(t-1) Cr(t1)对当前步骤update的影响。 σ c ( ) \boldsymbol{\sigma}_c() σc()为对每一个元素作用的sigmoid函数。 R ( t )   U ( t ) \mathbf{R}(t)\, \mathbf{U}(t) R(t)U(t)也与当前步骤输入以及上一步骤输出有关:
R ( t ) = σ g ( W r ∗ [ C ( t ) , C r ( t − 1 ) ] + b r ) \mathbf{R}(t) = \boldsymbol{\sigma}_g(\mathbf{W}_r*[\mathbf{C}(t),\mathbf{C}_r(t-1)]+\mathbf{b}_r) R(t)=σg(Wr[C(t),Cr(t1)]+br)

U ( t ) = σ g ( W u ∗ [ C ( t ) , C r ( t − 1 ) ] + b u ) \mathbf{U}(t) = \boldsymbol{\sigma}_g(\mathbf{W}_u*[\mathbf{C}(t),\mathbf{C}_r(t-1)]+\mathbf{b}_u) U(t)=σg(Wu[C(t),Cr(t1)]+bu)

W \mathbf{W} W U \mathbf{U} U为learned 参数, σ g ( ) \boldsymbol{\sigma}_g( ) σg()为tanh函数。

网络具体结构:有多个GRU单元堆栈形成一个深度网络,在文章中为3层GRU单元。首先通过一个2D卷积层将32-channel转化为16-channel作为GRU层的输入。之后,每一层GRU输出作为下一层输入,依次输出channel数为16,4,1。最终,经过regularized的cost maps { C r ( i ) } i = 1 D \begin{Bmatrix}{\mathbf{C}_r(i)}\end{Bmatrix}_{i = 1}^D {Cr(i)}i=1D将经过softmax层从而产生Probability volume P \mathbf{P} P用于计算损失。

{ C r ( i ) } i = 1 D \begin{Bmatrix}{\mathbf{C}_r(i)}\end{Bmatrix}_{i = 1}^D {Cr(i)}i=1D将经过softmax层从而产生Probability volume P \mathbf{P} P用于计算损失。

此过程产生的Probability volume P \mathbf{P} P结构为: P → H 4 × W 4 × D \mathbf{P}\to\frac{H}{4}\times\frac{W}{4}\times{D} P4H×4W×D

3.论文及代码

Github代码R-MVSNet
论文链接

你可能感兴趣的:(CV-MVS,CV,AI,CVPR,MVS,CS)