AlexeyAB/DarknetをNvidia Jetson Nanoにインストール
前回のNvidia Jetson Nano A02に導入した際と同様の手順となります。
参考記事:AlexeyAB / darknet / YOLO3 インストール(Nvidia Jetson Nano)
導入されているCudaのバージョンが変わっており、利用するパスが異なるなど、細かな違いが生じております。(今回は、Jetpack4.3を利用)
簡単にDarknetのコンパイルが実現できるのは、NVIDIA Cudaを搭載したシングルコンピューターの最大の恩恵だと思います。
パッケージを最新の状態にアップデート
$ sudo apt update
$ sudo apt upgrade -y
Cuda関係のパスを環境変数に登録
Cudaka関連のパスは、バージョンにより異なります。
/usr/local/cuda-<version>/ となります。
$ export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}} $ export LD_LIBRARY_PATH=/usr/local/cuda-10.2/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=0 CUDNN=0 CUDNN_HALF=0 OPENCV=0 AVX=0 OPENMP=0 LIBSO=0
通常は、以下の3つを「0」から「1」へ変更し、Cuda GPUありのDarknetがコンパイルできます。
GPU=1 CUDNN=1 OPENCV=1
今回は、Pythonからlibdarknet.soを利用する予定なので、LIBSOも「0」から「1」へ変更します。
GPU=1 CUDNN=1 CUDNN_HALF=0 OPENCV=1 AVX=0 OPENMP=0 LIBSO=1
$ make
以上でDarknetが利用可能となります。
Jetson Nano A02でコンパイル時も、Make時のエラーを対処する必要がありました。ページ下部に、実施した修正内容を記載しておきます。
darknetフォルダで、以下サンプルコマンドを実行し、動作を確認してください。
$ cd darknet $ ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -ext_output dog.jpg
Make時エラーへの対処
nvcc -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] -gencode arch=compute_61,code=[sm_61,compute_61] -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN --compiler-options "-Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -fPIC" -c ./src/convolutional_kernels.cu -o obj/convolutional_kernels.o /bin/sh: 1: nvcc: not found Makefile:168: recipe for target 'obj/convolutional_kernels.o' failed make: *** [obj/convolutional_kernels.o] Error 127
NVCC=nvcc 部分を
NVCC=/usr/local/cuda/bin/nvcc
に変更