nerfstudio以及相关使用记录(长期更新)

        NeRFStudio 是NeRF/3DGS研究和开发的集成平台。 提供了一个用户友好的界面和一系列工具,帮助研究人员和开发者更高效地构建、训练和评估 NeRF 模型。以前使用的时候用完就丢一边了,没有注意记录,现在有一个工程调用了nerfstudio,部署之余顺便专门写一篇来做完整的记录,也使他变得清晰。

官方主页:nerfstudio

GitHub主页:GitHub - nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFs

1.Ubuntu22下的部署以及报错

 NeRFStudio部署是很令人头疼的事情,问题比较琐碎,必须使用NVIDIA显卡以及cuda。

1.1conda创建虚拟环境

python版本大于等于3.8,我这里使用了3.11

conda create --name nerfstudio -y python=3.11
conda activate nerfstudio
pip install --upgrade pip

1.2依赖:tiny-cuda-nn

NeRFStudio依赖tiny-cuda-nn依赖cuda,cuda的安装这里不再赘述,tiny-cuda-nn的主页在这里:GitHub - NVlabs/tiny-cuda-nn: Lightning fast C++/CUDA neural network frameworkLightning fast C++/CUDA neural network framework. Contribute to NVlabs/tiny-cuda-nn development by creating an account on GitHub.https://github.com/NVlabs/tiny-cuda-nn

1.cuda11.8

对于cuda11.8的版本,官网主页以及给出了示范:

pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

2.cuda12.*

我的cuda版本当前是12.5,对于cuda12应该都是兼容的,所以直接进入tiny-cuda-nn的主页安装。这里作者列出来了必须要有的工具:

然后对于cuda要把路径添加进终端或者.bashrc中,我选择了添加到终端,不动系统的设置,即在终端中输入:

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
#PATH 是一个环境变量,用于指定系统在哪些目录中查找可执行文件。将 CUDA 的可执行文件目录(通常是 /usr/local/cuda/bin)添加到 PATH 变量中。$PATH 表示现有的 PATH 值,这样新的路径会追加到现有路径的前面,确保系统首先查找 CUDA 的工具。
#LD_LIBRARY_PATH 是一个环境变量,用于指定系统在哪些目录中查找共享库(动态链接库)。这行命令将 CUDA 的库文件目录(通常是 /usr/local/cuda/lib64)添加到 LD_LIBRARY_PATH 变量中。$LD_LIBRARY_PATH  表示现有的 LD_LIBRARY_PATH 值,这样新的路径会追加到现有路径的前面,确保系统首先查找 CUDA 的库。

我的cuda是一个软链接,link到了cuda-12.5,这里路径只要输入一个电脑里有的cuda12路径就行。

然后clone并且安装:

$ git clone --recursive https://github.com/nvlabs/tiny-cuda-nn
$ cd tiny-cuda-nn

接着cmake编译就完了:

/tiny-cuda-nn$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
/tiny-cuda-nn$ cmake --build build --config RelWithDebInfo -j

另外,还有一个PyTorch extension,就是cudnn那一块,可装可不装,按实际来,我安装了

pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

到这里,tinycuda就安装编译好了。下面的过程中遇到的坑:里面有的是部署其他工程时,需要安装nerfstudio,在过程中遇到的问题,也是一样的。

报错1:执行git clone --recursive https://github.com/nvlabs/tiny-cuda-nn的时候

OSError: Unknown compute capability. Specify the target compute capabilities in the TCNN_CUDA_ARCHITECTURES environment variable or install PyTorch with the CUDA backend to detect it automatically.

这个错误是由于tiny-cuda-nn在安装时无法自动检测到CUDA架构(compute capability)导致的。tiny-cuda-nn需要知道GPU的CUDA架构才能正确编译。需要手动设置TCNN_CUDA_ARCHITECTURES环境变量,指定GPU的CUDA架构。

首先,查找你的GPU的CUDA架构版本:

nvidia-smi --query-gpu=compute_cap --format=csv

然后,根据查到的CUDA架构版本,在安装前设置环境变量。例如,如果你的GPU是NVIDIA RTX 3090,其CUDA架构是8.6,那么在当前终端里设置该变量:

export TCNN_CUDA_ARCHITECTURES=86

如果你不确定你的GPU的CUDA架构,或者想支持多种架构,可以设置多个值,用分号分隔。例如:export TCNN_CUDA_ARCHITECTURES="75;80;86"

报错2:执行git clone --recursive https://github.com/nvlabs/tiny-cuda-nn的时候

OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

这个问题就是一开始的cuda路径没有成功添加进去,重新添加一下,像前面一样。添加好可以验证一下:echo $PATH以及echo $LD_LIBRARY_PATH

如果你确定确实添加进去了,但是,还是报这个错误,那就要检查你的pytorch版本是不是cpu的,如果是,赶紧卸了重新装吧!我这里就是犯了这样的错误,来来回回检查不知道哪里错了,因为使用了conda安装的pytorch,他先是给我装了cuda-toolkit=12.2(我本来系统就带了两个cuda版本11和12都有),然后又装了cpu版本的pytorch,真的服了。。。还是少用conda安装这两样相关的东西,里面的兼容逻辑非常神奇,不是大神不建议碰。

python>>>import torch
>>>torch.cuda.is_available()
#如果是cpu版本,会输出False

如果不知道你的cuda路径,可以找一下:

which nvcc
whereis nvcc

报错3:执行cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo

/home/lee/miniconda3/envs/relight_nerfstudio/bin/x86_64-conda-linux-gnu-c++:

  No such file or directory

这是编译的过程中找不到g++,在conda环境中安装一个即可

报错4:执行pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

    /home/lee/miniconda3/envs/relight_nerfstudio/compiler_compat/ld: cannot find -lcuda: No such file or directory

      collect2: error: ld returned 1 exit status

   error: command '/home/lee/miniconda3/envs/relight_nerfstudio/bin/x86_64-conda-linux-gnu-c++' failed with exit code 1

        这个报错是编译过程中的,很长,大概有700行,ld 负责将目标文件和库文件链接在一起,生成最终的可执行文件或共享库。-lcuda 是链接器的一个选项,表示需要链接 libcuda.so 库。链接器会在默认的库路径(如 /usr/lib、/usr/local/lib 等)中查找这个库。所以这个报错是在编译过程中,链接器(ld)在尝试链接 libcuda 库时失败了,无法找到 libcuda.so 文件。

在一开始指定LD_LIBRARY_PATH的路径下,我的在这里也就是:/usr/local/cuda/lib64,在这里面寻找libcuda.so,没有找到,所以报错,但是我在安装目录中寻找了libcuda.so,发现它在又一级目录下面:/usr/local/cuda/lib64/stubs/libcuda.so。。。

所以我直接简单粗暴创建软链接放在/usr/local/cuda/lib64下:

sudo ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/libcuda.so

最后重新执行,成功编译!

1.3安装 nerfstudio

推荐安装编译最新的

git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .

到这里nerfstudio安装完毕,这一步安装还是很顺利的,80%的问题基本都在编译tinycuda的过程中。

2.nerfstudio中的SfM

3.3DGS相关的重建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33573.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《论分布式系统架构设计及其应用》架构师论文

【摘要】 2022年3月,我参与了某金融科技公司“智能风控云平台”项目的研发工作,担任系统架构师职务,负责分布式系统架构设计与核心技术选型。该平台旨在为银行、保险等金融机构提供实时风险评估、反欺诈及数据服务,需支撑每秒十万…

黄金还能再涨吗?

写在前面:【财富自由计算助手】已上线,快算算你的财富自由要多少 逻辑比事实更真实。 最近,黄金涨得妈都不认。 连菜市场大妈都在讨论,要不要囤点黄金。 2022 年初,俄乌冲突升级为全面战争以来,黄金价格…

AutoDev × MCP 双向赋能:AutoDev 即 MCP 服务,MCP 服务即 AutoDev 指令

在 Agentic Coding 这一话题下,工具使用(Tool Use/Function calling)是一个非常有意思的话题。完成一个软件开发任务,需要使用到大量的工具, 除去在 IDE 及其插件生态本身提供的功能外,还会使用到大量的外部…

DataWhale 大语言模型 - GPT和DeepSeek模型介绍

本课程围绕中国人民大学高瓴人工智能学院赵鑫教授团队出品的《大语言模型》书籍展开,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的核心技术。并且,课程…

安装 oepn-webui报错 Cannot connect to host api.openai.com:443 ssl

一、发现问题 安装 open-webui 的报错 api.openai.com 不通,因为 open-webui 最新版和以前的不一样了,所以网上的很多资料都用不了,经过一番摸索,找到解决办法 另外如果发现浏览器打开之后白屏,则是因为后台正在配置…

【6】树状数组学习笔记

前言 树状数组是我学的第一个高级数据结构,属于 log ⁡ \log log 级数据结构。 其实现在一般不会单独考察数据结构,主要是其在其他算法(如贪心,DP)中起到优化作用。 长文警告:本文一共 995 995 995 行…

研发团队协作软件推荐:18款工具对比

本文将深入对比18款主流研发团队协作软件:PingCode、 Worktile、钉钉、飞书、企业微信、Teambition、蓝湖、石墨文档、明道等。 在当今信息化时代,研发团队协作软件已经成为企业提高工作效率、改善团队沟通与管理的重要工具。借助这些软件,企…

Java8的新特性

1.Lambda表达式和函数式接口 Lambda的基础:函数式接口 Java 8与之前版本的区别: Java 7及之前:接口中只能包含抽象方法,无法通过函数式接口简洁地表示Lambda表达式。Java 8:通过FunctionalInterface注解,明…

数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)

数据库管理302期 2025-03-14 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)1 Oracle RAC2 DMDSC3 YAC4 KES RAC总结 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314) 作者:胖头鱼的鱼…

Spring框架详解(IOC容器-上)

IOC( Inversion of Control,控制反转)和DI(dependency injection)是Spring框架的核心特性,也是Spring框架的基础。 Spring框架作为一个IOC容器,负责加载、创建和管理Spring Bean。 接下来介绍…

架构学习第八周--Kubernetes博客搭建

目录 一、整体架构 二、部署MySQL主从 三、部署Redis哨兵 四、部署WordPress 五、注意事项 一、整体架构 本项目为在一主三从的Kubernetes集群上部署WordPress博客。因为WordPress部分容器版本自行集成Apache和PHP服务,因此在Kubernetes上部署WordPress只需提供…

【品铂科技】在高精度定位行业内的口碑怎么样?

1. ‌技术实力与行业认可‌ 公司自主研发的ABELL无线实时定位系统在复杂环境中(如工业、司法监狱等)展现出厘米级(5-10厘米)高精度定位能力,客户反馈系统稳定性强、抗干扰能力突出,成为行业技术标杆‌。参…

长度最小的子数组-滑动窗口解法

本来觉得自己双指针学的还可以了,于是今天直接刷了一道滑动窗口题,没想到还是被坑绊倒了两次。这次我想记录在博客里,不仅可以防止我以后重蹈覆辙,兴许也还可以帮助到其他人。 题目来自力扣:209. 长度最小的子数组 - …

深入理解Linux网络随笔(七):容器网络虚拟化--Veth设备对

深入理解Linux网络随笔(七):容器网络虚拟化 微服务架构中服务被拆分成多个独立的容器,docker网络虚拟化的核心技术为:Veth设备对、Network Namespace、Bridg。 Veth设备对 veth设备是一种 成对 出现的虚拟网络接口&…

深入理解 Maven BOM 及其继承特性

深入理解 Maven BOM 及其继承特性 一、什么是 Maven BOM? Maven BOM(Bill Of Materials,物料清单)是一种特殊的 Maven 项目,用于集中管理依赖项的版本信息。BOM 项目本身并不包含实际的代码或资源,而仅仅…

C语言(25)

一.数据在内存中的存储 1.整数在内存中的存储 整数在内存中以二进制的形式储存,分别为原码,补码,反码 有符号的整数,在上述三种形式都有符号位和数值位两个部分,符号位为0是正数,1是负数,最高…

一篇博客搞定时间复杂度

时间复杂度 1、什么是时间复杂度?2、推导大O的规则3、时间复杂度的计算3.1 基础题 13.2 基础题 23.3基础题 33.4进阶题 13.5进阶题 23.6 偏难题 13.7偏难题 2(递归) 前言: 算法在编写成可执行程序后,运行时要耗费时间和…

探索 Trossen AI:从 Aloha到智能机器人平台的进化之路

在人工智能与机器人技术快速发展的当下,科研硬件的性能与成本成为影响行业创新的重要因素。Trossen Robotic为在机器人领域二十余年的知名企业,近日推出的 Trossen AI 系列产品,为科研机构与开发者提供了高性能、高性价比的解决方案。 Trosse…

【Power Platform系列】如何在画布应用中调用工作流上传附件

在Power Apps画布应用中上传附件,比如到SharePoint文档库最典型的方式非常简单,插入一个编辑窗体,将窗体和背后的文档库绑定起来即可以快速实现。不过窗体内部的显示格式很难控制,如果要实现更为灵活的控制,就需要采用…

工作记录 2017-01-12

序号 工作 相关人员 1 协助BPO进行Billing的工作。 处理Amazing Charts的数据查询。 修改BillingJobPoster,处理CCDA 的自动导入,预计还需一天才能完成。 修改录入Code的界面(code 移动到指定位置),预计明天更新。…