Ubuntu运行NVIDIA开源的双目三维重建FoundationStereo
引言:从2D到3D的范式转移
随着自动驾驶、元宇宙和工业数字孪生的快速发展,三维场景重建技术成为计算机视觉的核心挑战。传统多视角几何方法(如SFM、SLAM)在弱纹理、重复结构场景中表现受限,而NVIDIA提出的FoundationStereo模型通过深度学习的端到端范式,为高精度、实时立体匹配与三维重建提供了新思路。
技术解析:FoundationStereo的核心创新
1. 模型架构设计
多尺度特征金字塔:融合ResNet与Transformer编码器,兼顾局部细节与全局上下文关系
自适应代价体(Adaptive Cost Volume):通过可变形卷积动态调整感受野,解决遮挡区域匹配歧义
时序一致性模块:针对视频流数据,利用LSTM进行跨帧特征传播(优于传统帧间独立处理)
2. 关键技术创新点
Self-supervised Domain Adaptation:利用合成数据预训练+真实数据微调,解决现实场景泛化问题
亚像素级视差优化:基于Laplacian金字塔的残差细化网络,精度可达0.1像素级别
硬件协同设计:Tensor Core优化,在Jetson AGX平台实现4K分辨率实时推理
与传统方法的性能对比
指标 SGM (传统) PSMNet FoundationStereo
弱纹理区域PSNR 22.1 28.7 34.2
遮挡区域误匹配率 41% 23% 8.7%
1080p处理速度 0.5fps 3fps 25fps
测试数据集:ETH3D Stereo Benchmark
Ubuntu运行
1、conda创建虚拟环境
以下是官方给出的运行命令行,但我创建失败了。
conda env create -f environment.yml
conda activate foundation_stereo
然后自己建环境安装pytorch等,pytorch指定版本安装最后用pytorch官网给出的命令安装,不然容易出现cuda用不了。
FundationStereo必须用GPU跑,推荐使用CUDA12.1以上,官方有些库版本CUDA要求高。
#CUDA官网给出的指令
# CUDA 11.8
conda install pytorch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 pytorch-cuda=11.8 -c pytorch -c nvidia
# CUDA 12.1
conda install pytorch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 pytorch-cuda=12.1 -c pytorch -c nvidia
# CUDA 12.4
conda install pytorch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 pytorch-cuda=12.4 -c pytorch -c nvidia
# CPU Only
conda install pytorch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 cpuonly -c pytorch
安装完pytorch/cudatoolkit后,将其他库用yml或txt安装。
pip install -r environmentCopy.yml
2、下载官方训练好的模型权重
Download the foundation model for zero-shot inference on your data from here. Put the entire folder (e.g. 23-51-11) under ./pretrained_models/.
有两个版本的权重文件,都能用。
需要点击这里的here(云盘地址)下载模型权重文件,比较大有几G,需要科学上网。
放在目录./pretrained_models/23-51-11/model_best_bp2.pth
3、运行demo
python scripts/run_demo.py --left_file ./assets/left.png --right_file ./assets/right.png --ckpt_dir ./pretrained_models/23-51-11/model_best_bp2.pth --out_dir ./test_outputs/
注意这里的–ckpt_dir 参数 模型权重地址得正确。
虽然最后Open3D显示失败了,但结果点云会存放在test_outputs文件夹,能用cloud compare打开。
生成的点云质量挺高的,精度和标定参数有关。
注意:模型输入的图像是左右相机极线校正后的图像,并且需要输入极线校正后的相机内参及基线长度。对GPU显存要求比较大,如果图像过大就会出现显存不够的报错。
4、配置环境遇到的问题
a.pip 安装flash-attn失败
b.问题:huggingface_hub.errors.LocalEntryNotFoundError
c.问题xFormers版本与CUDA版本不对应
d.运行时图像过大大致显卡现存不够
pip 安装flash-attn失败
解决方法1
卸载本地base环境的nvidia-cuda-toolkit,安装nvidia-smi推荐的CUDA Version。(卸载用apt,别乱删除文件,使用nvidia官网下载run文件安装,安装时不要选装驱动)
然后用pip install flash_attn安装。
解决方法2
要到github去找到编译好的对应pytorch/cuda/python版本的flash-attn下载到本地再用pip安装。版本装不对运行会报错,识别不到某些符号。
#版本不对报错了,后面降低了flash_attn版本到cu118的,指定到11.8而不是11,就没有报错了
flash_attn_2_cuda.cpython-39-x86_64-linux-gnu.so: undefined symbol: _ZN3c105
问题:huggingface_hub.errors.LocalEntryNotFoundError
由于源码调用了timm库的模型(edgenext_small),但这个模型本地没有,就会自动去huggingface_hub下载,但即便科学上网还是报错网络错误。
#在终端输入,使用镜像,但还是会报错网络错误,但会有要下载的地址出现
export HF_ENDPOINT=https://hf-mirror.com
将报错的网址拷贝到浏览器自行下载,下载后放到huggingface_hub的默认目录下就行。
问题xFormers版本与CUDA版本不对应
WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. xFormers was built for:
PyTorch 2.4.1+cu121 with CUDA 1201 (you have 2.4.1+cu118)
Python 3.9.20 (you have 3.9.21)
Please reinstall xformers (see https://github.com/facebookresearch/xformers#installing-xformers)
Memory-efficient attention, SwiGLU, sparse and more won't be available.
需要重新安装xFormers使其与当前的torch和cuda版本对应,或重装pytorch/cuda等一些库与xFormers对应,cuda版本要12.1以上。
注意:我在pytorch2.6+cuda12.4环境下安装xformers==0.0.28.post1会把torch降级到2.4.1,cuda降级到12.1。
所以用pytorch2.6+cu121就不要指定xformers版本。
运行时图像过大大致显卡现存不够
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 1022.00 MiB. GPU 0 has a total capacity of 5.76 GiB of which 615.31 MiB is free. Including non-PyTorch memory, this process has 5.15 GiB memory in use. Of the allocated memory 3.84 GiB is allocated by PyTorch, and 1.20 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)
加一个scale参数 --scale 0.5这个参数会将图像缩放一个倍数,还不确定改变图像scale模型是否有适配相应的改动,是否与内参矩阵的cx和cy有冲突。
典型应用场景
1. 自动驾驶感知
稠密深度估计(>30m范围,误差<2%)
动态物体运动轨迹预测
2. 工业检测
亚毫米级零件三维形变检测
基于点云匹配的自动化装配
3. 虚拟制作
单目/双目视频转高精度Mesh模型
NeRF场景重建加速(提速5-8倍)
结语
NVIDIA FoundationStereo不仅重新定义了立体匹配的技术边界,更通过与CUDA生态的深度协同,推动三维重建技术进入工业级落地阶段。其开源实现,为开发者提供了探索三维世界的强大工具。
这篇博客可通过具体案例、性能数据和代码示例增强技术深度,同时保持对行业趋势的前瞻性分析。可根据读者背景调整技术细节的深入程度,必要时添加参考文献(如CVPR 2023相关论文)。
————————————————
版权声明:本文为CSDN博主「3DAI。」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43701053/article/details/147757964