ロボットやドローン、AGV(自動運搬車)などの自律型マシンや、モバイル型エッジコンピュータなどに強力なAI関連機能、すなわちGPUパワーを搭載できるのが、NVIDIA製のAIコンピュータ「Jetson AGX Xavier」(ジェットソンAGXエグゼビア)です。レビュー第3回の今回は「Hello AI World編」として、NVIDIAで提供されているAI関連コンテンツを実際に触ってみたいと思います。
熊が写っている画像をJetsonが識別し、熊の種類をPepperが発話する、といったロボットとのコラボもやってみます。また、NVIDIA の開発した検出ネットワーク「DetectNet」は、aiboを犬と判別するかどうかもサクッと実験してみましょう。
なお、Jetson AGX Xavierの概要については既報の記事を参照してください。
「Jetson AGX Xavier」レビュー(1) ロボットや自律機器の頭脳になるAIコンピュータの最新モデル「開封の儀」
「Jetson AGX Xavier」レビュー(2) セットアップ&ベンチマーク編 エッジを知能化する超小型AIコンピュータの実力は本物か?
NVIDIAで用意されている充実したAIトレーニングコンテンツ
NVIDIAでは、Jetsonシリーズを使ったディープラーニング入門用のチュートリアルとして「Two Days to a Demo」を用意しています。これを使うと、ディープラーニングで何ができるのかをイメージしたり、Jetsonがどんな性能を持っているかを手軽に体験することができます。ステップ通りに進めると2日間程度のボリュームのため、「Two Days to a Demo」という名前になっています。
https://developer.nvidia.com/embedded/twodaystoademo
GitHubにソースコード、データセット、ドキュメント等一式が入っているので、Jetsonシリーズを導入して現場で使い始めるには良い教材で、初めてJetsonシリーズを購入した人であれば特に、ぜひ試した方が良いチュートリアルと言えるでしょう。
内容としては以下のようなプログラム構成です。
•Deploying Deep Learning
•Advanced – Deep Learning Nodes for ROS
•Advanced – Deep Reinforcement Learning in Robotics
•Advanced – TensorFlow to TensorRT Image Classification
今回はこの1番最初のコンテンツである「Hello AI World」というショートプログラムを実際に体験してみます。
「Hello AI World」
「Hello AI World」はImageNetとDetectNetという画像認識、物体検知のクラスライブラリを使ったJetsonシリーズ単体でも動作可能なデモコースです。この中でできる内容としては、GitHubにある訓練済みの学習済モデルとソースコードを使って画像データとライブカメラによる認識の体験を行っていきます。
手順としてはまず、
•JetPackでのJetsonのセットアップ(Setting up Jetson with JetPack)
•ソースからリポジトリのビルド(Building the Repo from Source)
を行っていきます。Jetsonがubuntu OSですでに動いている場合は、JetPackでのセットアップ済だと思いますので内容を確認しながら飛ばしても大丈夫です。セットアップ後は手順に従いGitHubからリポジトリを作成して、プロジェクトをビルドします。
今回私はJetson AGX Xavier上で、リリースしたばかりのJetPack4.2で動かしています。
ビルドには多少時間がかかりますが手順通り進めると、~/jetson-iference/build/aarch64/bin配下にプロジェクトのプログラム群ができているはずです。
オリジナルの画像認識プログラムも書ける
そのあとのステップは実際にImageNetを使って画像認識をかけてみます。
•ImageNetによる画像の分類(Classifying Images with ImageNet)
•Jetsonでコンソールプログラムを使用する(Using the Console Program on Jetson)
•独自の画像認識プログラムをコーディングする(Coding Your Own Image Recognition Program)
•ライブカメラ認識デモの実行(Running the Live Camera Recognition Demo)
ImageNetでは、機械学習用に画像を収集しているサイトがあって定期的に学習モデルの認識精度を争うコンぺを行っています。(http://www.image-net.org/challenges/LSVRC/)
GitHubに含まれているAlexNetやgooglenetはこのコンペで優秀な成績を残した画像認識のモデルを使って1000種類の画像をすぐに識別できるように学習済になっています。
最初のステップでは、コンソールプログラムは、画像ファイルを指定しての画像認識です。認識結果とともに画像をアウトプットします。
熊の種類(色)を判別してPepperが回答
2番目のステップは3種類の熊を認識する独自の画像認識プログラムでやっとプログラミングできます。といってもベースのコードはほとんど書かれているのでほぼコピー&ペーストでできてしまいます。弊社にはロボットがたくさんいるので、サンプルコードに追記してロボットに認識結果をしゃべらせてみました。
動画のデモで動かしたシステム構成は、簡単ですが以下のような感じです。
・画像認識サンプルプログラムから画像認識した分類番号(class index)をインターネット経由で通知。
・分類番号を識別して、WebSocket経由でロボットに発話内容を通知。
・ロボットが発話。
今回はプロトデモだったので、サーバー側はNode-REDというビジュアルプログラミングツールを使って簡易作成しました。
プログラムが苦手な人は、3番目のステップのライブカメラ認識デモのステップに進んでもいいと思います。1点注意があってUSB接続でのWebCam等を使う場合はimagenet-camera.cppのDEFAULT_CAMERA -1を0にする必要があります。
detectNetでaiboは犬と認識できるのか?
最後に物体認識です。detectNetオブジェクトを使って物体認識をします。
•detectNetを使用したオブジェクト座標の特定(Locating Object Coordinates using DetectNet)
•コマンドラインからのオブジェクトの検出(Detecting Objects from the Command Line)
•ライブカメラ検出デモの実行(Running the Live Camera Detection Demo)
人、犬、ボトルなどの物体認識ができる学習済モデルがあるのですが、ここはaiboを使って犬と認識できるかライブカメラで確認してみました!
動画内では、aiboが矩形で囲まれているときに犬だと認識していることをして示しています。
どうやら角度によって見えたり見えなかったりするみたいですね。(笑)
こんな感じでコードを書かなくともJetsonを使っての画像認識・物体認識が数時間で簡単にできてしまいます。
実際に自分で撮った写真を認識させてみたり、コードが書けるのであればカスタマイズして応用してみてはいかがでしょうか?
また学習モデルを再学習させたい場合は、「Two Days to a Demo」をすべてステップ通りクリアすれば、DIGITS Systemを使ったモデルの再作成も学べますのでそちらを参考にしてみてください。
ABOUT THE AUTHOR /
高橋一行Forex Robotics株式会社 代表取締役。NVIDIA認定 Jetson AI Specialist。AI、機械学習、ロボット、IoTなどのシステム開発を行いながら、コミュニティ活動やLTにも精力的に活動。 最近、那須塩原にサテライトオフィスを設立しました!