自由課題

学んだり、考えたり、試したりしたこと。

Jetson Nanoで自律走行ラジコンを作る(6)

今回は、前回作ったDNNにより推論を実行するモジュールをラジコンの制御に組み込む。

「Jetson Nanoで自律走行ラジコンを作る」シリーズのまとめ記事は以下。

kimitok.hateblo.jp

Gitリポジトリは以下。

github.com

続きを読む

Jetson Nanoで自律走行ラジコンを作る(5)

今回は、TensorRTというDNNの推論エンジンを利用して前回作成したモデルをJetson Nano上で実行する。

「Jetson Nanoで自律走行ラジコンを作る」シリーズのまとめ記事は以下。

kimitok.hateblo.jp

続きを読む

Jetson Nanoで自律走行ラジコンを作る(4)

今回はDeep Leaningのモデルを作成し、前回作成したデータセットを使用してモデルを学習させる。

「Jetson Nanoで自律走行ラジコンを作る」シリーズのまとめ記事は以下。

kimitok.hateblo.jp

続きを読む

Jetson Nanoで自律走行ラジコンを作る(3)

「Jetson Nanoで自律走行ラジコンを作る」シリーズのまとめ記事は以下。

kimitok.hateblo.jp

モデルの訓練に必要なデータをGoogle Driveにアップロードできたので、ブラウザ上からPyhonが使える実行環境であるGoogle Colabを利用してモデルを作成しようと思う。

colab.research.google.com

今回は前回機体から収集したデータの内容を確認しつつTensorFlow上でデータセットを作成する。
やり方はTensorFlowのチュートリアルを参考にした。

続きを読む

「Jetson Nanoで自律走行ラジコンを作る」シリーズ 記事一覧

「Jetson Nanoで自律走行ラジコンを作る」の各記事のリンク・簡単な内容のまとめです。
記事を追加するたびに更新予定です。

続きを読む

Jetson Nanoで自律走行ラジコンを作る(2)

前回記事は以下。

Jetson Nanoで自律走行ラジコンを作る(1) - 自由課題

今回は、機内で収集したデータをGoogle Driveにアップロードするスクリプトを作成してみようと思う。今回はPythonで書く。

Google DriveにアクセスするためのAPIはDrive APIというらしく、APIの説明は以下にある。

developers.google.com

APIを使用したい場合はGCPのプロジェクトを作成していろいろな設定をする必要があるので、心を無にして言われた通りにする。クレデンシャル作成時にアプリケーションの種類を何となく"TVs and limited input device"にした*1

簡単な動作確認を行うためのスクリプトが用意されているので、これを実行する。

developers.google.com

上記を実行するには以下が必要だった。

$ sudo apt-get install python3-pip
$ pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

スクリプトを実行すると、Google Drive内のファイルが10個表示される。ここまで確認できたら、最終的には何かデータをアップロードするので、いろいろ調べながら適当なファイルをアップロードするスクリプトを書いてみる。以下の公式ドキュメントが参考になった*2

Upload file data  |  Google Drive API  |  Google Developers
google-api-python-client/media.md at master · googleapis/google-api-python-client · GitHub
API Documentation
https://googleapis.github.io/google-api-python-client/docs/dyn/drive_v3.files.html

ちなみに、Google DriveAPIを使用するためには単に自分のGoogleアカウントのパスワードを用意するだけではダメで、GCP上にアプリケーションを作成する必要があるのでちょっと面倒ではある。

いろいろドキュメントを読んだり実際の動作を確認したところによると、少なくともこの記事執筆時点では、ファイルのアップロード速度はそれほど速くなく複数ファイルをバッチアップロードする機能もないように見える。今回のケースでは秒間30個のファイル*3が生成されるので、訓練データの生成時にリアルタイムで各ファイルをGoogle Driveにアップロードするのは無理そうだ。何となく走行中リアルタイムにデータをアップロードするのを想像してテンションを上げていたので残念である*4

仕方がないので、訓練データを収集し終わった時点で一旦データをtarballにして、このファイルをアップロードすることにする。Google Drive側でフックを掛けるか学習スクリプト内で前処理するかしてデータを展開する予定である。

tarballを作成するのは標準のtarfileパッケージを使えばよい。Pythonにはこのような基本的なものはバンドルされているのでちょっとしたものを作りやすい。

スクリプトは以下にpushしてある。

github.com

今回の実装追加でデータフローは以下のようになった。

f:id:kimito_k:20210523141018p:plain

Jetson NanoにSSHで接続してスクリプトを実行してもよいのだが、実行するコマンドはいつも同じなのでゲームパッドのSELECTボタンを押すと実行されるようにした。
あまり考えていないが、おそらく手動走行と自律走行の切り替えは何らか必要なので無駄になることはない気がする。

ということで、数分間自宅のリビングを適当に走行させて5500セットくらいの訓練データを収集・アップロードした。画像(360x240)は1枚20〜30KB程度で、展開後のデータサイズは総計200MB程度のようだった。

うまくいくか分からないが、次回はいよいよモデルを作り始めてみる。

*1:合っているかは不明

*2:ドキュメントがあまり整理されていないようで情報を見つけるのに正直かなり苦労した

*3:15FPSで1フレームごとにJPEGと制御データのファイルを作成する

*4:おそらくIoT関連のクラウドサービスを使用するようにすれば実現できそうだが、それはそれで多少手がかかりそうなので気が向いたらやってみることにする