Edited at

Docker(Ubuntu18.04+CUDA10.1+cudnn7)でOpenCV4.1.1インストールするメモ


概要


  1. NVIDIA Driverのインストール

  2. dockerのインストール

  3. nvidia-dockerのインストール

  4. docker image(nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04)のpull

  5. docker runしてOpenCV4.1.1のインストール

  6. docker imageにcommit


前提



  • Ubuntu16.04へのOpenCV 3.3.0インストールメモから1年以上経ってOpenCVのメジャーバージョンも上がったので。

  • 作業したノートパソコンでは、「Intel® HD Graphics」で画面表示しないと、ログインループが発生したので表示は「Intel® HD Graphics」、計算等にNVIDIA GPUを使うことにしました。

  • コピペで動くようにコマンドはそのまま貼りつけています。


    • historyから抽出して貼り付けているので、間違っているかも...



  • 不要なパッケージも入るけれどとりあえず動けばOK。

  • nvidia-dockerでnvidia/cudaレポジトリのimageにOpenCVをインストールします。


環境


  • 環境は下表の通り。

Name
Version

OS(host)
Ubuntu
18.04.3 LTS (Bionic Beaver)

CPU
Intel® Core™
i5-8300H CPU @ 2.30GHz × 8

kernel
Linux
5.0.0-23-generic

GPU
NVIDIA GeForce
GTX 1050


前準備


NVIDIA Driverのインストール


runファイルのダウンロード


install

sudo apt update

sudo apt install build-essential
sudo bash NVIDIA-Linux-x86_64-430.40.run --no-opengl-files
sudo prime-select intel


Dockerのインストール


packageのダウンロード

sudo apt install wget

wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.2.6-3_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce-cli_19.03.1~3-0~ubuntu-bionic_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_19.03.1~3-0~ubuntu-bionic_amd64.deb


install


  • ダウンロードしたパッケージを以下のコマンドでインストール

sudo dpkg -i containerd.io_1.2.6-3_amd64.deb 

sudo dpkg -i docker-ce-cli_19.03.1~3-0~ubuntu-bionic_amd64.deb
sudo dpkg -i docker-ce_19.03.1~3-0~ubuntu-bionic_amd64.deb


確認

sudo docker --version


  • 以下のようにダウンロードしたバージョンが表示されればインストール完了


出力

Docker version 19.03.1, build 74b1e89



インストール後の設定


ユーザーをdockerグループへ追加

sudo usermod -aG docker $USER


一度ログアウト

gnome-session-quit --logout --no-prompt


確認


  • ログイン後、sudo無しでdockerを利用できるか確認する。

docker --version


nvidia-dockerのインストール


install

sudo apt install curl

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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 update
sudo apt-get install -y nvidia-container-toolkit


確認とpull

docker run --gpus 1 nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 nvidia-smi


OpenCVのインストール


  • Docker imageはnvidia/cuda:10.1-cudnn7-devel-ubuntu18.04を使用

  • ソースコードのダウンロードは省略

  • ソースコードはホスト側に保存


    • OpenCVの保存先/data/opencv-4.1.1

    • contribの保存先/data/opencv-4.1.1/opencv_contrib-4.1.1




ヘッダの修正



  • /data/opencv-4.1.1/modules/core/include/opencv2/core/private.hppの66行目


    • 修正前# include <Eigen/Core>

    • 修正後# include <eigen3/Eigen/Core>




containerの起動


  • GUIを使えるようにオプションを指定

docker run --gpus 1 -it --rm --name opencv -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -v /data/:/data nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04


(container内)依存パッケージ等のinstall


  • Ubuntu 16.04のときとの変更点は以下


    • libjasperがなくなった。

    • pythonのバージョンアップ



apt install cmake libeigen3-dev libgtk-3-dev qt5-default freeglut3-dev \

libvtk6-qt-dev libtbb-dev ffmpeg libdc1394-22-dev libavcodec-dev libavformat-dev \
libswscale-dev libjpeg-dev libpng++-dev libtiff5-dev \
libopenexr-dev libwebp-dev libhdf5-dev libpython3.6-dev python3-numpy \
python3-scipy python3-matplotlib libopenblas-dev liblapacke-dev


(container内)CMakeの実行

mkdir /data/opencv-4.1.1/build && cd /data/opencv-4.1.1/build

cmake -G "Unix Makefiles" --build . -D BUILD_CUDA_STUBS=OFF -D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=ON -D BUILD_JASPER=OFF -D BUILD_JPEG=OFF -D BUILD_OPENEXR=OFF \
-D BUILD_PACKAGE=ON -D BUILD_PERF_TESTS=OFF -D BUILD_PNG=OFF -D BUILD_SHARED_LIBS=ON \
-D BUILD_TBB=OFF -D BUILD_TESTS=OFF -D BUILD_TIFF=OFF -D BUILD_WITH_DEBUG_INFO=ON \
-D BUILD_ZLIB=OFF -D BUILD_WEBP=OFF -D BUILD_opencv_apps=ON -D BUILD_opencv_calib3d=ON \
-D BUILD_opencv_core=ON -D BUILD_opencv_cudaarithm=ON -D BUILD_opencv_cudabgsegm=ON \
-D BUILD_opencv_cudacodec=ON -D BUILD_opencv_cudafeatures2d=ON \
-D BUILD_opencv_cudafilters=ON -D BUILD_opencv_cudaimgproc=ON -D BUILD_opencv_cudalegacy=ON \
-D BUILD_opencv_cudaobjdetect=ON -D BUILD_opencv_cudaoptflow=ON \
-D BUILD_opencv_cudastereo=ON -D BUILD_opencv_cudawarping=ON -D BUILD_opencv_cudev=ON \
-D BUILD_opencv_features2d=ON -D BUILD_opencv_flann=ON -D BUILD_opencv_highgui=ON \
-D BUILD_opencv_imgcodecs=ON -D BUILD_opencv_imgproc=ON -D BUILD_opencv_java=OFF \
-D BUILD_opencv_ml=ON -D BUILD_opencv_objdetect=ON -D BUILD_opencv_photo=ON \
-D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D BUILD_opencv_shape=ON \
-D BUILD_opencv_stitching=ON -D BUILD_opencv_superres=ON -D BUILD_opencv_ts=ON \
-D BUILD_opencv_video=ON -D BUILD_opencv_videoio=ON -D BUILD_opencv_videostab=ON \
-D BUILD_opencv_viz=OFF -D BUILD_opencv_world=OFF -D CMAKE_BUILD_TYPE=RELEASE \
-D WITH_1394=ON -D WITH_CUBLAS=ON -D WITH_CUDA=ON -D WITH_CUFFT=OFF -D WITH_EIGEN=ON \
-D WITH_FFMPEG=ON -D WITH_GDAL=OFF -D WITH_GPHOTO2=OFF -D WITH_GIGEAPI=OFF \
-D WITH_GSTREAMER=OFF -D WITH_GTK=ON -D WITH_INTELPERC=OFF -D WITH_IPP=ON -D WITH_IPP_A=OFF \
-D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LIBV4L=ON -D WITH_OPENCL=ON \
-D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF \
-D WITH_OPENEXR=ON -D WITH_OPENGL=ON -D WITH_OPENMP=OFF -D WITH_OPENNI=OFF -D WITH_PNG=ON \
-D WITH_PTHREADS_PF=OFF -D WITH_PVAPI=OFF -D WITH_QT=ON -D WITH_TBB=ON -D WITH_TIFF=ON \
-D WITH_UNICAP=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF \
-D WITH_XINE=OFF -D WITH_LAPACKE=ON -D WITH_MATLAB=OFF \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.1.1/modules/ ..


(container内)build

make -j4

sudo make install


(container内)確認

python3 -c 'import cv2;print(cv2.__version__)'


  • 以下のように表示されれば完了


出力

4.1.1



commit


  • デタッチしてcommit

docker commit opencv test/opencv:4.1.1-ubuntu1804


commitの確認



  • docker imagesで確認する。


出力

REPOSITORY          TAG                             IMAGE ID            CREATED             SIZE

nvidia/cuda 10.1-cudnn7-devel-ubuntu18.04 1dc5cbc98312 4 weeks ago 3.6GB
test/opencv 4.1.1-ubuntu1804 ************ * *GB