LoginSignup
10
6

More than 5 years have passed since last update.

Jetsonを使ったDeep Learning リアルタイム画像分類推論(カスタムモデルを利用)

Last updated at Posted at 2018-09-24

目的

前回作成したカスタムモデルを使って、Jetsonに接続したUSBカメラでリアルタイムに画像分類を推論する。
このページのJetsonに関する部分を日本語で書いているだけです

こちらの画像の右型部分(Jetsonを使った推論)を動作させるイメージです。
Qiita

環境

Jetpackのインストール

こちらから、JetPackのインストーラーをダウンロードする。
インストーラーに実行権限を与えて、ホストPCで実行する。(現時点ではJetPack 3.3が最新)

$ cd ~/Downloads/JetPack-L4T-3.3-linux-x64_b39.run
$ chmod +x JetPack-L4T-3.3-linux-x64_b39.run
$ ./JetPack-L4T-3.3-linux-x64_b39.run

インストールガイドを参考に、インストールすること。
完了すると、ホストPCとターゲットのJetsonの両方にCUDA Toolkit等がインストールされる。

推論デモプログラムの実行

Jetsonで、TensorRTおよびcuDNNを使った推論デモプログラムを実行する。
TensorRTとは、高性能なDeep Learning推論ライブラリのこと。画像分類、セグメンテーション、およびオブジェクト検出に対応している。
cuDNNとは、CUDAを使ったDeep Neural Network(DNN)用のライブラリのこと。畳み込み、正規化演算等が高速実行できるようにチューニングされている。
Jetsonにて、gitとcmakeをインストールし、リポジトリをクローンしてビルドする。(数十分)

$ sudo apt-get install git cmake
$ cd ~
$ git clone https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ mkdir build
$ cd build
$ cmake ../
$ make

imagenet-consoleプログラムを使用する。
このプログラムは、入力画像に対してImageNet(ILSVRC2012)データセットを使った画像分類デモを実行し、認識率と識別名称を画像にオーバーレイしてファイル出力する。

$ cd aarch64/bin
$ ./imagenet-console orange_0.jpg output_0.jpg


次は、imagenet-cameraプログラムを使用する。
Jetsonにカメラを接続しておくこと。引数に応じて、googlenetまたはalexnetをTensorRTにロードする。

$ ./imagenet-camera googlenet   # googlenetを使用
$ ./imagenet-camera alexnet     # alexnetを使用

識別率および識別名称がカメラ映像にオーバーレイして表示される。
今回の環境の場合、1280x720、30fpsでリアルタイム推論可能。映像フレームワークにはGstreamerを利用している。

カスタムモデルを利用した推論

上記のプログラムを、前回作成したカスタムモデルで動作させる。
ダウンロードしたカスタムモデルを展開し、以下のディレクトリに格納する。

$ mkdir ~/jetson-inference/data/networks/GoogleNet-ILSVRC12-subset-2
$ cd ~/jetson-inference/data/networks/GoogleNet-ILSVRC12-subset-2
$ tar -zxvf ~/Downloads/20180918-135303-14b6_epoch_30.0.tar.gz

引数にカスタムモデルのパスを指定してロードする。

$ cd ~/jetson-inference/build/aarch64/bin

$ NET=networks/GoogleNet-ILSVRC12-subset-2

$ ./imagenet-console bird_0.jpg output_0.jpg \
--prototxt=$NET/deploy.prototxt \
--model=$NET/snapshot_iter_176340.caffemodel \
--labels=$NET/labels.txt \
--input_blob=data \
--output_blob=softmax

左側が元のGoogleNet-1000で、右側が12種類に分けたカスタムモデルの結果。
正しくモデルが読み込めていることがわかる。
output_0.jpg  output_0.jpg

カメラを利用する場合は以下の通り。

$ ./imagenet-camera \
--prototxt=$NET/deploy.prototxt \
--model=$NET/snapshot_iter_176340.caffemodel \
--labels=$NET/labels.txt \
--input_blob=data \
--output_blob=softmax

Google検索"dog"で出てきた画像で試してみた。

我が家の猫で試してみた。

たまにdogになる。

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6