LoginSignup
7

More than 3 years have passed since last update.

Darknet Install 備忘録

Last updated at Posted at 2020-02-13

概要

YOLOモデルを評価したかったので、Darknetをインストールした。

インストール

試行錯誤の結果、最終的に下記のDarknetに行き着き、これをインストールする。
https://github.com/AlexeyAB/darknet
Darknetは上記以外に次の2つも試したが、このAlexeyABの解説がとても丁寧でよかった。Q&Aも豊富。

ちなみに、NNPACKはNinjaのインストールやコンパイルが必要で、AWSの手順も見ながらコンパイルできた。GPU+CUDAがインストールできればNNPACKは必要ない。
要は、cloneしたninjaフォルダ内のbuild.ninjaファイルへ次の2行の追加編集が必要。

cflags = -std=gnu99 -g -pthread -fPIC
cxxflags = -std=gnu++11 -g -pthread -fPIC

おいらの場合、最終的にGPUがないエッジ端末に再教育したYOLOを置くときはOPEN VINOを使うつもりなので、やはりNNPACKは不要。

コンパイル

まず、クローンする。

$ git clone https://github.com/AlexeyAB/darknet.git

home直下にdarknetのフォルダができるので、そこで作業する。
実際cloneするとdarkentのフォルダに鍵マークが付いた。
rootとhomeのユーザに権限制限はないそうだがchmod 777してもマークが取れず、気持ちが悪かったのでこれは削除(rm -r)した。
クローンではなく"Download ZIP"ボタンをポチって、解凍してできたdarknetフォルダをhome直下にコピー(cp -r)した。

make条件が書かれているMakefileを編集する。

$ cd darknet
$ sudo vim Makefile

Makefile中でEnable(=1)にするのは、GPU, CUDNN, OPENCV
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0

また、いま生きている"ARCH="をコメントアウトして、環境に合わせてその下行にあるコメントアウトされている"#ARCH="を生かす。

#GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
ARCH= -gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61

上書き保存(:wq!)してmakeする。
元々の"ARCH="でmakeしてもその後の動作に問題はなかったが、環境に合わせた"ARCH="に変更すると、make時間が短くなった気がする。

$ sudo make
Makefile:171: recipe for target 'obj/convolutional_kernels.o' failed
make: *** [obj/convolutional_kernels.o] Error 127

会社の環境だとすんなりmakeできたが、家ではエラーが出た。pjreddieのdarknetでも同じエラーが出る。
試しに、GPU, CUDNNを0にすると問題なし。

GithubでCloseしたケースがあり、下記のようにMakefileを編集するとエラーは出なくなりmakeは成功した。

#NVCC=nvcc
NVCC=/usr/local/cuda/bin/nvcc

CUDAのインストールが正しくなかったのだろうか。

確認

ここではdarknet/dataフォルダに入っていた犬のjpgファイルで動作確認を行う。
Yolov3モデルで事前に教育済みのウェイトが必要だが、AlexeyABのdarknetには入っていなかったので、pjreddieのdarknetに入っていたyolov3.weightsをdarknetフォルダ直下にコピーしておく。
そして前段でmakeした実行ファイルで犬を検出させる。

$./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
 CUDA-version: 10020 (10020), cuDNN: 7.6.5, GPU count: 1  
 OpenCV version: 3.4.8
net.optimized_memory = 0 
batch = 1, time_steps = 1, train = 0 
   layer   filters  size/strd(dil)      input                output
   0 conv     32       3 x 3/ 1    416 x 416 x   3 ->  416 x 416 x  32 0.299 BF
   1 conv     64       3 x 3/ 2    416 x 416 x  32 ->  208 x 208 x  64 1.595 BF
   2 conv     32       1 x 1/ 1    208 x 208 x  64 ->  208 x 208 x  32 0.177 BF
   3 conv     64       3 x 3/ 1    208 x 208 x  32 ->  208 x 208 x  64 1.595 BF
   4 Shortcut Layer: 1,  wt = 0, wn = 0, outputs: 208 x 208 x  64 0.003 BF
/***  中略  ***/
 104 conv    256       3 x 3/ 1     52 x  52 x 128 ->   52 x  52 x 256 1.595 BF
 105 conv    255       1 x 1/ 1     52 x  52 x 256 ->   52 x  52 x 255 0.353 BF
 106 yolo
[yolo] params: iou loss: mse (2), iou_norm: 0.75, cls_norm: 1.00, scale_x_y: 1.00
Total BFLOPS 65.879 
avg_outputs = 532444 
 Allocate additional workspace_size = 52.43 MB 
Loading weights from yolov3.weights...
 seen 64, trained: 32013 K-images (500 Kilo-batches_64) 
Done! Loaded 107 layers from weights-file 
data/dog.jpg: Predicted in 25.815000 milli-seconds.
bicycle: 99%
dog: 100%
truck: 94%

結果のjpgが表示され、predictions.jpgとしてdarknetフォルダにできていれば成功

predictions.jpg

次回はいよいよモデル再教育とリアルタイムの検出に挑戦

以上

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
7