2. BundleSDF的虚拟环境搭建
在这里,从零开始:完整搭建 conda环境下的BundleSDF。
首先,我们是在Ubuntu 22.04系统下搭建环境,搭建步骤如下:
1.安装 Miniconda(管理 Python 环境)
2.创建项目专用 Python 环境
3.0pencv安装
3.1 安装依赖
sudo apt update && sudo apt install -y \ cmake gcc g++ libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev \ libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev \ libopenblas-dev libeigen3-dev3.2 下载 OpenCV 源码(含 CUDA 依赖模块)
mkdir -p ~/libs && cd ~/libs # 下载 OpenCV 4.5.5(稳定版,兼容性好) git clone https://github.com/opencv/opencv.git -b 4.5.5 git clone https://github.com/opencv/opencv_contrib.git -b 4.5.5 cd opencv && mkdir build && cd build3.3 编译配置(关键:开启 CUDA)
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=ON \ -D WITH_CUDNN=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/libs/opencv_contrib/modules \ -D BUILD_opencv_cudaimgproc=ON \ -D BUILD_opencv_cudafeatures2d=ON \ -D WITH_TBB=ON \ -D WITH_EIGEN=ON \ -D BUILD_EXAMPLES=OFF \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_TESTS=OFF ..3.4 编译并安装
# 用所有 CPU 核心编译,加快速度 make -j$(nproc) sudo make install sudo ldconfig3.5 验证 CUDA 模块是否安装成功
# 检查 CUDA 头文件是否存在 ls /usr/local/include/opencv4/opencv2 | grep -E "cuda|cudaimgproc|cudafeatures2d" # 检查 OpenCV 是否识别到 CUDA pkg-config --modversion opencv4 opencv_version --verbose | grep -i cuda3.6 可能出现的错误
3.6.1/usr/local/lib目录下没有pkgconfig文件夹
先创建pkgconfig目录
sudo mkdir -p /usr/local/lib/pkgconfig创建opencv4.pc文件
sudo nano /usr/local/lib/pkgconfig/opencv4.pc粘贴完整内容
prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include/opencv4 Name: opencv4 Description: Open Source Computer Vision Library Version: 4.5.5 Libs: -L${libdir} -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_videoio -lopencv_imgproc -lopencv_core Libs.private: -ldl -lm -lpthread -lrt Cflags: -I${includedir}保存退出
- 按
Ctrl+O→ 按回车保存 - 按
Ctrl+X退出编辑器
配置并验证
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc source ~/.bashrc pkg-config --modversion opencv4输出4.5.5就说明成功了 ✅
4.安装PCL
Ubuntu22.04自带的PCL版本可能和项目的版本不匹配,则可以先将原有的版本清除,重新安装合适的版本。
4.1 完全卸载系统自带的 PCL 1.12
sudo apt remove libpcl-dev pcl-tools -y sudo apt autoremove -y sudo apt clean4.2 安装依赖(Ubuntu 22.04 专用)
sudo apt install build-essential libboost-all-dev libflann-dev libvtk9-dev libvtk9-qt-dev libopenni-dev libusb-1.0-0-dev libpng-dev libjpeg-dev libgtest-dev -y4.3 下载 + 编译 + 安装 PCL 1.10.1(兼容版)
cd ~ wget https://github.com/PointCloudLibrary/pcl/archive/refs/tags/pcl-1.10.1.tar.gz tar -zxvf pcl-1.10.1.tar.gz cd pcl-pcl-1.10.1 mkdir build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_visualization=ON \ -DBUILD_examples=OFF \ -DBUILD_tests=OFF \ -DBUILD_apps=OFF \ .. make -j$(nproc) sudo make install4.4 验证安装成功
pcl_viewer --version5. 安装gridencoder
5.1 下载gridencoder
进入网页https:/github.com/asgawkey/torch-npg/tree/main,下载文件夹,打开文件内的文件如下:
里面有一个gridencoder文件,该文件就是我们要下载的文件。
5.2编译gridencoder
5.2.1 回到gridencoder源码目录
cd /public/torch-ngp-main/gridencoder conda activate bundlesdf5.2.2 用当前环境的 Python 3.8 编译
python setup.py clean python setup.py build_ext --inplace5.2.3 把新编译好的文件复制到项目目录
cp gridencoder.cpython-38-x86_64-linux-gnu.so /home/wyq/public/BundleSDF/5.2.4 一次性配置路径并运行
cd /home/wyq/public/BundleSDF conda activate bundlesdf export LD_LIBRARY_PATH=./BundleTrack/build:$CONDA_PREFIX/lib/python3.8/site-packages/torch/lib:$CONDA_PREFIX/lib:/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH export PYTHONPATH=./:$PYTHONPATH python run_custom.py6.安装pytorch3d
由于pytorch3d安装比较严格,需要与pytorch的版本对应,我们直接在虚拟环境中安装pytorch3d时可能报错,若报错需要单独安装。
6.1下载pytorch3d安装包
直接克隆pytorch3d仓库到本地
cd /home/wyq/public/ git clone https://github.com/facebookresearch/pytorch3d.git cd pytorch3d若不能直接下载,可以进入https://github.com/facebookresearch/pytorch3d.git下载zip文件再解压。
6.2 安装编译依赖
conda activate bundlesdf cd /public/pytorch3d-main pip install "fvcore>=0.1.5" "iopath>=0.1.7" pip install .⚠️ 这个过程会根据你的环境自动编译 C++/CUDA 扩展,可能需要几分钟,耐心等待即可。
6.3 验证安装是否成功
python -c " import pytorch3d from pytorch3d.transforms import so3_exp_map print('✅ pytorch3d 安装成功!版本:', pytorch3d.__version__) "如果没有报错并打印了版本号,说明安装完全成功!
回到你的项目,继续运行脚本
cd /home/wyq/public/BundleSDF python run_custom.py7.docker安装
1. 卸载旧版本(如有)
sudo apt remove -y docker docker-engine docker.io containerd runc2. 安装依赖、添加官方 GPG 密钥与源
# 更新包索引、安装基础工具 sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release # 创建密钥目录、添加Docker官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # 添加Docker官方APT源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null3. 安装 Docker 引擎(含 CLI、containerd、compose)
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin4. 启动并设置开机自启
sudo systemctl start docker sudo systemctl enable docker5. 配置非 root 用户免 sudo 使用 Docker(重要,避免每次 sudo)
sudo usermod -aG docker $USER newgrp docker # 立即生效,无需重启6. 验证安装成功
docker --version docker compose version docker run hello-world # 输出Hello from Docker!即成功7. (可选)配置国内镜像加速(若验证不成功)
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://registry.docker-cn.com", "https://hub-mirror.c.163.com", "https://dockerhub.azk8s.cn" ], "dns": ["114.114.114.114", "8.8.8.8"], "ipv6": false } EOF重启 Docker 服务:
sudo systemctl daemon-reload sudo systemctl restart docker直接用 IP 拉取官方镜像(绕开 DNS)
docker pull hello-world docker run hello-world8. docker打包ubuntu:22.04
在宿主机上安装所有依赖(和容器里一样)
# 1. 安装系统依赖 sudo apt update && sudo apt install -y \ wget bzip2 ca-certificates curl git vim tmux \ g++ gcc build-essential cmake checkinstall gfortran \ libjpeg8-dev libtiff5-dev libpng-dev pkg-config yasm \ libavcodec-dev libavformat-dev libswscale-dev \ libdc1394-dev libxine2-dev libv4l-dev \ qtbase5-dev libgtk2.0-dev libtbb-dev libatlas-base-dev \ libprotobuf-dev protobuf-compiler libgoogle-glog-dev \ libhdf5-dev doxygen libyaml-cpp-dev libzmq3-dev freeglut3-dev # 2. 安装 CUDA 11.3(和容器里一样) sudo chmod +x ./cuda_11.3.1_465.19.01_linux.run sudo ./cuda_11.3.1_465.19.01_linux.run --silent --toolkit --override --no-opengl-libs # 3. 配置 CUDA 环境变量 echo 'export PATH=/usr/local/cuda-11.3/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc echo 'export CUDA_HOME=/usr/local/cuda-11.3' >> ~/.bashrc source ~/.bashrc # 4. 安装 Eigen、OpenCV、PCL 等(和你原来的 Dockerfile 里一样) # 直接在宿主机上执行这些命令,就不用在容器里构建了打包成 Docker 镜像
# 1. 打包宿主机的文件系统(只打包必要的部分) sudo tar --exclude='./proc/*' --exclude='./sys/*' --exclude='./dev/*' -cvf ubuntu-rootfs.tar / # 2. 导入成 Docker 镜像 cat ubuntu-rootfs.tar | docker import - local/ubuntu:22.04 # 3. 验证镜像 docker images | grep local/ubuntu用本地镜像构建你的 BundleSDF 镜像
FROM local/ubuntu:22.04 # 复制 CUDA 安装包(如果宿主机已经装了,这步可以省略) COPY ./cuda_11.3.1_465.19.01_linux.run /root/ # 后续步骤和原来一样