JetsonNanoを持ち運びできるようにして画像認識で遊んでみた記録

JetsonNanoを持ち運びできるようにして画像認識で遊んでみた記録
えびかずき
えびかずき

こんにちは、えびかずきです。

今回はJetsonNanoを持ち運びできるようにして遊んでみたので、その記録をまとめておきたいと思います。

こんな人におすすめ:
・外でJetsonNanoを使いたい

方法は至極単純で、JetsonNanoを大容量のポータブル充電器に繋いで、持ち運びできるようにしました。

開発環境

JetsonNano2GB/JetsonPack 4.5.1
Jetson Inference/TensorRT

充電器:
Anker PowerCore Slim 10000PD

Webカメラ:
logicool C270

やりたいこと

今回やりたいことは、JetsonNanoを外に持ち出して使いたいというものです。

JetsonNanoはお手軽にAIの推論を実行できるエッジデバイスですので、当然外に持ち出して使いたいというケースは多くなります。

ここでは、Nvidiaが提供しているHello AI Worldデモパッケージを使って、Jetson-InferenceでWebカメラを使ったリアルタイム画像認識をやっていこうと思います。

手順

セットアップ

まず、大容量のポータブル充電器として、Ankerの以下製品を準備しました。

これをJetosonNano2GBのUSB-C差込口(J2)にさして、
さらにWebカメラをUSBインターフェイスに繋ぎます。

下図がセットした状態です。

カゴに入れて持ち運べるようにしています。

今回ディスプレイについては、VNC接続でiPhoneと繋ぎました。

VNC接続の詳しいやり方については下の過去記事を参考にしてください。

iPhoneからJetson NanoをVNC接続して屋外で操作する方法

DetectnetによるSSD画像認識

Jetson-Inferenceには、DetectNetというSSD(Single Shot multibox Detector)で画像認識を行うデモプログラムが準備されています。

使い方も公式のドキュメントに詳しく記載がありますので、そちらを参考に試してみます。

今回は過去記事でも紹介したように、Dockerコンテナを使った環境を使います。

1.Docker環境を構築する。

ます以下のコマンドでgithubからDockerファイルを含むリポジトリをダウンロードします。

$ git clone --recursive https://github.com/dusty-nv/jetson-inference

続いて、下のコマンドのようにjetson-inferenceのフォルダに移動して、Dockerを走らせます。

run.shというシェルスクリプトが用意されているので、これを使います。

$ cd jetson-inference
$ docker/run.sh

2.DetectNetを実行する

build/aarch64/binに移動して、detectnet.pyを実行します。

ここで、/dev/video0をオプションに付けることでWebカメラをリアルタイムで認識するようになります。

cd build/aarch64/bin
./detectnet.py /dev/video0

DetectNetとは:
Jetsonを使ってリアルタイムで画像認識の推論が実行できるプログラム。TensorRTを使用することで処理効率を上げている。使用されるデフォルトモデルは、MS COCOデータセットでトレーニングされた91クラスのSSD-Mobilenet-v2モデル。他にもいくつかモデルを選べる。
今回は、デフォルトのモデルで実装しました。

遊んでみた様子

今回せっかくJetsonを持ち運べるようにセットアップしたので外に出て色々試したかったのですが、本日はあいにくの雨天。

ということで家の中のもので試してみることにしました。

ノートPC

ちょっと小さくて見づらいですが、しっかり「laptop 94.4%」と認識できています。
いい感じ。

冷蔵庫

分類結果は「refrigerator 81.9%」。
こちらも認識成功ですね。

ぬいぐるみ

分類結果は「teddy bear 96.8%」。
これはテディベアではないですが、91クラスの分類の中では最も近いものを選べています。

これも認識成功と言って良いでしょう。

扇風機

分類結果は「tennis racket 68.7%」。

ちょっとこれは不正解ですね。まあテニスラケットに見える気持ちはわかりますが。

しかし後で確認してみると、91クラスの中に扇風機はそもそもありませんでした。それならテニスラケットを選んでしまうのも頷けます。

キーボード

分類結果は「keyboard 88.6%」。

認識成功です。

が、認識しているBoxの位置が怪しいですね。。。

これは楽譜立てをPCのキーボードと思って認識しているみたいです。

奇跡的に結果オーライで正解ですが、明らかにキーボード違いですね。(笑)

最後に、動画も一点ご紹介しておきます。

デバイスをキッチンにセットして息子の冷蔵庫荒らし現場を監視した映像がこちら。

かぼちゃが食べられちゃってますね(笑)

まとめ

今回はJetsonNanoを持ち運びできるようにして遊んでみた記録を紹介しました。

Nvidiaのデモパッケージを使うとサクッと推論を試せて楽しいですね。

Jetsonを使いこなすためのポイントは、TensorRTの中身をしっかり理解して、いかに効率良く推論を実装できるかにかかっています。

私はまだまだ使いこなしているとは言えないレベルなので、これからもJetsonでいろいろ遊んでみようと思います。

例えば他にも、Hello AI WorldではPyTorchを使った転移学習とか色んなことができるみたいなので、近々トライしてみます。

ただ現在私の手持ちはJetsonNano2GBだけということもあって、推論以外を試すとすぐに限界が来そう。。。

Jetsonデバイスに慣れてきたら、もう少し上位機種を買っていろいろトライしてみようかな。

では今回は以上!

参考

今回の作業では、下の記事が大変参考になりました。

エッジAI(Jetson Nano 2GB)で生田緑地の物体をリアルタイム認識してみました

NVIDIAのJetson Nanoで物体の検知をやってみた/そう備忘録

公式のチュートリアルだと、Nvidia開発者によるdetectnetの使用方法のYouTube動画がかなり参考になります。
(英語に慣れてなくても日本語字幕をつければ割とすんなり頭に入ると思います)

公式のドキュメントはこちら↓

https://github.com/dusty-nv/jetson-inference#hello-ai-world

jetsonカテゴリの最新記事