MVSNeRF: Fast Generalizable Radiance Field Reconstruction from Multi-View Stereo,使用多视立体几何构建代价体P,并用3D CNN将代价体P编码为neural volume,后面用NeRF-like的方法回归color以及。其中的代价体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,步骤如下:
-
设有张输入视角input views,其中一张为参考视角reference view,用CNN提取各个输入视角的2D图像特征,即:
-
利用各个视角的内外参矩阵将input views的特征投影到reference view上,是将view-i warp到reference view的深度z处,即得到,表示reference view中的像素坐标,公式中使用了齐次坐标。代表什么?TODO
说明:对于reference view中的任一像素,它warp到view-i的深度z处的值都在上,但记住,是一个2D图像特征,并没有深度信息,即此处的深度只不过是体现在取的不同位置。
-
构建代价体,上面已得到第i个input view warp到reference view深度z处的特征,那对于N个input views和D个sweeping planes/z可构建一个3D代价体:
note:计算方差是因为该统计指标能够体现/编码不同视角下的外观差异,虽然P形式上是四个维度,但其3D结构体现在,C这个维度视为特征。
-
代价体可认为是raw 2D image feature,因为仅仅是计算了特征的方差,这一步对代价体P进行3D CNN操作,构建neural encoding volume,可认为是在隐式恢复scene的3D信息,包括geometry、appearance等,表示为:
S是3D的,因此可看作voxel,而3D CNN就像是在给voxel赋予该位置处scene的特征,后面的就表示处的特征。
-
有了voxel-volume,就可以用ray-marchingg做类似于NeRF中的操作了,即预测每个空间采样点的颜色和体密度,但此时输入不止位置和方向,还包括Volume feature和图像颜色(解决因2D CNN导致分辨率下降而导致高频信息难以恢复的问题),即:
Q&A:c是original pixel data,在训练时是能得到的,但是在渲染新视角时c时无法获得的,这怎么解决?TODO
-
训练
一些细节
数据集:对每个场景,选择20 nearby views,其中3个中心views作为输入,13个作为per-scene fine-tuning,另外4个作为测试views。
网络结构:2D CNN的特征通道,3D cost volume P 和 neural encoding volume S的特征通道也是一样的;扫描平面有128个,即,从near到far均匀分布。
局限(Supplementary):对镜面反射、高光反射重建不好;由于cost volume是在reference view’s frustum内构建的,因此对于此范围外的content无法重建。