Jetson Nanoをセットアップしてディープラーニングで画像認識を試してみた

f:id:karaage:20190416225202j:plain:w640

Jetson Nano ファーストインプレッション

 謎の半導体メーカーのボード型コンピュータ、Jetson Nanoを購入しました。

 購入先は、いつものスイッチサイエンスさんです。

 少し出遅れたので、届くのが遅くなりましたがようやくゲットできました。

f:id:karaage:20190416225202j:plain:w640
 ジャーン

f:id:karaage:20190416225255j:plain:w640
 裏側をみてみる

 ん…??

f:id:karaage:20190416225254j:plain:w640
 え、えーーー!

 どうかしてるぜNVIDIA、じゃなかった謎の半導体メーカーさん。

 ちなみに、Jetson Nanoの箱は台としても使えるので、大切にとっておきましょう。私のように何も考えずバキバキに破壊しながら開けたら、無残な状況になりますゆえ。

f:id:karaage:20190417004050j:plain:w640
 無残な状況

Jetson Nanoセットアップ

 些細なこと?は気にせず、セットアップしていきます。

ハードウェアの準備

 電源、HDMIケーブル等、ラズパイの周辺機器がほぼそのまま使えました。あと、カメラモジュールはV2のみ対応らしいので、間違えてV1買わないように注意して下さい。

Amazonベーシック HDMIケーブル 1.8m (タイプAオス - タイプAオス) ハイスピード

Amazonベーシック HDMIケーブル 1.8m (タイプAオス - タイプAオス) ハイスピード

基本的なセットアップ

 基本的なセットアップは以下の公式のサイト通りです。

 手っ取り早くSDカードのイメージの場所とSDカードの書き込み方法が知りたい人は以下参照下さい。

 注意点として、日本語環境は色々問題が出やすいという情報がネットにあったので、英語(English)環境でセットアップしています(まだ私自身は日本語環境では試していません)。

 基板の形からして、Raspberry Piを意識していると感じましたが、SDからブートするところや、Etherでイメージ書き込むところなど、使い勝手もまさにラズパイですね。何せラズパイのカメラモジュールまで使えますからね。

 無事以下のような起動画面が出たらOKです。

f:id:karaage:20190426001119p:plain:w640
 どうみてもUbuntuです、本当にありがとうございました

エディタ環境

 エディタは、VS Codeを使いたいところですが、JetsonはArm系なのでパッケージで簡単にインストールはできません。ホストPCを用意して、SSH経由でJetson Nano上のファイルをVS Codeで編集するのが良いです。

 以下の記事は、ラズパイ用ですが全く同じことがJetson Nanoに対して可能です。

 もしくは、Vimエディタですかね。

Jetson Nanoでディープラーニング

 何はともあれ、ディープラーニングしてみたいと思います。TensorFlowのセットアップ方法は以下の通りです。 https://docs.nvidia.com/deeplearning/dgx/install-tf-xavier/index.html

 面倒くさいので、セットアップを手軽にできるスクリプトを用意しました。

 以下コマンドを実行すると、TensorFlowとその他必要なパッケージが一通り入ります。

$ git clone https://github.com/karaage0703/jetson-nano-tools
$ cd jetson-nano-tools
$ ./install-tensorflow.sh
$ ./install-tools.sh

 画像認識ソフトは、過去にTensorFlow + Kerasで作って、自前のデータを学習させたものを使うことにしました。Jetson NanoではKeras単体をうまくインストールできませんでしたが、最新のTensorFlowでは、Kerasが組み込まれているのでそちらに対応させるコードを書くことで動作させることができました。

 具体的には、Jetson Nanoのターミナルで以下3行のコマンドを実行するだけで、画像認識のソフトが走り出します。プログラムは、画像を犬、猫、カメラの3つに分類するソフトです。

$ git clone https://github.com/karaage0703/keras-pi
$ cd keras-pi
$ python3 inspect_camera.py -d='jetson_nano_raspi_cam'

 実行している様子です。

 最初、認識のスピードがあまりに遅くて悩んだのですが、カメラの設定を詰めたら爆速になりました(カメラを大きい解像度で表示しているとそっちでGPUを消費してしまうようです)。

 噂通りかなりのスピードでした。速度は計っていないので正確な比較はできませんが、体感は過去試したRaspberry Pi + Intel Movidius(下記記事参照)の同等以上ですね。

 ちなみに自前データの学習に関しては、Google Colabで実行しています。学習に関しては、Jetson Nano用に特別にプログラムを組んだわけでなく、以前Mac/Raspberry Pi用に作成して学習させたモデルがそのまま使えました。モデルの学習方法に関しては、以下チュートリアルを作成下さい。

 有料チュートリアルはどうしても買いたく無いという人は、以下の無料チュートリアルをこなしていくと、そのうちできるようになるかもしれません。

まとめ

 Jetson Nanoが届いたので早速ディープラーニングしてみました。Raspberry Piでディープラーニングすると、そのままでは激遅ですし、Intel Movidius使うと学習から専用にソフト書き直す必要があったりとなかなか辛かったのですが、Jetson NanoだとTensorFlow + Kerasで書いたコードがわりとそのまま動いてくれるので良いですね。今回も、昔MacやRaspberry Piで使った学習モデルがそのままJetson Nanoで動きました。これがデファクトの強さですね。

 小型のデバイスでディープラーニングで画像認識したいときは、ほぼ決定版といって良いかもしれませんね。結構楽しくなってきたので、これから色々試して何か作ってみたいなと思います。

 とりあえず、しばらく細かいTIPSなどは以下のQiita記事にまとめていこうと思いますので、興味ある方は参照下さい。

 Jetson Nanoの購入先、スイッチサイエンスさんの他、秋月電子さん他、Amazonでも値段が正規価格とほぼ近くなってきたようです。価格や納期を見比べて購入下さい。

Amazonベーシック HDMIケーブル 1.8m (タイプAオス - タイプAオス) ハイスピード

Amazonベーシック HDMIケーブル 1.8m (タイプAオス - タイプAオス) ハイスピード

参考リンク

NVIDIA Jetson Nano 開発者キットに TensorFlow をインストールする - Qiita

https://devtalk.nvidia.com/default/topic/1050377/jetson-nano/deep-learning-inference-benchmarking-instructions/

Getting Started with ROS on Jetson Nano – Stereolabs

Jetson Nanoにカメラを接続してリアルタイム画像類推を行うには

Autonomous Machines | NVIDIA Developer

Two Days to a Demo | NVIDIA Developer

GitHub - dusty-nv/ros_deep_learning: Deep learning inference nodes for ROS with support for NVIDIA Jetson TX1/TX2/Xavier and TensorRT

GitHub - NVIDIA-AI-IOT/jetbot: An educational AI robot based on NVIDIA Jetson Nano.

Jetson Nanoの機械学習ベンチマークテスト - Qiita

GitHub - antmicro/jetson-nano-baseboard: Antmicro's open hardware baseboard for the NVIDIA Jetson Nano

関連記事

変更履歴

  • 2019/07/04 SDカードのイメージと書き込み方に関して追記
  • 2019/07/01 セットアップ時の言語設定に関して追記
  • 2019/06/29 購入先に関して追記