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

当社にもNVIDIA Jetson AGX Xavier※がやって来ました!
Nanoと比較して、どれくらいの性能をマーク出来るのか。早速、試してみましょう。
※Xavier:エグゼビアとか、ザビエルとか呼ばれていますね。例の宣教師みたいでちょっと面白いので、私はザビエルと呼んでいます。
Jetson AGX Xavierとは?
Jetson AGX Xavier開発者キット
NVIDIAがリリースしているディープラーニングコンピュータで、10W-30Wという省電力で動作し、最大で 32 TOPSの演算性能を持つ。
従来のTX2と比較して20倍の性能と、10倍のエネルギー効率と謳われています。

金属のしっかりとした筐体と、最新の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に接続します。

DeveloperサイトからSDKManagerをダウンロード、インストール
今回、JetPack4.2.1を入れます。
https://developer.nvidia.com/user

SDKManagerの起動

セットアップ内容の選択
参考:https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html
ホストコンピュータへのインストール内容選択

CUDA

OpenCV

DeveloperTool

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

Jetson SDK Components
※ホストPCにすでにOpenCVが入っている場合に、アップデートが失敗する可能性があります。
Jetson OSのインストール
OSイメージのダウンロード

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


SDKのインストール



Jetson AGX Xavierの起動とセットアップ
ここで一度Jetson AGX XavierをHDMIディスプレイとキーボード、マウスに接続して、Ubuntuのインストールを完了させる。
- USB Hubでキーボード、マウスを接続
- USB3端子にUSBカメラを接続(ACアダプターの上のUSB3)
- 同梱のUSB変換ケーブルを使用
- イーサネットの接続
- HDMIでディスプレイと接続
日本語入力設定
$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にダウンロードしておきます。
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パフォーマンス
上記の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カメラを使って"ほぼリアルタイム"の物体検出処理が出来る性能となった
▼この記事を書いたひと

R&Dセンター 松井 良行
R&Dセンター 室長。コンピュータと共に35年。そしてこれからも!
おすすめの関連記事
- 【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす
- 【物体検出】vol.1 :Windowsでディープラーニング!Darknet YOLOv3(AlexeyAB Darknet)
- 【物体検出】vol.3 :YOLOv3の独自モデル学習の勘所
- 【物体検出】vol.4 :YOLOv3をWindows⇔Linuxで相互運用する
機械学習・AIの最新記事
- 【エッジAI】Raspi5+SONY IMX500で30FPS枕木検出チャレンジ!~鉄道技術展2025デモ編 vol.25
- 【エッジAI】Raspi+SONY IMX500で30FPS物体検出チャレンジ!~オリジナルモデル、静止画・ログ保存編 vol.24
- 【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャレンジ!~環境整備編 vol.23
- 【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャレンジ!~検出実行編 vol.22