使用Dockerfile在docker中安装Colmap之前首先要在本机上安装前置环境
nvidia-docker安装
nvcc —version
确认你的cuda
版本FROM nvidia/cuda:11.2-devel-ubuntu18.04
sudo docker build -t colmap:v0
安装过程中需要下载大量依赖,网速你懂的,推荐找寻自己合适的方式,注意一定一定要有耐心,其中很多步骤是真的很慢,之前好几次中途我以为死了就中断了,其实木有问题的!
colmap help
如能正确输出信息则代表colmap已经安装成功
可以使用该命令打开gui窗口,看到这个画面就完事大吉了,如果打开是全黑的窗口且命令行里报错,可能是显示的问题,可以看下面两个报错解决方案寻找灵感!!!但不影响通过cli使用!!! (如果是远程开发,可能无法使用gui,可以直接跳过下面的问题详述)
colmap gui
【报错:
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast】
解决方法:https://askubuntu.com/questions/834254/steam-libgl-error-no-matching-fbconfigs-or-visuals-found-libgl-error-failed-t
nvidia-smi
apt get install lib nvidia-gl-460
我还按照论坛里删除了下
libGL.so.1
文件,不知道有没有影响
sudo ldconfig -p | grep -i gl.so # 然后根据输出信息的提示删除这个文件 sudo rm /usr/lib/x86_64-linux-gnu/libGL.so.1
【报错:QOpenGLWidget: Failed to create context】
解决方案:
按照这个issueHelp - QOpenGLWidget: failed to create context · Issue #749 · colmap/colmap · GitHub还是没有解决
apt-get install qt5-default
export QT_SELECTION=path/to/qmake
后来查到另一个issue https://github.com/colmap/colmap/issues/884 说是X-Display的问题,推荐还是使用命令行模式,也可能是因为我在docker中起的GUI,可能会产生莫名其妙的问题
最后安装了nvidia-drivers
得以解
安装步骤简要介绍如下:
在docker容器中安装
sudo apt-get install ubuntu-drivers-common
sudo ubuntu-drivers autoinstall
在宿主机上
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
然后在启动docker images中加入--gpus all
参数
apt-get update && apt-get install -y \
git \
cmake \
build-essential \
vim
apt-get update && apt-get install -y \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-regex-dev \
libboost-system-dev \
libboost-test-dev \
libeigen3-dev \
libsuitesparse-dev \
libfreeimage-dev \
libgoogle-glog-dev \
libgflags-dev \
libglew-dev
apt-get update && apt-get install -y \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libcgal-qt5-dev
ceres-solver
apt-get update && apt-get install -y libatlas-base-dev libsuitesparse-dev
git clone https://gitee.com/coolke/ceres-solver.git
git checkout $(git describe --tags)
cd ceres-solver
mkdir build && cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF # 这步会卡特别长时间,要有耐心~
make -j4 && make install
ubuntu系统版本要注意⚠️ 我最开始选择的是16.04,在安装ceres-solver
过程中一直【卡死:— Detected Ceres being used as a git submodule, adding commit hook for Gerrit to: /ceres-solver/.git】,网上的问题少之又少,花了三个多小时反复安装还是一直卡死;后来将ubuntu版本更换成18.04后在这步卡了十几分钟之后成功编译。但这里也可能是幸存者偏差问题了,酌情参考
3. 编译安装colmap
git clone https://github.com/colmap/colmap.git
git checkout dev
mkdir build && cd build
cmake ..
make -j2 # 这步同样会卡特别特别特别长时间,一定要有充足的耐心和勇气!! 学长说是线程开的太多,用到swap进行处理,一点一点搬运太慢,推荐直接不要开多线程
make install
colmap help
最终运行有Colmap的Docker镜像的指令如下(吐槽下配置的参数是真的多,踩的坑是真滴真滴太多太多了)
xhost +
sudo docker run -itd \
-p 6789:22 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--ipc=host \
--privileged=true \
--gpus all \
colmap:v0 \
/bin/bash
-v -e
:让docker使用本机的显示,以运行GUI窗口--ipc=host
: 为了增加主机和容器共享内存,如果报错,可以用—shm-size 5120m \
代替--privileged=true
:在本机上开放特殊权限注:由于国内安装依赖的网速,我将教程中的安装换了源
每当这个时候就会由衷感谢Gitee