NeRF(Neural Radiace Fields)是一种利用多视角图像进行三维重建的技术,其通过隐式表征的方式来对静态三维物体或场景进行学习和建模。
NeRF快速三维重建模型,能够快速(~10mi)对物体进行三维重建和新视角合成。 以下是在erf-sythesis 数据集上使用NeRF快速三维重建模型重建渲染的结果。 该模型通过对NeRF端到端重建pipelie中的编码,存储,渲染进行优化,极大提升了NeRF网络重建的训练速度,将单个物体的重建开销由10hour+提升
到~10mi内。 其中使用的相关加速技术和实现包括istat-gp的Multiresolutio Hash Ecodig技术,erfacc框架的高效体素渲染技术和tiycuda的pytorch扩展实现。 使用范围:
当前支持两种数据类型,分别是erf-sythesis 和用户自定义数据。 目标场景: 运行环境: 想要对自摄物体进行重建时,用户仅需使用手机等便捷手持设备进行数据采集。采集过程需要对重建的物体进行多视角的拍摄,
保证物体保持不动,相机围绕物体进行多视角的移动拍摄,尽量覆盖多样视角,并保证视频长度大于等于4s(提取的图像帧>=60)。 在ModelScope框架上,训练好一个NeRF模型后即可以通过简单的Pipelie调用来使用。(仅支持GPU运行) 以lego场景训练的模型为例,其属于erf-sythesis数据集,需要指定datatype='bleder',
提供数据目录,使用默认的预训练模型即可渲染出新视角的结果,结果保存在用户自定义的rederdir目录下。
如下代码可以直接运行。 如使用自定义数据集,则需要指定data_type='colmap',
推理方式及更多自定义参数如下示例。如下代码无法直接运行,具体参数需要用户自行指定。 erf-systhesis数据集的训练代码示例 用户提供图像数据的训练代码示例 用户提供视频数据的训练代码示例 以下是针对用户自定义数据场景的说明 模型预处理依赖colmap对视频帧进行相机视角估计,该估计过程对不同场景存在一定误差,可能影响重建渲染结果。 模型数据预处理依赖图像分割模型,如拍摄物体边缘结果复杂或者背景存在干扰导致无法正确分割出物体,将影响到重建渲染效果。 测试渲染视角为随机采样,如果用户采集数据时覆盖视角较少,可能导致测试视角与拍摄视角存在较大差异,将会影响测试视角的渲染效果。 以下数据评估为该模型在erf-sythesis
数据集上的评测效果,测试机器为单卡RTX3090.效果展示
模型描述
使用方式和范围
如何使用
数据采集
新视角渲染
推理代码范例
# 请使用1.10.0镜像运行,例如: registry.c-beijig.aliyucs.com/modelscope-repo/modelscope:ubutu22.04-cuda11.8.0-py310-torch2.1.0-tf2.14.0-1.10.0
import os
from modelscope.outputs import OutputKeys
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks
from modelscope.msdatasets import MsDataset
data_dir = MsDataset.load(
'erf_reco_dataset', amespace='damo',
split='trai').cofig_kwargs['split_cofig']['trai']
erf_sythetic_dataset = os.path.joi(data_dir, 'erf_sythetic')
bleder_scee = 'lego'
data_dir = os.path.joi(erf_sythetic_dataset, bleder_scee)
reder_dir = 'exp'
### whe use erf-sythesis dataset, data_type should specify as 'bleder'
erf_reco_acc = pipelie(
Tasks.erf_reco_acc,
model='damo/cv_erf-3d-recostructio-accelerate_damo',
data_type='bleder',
)
erf_reco_acc(
dict(data_dir=data_dir, reder_dir=reder_dir))
### reder results will be saved i reder_dir
import os
from modelscope.outputs import OutputKeys
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks
data_dir = 'PATH/TO/Data'
reder_dir = 'exp'
### whe use erf-sythesis dataset, data_type should specify as 'bleder'
erf_reco_acc = pipelie(
Tasks.erf_reco_acc,
model='damo/cv_erf-3d-recostructio-accelerate_damo',
data_type='colmap',
ckpt_path='/PATH/TO/CHECKPOINT/model.ckpt',
save_mesh=False,
_test_traj_steps=120,
test_ray_chuk=1024
)
erf_reco_acc(
dict(data_dir=data_dir, reder_dir=reder_dir))
### reder results will be saved i reder_dir
训练代码范例
import os
from modelscope.msdatasets import MsDataset
from modelscope.traiers.cv import NeRFRecoAccTraier
from modelscope.utils.test_utils import test_level
model_id = 'damo/cv_erf-3d-recostructio-accelerate_damo'
data_dir = MsDataset.load(
'erf_reco_dataset', amespace='damo',
split='trai').cofig_kwargs['split_cofig']['trai']
traier = NeRFRecoAccTraier(model=model_id,
data_type='bleder',
work_dir='exp_erf_sythetic',
reder_images=False)
erf_sythetic_dataset = os.path.joi(data_dir, 'erf_sythetic')
bleder_scee = 'lego' ## ca choose ay of the 8 scees
erf_sythetic_dataset = os.path.joi(erf_sythetic_dataset,
bleder_scee)
traier.trai(data_dir=erf_sythetic_dataset)
import os
from modelscope.msdatasets import MsDataset
from modelscope.traiers.cv import NeRFRecoAccTraier
from modelscope.utils.test_utils import test_level
model_id = 'damo/cv_erf-3d-recostructio-accelerate_damo'
data_dir = MsDataset.load(
'erf_reco_dataset', amespace='damo',
split='trai').cofig_kwargs['split_cofig']['trai']
traier = NeRFRecoAccTraier(model=model_id,
data_type='colmap',
work_dir='exp_erf_image',
reder_images=False)
custom_dir = os.path.joi(data_dir, "custom/hotdog")
traier.trai(data_dir=custom_dir)
import os
from modelscope.traiers.cv import NeRFRecoAccTraier
from modelscope.utils.test_utils import test_level
model_id = 'damo/cv_erf-3d-recostructio-accelerate_damo'
traier = NeRFRecoAccTraier(model=model_id,
data_type='colmap',
work_dir='exp_erf_video',
reder_images=False)
video_iput_path = "**.mp4"
traier.trai(video_iput_path=video_iput_path)
数据预处理
模型局限性以及可能的偏差
数据评估及结果
Name
ship
mic
materials
lego
hotdog
ficus
drums
chairs
PSNR
30.03
35.48
29.30
35.26
37.2
33.83
25.83
35.10
Reco Time(s)
437
177
248
214
278
187
213
181
相关工作
@article{mueller2022istat,
title = {Istat Neural Graphics Primitives with a Multiresolutio Hash Ecodig},
author = {Thomas M\"uller ad Alex Evas ad Christoph Schied ad Alexader Keller},
joural = {arXiv:2201.05989},
year = {2022},
moth = ja
}
@misc{tiy-cuda-,
Author = {Thomas M\"uller},
Year = {2021},
Note = {https://github.com/vlabs/tiy-cuda-},
Title = {Tiy {CUDA} Neural Network Framework}
}
@misc{torch-gp,
Author = {Jiaxiag Tag},
Year = {2022},
Note = {https://github.com/ashawkey/torch-gp},
Title = {Torch-gp: a PyTorch implemetatio of istat-gp}
}
@article{li2022erfacc,
title={NerfAcc: A Geeral NeRF Accleratio Toolbox.},
author={Li, Ruilog ad Tacik, Matthew ad Kaazawa, Agjoo},
joural={arXiv preprit arXiv:2210.04847},
year={2022}
}
点击空白处退出提示







评论