NVIDIAの「Jetson Nanoによる入門コース」をやってみた。 | そう備忘録

NVIDIAの「Jetson Nanoによる入門コース」をやってみた。

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の人気動向でも拮抗している。

TensorFlowとPyTorch比較

Google Trendで取り上げられている=優れているフレームワークという訳でも無いが、このタイミングでPyTorchに触れる事ができたのは良かったと思っている。

アカウントの登録

最初にNVIDIAのDLI(Deep Learning Institute)にてアカウントを登録する必要がある。

こちらのページにアクセスして「Create Account」をクリックする。

アカウントの作成

新規登録したいメールアドレスを入力して「Sign in」ボタンをクリックする。

※新規アカウントを登録したいのにも関わらずSign inをクリックする事に違和感があり、最初は迷ったけどとりあえず「Sign in」を押してみた。

Sign in

ここで”アカウントを作成する”をクリックするとアカウント作成ページに推移する模様。

自分はGoogleアカウントでログインをしたかったので「Googleでログイン」ボタンをクリックした。

Googleでログイン

複数のGoogleアカウントを持っている場合は一覧からNVIDIAのDLIと紐付けるアカウントを選択する。

Googleアカウントと紐付ける

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ディレクトリを選択する

classification_interactive.ipynbを開く。

写真を撮影する

演習に沿って上から順番にプログラムを実行した後、親指を上げた写真を様々な角度や距離で数十枚撮影してthumbs_upとラベル付けしてディスクに保存する。

親指を立てた写真をためる

同様に親指を下げた様々な角度からの写真を数十枚撮影してthumbs_downとラベル付けしてディスクに保存する。

親指を下げた写真を撮る

学習

epochs=10で「train」ボタンを押して学習を開始する。

最初の最適化処理に若干時間がかるが学習が開始されれば順調にepochをこなし、全体で10分程度で学習が終了した。

下に表示されているlossが段々と減ってゆくのが分かる。

10エポックでトレーニング

尚、転移学習をしておりデフォルトで使用されるモデルは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(画像回帰)に関するプロジェクトを選択する。

Image Regression(画像回帰)のプロジェクト

regression_interactive.ipynbを開く。

regression_interactive.ipynbを開く

この演習は自分の右目、左目、鼻の位置を学習させてリアルタイムで追跡して位置(座標)を推測して表示するプロジェクト。

前述した演習と同様に事前に数十枚の顔の写真に右目、左目、鼻の位置をラベル付けしてepochs=10で学習させた。

学習時間はやはり10分弱、顔写真はモザイクを掛けてしまっているが右目、左目、鼻は「まぁまぁの精度」といった感じだった。

恐らくだが学習用の写真の種類、量を増やせば更に精度を上げることができると思う。

画像回帰の実行例

動画

この記事の内容を動画にしているので参考にして欲しい。

以上でNVIDIAの「Getting Started with AI on Jetson Nano!をやってみた」の記事を終了とする。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

2件のフィードバック

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。