当前位置: 首页 > backend >正文

Nerfstudio 环境配置与自有数据集(图片和视频)测试全方位全流程实战【2025最新版!!】

一、引言

神经辐射场(Neural Radiance Fields,简称NeRF)是近年来计算机视觉和图形学领域的一项革命性技术,它能够从2D图像中学习复杂的3D场景表示。然而,NeRF技术的实现和应用门槛较高,需要较为专业的计算机视觉和深度学习知识。
Nerfstudio作为一个开源框架,极大地简化了NeRF技术的使用流程,使研究人员和开发者能够更轻松地构建、训练和测试NeRF模型。本文将详细介绍如何在Ubuntu 20.04和CUDA 11.8环境下配置Nerfstudio,并使用自有图片和视频数据集进行训练和测试,最终导出为点云和网格等多种格式。

二、Nerfstudio简介

Nerfstudio是由加州大学伯克利分校的研究人员开发的一个模块化NeRF开发框架,旨在提供一个更加用户友好的环境来探索NeRF技术。它的主要优势包括:

  • 模块化设计:将NeRF的各个组件模块化,便于理解和定制
  • 完整工作流:提供从数据采集、处理到训练、渲染的完整工作流
  • 可视化界面:内置基于Web的3D可视化工具,支持实时交互
  • 多种算法支持:集成了多种NeRF变体算法,如nerfacto、instant-ngp等
  • 社区支持:活跃的开发者社区和详尽的文档
    无论是初学者还是研究人员,Nerfstudio都能满足你对NeRF技术的探索需求。
    在这里插入图片描述

三、环境配置

3.1 硬件要求

Nerfstudio需要一定的硬件配置才能正常运行:

  • GPU:NVIDIA GPU,显存至少8GB(推荐12GB以上)
  • CPU:多核处理器,至少8GB RAM(推荐16GB以上)
  • 存储:至少50GB可用空间(数据集大小视情况而定)
    本文将在以下环境中进行测试:
  • Ubuntu 20.04 LTS
  • CUDA 11.8
  • NVIDIA GeForce RTX 4090 GPU (24GB 显存)

3.2 软件环境准备

首先,我们需要确保系统已经安装了适当的NVIDIA驱动和CUDA 11.8。让我们检查当前的CUDA版本:

nvidia-smi

在这里插入图片描述
如果CUDA版本不是11.8,您需要安装对应版本的CUDA工具包。可以从NVIDIA官网下载CUDA 11.8安装包。
接下来,我们需要配置Python环境。Nerfstudio要求Python版本至少为3.8。我们将使用Conda创建一个独立的环境:

# 安装Miniconda(如果尚未安装)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b
source ~/miniconda3/bin/activate# 创建名为nerfstudio的环境
conda create --name nerfstudio python=3.8 -y
conda activate nerfstudio# 更新pip
pip install --upgrade pip

为了确保与CUDA 11.8兼容,我们需要安装特定版本的PyTorch:

pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

接下来,我们需要安装CUDA工具包和tiny-cuda-nn,这是NeRF实现中常用的库:

# 安装CUDA工具包
conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit -y# 安装tiny-cuda-nn
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

3.3 Nerfstudio安装

现在,我们可以开始安装Nerfstudio。我们将从GitHub克隆最新的代码:

# 克隆Nerfstudio仓库
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio# 安装Nerfstudio
pip install --upgrade pip setuptools
pip install -e .

此外,我们还需要安装COLMAP,这是一个用于从图像中恢复相机参数的结构运动(Structure from Motion,SfM)工具:

# 安装COLMAP依赖项
sudo apt-get update && sudo apt-get install -y \git cmake build-essential \libboost-program-options-dev \libboost-filesystem-dev \libboost-graph-dev \libboost-system-dev \libboost-test-dev \libeigen3-dev \libsuitesparse-dev \libfreeimage-dev \libgoogle-glog-dev \libgflags-dev \libglew-dev \qtbase5-dev \libqt5opengl5-dev \libcgal-dev \libcgal-qt5-dev# 克隆COLMAP仓库
git clone https://github.com/colmap/colmap.git
cd colmap
git checkout dev# 编译安装COLMAP
mkdir build
cd build
cmake ..
make -j $(nproc)
sudo make install# 返回之前的目录
cd ../..

具体内容也可也参考我之前的博客
基于NVIDIA RTX 4090的COLMAP 3.7安装指南:Ubuntu 20.04 + CUDA 11.8环境配置【2025最新版!!】

3.4 安装验证

完成安装后,我们可以运行以下命令来验证安装是否成功:

# 检查Nerfstudio是否安装成功
ns-train -h

如果安装成功,应该能看到Nerfstudio的帮助信息。
在这里插入图片描述

四、预置数据集测试

在使用自己的数据集之前,可以先使用Nerfstudio提供的预置数据集进行测试,以确保所有组件正常工作。

4.1 下载测试数据

Nerfstudio提供了多个预置数据集,我们可以使用ns-download-data命令下载这些数据集:

# 使用nerfacto模型训练poster数据集
ns-train nerfacto --data data/nerfstudio/poster

这将在当前目录下创建一个data/nerfstudio/poster目录,其中包含了poster数据集的所有图像和相机参数文件。

4.2 训练模型

现在,我们可以使用下载的数据集训练一个NeRF模型。Nerfstudio提供了多种模型实现,在此我们选择nerfacto,这是一个性能较好的通用模型:

# 使用nerfacto模型训练poster数据集
ns-train nerfacto --data data/nerfstudio/poster

在训练过程中,终端会显示训练进度、损失值等信息。训练通常需要数小时到数天不等,具体取决于数据集大小、选择的模型和硬件配置。默认情况下,训练结果会保存在outputs目录下,目录名为训练开始的时间戳。
如果一切正常,你应该会看到如下所示的训练进度:
在这里插入图片描述

4.3 可视化结果

Nerfstudio提供了一个基于Web的可视化工具,可以实时查看训练进度和结果。在训练开始后,终端会输出一个本地Web服务器地址,通常是http://localhost:7007。您可以在浏览器中打开这个地址来查看训练进度和实时渲染结果。
如果您是在远程服务器上运行Nerfstudio,需要进行端口转发才能访问可视化工具:

# 本地端口转发(在本地终端中运行)
ssh -L 7007:localhost:7007 <username>@<server-ip>

然后,在本地浏览器中访问http://localhost:7007。

在这里插入图片描述

五、自有图片数据集处理

现在,可以尝试使用自己的图片数据集来训练NeRF模型。

5.1 拍摄建议

拍摄用于NeRF的图像需要遵循一些建议,以确保能够获得良好的重建结果:

  • 拍摄角度:从不同角度拍摄物体,覆盖尽可能多的视角
  • 重叠度:相邻图像之间应有足够的重叠(约60-80%)
  • 光照条件:保持一致的光照条件,避免强烈的阴影或高光
  • 物体静止:确保场景中的物体保持静止
  • 数量:通常需要30-100张图像,具体取决于场景复杂度
  • 清晰度:避免模糊的图像,使用三脚架或高速快门

5.2 数据准备

首先,我们需要创建一个目录来存放我们的图像数据:

# 创建目录
mkdir -p data/custom/input

然后,将你的图像复制到这个目录中:

# 假设您的图像在~/my_images目录下
cp ~/my_images/*.jpg data/custom/input/

5.3 数据处理

接下来,我们需要使用ns-process-data命令处理这些图像,以便Nerfstudio能够使用它们:

# 处理图像数据集
ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images

此命令将使用COLMAP估计图像的相机参数,并生成Nerfstudio所需的格式。处理过程可能需要一些时间,具体取决于图像数量和计算机性能。
如果你的图像具有特殊特性(如全景图像),可以使用其他参数:

# 处理全景图像
ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images \--camera-type equirectangular

如果COLMAP处理失败,可以尝试使用不同的特征提取和匹配参数:

# 使用更全面的特征匹配方法
ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images \--matching-method exhaustive \--feature-type sift \--verbose

5.4 训练自定义数据集

处理完成后,我们可以使用处理好的数据集训练NeRF模型:

# 使用nerfacto模型训练自定义数据集
ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images

你可以根据需要调整训练参数,如学习率、批量大小等:

# 使用更高的学习率和更多的训练步数
ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_high_lr \--optimizers.fields.optimizer.lr 1e-2 \--optimizers.fields.scheduler.max-steps 30000

如果你的GPU显存较小,可以减少批量大小:

# 减小批量大小
ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_small_batch \--pipeline.datamanager.train-num-rays-per-batch 1024

六、自有视频数据集处理

除了图像,我们还可以使用视频作为数据源来训练NeRF模型。

6.1 视频拍摄建议

拍摄用于NeRF的视频也需要遵循一些建议:

  • 相机移动:缓慢移动相机,避免剧烈抖动
  • 场景覆盖:尽量围绕物体一圈,从不同角度拍摄
  • 光照条件:保持一致的光照
  • 帧率:使用较高的帧率(至少30fps)
  • 分辨率:使用较高的分辨率(至少1080p)
  • 持续时间:视频长度约为30-60秒

6.2 视频数据准备

首先,创建一个目录来存放视频数据:

# 创建目录
mkdir -p data/custom/video

然后,将你的视频复制到这个目录中:

# 假设您的视频在~/my_video.mp4
cp ~/my_video.mp4 data/custom/video/

6.3 视频数据处理

接下来,我们使用ns-process-data命令处理视频数据:

# 处理视频数据集
ns-process-data video \--data data/custom/video/my_video.mp4 \--output-dir data/custom/processed_video

此命令将视频分解为帧,并使用COLMAP估计相机参数。默认情况下,它会提取约300帧,您可以通过参数调整帧数:

# 提取更多帧
ns-process-data video \--data data/custom/video/my_video.mp4 \--output-dir data/custom/processed_video \--num-frames-target 500

如果你的视频具有特殊特性(如全景视频),可以使用相应的参数:

# 处理全景视频
ns-process-data video \--data data/custom/video/my_video.mp4 \--output-dir data/custom/processed_video \--camera-type equirectangular

6.4 训练自定义视频数据集

处理完成后,我们可以使用处理好的视频数据集训练NeRF模型:

# 使用nerfacto模型训练自定义视频数据集
ns-train nerfacto \--data data/custom/processed_video \--experiment-name custom_video

由于视频帧之间的变化通常较小,我们可以使用顺序采样来提高训练效率:

# 使用顺序采样
ns-train nerfacto \--data data/custom/processed_video \--experiment-name custom_video_sequential \--pipeline.datamanager.train-num-images-to-sample-from 25

七、训练失败排查

如果你在训练过程中遇到问题,这里有一些常见的故障排除方法:

(1)CUDA内存不足:

CUDA out of memory

解决方法:减小批量大小或模型复杂度

	ns-train nerfacto \--data data/custom/processed_images \--pipeline.datamanager.train-num-rays-per-batch 1024 \--pipeline.model.num-proposal-samples-per-ray 64

(2)COLMAP失败:

COLMAP failed to reconstruct the scene

解决方法:尝试使用不同的特征提取和匹配参数

	ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images \--matching-method exhaustive \--feature-type sift \--colmap-gpu True

(3)训练不收敛:

如果模型训练不收敛,可以尝试调整学习率或使用不同的优化器:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_adam \--optimizers.fields.optimizer.type Adam \--optimizers.fields.optimizer.lr 5e-4

八、模型优化技巧

以下是一些优化NeRF模型性能的技巧:

(1)使用相机优化:

允许模型微调相机参数可以提高重建质量:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_camera_opt \--pipeline.model.camera-optimizer.mode SO3xR3

(2)调整网络架构:

尝试不同的网络大小和复杂度:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_large_net \--pipeline.model.field-network.num-layers 8 \--pipeline.model.field-network.hidden-dim 256

(3)尝试不同的模型:

Nerfstudio提供了多种模型实现,如instant-ngp(速度更快)、vanilla-nerf(原始实现)等:ns-train instant-ngp \--data data/custom/processed_images \--experiment-name custom_images_instant_ngp

九、性能调优

以下是一些提高训练和渲染速度的技巧:

(1)使用混合精度训练:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_mixed_precision \--mixed-precision True

(2)减少评估频率:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_less_eval \--pipeline.datamanager.eval-num-rays-per-chunk 1024 \--steps-per-eval 500

(3)使用更高效的模型:

	ns-train instant-ngp \--data data/custom/processed_images \--experiment-name custom_images_instant_ngp

七、总结

在本文中,我们详细介绍了如何在Ubuntu 20.04和CUDA 11.8环境下配置Nerfstudio,并使用自有图片和视频数据集进行训练和测试,通过Nerfstudio,我们可以轻松地将2D图像转换为3D模型,并生成新视角的渲染效果。这一技术在虚拟现实、增强现实、游戏开发、建筑可视化等领域都有广泛的应用。

http://www.xdnf.cn/news/2923.html

相关文章:

  • PyTorch实际上是按照**行优先(Row-Major)**的方式存储数据
  • 基于Arduino的STM32F103RCT6最小系统板的测试及串口通讯
  • 初识Redis · 缓存
  • 网络原理 - 11(HTTP/HTTPS - 2 - 请求)
  • MES系列-ISO95 IEC/ISO 62264
  • 精益数据分析(30/126):电商商业模式的深度剖析与关键指标解读
  • claude 3.7,极为均衡的“全能型战士”大模型,国内直接使用
  • 【Java学习】Java的CGLIB动态代理:通俗解释与使用指南
  • 自定义指令input中前面不能输入空格
  • java练习4
  • 【记录一下】RagFlow 本地安装详细步骤(Windows + Linux)
  • 一种在使用Kaggle并遇上会话中断时强行保存数据的方法
  • python练习:求两数相加之和
  • 【Git】项目多个分支开发、维护与优化处理 ing
  • 第二节:文件系统
  • Java基础
  • 1.6二重积分
  • 浅谈人工智能发展现状
  • Python-pandas-DataFrame取值--.loc[]、.iloc[] 具体的操作及详细语义和语法说明
  • Linux文件传输:FTP服务器配置全攻略
  • Foupk3systemX5OS系统产品设备
  • 扩散模型与正弦位置编码
  • datasets 数据处理封装后,统一处理流程以避免Dataset Map顺序依赖问题
  • 《算法吞噬幻想乡:GPT-4o引发的艺术平权运动与版权核爆》
  • 数据库Mysql学习——day7(多表查询(JOIN)进阶)
  • 软件测试深度解析:从“用户登录“看测试用例设计的艺术
  • 什么是 Web 标准?为什么它们对 SEO 和开发很重要?
  • TRex 控制台命令解析
  • 【计算机视觉】三种图像质量评价指标详解:PSNR、SSIM与SAM
  • 【MySQL数据库】表的连接