はじめに
動画による行動認識を行うため、精度が良さそうなTwo-stream I3Dを使いたかった。独自のデータを使う必要があったので、オプティカルフローのデータを作る必要があるのでオプティカルフローを作成する環境が必要なので、Ubuntu上に作成した。
環境
今回はGCPのVMを使いました。
- Ubuntu16.04
- OpenCV2.4.10
- CUDA8.0
- NVIDIA Tesla K80
CUDAのインストール
nvidiaの公式ホームページからCUDA8.0をダウンロードします。OS等を選択するところがあるので、以下で選択してください。
Operating System: Linux
Architecture: x86_64
Distribution: Ubuntu
Version: 16.04
Install Type: deb(network)
選択するとダウンロードボタンが出るので、ダウンロードしてください。
sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo apt update
sudo apt install cuda-8-0
PATHの設定をしなければいけないので、以下を~/.bashrcに書き込み、sourceコマンドで再読み込み。
export PATH=/usr/local/cuda-8.0/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:${LD_LIBRARY_PATH}
source ~/.bashrc
CuDNNのインストール
nvidiaのディベロッパーサイトから以下の3つをダウンロード
- cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
- cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
- cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)
以下のコマンドでインストール
sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb
OpenCVのビルド
Opencv2系を入れられるものがあったので、そちらを利用します。
git clone https://github.com/jayrambhia/Install-OpenCV.git
cd Install-OpenCV/Ubuntu/2.4
このまま./opencv2_4_10.sh
の中身を変えます。
36行目に-D WITH_CUDA=ON -DBUILD_ZLIB=ON -DWITH_ZLIB=ON
をオプション追加し、今回のGPUはTesla K80なのでCUDA_ARCH_BIN=3.7
, CUDA_ARCH_PTX=3.7
に変更。
参考
[https://developer.nvidia.com/cuda-gpus]
[https://answers.opencv.org/question/131451/errors-on-compile-ubuntu-1604/]
このままビルドしてもエラーがおきます。
nppiGraphcut missing
のようなエラーが出ると思います。CUDA8ではgraphcutがサポートしなくなったためらしいです。[https://answers.opencv.org/question/95148/cudalegacy-not-compile-nppigraphcut-missing/]
graphcuts.cppファイルを変更してください。
# include "precomp.hpp"
# if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
以下に変更。
# include "precomp.hpp"
# if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
これで./openc2_4_10.sh
でうまくビルドできると思います。
[これ][link-1]を実行する時に/usr/bin/ld
のエラーが出ると思いますが、/usr/lib/x86_64-linux-gnu
配下に/usr/local/cuda-8.0/targets/x86_64-linux/lib/
配下にあるsoファイルのシンボリックリンクを貼れば動くはずです。
終わりに
別にオプティカルフローくらい普通にopencv3とか4でやれば苦労しなかったなと
改めてバージョンを意識しないといけないと感じました(小並感)
[link-1]:https://github.com/yangwangx/denseFlow_gpu