git clone https://www.modelscope.cn/DAMOXR/cv_nerf-3d-reconstruction-4k-nerf_damo.git
NeRF(Neural Radiance Fields)是一种最新的三维新视角合成技术。其核心利用物理体渲染(Volume rendering)方程结合各类隐式表征的方式,使模型根据三维物体或场景的二维多视角彩色图像即可完成高质量的三维重建。
现有各类 NeRF 方法主要针对低分辨率场景(<=1K)设计,在更高分辨率的场景上就会出现渲染模糊,细节丢失,推理速度缓慢等问题。4K-NeRF 是针对以上问题设计的,在超高分辨率上可以取得相比现有方法明显的效果提升。
4K-NeRF 将 NeRF 结构改进为编码-解码器结构,采用显式表示的 NeRF 模型作为编码器,主要学习低分辨下的几何信息;而为了高效的恢复渲染高分辨细节,解码器则采用预训练的图像恢复卷积网络。同时采用基于邻域的光线采样方式结合基于图像感知的损失函数。
以下分别是在 nerf_llff_data 和 nerf_synthetic 上 4K-NeRF 与 baseline 的渲染效果对比。
当前支持两种数据类型,分别是nerf-synthesis 和 nerf_llff_data。
在 ModelScope 框架上,调用训练好的 4K-NeRF 模型即可通过简单的 pipeline 来推理(仅支持 GPU 运行)。
以 nerf_llff_data 的 fern 场景为例,在构建 pipeline 时需要指定 enc_ckpt_path 和 dec_ckpt_path 分别为训练好的 encoder 和 decoder 的模型路径。除此之外,pipeline 构建完成后需要输入 data_dic 来提供数据集相关的参数。具体示例可以参考以下代码,该代码可直接运行:
import os
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.msdatasets import MsDataset
#
model_id = 'DAMOXR/cv_nerf-3d-reconstruction-4k-nerf_damo'
data_dir = MsDataset.load(
'DAMOXR/nerf_llff_data',
subset_name='default',
split='test',
# download_mode=DownloadMode.FORCE_REDOWNLOAD
).config_kwargs['split_config']['test']
nerf_llff = os.path.join(data_dir, 'nerf_llff_data')
scene = 'fern'
data_dir = os.path.join(nerf_llff, scene)
render_dir = 'exp'
data_dic = dict(
datadir=data_dir,
dataset_type='llff',
load_sr=1,
factor=4,
ndc=True,
white_bkgd=False)
render_dir = 'exp'
### now we use llff dataset, when use nerf-synthesis dataset, data_type should specify as 'blender'
nerf_recon_4k = pipeline(
Tasks.nerf_recon_4k,
model=model_id,
data_type='llff',
)
nerf_recon_4k(
dict(data_cfg=data_dic, render_dir=render_dir))
### render results will be saved in render_dir
训练代码和训练方式请参考 [github]
Zhongshu Wang, Lingzhi Li, Zhen Shen, Li Shen, Liefeng Bo
Alibaba Group