3
5

More than 3 years have passed since last update.

CUDAありのOpenCVをbuildしたった(Ubuntu18.04)

Last updated at Posted at 2020-12-01

Background

OpenCV Advent Calendar 2020で何か書こうと思って、最新のOpenCVのversionである4.5をbuildしたのですが思いの外にエラーが出て半日かかってしまいました。:scream:
どうやったらbuildできたか、または失敗したかを書いていきます。

Points

結局のところ、

  1. cuda系のドライバー・ライブラリを削除、再インストールする
  2. OpenCV のソースコードはgithubでcloneするのではなく、圧縮ファイルを使った方が良い git cloneでも問題なくbuild出来た。時々commitされているコードが他のパッケージに影響を受けてerrorになっている場合があるっぽい(2020/12/7)
  3. Ubuntu18.04を使っていたためか、gccのversionは6系にセットする

でbuildが成功しました。

cuda系のドライバー・ライブラリを削除、再インストールする

まず、既にインストールされているパッケージ・ライブラリを削除する。
(UbuntuにNvidia GPUのDriver + CUDAをInstallする(GTX1080対応版)をみたった。)

sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*

CUDA Toolkit 11.1 Update 1 Downloadsから最新版をダウンロードしてインストールします。
runfile自体3GBととても重いです。リポジトリをインストールしてその後でaptを使ってインストールする方法があるのですが、正常に安定的に作動させるにはこちらが確実かもしれません。

wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
sudo sh cuda_11.1.1_455.32.00_linux.run

#完了後にサーバを再起動
sudo reboot

で、下記のコマンドでversionが表示できるか確認。

#nvidia driver
nvidia-smi
#cuda
nvcc -V

次にDeep Learning用のライブラリであるcuDNNをインストールします。
nvidia公式からパッケージをダウンロードするのですが事前にサインインする必要があります。ダウンロード後はdpkgを使ってインストールします。

sudo dpkg -i libcudnn8_8.0.5.39-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.1_amd64.deb
sudo dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.1_amd64.deb

OpenCV のソースコードはgithubでcloneするのではなく、圧縮ファイルを使った方が良い git clone, 圧縮ファイルのどちらを使っても結局は良さそう (2020/12/7)

OpenCV Installation in Linuxや他の開発者のページを見るとgithubでcloneしてソースファイルをダウンロードしています。

git clone https://github.com/opencv/opencv.git
cd opencv
#最新版にチェックアウト
git checkout -b 4.5.0
cd ../
git clone https://github.com/opencv/opencv_contrib.git
#最新版にチェックアウト
cd opencv_contrib
git checkout -b 4.5.0

使っているマシンの相性が悪いためかその後buildするとエラーが出てしまって失敗します。
おそらく、世界中の開発者がリアルタイムでコミットしてて、他のパッケージに影響が出ているから、と思ってたりします。
なので、https://github.com/opencv/opencv/releases、https://github.com/opencv/opencv_contrib/releases から圧縮ファイルをダウンロードして解凍した方が確実だと思います。

再度、git clone にてbranchがmasterであるのと4.5.0の両方buildしてみたのですが、どちらとも正常にbuild出来ました。しかし、ときどきコミットがミスっている可能性がありそうなのでgit cloneでbuild errorが出る場合は、圧縮ファイルを使った方が良さそう。
(2020/12/7)

wget https://github.com/opencv/opencv/archive/4.5.0.tar.gz
tar -zxvf 4.5.0.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/4.5.0.tar.gz
tar -zxvf 4.5.0.tar.gz

Ubuntu18.04を使っていたためか、gccのversionは6系にセットする

 ./
 ├ build/
 ├ opencv-4.5.0/
 ├ opencv_contrib-4.5.0/

とフォルダの構成にします。

それで、 cd build で移動してcmakeコマンドを打つのですが、もしエラーが続く場合は先頭にCC=gcc-6 CXX=g++-6を付けてgccのバージョンをセットすると良いです。あとは、-D CMAKE_CXX_FLAGS="-std=c++17" でc++のバージョンを変えてみたらいいかな。

CC=gcc-6 CXX=g++-6 cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_CXX_FLAGS="-std=c++17" \
 -D CMAKE_INSTALL_PREFIX=/usr/local/lib/opencv4.5 \
 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.0/modules \
 -D INSTALL_C_EXAMPLES=ON \
 -D INSTALL_TESTS=ON \
 -D WITH_MKL=OFF \
 -D WITH_CUDA=ON \
 -D CUDA_FAST_MATH=ON \
 -D WITH_CUDNN=ON \
 -D ENABLE_FAST_MATH=ON \
 -D CUDA_ARCH_BIN=5.2 \
 -D CUDA_ARCH_PTX=5.2 \
 -D BUILD_EXAMPLES=ON \
 -D WITH_TBB=ON \
 -D BUILD_TBB=ON \
 -D WITH_V4L=ON \
 -D WITH_QT=ON \
 -D WITH_GTK=ON \
 -D CVV_DEBUG_MODE=ON \
 -D WITH_OPENCL=ON \
 -D WITH_OPENGL=ON \
 -D OPENCV_SKIP_DLLMAIN_GENERATION=ON \
 -D BUILD_opencv_python2=OFF \
 -D BUILD_opencv_python3=ON \
 -D INSTALL_PYTHON_EXAMPLES=ON \
 -D WITH_PYTHON=ON \
 -D PYTHON_DEFAULT_EXECUTABLE=python3 \
 -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/kai_walker/.local/lib/python3.6/site-packages/numpy/core/include \
 ../opencv-4.5.0

あとは、

sudo make install
ldconfig

で完了。

作成したlibファイルは -D CMAKE_INSTALL_PREFIX=/usr/local/lib/opencv4.5 で指定したフォルダに保管されます。

PostScripts

build時のオプションは何使えばいいかよくわからんすね。 CUDAの場合は WITH_CUDA=ON 以外何設定すればいいかです。まとまったページがあればいいんだけど、現状では CMakeLists.txt のMakeファイル見るしかないか。

Reference

3
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5