NERF介绍
近年来,计算机视觉和图形领域取得了显着的进步,催生了革命性的技术,改变了各个行业。 NERFS(神经辐射场)和现实捕捉是两项备受关注的重要技术。 NERFS 和现实捕捉都是以数字形式捕捉和重建现实世界的强大工具。然而,它们在方法和应用方面存在显着差异。
1.NERFS(神经辐射场):
NERFS 是神经辐射场的缩写,是一项属于计算机图形学和计算机视觉领域的尖端技术。 NERFS 是近年来发展起来的,它利用深度学习模型通过连续 3D 函数来表示 3D 对象或场景。与依赖点云或网格表示的传统方法不同,NERFS 通过将底层场景建模为神经网络来生成逼真的重建。
2.NERFS 的工作原理:
NERFS 的工作原理是从不同角度捕获场景的大量图像。这些图像以及相应的相机参数被输入神经网络。然后,网络学习推断场景的体积表示,对复杂的细节、纹理和照明条件进行编码。
3.NERFS的应用:
- 虚拟现实 (VR) 和增强现实 (AR):NERFS 可以为 VR/AR 应用创建高度沉浸和逼真的虚拟环境,从而增强用户体验。
- 游戏和娱乐:NERFS 使游戏开发人员能够创建逼真的角色和环境,突破游戏视觉保真度的界限。
- 电影和动画行业:NERFS 可以帮助为电影和动画生成逼真的 CGI(计算机生成图像),减少对传统建模和动画技术的依赖。
- 机器人和自治系统:NERFS 在机器人和自治系统的场景理解和导航方面具有潜在的应用。
NERF技术的挑战
- 计算复杂性:NERFS 需要大量计算资源来进行训练和推理,这使得它们的计算量很大。实时应用可能会受到神经网络复杂性的限制。
- 有限的泛化:NERFS 擅长捕获与其训练数据中相似的场景。然而,当遇到与训练数据有很大偏差的场景时,他们可能会遇到困难,从而导致泛化能力有限。
- 内存和存储:NERFS 的体积特性可能会导致大量的内存和存储需求。存储 3D 函数和渲染高分辨率图像可能会占用大量内存。
- 缺乏动态场景:由于训练数据的性质,NERFS 更适合静态场景或对象。捕捉动态场景或移动物体是一个挑战,因为神经网络可能无法有效处理时间变化。
NERF使用
nerfstudio
Nerfstudio 提供了一个简单的 API,可以简化创建、训练和测试 NeRF 的端到端流程。该库通过模块化每个组件来支持 NeRF 的更可解释的实现。通过更多模块化的 NeRF,我们希望在探索该技术时创造更加用户友好的体验。
1.安装:搭建环境
安装CUDA 11.8
创建环境
conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
pip install --upgrade pip
安装依赖
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
安装nerfstudio
pip install nerfstudio
或者
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .
2. 训练你的第一个模型!
# Download some test data:
ns-download-data nerfstudio --capture-name=poster
# Train model
ns-train nerfacto --data data/nerfstudio/poster
3. 导出结果
渲染视频
生成点云
ns-export pointcloud --help
生成mesh模型
ns-export poisson [-h] --load-config PATH --output-dir PATH [--num-points INT]
[--remove-outliers {True,False}]
[--reorient-normals {True,False}] [--depth-output-name STR]
[--rgb-output-name STR]
[--normal-method {open3d,model_output}]
[--normal-output-name STR] [--save-point-cloud {True,False}]
[--use-bounding-box {True,False}]
[--bounding-box-min FLOAT FLOAT FLOAT]
[--bounding-box-max FLOAT FLOAT FLOAT]
[--num-rays-per-batch INT]
[--texture-method {point_cloud,nerf}]
[--px-per-uv-triangle INT] [--unwrap-method {xatlas,custom}]
[--num-pixels-per-side INT] [--target-num-faces {None}|INT]
[--std-ratio FLOAT]
4. 使用自定义数据
Data Capture Device | Requirements | ns-process-data Speed |
---|---|---|
📷 Images | Any | COLMAP 🐢 |
📹 Video | Any | COLMAP 🐢 |
🌎 360 Data | Any | COLMAP 🐢 |
📱 Polycam | IOS with LiDAR | Polycam App 🐇 |
📱 KIRI Engine | IOS or Android | KIR |
ns-process-data {images, video} --data {DATA_PATH} --output-dir {PROCESSED_DATA_DIR}
sdfstudio
SDFStudio 是一个用于神经隐式表面重建的统一模块化框架,建立在出色的 nerfstudio 项目之上。我们提供了三种主要隐式表面重建方法的统一实现:UniSurf、VolSDF 和 NeuS。 SDFStudio 还支持各种场景表示,例如 MLP、Tri-plane 和 Multi-res。特征网格和多点采样策略,例如 UniSurf 中的表面引导采样和 NeuralReconW 中的体素表面引导采样。它进一步集成了该领域的最新进展,例如单目线索(MonoSDF)的利用、几何正则化(UniSurf)和多视图一致性(Geo-NeuS)。由于统一和模块化的实现,SDFStudio 可以轻松地将想法从一种方法转移到另一种方法。例如,Mono-NeuS 将 MonoSDF 的思想应用到 NeuS,Geo-VolSDF 将 Geo-NeuS 的思想应用到 VolSDF。
参考资料:
https://github.com/nerfstudio-project/nerfstudio/
GitHub - autonomousvision/sdfstudio: A Unified Framework for Surface Reconstruction