目錄
- 一、NeRFStudio安裝
- 1.安裝(ubuntu系統)
- 2.安裝(windows系統)
- 二、安裝tinycudann
- 三、Colmap安裝與使用
- 1. 安裝依賴
- 2. 安裝colmap
- 3.使用colmap
- 3.1 可視化界面使用
- 3.2 Nerfstudio命令行調用Colmap
- 3.3 colmap結果不準時的修復
- 3.4 colmap 校正地面
- 3.5 colmap 分塊計算位姿
- 四、使用NeRFStudio進行三維重建
- 四*、gsplat使用
- 五、3D GaussianSplatting安裝與使用
- 5.1 安裝
- 5.2 使用
- 五* CUDA安裝(附C++編譯器說明)
場景/物體三維重建過程:首先用colmap估計圖像位姿,而后以圖像和位姿作為出入,用NeRF或Gaussian Splatting進行三維重建
一、NeRFStudio安裝
??簡介:Nerfstudio,一個用于NeRF開發的模塊化PyTorch框架。框架中用于實現基于NeRF的方法的組件即插即用,使得研究人員和相關從業者可以輕松地將NeRF集成到自己的項目中。框架的模塊化設計支持實時可視化工具,導入用戶真實世界捕獲的數據集外(in-the-wild)數據,以及導出為視頻,點云和網格表示的工具。近期,還導入了InstantNGP、3D Gaussian Splatting等最新重建算法。
1.安裝(ubuntu系統)
??下載項目代碼到本地:
git clone https://github.com/nerfstudio-project/nerfstudio.git
AI寫代碼javascript運行
- 1
??可以去github直接下載zip文件,也可以按照以上命令git。網絡不好可以去gitee(碼云)加速。
cd nerfstudio pip install --upgrade pip setuptools pip install -e .
AI寫代碼javascript運行
- 1
- 2
- 3
2.安裝(windows系統)
2.1.安裝vs2019 + cuda 11.6;
2.2.通過conda創建虛擬環境nerfstudio,依次執行如下命令:
conda create --name nerfstudio -y python=3.8 conda activate nerfstudio python -m pip install --upgrade pip
AI寫代碼javascript運行
- 1
- 2
- 3
3.3.安裝依賴:
??(1).pytorch 1.13.1, 執行如下命令:
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 -f https://download.pytorch.org/whl/torch_stable.html
AI寫代碼javascript運行
- 1
??(2).tinycudann, 執行如下命令:
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
AI寫代碼javascript運行
- 1
3.4.安裝nerfstudio,依次執行如下命令:
git clone git@github.com:nerfstudio-project/nerfstudio.git cd nerfstudio pip install --upgrade pip setuptools pip install -e .
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
5.安裝ffmpeg, 執行如下命令:
conda install -c conda-forge ffmpeg
AI寫代碼javascript運行
- 1
6.安裝colmap, 執行如下命令:
conda install -c conda-forge colmap conda install -c conda-forge mpir
AI寫代碼javascript運行
- 1
- 2
7.安裝hloc,依次執行如下命令: 可選,windwos上不支持pycolmap
cd .. git clone --recursive https://github.com/cvg/Hierarchical-Localization/ cd Hierarchical-Localization/ pip install pycolmap # windows不支持 python -m pip install -e .
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
- 5
二、安裝tinycudann
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
AI寫代碼javascript運行
- 1
??這句命令不成功的,請切換gcc與g++版本,方法見最后
三、Colmap安裝與使用
?? colmap是用來對一系列圖像進行位姿匹配,從而生成場景的三維模型(點云)
。也就是你對一個場景拍攝了很多照片,colmap可以估計出每張照片的相機位置(pose,是NeRF的輸入),并利用SFM算法生成三維模型。使用NeRF和Gaussian Splatting進行三維重建必備的工具。
1. 安裝依賴
sudo apt-get install \git \cmake \ninja-build \build-essential \libboost-program-options-dev \libboost-filesystem-dev \libboost-graph-dev \libboost-system-dev \libeigen3-dev \libflann-dev \libfreeimage-dev \libmetis-dev \libgoogle-glog-dev \libgtest-dev \libsqlite3-dev \libglew-dev \qtbase5-dev \libqt5opengl5-dev \libcgal-dev \libceres-dev
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
2. 安裝colmap
git clone https://github.com/colmap/colmap.git cd colmap mkdir build cd build sudo cmake .. \-D CMAKE_CUDA_COMPILER="/usr/local/cuda-11.3/bin/nvcc" ../CMakeLists.txt \-D CMAKE_CUDA_ARCHITECTURES='89' cd .. sudo make -j24 sudo make install
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
??注意:
??更改以上命令中cuda路徑,以及最后的顯卡算力(75代表Turing架構,如RTX 20系列;80代表Ampere架構,如RTX 30系列;89為RTX4080 顯卡等)
3.使用colmap
3.1 可視化界面使用
使用命令打開colmap
colmap gui
AI寫代碼javascript運行
- 1
打開界面如下:
1.創建 project_cat 文件夾,把圖片放 project_cat/images 下
2.執行 Automatic reconstruction 重建,如下:‘
??需要等待比較久的時間,最開始比較占用CPU,大概執行的是特征點計算和匹配一類的,后面會占用比較大的GPU使用率,GPU內存占用大概2G.
??到下面的界面后表明完成。
??同時介紹了可視化sparse, dense, mesh 模型結果的方法。最終效果如下:
一些參數說明:
Rotate model: Left-click and drag.
Shift model: Right-click or -click (-click) and drag.
Zoom model: Scroll.
Change point size: -scroll (-scroll).
Change camera size: -scroll. (紅色的表示相機拍攝位置的符號)
Adjust clipping plane: -scroll. (距離觀察視點一定距離的點會被 clipped)
Select point: Double-left-click point (change point size if too small). The green lines visualize the projections into the images that see the point. The opening window shows the projected locations of the point in all images.
3.2 Nerfstudio命令行調用Colmap
??除以上可視化界面直接計算圖片的pose以外,還可以用Nerfstudio調用colmap:
ns-process-data images --sfm-tool hloc --feature-type superpoint --matcher-type superglue --data '/path/to/IMG' --output-dir '/path/to/IMG'
AI寫代碼javascript運行
- 1
??其優點是利用superpoint 和 superglue深度特征,替代原始的sift提取特征
3.3 colmap結果不準時的修復
1.在終端 colmap gui命令打開可視化界面,先新建項目,將sparse/0中的database.db和圖片路徑輸入,再import項目,輸入sparse/0文件夾,就能顯示以下界面
2.在可視化界面中,import model之前不準的結果路徑(sparse/0文件夾)
3.在可視化界面中,雙擊選中不準的圖片,直接刪除(中間這幾個相機擠在一起,明顯有問題)
刪除完以后,export model,直接放在一個新文件夾里
4.更新clmap計算出的點云:
colmap point_triangulator --database_path /home/data/garden/colmap/sparse/0/database.db --image_path /home/data/garden/images --input_path /home/data/garden/colmap/sparse/0 --output_path /home/data/garden/colmap/sparse/1 # 新生成的點云保存路徑,可以提前創建好,替代原來的sparse/0
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
- 5
5.重新增量式把刪除的圖片計算進來(可選):
colmap mapper --database_path /home/xzz/instruct-gs2gs/data/liangcang2-2copy/distorted/sparse/0/database.db --image_path /home/data/garden/images --input_path /home/data/garden/colmap/sparse/0 --output_path /home/data/garden/colmap/sparse/0+ # 新生成的0+路徑,可以替代原始的sparse/0 --Mapper.fix_existing_images 1
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
- 5
可以檢查一下0+的相機位置對不對,還是不對的話就舍棄0+
3.4 colmap 校正地面
# 1.windows命令: E:\COLMAP-3.9.1-windows-cuda\COLMAP.bat model_orientation_alignerhel --help # 2.ubuntu命令: colmap model_orientation_aligner --help # (大概需要 --image_path arg --input_path sparse/0 --output path arg 三個輸入參數 )
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
- 5
3.5 colmap 分塊計算位姿
0.premilinary:input1路徑下的圖片轉fl1.txt
import os
def write_filenames_to_txt(folder_path, output_txt_path):
# 獲取文件夾中所有文件(不包含子文件夾里的文件)
filenames = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
# 寫入到txt文件中
with open(output_txt_path, ‘w’, encoding=‘utf-8’) as f:
for name in sorted(filenames):
f.write(f“{name}\n”)
print(f“已將 {len(filenames)} 個文件名寫入 {output_txt_path}”)
# 示例路徑(請替換為你自己的)
folder_path = r‘/home/xzz/視頻/xytgarden/input1’
output_txt_path = r‘/home/xzz/視頻/xytgarden/fl1.txt’
write_filenames_to_txt(folder_path, output_txt_path)
1.對兩個文件夾一起跑 特征提取,得到new.db。然后跑colmap mapper 得到稀疏點云(input1 圖片路徑,fl1.txt為以上perliminary代碼生成)
colmap mapper
–database_path /home/xzz/視頻/xytgarden/514/new.db
–image_path /home/xzz/視頻/xytgarden/input1
–image_list /home/xzz/視頻/xytgarden/fl1.txt
–output_path /home/xzz/視頻/xytgarden/sparse/1
2.同理跑另一個文件夾input1 ,然后合并兩個稀疏點云sparse1與sparse2
colmap model_merger
–input_path1 /home/xzz/視頻/xytgarden/sparse/0/0
–input_path2 /home/xzz/視頻/xytgarden/sparse/1/0
–output_path /home/xzz/視頻/xytgarden/01
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
四、使用NeRFStudio進行三維重建
4.1.通過colmap生成數據集,也可從網上,如https://data.nerf.studio/nerfstudio/ 下載lego 樂高玩具測試集,并拷貝到nerfstudio的data/nerfstudio目錄下,data/nerfstudio需自己創建;
4.2.將colmap數據轉化為transforms.json(需要在nerfstudio環境下):
ns-process-data images --data data/liangcang4k/images --output_dir data/liangcang4k/ns --skip_colmap --skip_image_processing --colmap_model_path colmap/sparse/0
備用命令:
ns-process-data images –data data/nerfstudio/lego/train –output-dir data/nerfstudio/lego –camera-type perspective –matching-method exhaustive –sfm-tool colmap –crop-factor 0.0 0.0 0.0 0.0
- 1
- 2
- 3
- 4
4.3.訓練命令如下:迭代產生的checkpoint存儲在outputs/lego/nerfacto目錄下
ns-train nerfacto --data data/nerfstudio/lego --vis viewer --max-num-iterations 50000
AI寫代碼javascript運行
- 1
參數為數據路路徑,迭代次數等。還可添加其他參數,用命令ns-render --help查看官方文檔
??訓練進度如下圖所示:
訓練結束后,會顯示本地瀏覽地址。打開web實時預覽: https://viewer.nerf.studio/versions/23-04-10-0/?websocket_url=ws://localhost:7007 ,如下圖所示:
加載預訓練模型,繼續訓練命令為:
ns-train nerfacto --data data/nerfstudio/person --load-dir outputs/person/nerfacto/2023-08-23_152364/nerfstudio_models
AI寫代碼javascript運行
- 1
加載預訓練模型進行可視化查看:
ns-viewer --load-config outputs/person/nerfacto/2023-04-23_152364/config.yml
AI寫代碼javascript運行
- 1
訓練結果可以導出為 (1).渲染視頻; (2).點云;(3).mesh.
支持的自定義數據集類型:https://docs.nerf.studio/en/latest/quickstart/custom_dataset.html
ns-process-data各參數說明:https://docs.nerf.studio/en/latest/reference/cli/ns_process_data.html
官方提供的數據集:https://drive.google.com/drive/folders/19TV6kdVGcmg3cGZ1bNIUnBBMD-iQjRbG
colmap結果轉nerfstudio輸入:
一般nerfstudio結果需要有sparse_pc.ply與transforms.json,如何將colmap的結果轉成這種格式?只需以下命令:
ns-process-data images --data liangcang2-2copy/images --output-dir lc2 --skip-colmap --colmap-model-path colmap/sparse/0
- 1
- 2
- 3
查看訓練好的模型:
ns-viewer --load-config outputs/lc2/splatfacto/2024-09-25_174814/config.yml
四*、gsplat使用
python .\examples\simple_trainer.py _3dgs --enable_viewer --use_bilateral_grid --data_dir "E:\BaiduNetdiskDownload\uav\$_" --result_dir "E:\BaiduNetdiskDownload\uav\$_" --steps-scaler 1.5
AI寫代碼javascript運行
- 1
五、3D GaussianSplatting安裝與使用
5.1 安裝
??首先,克隆代碼到本地(–recursive是為了添加SIBR的可視化庫,用于顯示結果)
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
AI寫代碼javascript運行
- 1
??然后,cd目錄到gaussian-splatting 下,按照yml創建環境:
cd gaussian-splatting SET DISTUTILS_USE_SDK=1 # 只有 Windows 需要 conda env create --file environment.yml conda activate gaussian_splatting
AI寫代碼javascript運行
- 1
- 2
- 3
- 4
安裝整體比較簡單,基本一鍵式安裝
5.2 使用
??首先,自帶的庫可以把視頻,處理成圖片。例如:
ffmpeg -i -qscale:v1-qmin1-vffps C:Users\data\crane.mov -qscale:v 1 -qmin 1-vf fps= %04d.jpg
AI寫代碼javascript運行
- 1
??然后,是用colmap處理圖像,獲得每張圖像的pose:
python convert.py -s data/crane
AI寫代碼javascript運行
- 1
由于我已經用colmap處理好了圖像,因此需要修改以上代碼。首先,需要創建 ‘ distorted’文件夾,并將 ‘colmap’中的‘spase’ 文件夾復制進去;然后復制 ‘images’文件夾,并重命名為‘input’。然后執行修改后的命令:
python convert.py -s 'data/crane' --skip_matching
AI寫代碼javascript運行
- 1
得到的數據集格式如下:
??最后,開始訓練:
python train.py -s 'data/crane' --data_device cpu --iterations 30000
AI寫代碼javascript運行
- 1
以上參數可選gpu或cpu,一般訓練30k就能收斂。想細節更好,建議往100k訓練。500張圖,4080gup,30k大概需要半小時內(但是colmap需要一小時)。以下是訓練截圖:
最上面一行output那,顯示了保存路徑。
??結果可視化:
./SIBR_viewers/install/bin/SIBR_gaussianViewer_app -m ./output/ee33ed94-3
AI寫代碼javascript運行
- 1
以上命令,需要將路徑改為自己的。可視化效果如下:
??可以通過鍵盤的‘wsad’進行移動,‘ikjl’鍵來切換視角。只要照片拍的好,效果就好。具體數據采集問題,可以咨詢博主。
常用命令匯總
:
# 拷貝環境
sudo mount machine3:/nfs/gs_env ~/anaconda3/envs/gs
矯正
python convert.py -s ‘data/indoor3’ –skip_matching (必須有input文件夾,以及包含sparse的distorted文件夾)
colmap image_undistorter –image_path –input_path(put “0” into folder) –output_path
train
python train.py -s ‘data/center’ –data_device cpu -r 1 –iterations 100000 –densify_until 60000 –densification_interval 250 –cache-path ‘path’
實時渲染
./SIBR_viewers/install/bin/SIBR_gaussianViewer_app -m ./output/f80f5f1f-3
python render.py -m ./output/4e756cf2-4 –skip_train
遇到錯誤
OSError: [Errno 24] Too many open files: 在終端執行 ulimit -n 4096
無法識別數據中的子文件夾(比如images下面還有1、2、3等子圖像文件夾)
scene/dataset_readers.py中的 line 96,將如下第一行修改為第二行:
image_path = os.path.join(images_folder, os.path.basename(extr.name))
image_path = os.path.join(images_folder, extr.name)
地面校準
colmap model_orientation_aligner –help
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
五* CUDA安裝(附C++編譯器說明)
提示:安裝cuda前,首先要確保gcc與g++編譯器的版本,與cuda版本相匹配。不確定的先看第5節
1、查看已安裝的CUDA版本
??所有已安裝的CUDA版本默認保存在/usr/local路徑下,cd到該路徑下通過ls命令查看:
2、查看當前使用的CUDA版本
??在/usr/local路徑下通過 stat cuda 命令查看當前使用的CUDA版本:
3、安裝新的CUDA版本——CUDA11.3為例
3.1、下載對應版本的CUDA安裝包: 鏈接(選擇下載runfile文件)
3.2、在下載文件的目錄下,通過命令進行安裝:
sudo sh cuda_10.0.130_410.48_linux.run ## 安裝時去掉對顯卡驅動的安裝,如下圖中去掉第一行
AI寫代碼javascript運行
- 1
- 2
3.3、修改環境變量
??系統環境中修改cuda版本。執行以下命令,打開環境路徑,在最后添加并保存:
gedit ~/.bashrc
AI寫代碼javascript運行
- 1
## 默認為以上軟連接的路徑
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
也可以指定具體路徑
export PATH=/usr/local/cuda-11.3/bin:PATHexportLDLIBRARYPATH=/usr/local/cuda?11.3/lib64:PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:PATHexportLDL?IBRARYP?ATH=/usr/local/cuda?11.3/lib64:LD_LIBRARY_PATH
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
保存環境變量:
source ~/.bashrc
AI寫代碼javascript運行
- 1
4、CUDA版本的切換
4.1、刪除原版本的cuda軟連接
sudo rm -rf /usr/local/cuda
AI寫代碼javascript運行
- 1
4.2、建立新的指向cuda-10.0的軟連接
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
AI寫代碼javascript運行
- 1
5.切換gcc與g++版本
??cuda支持的最高版gcc與g++如下表,大部分人都需要降級gcc:
??安裝對應版本gcc與g++(這里以cuda11.3對應的9.5為例):
sudo apt-get install gcc-9 sudo apt-get install g++-9
AI寫代碼javascript運行
- 1
- 2
??隨后,進入/usr/bin目錄下刪除舊版本gcc/g++文件(這里只是刪除了軟連接):
cd /usr/bin sudo rm gcc g++
AI寫代碼javascript運行
- 1
- 2
??最后,將gcc/g++和新安裝的gcc-9/g+±9關聯起來:
sudo ln -s gcc-9 gcc sudo ln -s g++-9 g++
AI寫代碼javascript運行
- 1
- 2
??查看最新版本:
gcc -V
AI寫代碼javascript運行
- 1
??其他切換版本方法:gcc版,默認使用優先級最高的版本。設置gcc 10優先級為100,設置gcc 9優先級為70。那么默認使用gcc10。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 70 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9
AI寫代碼javascript運行
- 1
- 2
??隨后,使用以下命令來選擇版本(默認選擇第1行的,序號為0)
sudo update-alternatives --config gcc
AI寫代碼javascript運行
- 1
- 批量修改文件名(先cd到對應路徑):
for i in KaTeX parse error: Expected group after '_' at position 42: …d group after '_?' at position 2…{i}.png ${i}.png 2>/dev/null; done
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
1.colmap對齊校正:
colmap model_orientation_aligner --image_path arg --input_path arg --output_path arg 三個輸入參數 )
2.裁減colmap:
python split_colmap/split_colmap_v2.py –input 0 –output 00 –xmin -6.6 –xmax -2.04 –zmin -13.3 –zmax 8.7 –threshold .5
3.裁減ply:
python clip_model.py –in-path heyangblock2/point_cloud/iteration_60000/point_cloud.ply –out-path heyangblock2/clipped.ply –xmin -2.04 –xmax 1.74
4.合并所有clipped.ply
python merge_models.py –in-paths */clipped.ply –out-path heyang.ply
python trainer/gstrainer/train.py –data.path ‘/home/xzz/Pixel-GS/data/xytdoor’ –save.path /tmp/unused –auto-exp.enable
清理電腦根目錄:
df -h
sudo du -ahx / | sort -rh | head -n 20
原文鏈接:https://blog.csdn.net/qq_45752541/article/details/136658887