はじめに
- この記事は,Ubuntu系の計算機にオープンソースのフォトグラメトリを行う環境を構築する手順の記載となります.各オープンソースの最新版で環境構築できたので,備忘録として残しておきます.
- ようやくUbuntu 24.04 LTS相当で環境構築ができたので紹介.
- 昨年記事: オープンソースフォトグラメトリを実行するための環境構築(2024年3月版)
フォトグラメトリとは
- 立体復元対象が写っている複数の写真から,立体復元対象の3Dモデルを生成する手法のことです.写真測量ともよばれています.
計算機スペック
- OS: Linux Mint 22.1(Ubuntu 24.04 LTS相当)で環境構築を行います
- フォトグラメトリに使用する計算機のCPUとGPUは高スペックであることが望ましい(立体復元計算に時間がかかります.)
- CPUはamd64プロセッサ(intelやryzenで大丈夫かと,arm64系は多分インストールできません.)
- 著者環境: Ryzen 9 7950X3Dを使用(16コア32スレッド)
-
make -j32を使っています.(著者環境なので,CPUのコア数で適宜変更してください.)
- CUDAが使用できるNVIDIA系のGPUが必要
- 著者環境: GeForce RTX4090を使用
インストールするオープンソースフォトグラメトリライブラリ
- SfM(Structure from Motion)
- MVS(Multi‑View Stereo)
COLMAP → GLOMAP → openMVSの順番でインストールします.
クリーンインストールした状態からの環境構築手順
- 必要に応じて適宜変更して行ってください.
1. 初期設定およびnvidiaドライバのインストール
パッケージの更新
$ sudo apt update
$ sudo apt upgrade
vimをインストール(著者はvimを使うので)
$ sudo apt install vim
nouveauの確認
$ lsmod | grep nouveau
# このコマンドを実行後,何か表示されたら,次の内容を行うこと
# 表示されない場合,nvidiaドライバの確認へ
nouveauの無効化の準備
$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf # 次の内容を書き込んでください
blacklist-nouveau.confに書き込む内容
blacklist nouveau
options nouveau modeset=0
nouveauの無効化,再起動
$ sudo update-initramfs -u
$ sudo reboot
nouveauの無効化の確認および,nvidiaドライバの確認
$ lsmod | grep nouveau # 何も表示しないことを確認する
$ ubuntu-drivers devices # recommended表示の nvidia-driver-○○ の "○○"をメモする
- 今回は,
nvidia-driver-575-openを使用する.
nvidiaドライバのインストール
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo apt install nvidia-driver-575-open # メモした"○○"をインストール
$ sudo reboot # 再起動すれば,nvidiaドライバが機能します
nvidiaドライバのインストール確認
$ nvidia-smi # このコマンドを実行することで確認できる.
2. CUDAのインストール(cuda12.8をインストールします,別件で著者はPyTorchを使うため)
- CUDA Toolkit 12.8 Update 1 Downloadsを参考にインストールします.
- Select Target Platformは以下を選択
- Operating System:
Linux - Architecture:
x86_64 - Distribution:
Ubuntu - Version:
24.04 - Installer Type:
deb(local)
- Operating System:
- ただし,
cuda-toolkitをインストールします.
CUDAをインストール
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
$ sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda-repo-ubuntu2404-12-8-local_12.8.1-570.124.06-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2404-12-8-local_12.8.1-570.124.06-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2404-12-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt update
$ sudo apt install cuda-toolkit-12-8
CUDAのパスを通す
$ vim .bashrc
.bashrcの最後に以下を記載する
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
設定を反映させる
$ source .bashrc
$ nvcc -V # このコマンドが実行できればOK
3. インストール準備(参考サイト)
3-1: cuDSSのインストール
- cuDSS 0.6.0 Downloadsを参考にインストールします.
- Select Target Platformは以下を選択
- Operating System:
Linux - Architecture:
x86_64 - Distribution:
Ubuntu - Version:
24.04 - Installer Type:
deb(local)
- Operating System:
cuDSSをインストール
$ wget https://developer.download.nvidia.com/compute/cudss/0.6.0/local_installers/cudss-local-repo-ubuntu2404-0.6.0_0.6.0-1_amd64.deb
$ sudo dpkg -i cudss-local-repo-ubuntu2404-0.6.0_0.6.0-1_amd64.deb
$ sudo cp /var/cudss-local-repo-ubuntu2404-0.6.0/cudss-*-keyring.gpg /usr/share/keyrings/
$ sudo apt update
$ sudo apt install cudss
3-2: Ceres Solverのインストール
必要パッケージのインストール(Ceres Solver)
$ sudo apt install git cmake cmake-curses-gui cmake-gui build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config libeigen3-dev libatlas-base-dev libsuitesparse-dev libgoogle-glog-dev libgflags-dev libsuitesparse-dev ninja-build libboost-program-options-dev libboost-graph-dev libboost-system-dev libflann-dev libfreeimage-dev libmetis-dev libgtest-dev libgmock-dev libsqlite3-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libceres-dev libcgal-qt5-dev
Ceres Solverをインストール
$ git clone --recurse-submodules -j32 https://github.com/ceres-solver/ceres-solver
$ cd ceres-solver
$ git checkout 46b4b3b002994ddb9d6fc72268c3e271243cd1df
$ mkdir build
$ cd build
$ cmake ..
$ make -j32
$ sudo make install
$ cd
4. COLMAPのインストール
- 使用するGPUのCompute Capabilityを調べておいてください.
- 参考URL: https://developer.nvidia.com/cuda-gpus
- GeForce RTX 5000シリーズ: 12.0
- GeForce RTX 4000シリーズ: 8.9
- GeForce RTX 3000シリーズ: 8.6
- 参考URL: https://developer.nvidia.com/cuda-gpus
COLMAPをインストール
$ git clone https://github.com/colmap/colmap.git
$ cd colmap
$ git checkout 682ea9ac4020a143047758739259b3ff04dabe8d
$ vim CMakeLists.txt
CMakeLists.txtの最初の1行目に以下を追記して保存する
set(CMAKE_CUDA_COMPILER "/usr/local/cuda/bin/nvcc")
COLMAPをインストール(続き)
$ mkdir build
$ cd build
$ cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=89
# -DCMAKE_CUDA_ARCHITECTURESには,Compute Capabilityの小数点を除去した値を指定
# GeForce RTX 5090使用の場合,-DCMAKE_CUDA_ARCHITECTURES=120 となる
$ ninja
$ sudo ninja install
$ cd
4. GLOMAPのインストール
GLOMAPをインストール
$ git clone https://github.com/colmap/glomap.git
$ cd glomap
$ git checkout 262e122da0bedf2f48ec4735f84c93127862b2a1
$ vim CMakeLists.txt
CMakeLists.txtの最初の1行目に以下を追記して保存する
set(CMAKE_CUDA_COMPILER "/usr/local/cuda/bin/nvcc")
GLOMAPをインストール
$ mkdir build
$ cd build
$ cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS:STRING="-mno-avx512f -mno-avx512dq -mno-avx512vl -Wno-error" -DCMAKE_CUDA_ARCHITECTURES=89
# -DCMAKE_CUDA_ARCHITECTURESには,Compute Capabilityの小数点を除去した値を指定
$ ninja
$ sudo ninja install
$ cd
5. openMVSのインストール
必要パッケージのインストール(OpenMVS)
# Prepare and empty machine for building:
$ sudo apt install libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev
# Boost (Required)
$ sudo apt install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
# VCGLib (Required)
$ cd /usr/local/
$ sudo git clone https://github.com/cdcseacave/VCG.git vcglib
$ sudo chown -R $USER vcglib
$ cd
# GLFW3 (Optional)
$ sudo apt install freeglut3-dev libglew-dev libglfw3-dev
# Additional
$ sudo apt install libnanoflann-dev libjxl-dev
OpenCVを入れ直す
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libcanberra-gtk3-dev libatlas-base-dev gfortran python3-dev
$ git clone https://github.com/opencv/opencv.git
$ cd opencv
$ mkdir build && cd build
$ cmake -DWITH_JPEGXL=ON -DCMAKE_BUILD_TYPE=Release ..
$ make -j32
$ sudo make install
$ cd
CGALを入れ直す
$ sudo apt remove libcgal-dev libcgal-qt5-dev
$ sudo apt update
$ sudo apt install libgmp-dev libmpfr-dev
$ git clone --depth=1 --branch v6.0.1 https://github.com/CGAL/cgal.git
$ cd cgal && mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
$ cmake --build . -j32
$ sudo cmake --install .
$ cd
openMVSをインストール
$ git clone https://github.com/cdcseacave/openMVS.git
$ mkdir openMVS_build
$ cd openMVS_build
$ cmake ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/usr/local/vcglib"
$ make -j32
$ sudo make install
$ cd
$ sudo apt install libopencv-dev
openMVSのパスを通す
$ vim .bashrc
.bashrcのPATHを以下に修正する
export PATH="/usr/local/cuda/bin:/usr/local/bin/OpenMVS/:$PATH"
設定を反映させる
$ source .bashrc
5. 連携例
5-1: COLMAP(SfM)とopenMVS(MVS)の連携
COLMAP(SfM)→openMVS(MVS)
# COLMAPの処理
colmap feature_extractor --database_path database.db --image_path ./images
colmap exhaustive_matcher --database_path database.db
mkdir sparse
mkdir dense
colmap mapper --database_path database.db --image_path ./images --output_path ./sparse
colmap image_undistorter --image_path ./images --input_path ./sparse/0 --output_path ./dense
# OpenMVSの処理
InterfaceCOLMAP -i ./dense -o scene.mvs
DensifyPointCloud ./scene.mvs
ReconstructMesh ./scene_dense.mvs
TextureMesh -i scene_dense.mvs --mesh-file scene_dense_mesh.ply
5-2: COLMAP/GLOMAP(SfM)とopenMVS(MVS)の連携
- mapperの処理をglomapにする
COLMAP/GLOMAP(SfM)→openMVS(MVS)
# COLMAP/GLOMAPの処理
colmap feature_extractor --database_path database.db --image_path ./images
colmap exhaustive_matcher --database_path database.db
mkdir sparse
mkdir dense
glomap mapper --database_path database.db --image_path ./images --output_path ./sparse
colmap image_undistorter --image_path ./images --input_path ./sparse/0 --output_path ./dense
# OpenMVSの処理
InterfaceCOLMAP -i ./dense -o scene.mvs
DensifyPointCloud ./scene.mvs
ReconstructMesh ./scene_dense.mvs
TextureMesh -i scene_dense.mvs --mesh-file scene_dense_mesh.ply
感想
- ChatGPTと二人三脚で環境構築ができた.(
makeやninjaで発生したエラー対応の手順相談でChatGPTを使用.半日で環境構築ができた.) - 日本語の環境構築説明,フォトグラメトリに関する記事が少ないので,もう少し増えると個人的に嬉しい.