COLMAP 설치

이세돌의망치·2024년 5월 16일
0

CMake, Git 설치

이 둘은 기본적으로 설치햐주자

sudo apt update
sudo apt install cmake
sudo apt install git

Colmap용 가상환경 CUDA 설치

1. 가상환경 만들기

conda create -n cuda121 python==3.8

python 3.8이 호환성이 좋다고 해서 3.8로 진행

2. CUDA & Colmap 설치

0) Nvidia 드라이버 설치

설치 후 재시작

sudo apt-get purge nvidia*
sudo apt-get autoremove

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

sudo apt-get install nvidia-driver-535
sudo reboot

1) CUDA설치

이딴걸로 설치하면 nvcc가 제외된 버전으로 설치된다


직접 CUDA Toolkit 다운✅

CUDAtoolkit은 직접 다운해서 설치해야 한다

나는 내가 원하는 위치에 CUDA를 설치하고 싶었다(용량문제)
내 CUDA 설치 위치는 /mnt/ssd1t/cuda/12.1

내가 사용할 수 있는 가장 오래된 버전인 COLAMP 3.9.1과 호환되는 12.1 부터 설치했다.

# CUDA 설치 디렉토리 준비
sudo mkdir -p /mnt/ssd1t/cuda/12.1

#CUDA 파일 다운로드
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run

# CUDA Toolkit 설치
sudo sh cuda_12.1.1_530.30.02_linux.run --silent --toolkit --toolkitpath=/mnt/ssd1t/cuda/12.1

# 가상환경 활성화
conda activate cuda121
# 필요한 디렉토리 생성
mkdir -p /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/activate.d

# env_vars.sh 파일 생성 및 환경변수 설정
echo '#!/bin/sh
export PATH=/mnt/ssd1t/cuda/12.1/bin:$CONDA_PREFIX/bin:$PATH
export LD_LIBRARY_PATH=/mnt/ssd1t/cuda/12.1/lib64:$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=$CONDA_PREFIX

# 중복된 경로 제거
export PATH=$(echo $PATH | tr ":" "\n" | awk "!x[\$0]++" | tr "\n" ":")
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ":" "\n" | awk "!x[\$0]++" | tr "\n" ":")
' > /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/activate.d/env_vars.sh

# 스크립트에 실행 권한 부여
chmod +x /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/activate.d/env_vars.sh


# 비활성화 스크립트 생성
mkdir -p /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/deactivate.d
echo '#!/bin/sh
export PATH=$(echo "$PATH" | sed -e "s;/mnt/ssd1t/cuda/12.1/bin:;;" -e "s;$CONDA_PREFIX/bin:;;")
export LD_LIBRARY_PATH=$(echo "$LD_LIBRARY_PATH" | sed -e "s;/mnt/ssd1t/cuda/12.1/lib64:;;" -e "s;$CONDA_PREFIX/lib:;;")
export CMAKE_PREFIX_PATH=$(echo "$CMAKE_PREFIX_PATH" | sed -e "s;$CONDA_PREFIX:;;")' > /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/deactivate.d/unset_env_vars.sh
chmod +x /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/deactivate.d/unset_env_vars.sh


# 가상환경 비활성화 및 재활성화
conda deactivate
conda activate cuda121
# nvcc 명령어 확인
nvcc --version

2) cuDNN 설치

cuDNN다운(로그인필요)

Local installer for Linux x86_64(Tar)로 설치했다
Ubuntu용은 라이브러리가 더 적다고 하는데, 뭐 그렇다더라

압축풀기
tar -xf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz

include, lib 폴더에 있는 파일 옮기기
sudo cp include/cudnn*.h /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include
sudo cp lib/libcudnn* /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib

권한 설정
sudo chmod a+r /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include/cudnn*.h
sudo chmod a+r /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/libcudnn*

3)의존성 설치(requirement)

# 필수 패키지 설치
sudo apt-get update
sudo apt-get install -y git cmake build-essential libboost-all-dev \
                        libeigen3-dev libsuitesparse-dev libfreeimage-dev \
                        libgoogle-glog-dev libgflags-dev libglew-dev \
                        qtbase5-dev libqt5opengl5-dev libcgal-dev \
                        libcgal-qt5-dev wget

아래꺼는 필요 없을수도 나중에 다시 확인

conda install -c conda-forge boost
conda install -c conda-forge eigen
conda install -c conda-forge freeimage
conda install -c conda-forge glog
conda install -c conda-forge gflags
conda install -c conda-forge suitesparse
conda install -c conda-forge ceres-solver
conda install -c conda-forge flann
conda install -c conda-forge lz4-c
conda install -c conda-forge sqlite
conda install -c conda-forge cgal
conda install -c conda-forge qt
conda install -c conda-forge glew
COLMAP 클론

클론 위치: /mnt/ssd1t/ubuntu/colmap_cuda121

COLMAP github 버전 참고

최신버전(3.10 dev)

git clone https://github.com/colmap/colmap.git /mnt/ssd1t/ubuntu/colmap_cuda121


cd /mnt/ssd1t/ubuntu/colmap_cuda121
mkdir build
cd build

3.9.1버전 설치

git clone https://github.com/colmap/colmap.git /mnt/ssd1t/ubuntu/colmap3.9.1
cd /mnt/ssd1t/ubuntu/colmap3.9.1
git checkout tags/3.9.1 -b v3.9.1
COLMAP 디렉토리 설정 (설정한 클론 위치로)
cd /mnt/ssd1t/ubuntu/colmap_cuda121
mkdir build
cd build
FLANN,FindLZ4 파일 수정

나처럼 가상환경에 빌드 중이라면, Cmake 빌드과정에서 FLANN의 경로가 잘못되어 있어서 오류가 발생한다.
colmap->cmake->
FindFLANN.cmake
FindLZ4.cmake

다음과 같이 수정해주자

수정 전

list(APPEND FLANN_CHECK_INCLUDE_DIRS
    ${FLANN_INCLUDE_DIR_HINTS}
    /usr/include
    /usr/local/include
    /opt/include
    /opt/local/include
)

list(APPEND FLANN_CHECK_LIBRARY_DIRS
    ${FLANN_LIBRARY_DIR_HINTS}
    /usr/lib
    /usr/local/lib
    /opt/lib
    /opt/local/lib
)

수정 후

list(APPEND FLANN_CHECK_INCLUDE_DIRS
    ${FLANN_INCLUDE_DIR_HINTS}
    /usr/include
    /usr/local/include
    /opt/include
    /opt/local/include
    /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include
)

list(APPEND FLANN_CHECK_LIBRARY_DIRS
    ${FLANN_LIBRARY_DIR_HINTS}
    /usr/lib
    /usr/local/lib
    /opt/lib
    /opt/local/lib
    /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib
)
CMakeLists.txt 파일 수정

colmap->CMakeLists.txt파일의 맨 아래에

set(SQLite3_INCLUDE_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include)
set(SQLite3_LIBRARY /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/libsqlite3.so)
set(SQLite3_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121)
find_package(SQLite3 REQUIRED)
include_directories(${SQLite3_INCLUDE_DIR})
link_libraries(${SQLite3_LIBRARY})

set(CGAL_INCLUDE_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include)
set(CGAL_LIBRARY /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib)
set(CGAL_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121)
find_package(CGAL REQUIRED)
include_directories(${CGAL_INCLUDE_DIR})
link_directories(${CGAL_LIBRARY})

set(Qt5_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/cmake/Qt5)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets OpenGL)
include_directories(${Qt5Widgets_INCLUDE_DIRS})
link_directories(${Qt5Widgets_LIBRARY_DIRS})
add_definitions(${Qt5Widgets_DEFINITIONS})

set(GLEW_INCLUDE_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include)
set(GLEW_LIBRARY /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/libGLEW.so)
set(GLEW_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121)
find_package(GLEW REQUIRED)
include_directories(${GLEW_INCLUDE_DIR})
link_directories(${GLEW_LIBRARY})

를 추가하자

4) CMake 명령 실행

4060ti 기준 CUDA 아키텍처 =8.9

cd /mnt/ssd1t/ubuntu/colmap_cuda121

mkdir -p build
cd build
cmake .. -DCMAKE_CUDA_COMPILER=/mnt/ssd1t/cuda/12.1/bin/nvcc \
         -DCUDA_TOOLKIT_ROOT_DIR=/mnt/ssd1t/cuda/12.1 \
         -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
         -DCUDA_ARCHITECTURES=89 \
         -DCMAKE_BUILD_RPATH=$CONDA_PREFIX/lib
         
make -j$(nproc)
sudo make install


5)빌드 및 설치

# COLMAP 소스 디렉토리로 이동
cd /mnt/ssd1t/ubuntu/colmap_cuda121

mkdir build
cd build

# CMake 구성 및 빌드
cmake -DMETIS_INCLUDE_DIR=/usr/include -DMETIS_LIBRARY=/usr/lib/x86_64-linux-gnu/libmetis.so ..
make -j$(nproc)
profile
코딩초보

0개의 댓글