Jetson TX2でTensorRTを用いたYOLOv3を試してみた

JetPack 4.2をインストールしたJetson TX2に、TensorRTを用いたYOLOの推論専用の実装であるtrt-yolo-appをインストールして、YOLOv3とTiny YOLOv3を試してみました。

スポンサーリンク

trt-yolo-app

trt-yolo-appは、deepstream_reference_apps(https://github.com/NVIDIA-AI-IOT/deepstream_reference_apps)リポジトリに含まれるTensorRTを用いたYOLOの推論専用の実装です。
なお、リポジトリの名前がdeepstream…となっていますが、trt-yolo-appは、DeepStream SDKを必要としません。

予め~/githubディレクトリを作成しておき、リポジトリをクローンするために、以下のコマンドを実行します。

$ cd ~/github
$ git clone https://github.com/NVIDIA-AI-IOT/deepstream_reference_apps

依存パッケージのインストールと、YOLOv2、Tiny YOLOv2、YOLOv3及びTiny YOLOv3のweightsとcfgファイルをダウンロードするために、以下のコマンドを実行します。
なお、YOLOv2とTiny YOLOv2を使用しない場合、prebuild.shの該当箇所をコメントアウトしておきます。

$ cd ~/github/deepstream_reference_apps/yolo
$ ./prebuild.sh

trt-yolo-appをコンパイルするために、以下のコマンドを実行します。

$ cd ~/github/deepstream_reference_apps/yolo/apps/trt-yolo
$ mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=Release ..
$ make

YOLOv3 & Tiny YOLOv3

YOLOv3とTiny YOLOv3は、以下の記事で紹介した物体検出用のネットワークです。

Jetson TX2にDarknetをインストールしてYOLOv3を試してみた
Jetson TX2に深層学習フレームワークDarknetをインストールして、YOLOv3とTiny YOLOv3を試してみました。

ここ(http://cocodataset.org/#explore?id=533917)からダウンロードした画像を~/github/deepstream_reference_apps/yolo/dataディレクトリにコピーし、533917.jpgにリネームしておきます。

次に、533917.jpgの物体検出を行うために、~/github/deepstream_reference_apps/yolo/dataディレクトリのtest_images.txtを開き、内容を以下のように書き換えます。
なお、<username>の部分は、環境に合わせて変更します。

/home/<username>/github/deepstream_reference_apps/yolo/data/533917.jpg

YOLOv3

物体検出結果を画像として保存するために、以下のコマンドを実行してyolov3-save.txtを作成します。

$ cd ~/github/deepstream_reference_apps/yolo/config
$ cp yolov3.txt yolov3-save.txt

yolov3-save.txtの以下の部分を

#--save_detections=true
#--save_detections_path=data/detections/

アンコメントし、--prob_thresh=0.24を追加して保存します。

--save_detections=true
--save_detections_path=data/detections/
--prob_thresh=0.24

また、YOLOv3モデルを入力サイズが416×416のYOLOv3-416に対応させるため、~/github/deepstream_reference_apps/yolo/dataディレクトリのyolov3.cfgファイルの以下の部分を

width=608
height=608

次のように変更して保存します。

width=416
height=416

YOLOv3モデル(YOLOv3-416)で物体検出するために、以下のコマンドを実行すると、~/github/deepstream_reference_apps/yolo/data/detectionsディレクトリに物体検出結果の画像が保存されます。

$ cd ~/github/deepstream_reference_apps/yolo
$ ./apps/trt-yolo/build/trt-yolo-app --flagfile=config/yolov3-save.txt

物体検出の結果として、以下の画像が得られました。

trt-yolo-app_yolov3-416

trt-yolo-appにおけるYOLOv3 (YOLOv3-416)の物体検出結果

Tiny YOLOv3

yolov3-save.txtの作成と同様に、yolov3-tiny.txtをベースにyolov3-tiny-save.txtを作成します。

Tiny YOLOv3モデルで物体検出するために、以下のコマンドを実行します。

$ cd ~/github/deepstream_reference_apps/yolo
$ ./apps/trt-yolo/build/trt-yolo-app --flagfile=config/yolov3-tiny-save.txt

物体検出の結果として、以下の画像が得られました。

trt-yolo-app_yolov3-tiny

trt-yolo-appにおけるTiny YOLOv3 (YOLOv3-tiny)の物体検出結果

下の画像が、前回の記事のDarknetにおけるTiny YOLOv3の物体検出結果です。
Tiny YOLOv3モデルの場合、物体検出結果が数カ所で異なっています。

darknet_yolov3-tiny

DarknetにおけるTiny YOLOv3 (YOLOv3-tiny)の物体検出結果

まとめ

JetPack 4.2をインストールしたJetson TX2に、TensorRTを用いたYOLOの推論専用の実装であるtrt-yolo-appをインストールして、YOLOv3とTiny YOLOv3を試してみました。

YOLOv3(YOLOv3-416)の場合、Darknetと同様の結果が得られましたが、Tiny YOLOv3(YOLOv3-tiny)の場合、数カ所でDarknetとは異なる結果となりました。