YOLOv3
YOLOとは、state-of-the-artsなリアルタイム一般物体認識。
詳細の説明は割愛。
今回は、Fedora28でYOLOv3を試そうとしたときにつまずいたポイントを紹介。
Fedora28でつまずいたポイント
darknetのビルドで、OPENCV、CUDAを有効とすると、ビルドエラーが発生。
環境は以下
- CPU AMD Ryzen 7 1700
- GPU NVIDIA GeForce GTX 1070
- OS Fedora 28
- GCC 8.1.1
- CUDA 9.1
- OpenCV 3.4.1(ソースビルド)
ビルドエラーの内容と解決した方法について解説。
解決方法は公式の手順ではないので注意。
OpenCV
MakefileのOPENCVを有効にしてビルドすると、ビルドエラーが発生。
$ make gcc -Iinclude/ -Isrc/ -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -c ./src/gemm.c -o obj/gemm.o In file included from /usr/local/include/opencv2/core/types_c.h:59, from /usr/local/include/opencv2/core/core_c.h:48, from /usr/local/include/opencv2/highgui/highgui_c.h:45, from include/darknet.h:25, from ./src/utils.h:5, from ./src/gemm.c:2: /usr/local/include/opencv2/core/cvdef.h:485:1: エラー: 不明な型名 ‘namespace’ です namespace cv { ^~~~~~~~~ -Wfatal-errors によりコンパイルを停止しました。 make: *** [Makefile:85: obj/gemm.o] エラー 1
原因は、darknetはOpenCVのC言語IFを呼び出しているが、OpenCV3系はC言語IFはサポートしなくなったためらしい。。。(ほんと?)
みんな、コンパイルできなくて困っている。。。
https://github.com/pjreddie/darknet/issues/485
https://github.com/opencv/opencv/issues/10963
解決方法
OpenCV2系をビルド・インストール以下から2.4.13.6のソースをダウンロードしていつもどおりビルド。
https://github.com/opencv/opencv/releases/tag/2.4.13.6
ビルドする際の注意
- CUDAは有効にしない
- 有効にするとビルドエラー(解決がめんどくさそう)
https://devtalk.nvidia.com/default/topic/1024621/gpu-accelerated-libraries/compiling-opencv-with-cuda-9-0/ - ffmpegのIFが変わっているため、OpenCVのソースを修正
https://stackoverflow.com/questions/46884682/error-in-building-opencv-with-ffmpeg - 既にインストール済みの3.4.1とは別のインストールディレクトリを指定。
- pkg-configで検索するパッケージファイル名をopencv2.pcなどに変更
(3.4.1のパッケージ名とかぶらないように)
あとは、darknetのMakefileでpkg-configでopencvを指定している箇所をopencv2に変更してビルドすればOK。
CUDA
CUDAのhost compilerはGCC 6以下がサポートしており、Fedora 28のGCC 8はサポートしていない。このため、CUDAを有効としてビルドするとビルドエラーが発生する。
MakefileのNVCC=nvccに-ccbinオプションでコンパイラを指定。
gccは5.5をソースビルドしたものを使用。
In file included from /usr/local/cuda/include/host_config.h:50, from /usr/local/cuda/include/cuda_runtime.h:78, from <コマンドライン>: /usr/local/cuda/include/crt/host_config.h:121:2: エラー: #error -- unsupported GNU version! gcc versions later than 6 are not supported! #error -- unsupported GNU version! gcc versions later than 6 are not supported! ^~~~~
解決方法
host compilerにGCC 6以下を指定する。MakefileのNVCC=nvccに-ccbinオプションでコンパイラを指定。
gccは5.5をソースビルドしたものを使用。
結果
darknetのサンプルファイル"data/kite.jpg"で確認
GPUありのYOLOv3で約30fps。早い!
0 件のコメント:
コメントを投稿