Opencv 3.4.0のインストール(darknetでエラーの出まくっている方へ)
研究室で自分が使っているマシンで、darknetによるリアルタイム推論をしようとしたら全く動かなかった。
普通の推論(画像中の特徴にバウンディングボックスを設置する)だと、動いてくれる。
PCのスペック等
- CPU ... Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
- RAM ... 32GB
- GPU ... GTX1080ti
OS ... Ubuntu 16.04 LTS
OpenCV ... version 3.4.1
- CUDA ... 8.0
コレと言って変なところはなく、公式がサポートしてると謳っていたバージョンをすべて入れているはずだった。
ちなみに、使用しているレポジトリは公式ではなく、AlexeyAB氏の開発している方のdarknet。
これで、darknetを使用すると
- 画像認識
./darknet detector test path/todata.data path/to_DLcfg.cfg yolov3-tiny.conv.15 path/want_to_detect_picture.jpg
出力例
- リアルタイム認識
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
出力 https://github.com/AlexeyAB/darknet/issues/932
Couldn't connect to webcam. : Invalid argument darknet: ./src/utils.c:193: error: Assertion `0' failed.
こんなのが出て落ちる。
色々と試してみたがうまく行かずにいると。フォーラムで、「最近新しいバージョンにしたからpullヨロ」のような文字が発見できたので git pull で最新バージョンにした。
新たにバージョンアップしたのでまた一からmakeをしようとした。
$ git pull $ make
ここまで来たところでエラーが出た。
In file included from /usr/local/include/opencv2/core/types_c.h:59:0, from /usr/local/include/opencv2/core/core_c.h:48, from /usr/local/include/opencv2/highgui/highgui_c.h:45, from ./src/image.c:14: /usr/local/include/opencv2/core/cvdef.h:485:1: error: unknown type name ‘namespace’ namespace cv { ^ compilation terminated due to -Wfatal-errors. gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/blas.c -o obj/blas.o Makefile:130: recipe for target 'obj/image.o' failed make: *** [obj/image.o] Error 1 make: *** Waiting for unfinished jobs....
エラーメッセージから読み取れるに、opencvのエラーっぽい。
opencvで何か必要なのかとissueを漁っていたらこのような投稿を発見。
Can't compile with opnecv=1 · Issue #932 · AlexeyAB/darknet · GitHub
作成者本人曰く。
「今回のバージョンアップでなぜか知らんけど OpenCVの3.4.1だと動かなくなっちゃった。もし3.4.1入れてるんだったら、それ以前のモノ入れてね、というかREADMEにも書いてあるよ。」
This repository supports:
both Windows and Linux both OpenCV 2.x.x and OpenCV <= 3.4.0 (3.4.1 and higher isn't supported) both cuDNN v5-v7 CUDA >= 7.5 also create SO-library on Linux and DLL-library on Windows
らしい。最近更新された時に追加されたようで、昔の情報で全てを完結させていたのでコレに気づかなかった。
というわけで深夜1時ごろからOpenCV3.4.0のインストールを開始した。
公式を見ればわかるが、個人的にやったことを書いていく。
pkg-config --modversion opencv
3.4.1
$ cd ~/ $ mkdir src $ cd src
インストールに使用するフォルダを作成
$ wget https://github.com/opencv/opencv/archive/3.4.0.tar.gz $ tar xvzf 3.4.0.tar.gz $ ln -s opencv-3.4.0 opencv $ wget https://github.com/opencv/opencv_contrib/archive/3.4.0.tar.gz $ mv 3.4.0.tar.gz.1 opencv_contrib-3.4.0.tar.gz $ tar xvzf opencv_contrib-3.4.0.tar.gz $ ln -s opencv_contrib-3.4.0 opencv_contrib
OpenCV 3.4.0のファイルとcontribパッケージをダウンロードして、リンクをしておく。
$ cd ~/src/opencv $ mkdir build $ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. $ make -j8 $ make install
makeなどをしてインストール、ちなみにmakeにはめちゃくちゃ時間がかかるので心して待ちましょう。
インストールが終わって、pkg-config --modversion opencv
を打ち、3.4.0
が出力されればインストールは成功。
これでdarknetをmakeして動かすと。
ヤッターdarknetウゴイタヨー pic.twitter.com/yrJG4qm9ed
— 飛ばすはとバス@金曜日西も11a (@flying_hato_bus) July 4, 2018
こうなれば全てが終わり、お疲れ様でした。