機械学習・AI【物体検出】vol.9 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす

【物体検出】vol.9 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす

当社にもNVIDIA Jetson AGX Xavier※がやって来ました!

Nanoと比較して、どれくらいの性能をマーク出来るのか。早速、試してみましょう。

※Xavier:エグゼビアとか、ザビエルとか呼ばれていますね。例の宣教師みたいでちょっと面白いので、私はザビエルと呼んでいます。

 

Jetson AGX Xavierとは?

Jetson AGX Xavier
Jetson AGX Xavier開発者キット

NVIDIA JETSON AGX Xavier

NVIDIAがリリースしているディープラーニングコンピュータで、10W-30Wという省電力で動作し、最大で 32 TOPSの演算性能を持つ。
従来のTX2と比較して20倍の性能と、10倍のエネルギー効率と謳われています。

Xavier_Top.jpg

金属のしっかりとした筐体と、最新のUSB3インタフェースを2つ、USB2端子が1つ、HDMI、GPIO、イーサネット、電源スイッチ、リセットスイッチ、microSDカード用のスロットなどの豊富なインタフェースが付いています。OSは eMMCの32GBメモリからUbuntu18が起動するようになっています。

日本国内では、スイッチサイエンス(マクニカ)で開発者キットの取り扱いを行っており。2018/08現在では、8万円程度で入手できるようになっています。

 

夢の詰まったパッケージ
未来への希望が詰まったパッケージ

 

Linuxマシンでの事前準備

母艦PCとXavierをUSB3⇔USB2で接続

母艦LinuxマシンはUbuntu 16です。

同梱のUSBケーブルを使います。
Xavier側はGPIO端子の面のUSB3に接続します。

Xavier_Front.jpg

DeveloperサイトからSDKManagerをダウンロード、インストール

今回、JetPack4.2.1を入れます。

https://developer.nvidia.com/user

SDKManagerのインストール

SDKManagerの起動

SDKManagerの起動

セットアップ内容の選択

参考:https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html

ホストコンピュータへのインストール内容選択

セットアップ内容の選択1

CUDA

セットアップ内容の選択2

OpenCV

セットアップ内容の選択3

DeveloperTool

セットアップ内容の選択4

Jetson AGX Xavierへのインストール内容選択

Jetson OS

セットアップ内容の選択5

Jetson SDK Components

セットアップ内容の選択6

※ホストPCにすでにOpenCVが入っている場合に、アップデートが失敗する可能性があります。

Jetson OSのインストール

OSイメージのダウンロード

Jetson OSのインストール1

電源、リセット付近の3つのスイッチの真ん中を押しながら、一番右のボタンを押してForce Recovery Modeというのにします。

Jetson OSのインストール2
Jetson OSのインストール3

SDKのインストール

Jetson OSのインストール4
Jetson OSのインストール5
Jetson OSのインストール6


Jetson AGX Xavierの起動とセットアップ

ここで一度Jetson AGX XavierをHDMIディスプレイとキーボード、マウスに接続して、Ubuntuのインストールを完了させる。

  • USB Hubでキーボード、マウスを接続
  • USB3端子にUSBカメラを接続(ACアダプターの上のUSB3)
  • 同梱のUSB変換ケーブルを使用
  • イーサネットの接続
  • HDMIでディスプレイと接続

Xavier_Back

日本語入力設定

$sudo apt-get install aptitude
$sudo aptitude reinstall dbus <--これが重要
$sudo apt autoremove

$ sudo apt install language-pack-ja-base language-pack-ja
$ sudo apt install ibus-mozc

reboot後に入力モードを変更→日本語(Mozc)(IBus)

 

動作モードの変更と環境の確認

参考:Jetson Xavier: Jetpack4.1.1インストール後の作業

$ sudo nvpmodel -m 0
$ sudo /usr/bin/jetson_clocks
$ sudo /usr/bin/jetson_clocks --show
SOC family:tegra194 Machine:Jetson-AGX
Online CPUs: 0-7
CPU Cluster Switching: Disabled
cpu0: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu1: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu2: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu3: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu4: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu5: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu6: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
cpu7: Online=1 Governor=schedutil MinFreq=2265600 MaxFreq=2265600 CurrentFreq=2265600 IdleStates: C1=0 c6=0
GPU MinFreq=1377000000 MaxFreq=1377000000 CurrentFreq=1377000000
EMC MinFreq=204000000 MaxFreq=2133000000 CurrentFreq=2133000000 FreqOverride=1
Fan: speed=255
NV Power Mode: MAXN

$ sudo nvpmodel -q
NV Fan Mode:quiet
NV Power Mode: MAXN
0

参考:環境の確認
$ nvprof --version
nvprof: NVIDIA (R) Cuda command line profiler
Copyright (c) 2012 - 2018 NVIDIA Corporation
Release version 10.0.326 (21)

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Mon_Mar_11_22:13:24_CDT_2019
Cuda compilation tools, release 10.0, V10.0.326

Darknetのインストール

ダウンロード

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

モデルのダウンロード

Pre-Trained Modelを~/darknetにダウンロードしておきます。

YOLOv3
YOLOv3 SPP
YOLOv3 Tiny

Makefileの修正

GPU=1 <--ココ
CUDNN=1 <--ココ
CUDNN_HALF=1 <--ココ
OPENCV=1 <--ココ
AVX=0
OPENMP=0
LIBSO=1 <--ココ
ZED_CAMERA=0

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] <--ココ

# For Jetson Tx2 or Drive-PX2 uncomment:
ARCH= -gencode arch=compute_62,code=[sm_62,compute_62] <--ココ

いざ!make

makeを実行します。

$ make -j8

あっという間にmakeが完了します。

$ ./darknetとコマンドを打って、
usage: darknet
のような応答が帰ってくればmakeが出来ています。

YOLOv3の動作確認

USBカメラによるリアルタイム物体検出

Jetson Nanoの時にもやったように、USBカメラを使って、YOLOv3モデルでリアルタイム物体検出をしてみます。

※今回はTinyモデルではなく、思い切ってSPPモデルです。

下記のコマンドを打ちます

$ ./darknet detector demo cfg/coco.data cfg/yolov3-spp.cfg yolov3-spp.weights -c 0

YOLOv3-SPP+USBカメラ

 

動作モードと温度とYOLOv3パフォーマンス

上記のUSBカメラとYOLOv3 SPPモデルで、リアルタイム物体検出をします。
動作モードを切り替えながら、内部の温度を確認します。

参考:http://wazalabo.com/jetson_agx_xavier_thermometry.html

測定するモードは、mode 2, 3、0 の3つのモードです。
mode 名称 内容
mode 1 MODE 10W 省電力モード。2コアのみ使用し、最も消費電力が少ない。
mode 2 MODE 15W 初回起動時のモード。4コアを使用。
mode 3 MODE 30W ALL 消費電力 30W のモード (※) のうち、8コア全てを使用。
mode 0 MAX N 最大動作のモード。8コア全てを使用。

様々なモードに変更して温度変化とFPSを見てみる

温度の変化

実行モードと温度変化

 

YOLO未実行
$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
38000
              ↓
$ sudo nvpmodel -m 2
$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
41000
FPS:5-7
              ↓
$ sudo nvpmodel -m 3
$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
42500
FPS:7-8.5
              ↓
$ sudo nvpmodel -m 0
$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
54500
FPS:10-12

 

cfgによる違い、Nanoとの比較

・YOLO v3-sppモデルでwidth=416,height=416の場合

Xavier:19FPS
Nano:2FPS

・YOLO v3-sppモデルでwidth=608,height=608の場合

Xavier:11FPS
Nano:1FPS

 

Xavierでは30WのMAXモードで、YOLOv3のSPPモデルを10-12FPS(Width,Height=608時)、19-22FPS(Width,Height=416時)で処理できる。
USBカメラを使って"ほぼリアルタイム"の物体検出処理が出来る性能となった

 

▼この記事を書いたひと

001@2x.png

R&Dセンター 松井 良行

R&Dセンター 室長。コンピュータと共に35年。そしてこれからも!

 

おすすめの関連記事


機械学習・AIの最新記事


お問い合わせ

ご意見・ご質問などお気軽にお問い合わせ下さい。
ナカシャクリエイテブ株式会社

●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711  地図
交通部 R&Dセンター

Email:メールでのお問い合わせ