2020.12.28

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

こんにちは。次世代システム研究室のK.S.(女性、外国人)です。

もう冬になってしまいましたが、秋の紅葉を楽しまれましたか?

新型コロナウィルスの影響でなかなか外出しづらく、不安やストレスがたまったりしていませんでしょうか。私はストレスを解消するため、ほぼ毎週末に家の近くにある生田緑地に散歩がてら、紅葉狩りしています。こういう時こそ、皆さんと一緒に自然の環境を味わいながら、軽く技術を共有できればいいなあと思っています。かつ、最近エッジAIが注目されてきたので、エッジAIなら簡単に持ち歩きながら、実験できそうだと思いました。(次世代システム研究室でもその辺の技術を少し試そうという方針もあるので、個人的にはちょうどいいタイミングでした)

ということで、本四半期(2020Q4)は、エッジAIで生田緑地にある物体をリアルタイム認識してみた結果を共有させていただきます。自然の中での写真を沢山載せていますので、楽しんで読んで頂ければ幸いです。

TL;DR(要約)

・2020年10月に販売開始されたJetson Nano 2GB(エッジAIの一つ)は簡単にセットアップできたが、アップデートするとGUIが消えてしまったので要注意(アップデートしなくても利用できます)
・最低限の予算にしたかったので、モニターの代わりにVNC経由でiphone画面からJetson Nanoの画面を表示するように工夫
・Hello AI World(jetson-inference)で、リアルタイム認識モデルの推論を動かしてみると、思ったより使いやすく面白かった(dockerを立ち上がってから、物体のリアルタイム認識まで、たった2行のコード)
・(期待していた生田緑地の紅葉の認識はなんと蜘蛛の巣になってしまった)

①エッジAIとは

エッジAI(edge AI)とはエッジ(端、端末)に搭載されているAI(人工知能)を意味します。エッジ(端末)はセンサー(カメラ)、車、スマホといったデバイスです。AIは機械学習などの知的な機械、特に知的なコンピュータープログラムを作る科学技術です。また、AIは端末内にデータ処理や推論を行い、必要なデータだけをサーバー(クラウド)に送信するのはエッジコンピューティング(Edge Compuing)と言います。エッジコンピューティングの枠組みでは、ビックデータを利用しモデル学習のような重い処理をサーバーで行います。そしてその学習済みモデルを端末に送り、端末は推論のアルゴリズムを使ってリアルタイムで処理します。例えば、学習済み画像認識モデルをスマホに入れておけば、写真を撮ったときに、スマホ内でその写真は何なのかを認識することが可能です。また、推論アルゴリズムを使うので、見たことがない(学習したことがない)写真でも、当てることが可能になります。学習と推論については過去のブログを参考にしてください。

画像


参考:https://ledge.ai/edgeai/


では、エッジAIは何がいいのか、なぜ注目されるのか、説明します。

エッジAIが注目される理由

IoT(Internet of Things)が進んできて膨大なデータを利用することになってきています。エッジAIでは取得したデータを端末内で処理できるため、インターネットを通して、クラウドに送信する必要が少なくなります。結果、通信コストの削減、リアルタイム処理、セキュリティー強化、を高めることなどが期待されます
  • 通信コストの削減:最近、5G(第5世代移動通信システム)の登場によって、通信遅延は大幅に抑えられていますが、それでも完全とは言えません。エッジAIはクラウドAIのような大量のデータを送信する必要がないので、通信データ量を抑えられ、コストが下がります。
  • リアルタイム処理:自動運転分野では、リアルタイムに近い高速応答性が求められます。機械が学習しながら推論や解析をしますが、処理が遅れれば、判断が変わっていって、致命的な結果になる可能性があると考えられます。
  • セキュリティー強化:通信にはさまざまなリスクがあります。インターネット回線が途切れたり、情報が届きにくかったりするような環境もあります。また、医療分野では、個人情報の適正な取り扱いのため、インターネットを通して、データ送信したり、クラウド上に置いたりしたくない非常に高度なセキュリティが求められるケースも想定されます。
利用目的に合わせて、エッジAIにもいくつか種類があります。全くクラウドを利用しない端末内で稼働するような機械もあり、状況に応じてクラウドAIとエッジAIの使い分けという選択肢もあります。

では、機械学習で使われているエッジAIハードウェアはどんな感じなのか、軽く共有したいと思います。

機械学習で使われているエッジAIハードウェア

機械学習で使われているエッジAIハードウェアは主に4つに分けられ、CPUs, GPUs, ASICs, FPGAsがあります。
  • 古き良きCPUs(Central Processing Units)は優れたパフォーマンスではないですが、無限にプログラム可能という利点があります。主に学習されたモデルを利用し、推論で使用されます。
  • GPUs(Graphics Processing Units)はグラフィックアルゴリズムの処理に使用されます。GPUをプログラムして、ローカルに保存されたデータを操作できるようにすることです。これは、多くの並列アルゴリズムのアクセラレータとして機能します。GPUは、グラフィックス、AI、および多くの科学的アルゴリズムの基礎となる行列演算(高校の数学の場合、主に行列の乗算)の実行に優れています。基本的に、GPUは非常に高速で比較的柔軟性があります。現在の市場のリーダーはNVIDIA社です。
  • ASICs(Application-Specific Integated Circuits)は特定のタスクのために設計されるシリコンチップです。他の多くのチップとは異なり、ASICは実行するように構築されたタスクしか実行できなく、変更することもできません。一方、大量の回路を一つチップに組み込むので、一括で固定操作を非常に高速に実行することができ、コストを低く抑えることができます。コンピューティング機能に消費する電力も少なく、サイズも遥かに小さくなります。部品が少ないため、組み立てが安価で信頼性も高くなります。Google TPU(Tensor Processing Unit)もASICで、高度な並列処理に適しています。ニューラルネットワークの処理は「驚異的並列」ワークロードです。
  • FPGAs(Field-Programmable Gate Arrays)は非常に低い電力で優れたパフォーマンスを提供し、開発者が基盤となるハードウェアを変更してソフトウェアの変更を最適にサポートできるようにすることで、柔軟性も向上します。ただしFPGAハードウェアのプログラミングに必要なスキルを習得するのはかなり困難であり、FPGAのパフォーマンスは特定のワークロードのハイエンドGPUのパフォーマンスに及びません。現在のFPGA市場の2つのリーダーはXilinx(最近AMDに買収された)とIntelです。
機械学習で使われているエッジAIハードウェアのイメージは下記になります。

画像


参考:https://moorinsightsstrategy.com/will-asic-chips-become-the-next-big-thing-in-ai/

今回は技術的な新規性、開発の柔軟性、コンパクトなサイズ(持ち歩きやすい)、適正価格(誰でも買える)の観点で、Jetson Nano 2GBといったNVIDIA社が開発したGPUを試すことにしました。

②Jetson Nano 2GBの準備とセットアップ

まず、買い物も含めてデバイスと関連物を準備します。それから、セットアップを行います。

開発環境の準備

前提

できれば、最新の物を使いたいですが、技術で工夫できそうなところは買い物しないようにし予算を抑えていくという気持ちでやりたかったので、今回の買い物と持ち物は下記になります。

今回での買い物

  • NVIDIA Jetson Nano 2GB開発者キット:6,820円 (今回の主役です。発売発表の時点で予約しておきました)
  • microSD 32GB UHS-I U3 書込最大60MB/s:1,228円 (NVIDIAではUHS-Iを指定していますので、それに対応しているSDカードが必要となります。また、SDカードにはUbuntu OSイメージファイルを作成するため、メモリは最低限で16GBでも動きますが、空き容量が少なくなるので32GBがおすすめです。書込速度はU3の最低は30MB/sですが、遅すぎるとイライラする気がしたので60MB/sにしました)
  • WiFi 無線LAN:713円 (Raspberry Piや他のJetsonと違って、Jetson NanoはWiFi機能がありません)
  • 冷却ファン付ケース:1299円 (使いすぎると、機械が熱くなるので、気持ちで冷却ファン付きを選びました)

以前からの持ち物

  • MacBook Air (Retina, 13-inch) 1.1 GHz Quad-Core Intel Core i5, memory 8GB(SDカードを作成するため、Windows PCでも大丈夫です。)
  • 自宅用のテレビとHDMIケーブル(モニターの代わり利用)
  • キーボード、 マウス
  • 携帯端末(個人用のiPhone XR、持ち歩きのときにモニターとキーボードとマウスの代わり。小さいモニターがあれば、携帯端末は必要なくなります)
  • Raspberry Pi用のAC100/DC2A-5Vアダプター(Jetson Nanoを安定して利用出来る電源は最低限2A-5Vが必要です。スマホのUSBチャージは1A-5Vしか提供しない物が多く、そのようなものは起動前に停止してしまいます。また、5V以上の電圧には対応していません)
  • USB camera(Raspberry Pi用カメラモジュールでも使えます)
  • モバイルバッテリー
  • USB to USB-Cアダプター
技術検証という理由で、今回買ったJetson Nanoキット関連の機器や以前買ったMacBook AirやiPhone XRはGMOのスキルアップ補助制度「学ぼうぜ!」の支援で購入費用の50%をサポートして頂き、ありがとうございました。

それでは、下記のように今回の実験に必要な物が揃いました。

Jetson Nano 2GBにファンを付けて、ケースのシールを剥がして、組み立てて、出来上がります。また、WiFiもセットアップが必要ない物を買ったので、USBポートに挿しておけば自動的に認識してくれます。


セットアップ

それでは、ものは用意できましたので、これからセットアップを行います。
セットアップの手順はNVIDIAのtutorialに参考できますので、ここではそれ以外のコツや注意すべき事項を共有します。

SDカードを作成

インターネットに繋がっているコンピュータを用意して、SDカードの作成手順通りに、SDカードにUbuntu OSイメージファイルを作成しました。イメージが作成されたSDカードはJetson Nano 2GBに入れて、Ubuntu OSセットアップを進めます。

Ubuntu OSセットアップ

Ubuntu OSセットアップはNVIDIAの手順通りに行いました。
コツですが、インストールの最後のところでスワップ(swap、メモリのハードディスクに移す機能)の設定を聞かれます。Jetson Nano 2GBのメモリが2GBだけで、大規模な学習や沢山のビデオ処理を利用すると、メモリが足りなくなり、フリーズになったり、killされたりする可能性があります。そのため、SDカードに、swapメモリを入れておけば、SDカードのメモリを代わりに利用し、安定的に使用できるようになります。

ここまでのセットアップが終われば、最低限で使えるようになります。

パワーモード

利用するときに、二つのパワーモードがあり、MAXN(最大パフォーマンス)と5W(消費電力)の二つのパワーモードが利用できます。5WはMAXNの消費電力は半分に、オンラインCPUコア数やCPUとGPU最大周波数(MHz)は半分になります。どちらでも選ぶことができます。初期値はMAXNですが、私は5Wで使っています。モバイルバッテリーを利用し、外にも持ち歩いていたので、できれば電力を節約したかったためです。

VNCセットアップ

VNC(Virtual Network Computing)は同一ネットワーク経由で遠隔地にあるコンピュータのデスクトップ画面を転送し、他のコンピュータから操作できるソフトウェアです。今回の例ですと、同一ネットワーク上(家のWiFiインターネット、スマホのネット)に、MacやiPhoneで、Jetson Nanoのデスクトップを表示して操作することに利用できます。VNCを利用することで、Jetson Nanoを制御するために、外付けのモニター、キーボード、マウスを使わなくても、MacやiPhoneのものを代わりに利用することが可能になります。Jetson Nanoを持ち歩くときに、iPhoneがあれば、追加での小さいモニターなどを購入することが必要なくなります。

VNCのセットアップについてはNVIDIA社の手順だけでは情報が足りなかったので、追加にaqzihbさんの記事Allanさんの記事を参考にして行いました。

また、MacやiPhoneにはReal VNCをインストールし、利用しています。繰り返しになりますが、利用するときに、同一ネットワークでの接続が必要です。ネットワークのip addressはJetson Nanoのterminalにifconfigコマンドで確認できます。

Hello AI World(jetson-inference)インストール

Hello AI WorldはNVIDIA社が開発しているNVIDIA TensorRTとNVIDIA Jetsonを利用してディープラーニング推論ネットワークとディープビジョンプリミティブをデプロイするためのライブラリィです。

使用する方法は二つあり、①ビルド済みのDockerコンテナと②ソースのプロジェクトビルドです。将来的に、他の技術も検討したいし、管理しやすくするため、直接Jetson Nanoにインストールするより、dockerコンテナを利用することにしました。 

実装はdocker実行手順通りに行いました。
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ docker/run.sh
 
インストールしたバーションは「/etc/nv_tegra_release」でチェックでき、今回は「L4T BSP Version: L4T R32.4.4」でした。

「docker/run.sh」は「sudo docker run」のようにコンテナを起動するだけではなく、学習済みモデルがコンテナ内に存在するかも確認してくれます。もし、学習済みモデルがなければ、自動的に「./download-models.sh」を実行し、下記にようにモデルもダウンロードしてくれます。今回はひとまず、defaultのモデルをダウンロードしておきました。また、「docker/run.sh」はdockerを実行するだけではなく、必要なファイルやデバイスもmountしてくれますので、コンテナ内でもカメラを使うことができるようになります。

これで、推論の環境構築も終了となります。

(未解決)Remote Desktop設定・GUIが消えた

実はVNCだけではなく、RDP(Remote Desktop Protocol)も設定しておこうと考えました。VNCはJetson Nanoのコンソールにログインしないと、繋がらないからです。そのため、VNCを使いたいときに、一回、Jetson Nanoをモニター(テレビ)に接続し、ログインする必要があります。繋いだ後、モニターを抜いても使い続けられますが、少し面倒な作業になります。RDPなら、事前ログインしなくても、接続することが可能です。残念ながら、今回は設定が成功できませんでした。一旦ペンディングになっていますが、起こった現象を共有します。まず、Allanさんの記事通りに、xrdp(LinuxにRDPを提供するサーバー)をインストールし、Mac側にもMicrosoft Remote Desktopをセットアップしました。ただ、接続すると、一瞬でGUIが消えました。調べたら、同じ問題が起こった人が沢山いましたので、解決できた記事にはxrdpを再インストールすれば、解決できると書かれていますが、やっても解決できませんでした。また、Ubuntuをアップデートしたら、RDP問題を解決できる記事もありましたので、Ubuntuをupdateとupgradeしてみました。しかし、アップデートすると、今回、Jetson NanoへのログインGUIが消えてしまいました。まさか!Ubuntu 18.04LTSにアップデートすると、GUIが死んでしまう現象があるようです。Ubuntuのdisplay managerを再インストールしたり、設定を変えたりしてみましたが、解決できませんでした。最後には、仕方なくSDカードをformatし、Ubuntuイメージ作成をやり直すことにしました。同じ現象が起こる可能性があるので、アップデートするときの注意点として参考にしていただければと思います。

③生田緑地の物体をリアルタイムで認識

いよいよ実験です!
やりたいことは Jetson Nano 2GBを生田緑地に持っていって、様々な物体をリアルタイム認識することです。

実験準備

VNCを使っているので、ログインしないと、画面共有には接続できません。そこで、家を出る前に、テレビモニターを繋いでログインし、iPhoneからVNCでシェア画面が見られることを確認しました。(RDPの接続が成功すれば、この面倒なことをやる必要ありませんでしたが、、、)
また、出かけるので、インターネットは家のWiFiを携帯ネットに切り替え、iPhoneから、Jetson nanoに共有していました。(モニターを使えば、インターネットが必要なくなりますが、、、)


確認できたら、テレビのHDMIを抜いて、こんな感じで、家から出発しました。(個人的には、現実的にいけている運び方だと思いますが、いかがでしょうか)。ちなみに、実験記録のお手伝いのため、名乗るほどの者ではないカメラマンにご協力頂きました。この場を借りて感謝致します。


それでは、生田緑地に到着しましたので、実験を開始しました。

iPhoneをモニター(とキーボードとマウス)の代わりにし、移動しながら、沢山の物を認識していました。カメラが画像を認識し、Jetson Nanoがリアルタイム処理で写真を判定します。その判定結果は左上になります。Jetson Nanoに直接モニターを繋いでいけば、通信が必要なくなります。ただ、今回は画面共有で少し通信遅延が発生しました。

実行は下記になります。
# jetson-inference dockerを起動
docker/run.sh

# imagenet-camera.pyのリアルタイム認識を実行
# (defaultモデルはGoogleNet)
cd build/aarch64/bin
./imagenet-camera.py --camera=/dev/video0
 


ちなみに、学習済みモデルは沢山がありますが、今回はdefaultモデル(GoogleNet)を使用しました。Jetson Nanoを利用するときに、GoogleNetモデルのカメラでの認識フレームレートは 75FPS(frames per second)くらいだそうです。また、学習済みモデルはILSVRC ImageNet データセットを利用したので、ラベルは1000クラスでした。学習ラベルのリストはこのリンクから確認できます。

実験結果

まず、生田緑地にある岡本太郎美術館の周辺から始めました。

高さ30mの「母の塔」が岡本太郎美術館のシンボルタワーを認識してみました。結果、なんと、missile(ミサイル)と認識してくれました。さすが、岡本さんが残してくれた「芸術は爆発だ!」の作品ですね。精度は17.75%でミサイルに近いということでした。多分この母の塔はモデルに学習されていなくて、ミサイルに似ているという推論結果になります。よく見たら、確かに似ている部分があります。


歩き続けて、池のところに向かっていましたので、紅葉の写真も見せたいと思います。結果、54.37%谷で、35.49%は蜘蛛の巣になってしまいました。確かに、蜘蛛の巣のような形ですが、人間ではその感覚がなさそうです。もう少し角度を変えてみたら、もう少し正しく(78.38%谷)になってくれました。ただ、紅葉は出てくれませんでした。学習ラベルを確認したら、紅葉という単語は学習されていませんでした。


リアルタイムの雰囲気も見せたいので、VDOを撮ってきました。



続いて、その池にはカモがいましたので、カモも実験をしてみました。やった、カモは77.14%カモでした。ただ、カモちゃんがすごく動いていた時には84.13%ビーバーになってしまいました。この画像だけでは、自分(人間?)でもそれは何かを推定することも厳しかったので、推論アルコリズムはよく頑張ってくれました。


次は、プラネタリウムの近くにある電車です。なんと、99.63%蒸気機関車(steam locomotive)でした。蒸気機関車は学習されていたし、この写真も学習した物に近いのではないかと思います。また、蒸気機関車は特定しやすいのもあると思います。


次に、日本民家園の方に向かって、中には入りませんでしたが、外からの認識ですと、77.05%小屋(barn)でした。いかがでしょうか。


入口のところに、巣箱の形をしている森の小さな図書館がありましたので、試してみました。結果、92.90%巣箱でした。「中身は鳥ではなく、本だよ。よく見てみて、Jetson Nanoちゃん!」って感じでした。


最後に、花も認識してみました。

結果、99.08%daisy(デイジー)で認識されました。写真では、沢山パンシーがあるのに、デイジーか。実は手前はpansy(パンジー)でしたが、見にくい後ろにデイジーのような花のスノーランドもありました。学習ラベルリストを確認してみたら、デイジーやバラがありますが、パンジーはありません。カメラが後ろの方を認識してスノーランドをデイジーとして判定したか、パンジーとデイジーが似ているように見えるから、99.08%の推論結果を出したか、不明です。ところで、パンジーはスミレ科で、デイジーはキク科ですので、花びらが全然違うようです。個人的には、Jetson Nanoがよく頑張ってくれましたが、最後の期待は少々ズレてしまいました。


今日はここまでで実験を終了させていただきたいと思います。実は違うモデルも試してみたかったのですが、寒すぎてJetson Nanoを持って帰ることにしました。

④まとめと考察

今回はエッジAI(Jetson Nano 2GB)のコンセプトと実現(セットアップ周り)を紹介しました。また、実験として、生田緑地で様々な物体推論的なリアルタイム画像認識を試してみました。電車とかは一般的に学習されている物ですので、簡単に推論でき、正しく認識できました。ただ、母の塔のような学習されなさそうなものは推論も難しくなってきます。
また、花(デイジーとパンシー)の認識で、なぜ間違えたのが少し考えてみました。人間が写真を見て、手前にある沢山のパンジーをフォーカスし、細かく違いを見分けることができますが、機械はまだ限界があるだろうと思いました。

最後に

次世代システム研究室では、ビッグデータ解析プラットホームの設計・開発を行うアーキテクトとデータサイエンティストを募集しています。興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧からご応募をお願いします。

一緒に勉強しながら楽しく働きたい方のご応募をお待ちしております。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事