Jetson Nanoで学習済みモデルを使って、いろいろやってみる(1)推論


NVIDIA提供のコンテナーでいくつかのネットワークモデルを使って推論をやってみます。

Jetson Nanoでどんなことがやれるのか試してみましょう(もう少しパワーが欲しいという場合の次の選択肢はXavier NXになると思います)。

別途、転移学習もやってみます。


Jeyson Nano + Jetpack (4.4.1)のセットアップは済んでいるものとします。

以下のコンテンツをやってみましょう。

GithubにあるDustin Franklinさんのjetson-inferense 参照

Hello AI World

Running the Docker Container

Classifying Images with ImageNet

をやってみましょう。

 

以下のバージョンのイメージをDocker Hub からpull。

 

Jetsonのパフォーマンスを最大化しておきましょう。

CPUやGPUのクロックを変更する前と後では全然違います。

走っているかどうかは、jetson-stats(jtop)で確認できます。走っていない場合はInactiveになっています。

 

ちなみに解除する場合は以下を実行すればいいようです。

 

 

 

作業用のフォルダーを作っておきましょう。

 


Launching the Container

jetson-inferense をクローンして、


デフォルト設定でコンテナーを起動します。

デフォルト設定ではrunとrmが指定されていて自動的にコンテナが起動します。コンテナーを永続化する場合はrun.shを編集します。この場合は、名前を指定して明示的に起動させます(sudo docker start -i my_cont)

ダウンロードするネットワークモデルを聞いてきます。

とりあえずデフォルトのまま了解します。

ダウンロード開始。

ホスト側に学習済のネットワークモデルがダウンロードされます(data/networks)。

 

その後、コンテナーが起動、ホスト側の画像データやネットワークモデルのディレクトリはコンテナからマウントされています。

 


コンテナーのバージョンはこんな感じ。

Ubuntu(18.04.5 LTS)

Python(3.6.9)

appdirs (1.4.4)
boto3 (1.16.3)
botocore (1.19.3)
Cython (0.29.21)
dataclasses (0.7)
decorator (4.4.2)
future (0.18.2)
jmespath (0.10.0)
Mako (1.1.3)
MarkupSafe (1.1.1)
numpy (1.19.2)
pandas (1.1.3)
Pillow (8.0.0)
pip (9.0.1)
pycuda (2020.1)
python-dateutil (2.8.1)
pytools (2020.4.3)
pytz (2020.1)
s3transfer (0.3.3)
setuptools (50.3.2)
six (1.15.0)
torch (1.6.0)
torchaudio (0.6.0a0+f17ae39)
torchvision (0.7.0a0+78ed10c)
urllib3 (1.25.11)
wheel (0.35.1)

CUDA(19.2.89)

cuDNN(8.0.0.0)

 

 

アップデート&アップグレードします。

 


Running Applications

アプリケーションを使ってみます。

 

【inference(推論)を実行してみます】

TensorRTを使います。TensorRTを使うと何がうれしいのかはこのブログ参照

TensorRT は、NVIDIA製の高性能ディープラーニング推論最適化・実行ライブラリです。TensorRT を用いるとネットワークが最適化され、低レイテンシ・高スループットの推論を実現することができる……そうです。

初回のネットワークモデルの読み込みとコンパイル、推論にはJetson Nano だと2~3分くらいかかります。

2回目以降の推論実行は、高速化されます。

CPU・GPUのパフォーマンスのレポートはこんな感じ(Imagenetを使った場合)。

jetson_clocksでクロック変更前

クロック変更後

 

 

Imagenetを使った画像の分類

この画像が何なのか推論してみます。

初回はコンパイルとモデルの読み込みと推論が実行されます。結構時間がかかります。

コンテナ作成に使われたrun.shの中では、コンテナ側のいろいろなディレクトリがホスト側にマウントされています。イメージ用のディレクトリでは以下のようになっています。

推論された結果をホストから確認できます。結果画像には左上に確からしさが%で示されています。

(コンテナ)/jetson-inference/build/aarch64/bin/images/test/jellyfish.jpg

(ホスト)~/work/jetson-inference/data/images/test/jellyfish.jpg

確認してみます。

99.85%の確からしさで「クラゲ」という結果が出力されています。

次にスイカをやってみます。

2回目以降は画像の読み込みと推論のみ実行されるので、時間はさほどかかりません。

でもキャベツだと判断してます、間違ってますね。

 

Detectnetを使ったオブジェクトの検出

画像内のオブジェクト検出

 

 

 

Segnetを使った画像分割(Semantic Segmentation)

以下のような画像からオブジェクトを分割・分離してみます。

こんな感じ。

 

 


【カメラを使ってみます(video-viewer)】

カメラのタイプでオプションが変わります。

いろいろなカメラが使えますが、通常はこの2つのカメラが一般的です。

Jetsonは産業用途の使用も想定されているので、ネットワークカメラなどにも対応しています。

Camera Streaming and Multimedia

●ラズパイ用のカメラ(V2) ー> MIPI CSI camera

●USBカメラ -> V4L2 camera

2つ同時に使うと、カメラ番号は大概こんな感じになります。

ラズパイ用のカメラ(V2) ー> 0

./video-viewer csi://0

 

USBカメラ -> 1(V2カメラを使わない場合は1ではなく0にします)

./video-viewer /dev/video1

 

 


編集

 

run の代わりに create して名前も付けておきます
sudo docker run -> sudo docker create –name my_cont

rmオプションを削除

 

 

で、コンテナを作成して起動

戻る


video-viewer だけ試してみる(メモ)

Docker Container をコマンドで作成

Jetpack ->4.5.1

カメラー>/dev/video0

 

video viewer をPythonで実行

build/aarch64/bin/video-viewer.py のシンプル化

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*