YOLO v3, YOLO v3 tinyなどの動作環境
OpenCVのdnnモジュールやTensorFlow-Kerasを用いた方法などで、YOLO v3やTiny YOLO v3を動作させていました。
NVIDIA Jetson Nanoでは、NVIDIAのGPUエンジンが使えるということもあり、AlexeyAB / darknetをインストールが可能です。
(Raspberry Piにおいては、NCS2を導入し、OpenVINOで動作可能なフレームワークでYOLOを動作させる環境がおすすめです。 Movidius Neural Compute Stick 2、OpenVINO™ toolkit for Raspbian OS導入)
Jetson Nanoへ libdarknet.so 導入
以前に紹介した、NVIDIA Jetson Nanoへの AlexeyAB / darknet / YOLO3 インストール(Nvidia Jetson Nano)と同様の方法でAlexeyAB Darknetの導入を行います。
手順の異なりは、Makefileの内容となり、「LIBSO」のフラグを1に設定します。「LIBSO=1」
ライブラリーアップデート
- apt update
- apt upgrade -y
Cuda関係のパスを環境変数に登録
- export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
- export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
DarknetのダウンロードとYoloモデルのダウンロード
- git clone https://github.com/AlexeyAB/darknet
- cd darknet
- wget https://pjreddie.com/media/files/yolov3.weights
- wget https://pjreddie.com/media/files/yolov3-tiny.weights
MakeFileを変更しGPU、OPENCV対応へ
Makefileを変更し、GPU、CudaとOpencv対応となるようにコンパイルオプションを変更します。.
- sudo vi Makefile
MakeFile変更内容
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0
Darknetをコンパイル
- make
Pythonからlibdarknet.so利用方法
「darknet」インストールフォルダーの直下にある、「darknet.py」がサンプルスクリプトとなります。Python3にも完全に対応されているので、そのまま利用可能です。
サンプルスクリプト内で、「from ctypes import *」「lib = CDLL("darknet/libdarknet.so", RTLD_GLOBAL)」で、libdarknet.soをロードし、利用可能となります。
画像検出結果を画像表示する部分で、「from skimage import io, draw」を利用する部分があり、動作確認を行うJetsonには未導入でしたので、別途導入を行いました。
Installing collected packages: networkx, imageio, PyWavelets, scikit-image Successfully installed PyWavelets-1.0.3 imageio-2.6.1 networkx-2.3 scikit-image-0.15.0
import darknet.pyとサンプルファイルをそのままロードしてしまい、
darknet.performDetect(imagePath=, thresh= , configPath = , weightPath = , metaPath= , showImage= , makeImageOnly = , initOnly= ):
で画像検出を実施すれば良いと思います。
OpenCVを利用する際のBGRとRGB画像形式の利用方法もdarknet.pyのサンプルファイル内に記載されております。