NVIDIAの「Jetson Nanoによる入門コース」をやってみた。
Contents
NVIDIAのコース
以前に「Jetson Nano 2GB 開発者キットのセットアップ」についての記事を書いた。
今回はJetson Nano開発者キット(2GB)を使ってNVIDIAが用意してくれた入門コース(Getting Started with AI on Jetson Nano!)をやってみた時の記事とする。
Jetson Nanoを購入したは良いけど、何から手を付ければ良いのか分からない人は、まずはこちらの入門コースをやってみるのが良いと思う。
コースはメモリが4GBの従来のJetson Nano開発者キット(タイプB01)向けと今回、自分が購入したメモリが2GBのJetson Nano開発者キット向けの両方に対応している。
またこの演習での機械学習のフレームワークはPyTorchを使用している。
今までTesorFlowしか触ったことが無かったのだが初めてPyTorchを触る事になった。
「どっちを学ぶか問題」などで良く比較されているが数年前だったらTensorFlowが優勢だったがここ1年はGoogle Trendの人気動向でも拮抗している。
Google Trendで取り上げられている=優れているフレームワークという訳でも無いが、このタイミングでPyTorchに触れる事ができたのは良かったと思っている。
アカウントの登録
最初にNVIDIAのDLI(Deep Learning Institute)にてアカウントを登録する必要がある。
こちらのページにアクセスして「Create Account」をクリックする。
新規登録したいメールアドレスを入力して「Sign in」ボタンをクリックする。
※新規アカウントを登録したいのにも関わらずSign inをクリックする事に違和感があり、最初は迷ったけどとりあえず「Sign in」を押してみた。
ここで”アカウントを作成する”をクリックするとアカウント作成ページに推移する模様。
自分はGoogleアカウントでログインをしたかったので「Googleでログイン」ボタンをクリックした。
複数のGoogleアカウントを持っている場合は一覧からNVIDIAのDLIと紐付けるアカウントを選択する。
Googleアカウントに紐付けられた情報(ディスプレイ名、生年月日・・・)が自動的に画面に表示される。
自分の場合はディスプレイ名(表示名)が既存のDLIのアカウントとダブっていてエラーが表示されてしまったので変更した上で、
- 利用規約に同意
- reCAPTCHAにチェック
をして「アカウントを作成する」ボタンをクリックした。
先程の画面で”アカウントを作成する”をクリックしていれば直接このページに飛んで来るのだと思う。
確認用のメールが登録したメールアドレスに届くので「電子メールアドレスの確認」をクリックする。
メールアドレスの確認済ページが表示された後にNVIDIAからの案内を受信するかどうか確認される。
- NVIDIAのWebサイト、ソフトウェア、イベントの案内(意訳)
- 最新のSDK、開発者ツール、トレーニングについての案内(意訳)
両方チェックして「SUBMIT」ボタンを押した。
プロフィールを入力して興味のある分野をチェックしたら「送信」ボタンをクリックする。
やっと終わりかと思ったらまだ入力があった。
- フルネーム:取得した証明書で使用される名前
- 公式名:コースで識別する名前(後で変更は出来ない)
を入力して「Create Account」ボタンをクリックする。
以上でアカウントの登録は完了した。
コースの登録
まずは無償の入門コースを試してみることにした。
当初、日本語の「Jetson NanoでAIを始める」を選択したのだが、どうやらこちらはまだJetson Nano 2GB版の内容になっていない模様。(2020年12月現在)
テキストの内容が4GBメモリ版のJetson Nano(タイプB01)になっていたので英語版の入門コース「Getting Started with AI on Jetson Nano」を登録した。
目次
概要は以下の通り。
Welcome | コース概要の説明。 |
Setting up your Jetson Nano | Jetson Nanoのセットアップ。 従来のタイプB01(メモリ4GB)と自分が購入した2GBメモリ版の両方の説明が載っていた(ダウンロードするイメージファイルが異なる) セットアップの詳細については以前の記事を参照して欲しい。 |
Image Classification | 画像分類のプロジェクト。 親指を上げた写真と下げた写真をそれぞれ30枚程度学習した後、Jetson Nanoに接続しているカメラの映像から親指を上げているのか下げているのかを分類するプロジェクト。 最後に理解度テストがある。 |
Image Regression | 画像回帰のプロジェクト。 右目、左目、鼻の位置を写真から学習させた後、Jetson Nanoに接続したカメラの映像に写った顔からそれぞれのパーツの位置をリアルタイムで追随させるプロジェクト。 最後に理解度テストがある。 |
Conclusion | まとめ |
Feedback | アンケート |
尚、最後まで実施すれば下記の様な証明書が貰える。
事前準備
演習を始める前に、
- Jetson Nanoのセットアップ
- Dockerコンテナの実行
- JupyterLabへの接続
を済ませておく。
詳細は以前のこちらの記事を参照して欲しい。
環境
今回の実行環境は以下の通り。
本体 | NVIDIA Jetson Nano 2GB 開発者キット |
OS | Ubuntu18.04.5 LTS |
JetPack SDK | JetPack 4.4.1 |
パソコン OS | Windows10 Home |
パソコン ブラウザ | Google Chrome |
Image Classsification
Image Classsification(画像分類)に関するプロジェクト。
プロジェクトを開く
パソコンのブラウザから192.168.55.1:8888でJupyterLabに接続してClassificationディレクトリを選択する。
classification_interactive.ipynbを開く。
写真を撮影する
演習に沿って上から順番にプログラムを実行した後、親指を上げた写真を様々な角度や距離で数十枚撮影してthumbs_upとラベル付けしてディスクに保存する。
同様に親指を下げた様々な角度からの写真を数十枚撮影してthumbs_downとラベル付けしてディスクに保存する。
学習
epochs=10で「train」ボタンを押して学習を開始する。
最初の最適化処理に若干時間がかるが学習が開始されれば順調にepochをこなし、全体で10分程度で学習が終了した。
下に表示されているlossが段々と減ってゆくのが分かる。
尚、転移学習をしておりデフォルトで使用されるモデルはResNet-18(18層のResNet)となる。
その他に使用可能なモデルは以下の通り。
- AlexNet
- VGG
- ResNet-18、34
- SqueezeNet
- DenseNet
- Inception v3
- GoogLeNet
- ShuffleNet v2
- MobileNet v2
- ResNeXt
- Wide ResNet
- MNASNet
プログラムをコメントアウトすれば直ぐに使えるモデルとデフォルトではインストールされていないのでツールを使って追加でインストールが必要なモデルがある。
推論
学習後にライブモードにしてカメラに指を上げた映像を写すと100%の確率でthumbs_upと判断された。
40枚程度の学習量にしてはかなりの精度だ。
リアルタイムで推論をしているので指を動かすにつれて推論値が変わる。
一方、指を下げるポーズについてはthumbs_downと判断はされたが74%と若干確率が下がった。
これは事前に学習した写真と若干異なるポーズの為と思われ、追加で写真を学習させれば解消する問題だ。
レゴのフィギュアを分類してみる
続いて演習のプログラムを多少修正してレゴのフィギュアの分類を試してみることにした。
分類したいフィギュアは左から、
- Stephanie
- Rapunzel
- Woman
- Olivia
の4種類。
娘のレゴのセットから借りてきた。
演習の時と同様にそれぞれの写真を撮影して学習させる。
写真は前向きの他に横、後ろ、斜め上など一通り1フィギュアに対して40枚ほど撮影を行った。
学習後の画像分類の結果は以下の通り。
学習時間はやはり10分弱、正面からの映像はほぼ100%の確率で正しく分類が出来ている。
上や斜めからの映像の場合は多少精度が落ちるがそれは学習させている写真の分量と種類の問題だと思われる。
カメラとフィギュアの位置が近すぎてUSBカメラの焦点が合っていないが、これはUSBカメラの特性上ある程度は仕方がない。
ラズパイ用のカメラをCSI-2カメラコネクタに繋げれば解決する問題だと思う。
ラズパイカメラのピントを合わせる方法は以前のこちらの記事を参照して欲しい。
Image Regression
続いてImage Regression(画像回帰)に関するプロジェクトを選択する。
regression_interactive.ipynbを開く。
この演習は自分の右目、左目、鼻の位置を学習させてリアルタイムで追跡して位置(座標)を推測して表示するプロジェクト。
前述した演習と同様に事前に数十枚の顔の写真に右目、左目、鼻の位置をラベル付けしてepochs=10で学習させた。
学習時間はやはり10分弱、顔写真はモザイクを掛けてしまっているが右目、左目、鼻は「まぁまぁの精度」といった感じだった。
恐らくだが学習用の写真の種類、量を増やせば更に精度を上げることができると思う。
動画
この記事の内容を動画にしているので参考にして欲しい。
以上でNVIDIAの「Getting Started with AI on Jetson Nano!をやってみた」の記事を終了とする。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
2件のフィードバック
[…] https://www.souichi.club/deep-learning/jetson-nano-getting-started/ […]
[…] NVIDIAの「Jetson Nanoによる入門コース」をやってみた。 […]