Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What is going on with this article?
@futakuchi0117

Jetson Xavier NX で YOLOv4 による物体検出

はじめに

この記事では,Jetson Xavier NXを使ってdarknetをインストールし,YOLOv4を動作させる手続きをまとめます.

Jetson Xavier NXのセットアップについては別記事にまとめており,本記事はセットアップが完了したところから作業を始めています.

YOLOv4とは

darknetのインストール

本家にしたがってインストールします.

リポジトリをクローン.

$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet

Makefileの編集

darknetディレクトリ直下にMakefileがあるので,これを編集します.

  1. GPU, CUDNN, CUDNN_HALF, OPENCV, LIBSOの設定を1に変更
  2. ARCHの設定のうち,-gencode arch=compute_61,code=[sm_61,compute_61]をコメントアウト
  3. ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]をコメントイン

詳しく書くと以下の通りです.

GPU=0
CUDNN=0
CUDNN_HALF=0
OPENCV=0
AVX=0
OPENMP=0
LIBSO=0

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1

のように,書き換えます.また,

ARCH= -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]

ARCH= -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]

のように書き換えます.また,

# Jetson XAVIER
# ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]

# Jetson XAVIER
ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]

のように書き換えます.

コンパイル

makeでコンパイルするのですが,そのままだとCUDAへのパスが通っておらず,途中でエラーを吐いて失敗します.

CUDAその他のパスを通します.

$ export DARKNET_HOME=/home/_name_/darknet/
$ export CUDA_HOME=/usr/local/
$ export PATH=${DARKNET_HOME}:${CUDA_HOME}bin:${PATH}
$ export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
$ source ~/.bashrc

パスが通っているか確認

$ nvcc -V

以下のように出力されれば成功です.

output
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_21:14:42_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

コンパイル

$ make

画像に対する物体検出

YOLOv4の重みファイルをダウンロード

$ wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights

最初に,darknetのリポジトリにデフォルトで含まれている画像に対して物体検出コードを実行します.

$ ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

処理が完了すると,~/darknet配下にpredictions.jpgが生成されます.

predictions.jpg

動画に対する物体検出

適当な動画(5~10秒程度を推奨)をダウンロードし,~/darknet直下に置きます.(以下ではvideo.mp4という名前にしています)

動画を対象として物体検出を実行し,検出後の動画をout.mp4として保存します.

$ ./darknet detector demo ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights video.mp4 -i 0 -thresh 0.25 -dont_show -out_filename out.mp4

FPSは11.0~12.0程度でした.Jetson nanoでは1~2FPS程度でしたので,かなり速くなりましたね.

最後に

Webカメラを用いたリアルタイム物体検出を試みたのですが,動作するものの1~2FPSになってしまい,満足な速度が得られていません.

また,Raspberry Pi Camera Module V2から画像を取り込んで物体検出も試みましたが,yolov4にうまく画像が渡せない問題を抱えています.

方法をご存じの方がおられましたら,ご教示ください.

免責

本記事の内容は個人的な主張であり,著者の属する企業・集団の公式見解ではありません.

掲載しているコードは著者のメモ程度で,動作を保証するものではありません.

12
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
12
Help us understand the problem. What is going on with this article?