MVSNeRF-利用MVS实现快速且泛化的辐射场重建

MVSNeRF: Fast Generalizable Radiance Field Reconstruction from Multi-View Stereo,使用多视立体几何构建代价体P,并用3D CNN将代价体P编码为neural volume,后面用NeRF-like的方法回归color以及σ\sigma。其中的代价体P是一个3D volume,其中蕴含的是场景外观差异(使用了图像特征的方差作为代价体)。

类似于IBRNet(使用多视图约束),重点是使用了cost volume(MVS中常用的技术),属于泛化NeRF

问题

NeRF是per-scene optimization,无法将一个模型用到另一个场景上去。

note:其实NeRF一方面靠overfit提升渲染质量,即让模型充分表征scene1;另一方面,正是由于overfit,导致对其它scene2无法泛化,因为模型是对scene1的overfit。所以,这感觉像是一种trade-off,提升泛化能力必然/可能导致对个别场景的表征不够,专精于个别场景的表征必然/可能导致泛化能力的下降,找到一种两全其美的办法?

prior solution

提升NeRF的泛化能力,目前的方法大多是:增加图像特征(PixelNeRF)、增加立体几何约束(MVSNeRF、light field neural rendering)、增加regularization。

本文方法可在仅3个视角输入下进行新视角合成,并能用更多的视角微调fine-tune模型提升质量。

本文方法

核心:图像特征+立体几何约束

上图是MVSNeRF的overview,步骤如下:

  1. 设有NN张输入视角input views,其中一张为参考视角reference view,用CNN提取各个输入视角的2D图像特征FiF_i,即:

    Fi=TCNN(Ii)IiRHi×Wi×3,FiRHi/4×Wi/4×CF_i=T_{CNN}(I_i) \\ I_i{\in}R^{H_i{\times}W_i{\times}3},F_i{\in}R^{H_i/4{\times}W_i/4{\times}C}

  2. 利用各个视角的内外参矩阵Φ=[K,R,t]\Phi=[K,R,t]将input views的特征FiF_i投影到reference view上,Hi(z)H_i(z)是将view-i warp到reference view的深度z处,即得到Fi,z(u,v)F_{i,z}(u,v)(u,v)(u,v)表示reference view中的像素坐标,公式中使用了齐次坐标n1n_1代表什么?TODO

    Hi(z)=Ki(RiR1T+(t1ti)n1Tz)k11Fi,z(u,v)=Fi(Hi(z)[u,v,1]T)RHi/4×Wi/4×CH_i(z) = K_i{\cdot}(R_i{\cdot}R_1^T+\frac{(t_1-t_i){\cdot}n_1^T}{z})k_1^{-1} \\ F_{i,z}(u,v) = F_i(H_i(z)[u,v,1]^T) {\in}R^{H_i/4{\times}W_i/4{\times}C}

    说明:对于reference view中的任一像素(u,v)(u,v),它warp到view-i的深度z处的值都在FiF_i上,但记住,FiF_i是一个2D图像特征,并没有深度信息,即此处的深度只不过是体现在取FiF_i的不同位置。

  3. 构建代价体,上面已得到第i个input view warp到reference view深度z处的特征Fi,z(u,v)F_{i,z}(u,v),那对于N个input views和D个sweeping planes/z可构建一个3D代价体:

    P(u,v,z)=Var(Fi,z(u,v)),z=z1,...,zDcompute variance for ith viewsPRHi/4×Wi/4×C×DP(u,v,z) = Var(F_{i,z}(u,v)), z={z_1,...,z_D}\\ compute\ variance\ for\ i-th\ views \\ P{\in}R^{H_i/4{\times}W_i/4{\times}C{\times}D}

    note:计算方差是因为该统计指标能够体现/编码不同视角下的外观差异,虽然P形式上是四个维度(H,W,C,D)(H,W,C,D),但其3D结构体现在(H,W,D)(H,W,D),C这个维度视为特征。

  4. 代价体可认为是raw 2D image feature,因为仅仅是计算了特征的方差,这一步对代价体P进行3D CNN操作,构建neural encoding volume,可认为是在隐式恢复scene的3D信息,包括geometry、appearance等,表示为:

    S=B3D CNN(P)SRHi/4×Wi/4×Cf×DS = B_{3D\ CNN}(P) \\ S{\in}R^{H_i/4{\times}W_i/4{\times}C_f{\times}D}

    S是3D的,因此可看作voxel,而3D CNN就像是在给voxel赋予该位置处scene的特征,后面的f=S(x)RCff=S(x){\in}R^{C_f}就表示(h,w,d)(h,w,d)处的特征。

  5. 有了voxel-volume,就可以用ray-marchingg做类似于NeRF中的操作了,即预测每个空间采样点的颜色和体密度,但此时输入不止位置和方向,还包括Volume feature和图像颜色(解决因2D CNN导致分辨率下降而导致高频信息难以恢复的问题),即:

    (x,d,f,c)(RGB,σ)f=S(x)RCfc=[I(ui,vi)]R3N(x,d,f,c){\rightarrow}(RGB,\sigma) \\ f=S(x){\in}R^{C_f} \\ c = [I(u_i, v_i)] {\in}R^{3N}

    Q&A:c是original pixel data,在训练时是能得到的,但是在渲染新视角时c时无法获得的,这怎么解决?TODO

  6. 训练

一些细节

数据集:对每个场景,选择20 nearby views,其中3个中心views作为输入,13个作为per-scene fine-tuning,另外4个作为测试views。

网络结构:2D CNN的特征通道C=32C=32,3D cost volume P 和 neural encoding volume S的特征通道也是一样的;扫描平面有128个,即D=128D=128,从near到far均匀分布。

局限(Supplementary):对镜面反射、高光反射重建不好;由于cost volume是在reference view’s frustum内构建的,因此对于此范围外的content无法重建。

赞赏