masato-ka's diary

日々思ったこととか、やったことの備忘録。

AI RC Carをサマライズしたペーパーを作成しました。

この記事について

この記事はAI RC Car Adventcalendar 2019の最初の記事です。初日の今日はAI RC Carの紹介も兼ねて、AI RC Carの概要をまとめたポスターを作成したので公開します。

AI RC Carを紹介する資料

作成したポスターはタイトルが「DIY Self-Driving Car」になっていますが、AI RC Carとほぼ同じ意味で使っています。このポスターは改変をしなければ印刷、配布や転載は自由に利用して大丈夫です。ただ、何かに利用した場合はご連絡いただけると作者が泣いて喜びます(マストではありません)。商用についてはご相談ください。また誤字や修正点などあればご連絡ください。

f:id:masato-ka:20191201001559p:plain
AI RC Carの紹介ポスター

紹介ポスターを眺めながらAI RC Carを理解する。

せっかくなのでこのポスターを眺めながらAI RC Carの概要をなんとなく掴んでいきましょう。それぞれのセクションごとの補足説明を書いていきます。

1. DIY Self-Driving Carとは?

AI RC Carを簡単に言うとディープラーニングを利用してコースを走行する移動ロボットの総称です。カメラで撮影した画像を頼りに、ステアリングとアクセルを調整しながらコースを進んでいきます。DonkeyCarやJetRacer, JetBotといった有名なものもあれば、オリジナルで作製されたAI RC Carもあります。

2. ハードウェアの基本構成

AI RC Carのハードウェア構成はいたってシンプルです。コースを撮影するためのカメラとディープラーニングを推論して制御を行うシングルボードコンピュータ、それにモータドライバが必要です。これらをラジコンの車体やロボット台車へ搭載すれば最低限の機能を満たします。カメラについてはFPV 160°と広角のカメラが用いられることが多いです。また、シングルボードコンピュータはJetson NanoやRaspberry Pi 3B+を利用します。Jetson Nanoではディープラーニングの学習もJetson Nano上で実行できます。モータは基本的に2つのみです。ラジコン車体ではステアリング用とアクセル用に利用します。対向二輪型のロボット台車では左右両輪を独立したモータで制御します。

3. ディープラーニングを使った走行の仕組み

 ディープラーニングの使い方には大きく二つの方法があります。一つはディープラーニングが画像を入力としてモータの制御値を直接出力する「End-to-End方式」です。もう一つは画像から、進行方向をX,Yの画像上での座標値として出力する方法です。ここでは「ハイブリッド方式」と呼びます。前者はDonkeyCarでよく使われるオーソドックスな方式です。出力が車体のパラメータと密接に関係するので車体ごとに学習が必要です。後者はJetRacerやJetBotのサンプルコードで利用されています。車体ごとのパラメータは後段の制御器で吸収するため車体ごとの学習の必要がありません。しかし、制御パラメータの微調整が必要になります。

 それぞれの方式で使われるディープラーニングのネットワークの構造は実は同じネットワークで実現できます。また学習方法もMSE Lossを目的関数に置いて、回帰問題として学習させることができます。違いは学習データの与え方です。「End-to-End方式」では人があらかじめ運転する教示走行時の画像とラジコンプロポからの入力値を教師データとして学習します。「ハイブリッド方式」では進行方向を画像上での座標を教師データとして学習します。

「End-to-End方式」ではディープラーニングのネットワークは3層のCNNを用いて実現されることが多いようです。この場合、未学習のネットワークを学習させるため、数千枚の画像をサンプリングし学習を行います。学習にはGoogle Corabolatoryなどクラウドのサービスを利用される場合が多いようです。Donkey Carで利用されるモデルは以下のリポジトリから確認できます。KerasLineaがよく利用されます。

github.com

「ハイブリッド方式」では人手でのアノテーションが必要になります。そのため、多くの画像をサンプリングすることが難しいです。そこで転移学習を利用した学習を利用します。ResNet-18などの軽量の物体認識モデルをベースに転移学習します。学習データ数はコースなどにより変化しますが、単純な周回コースであれば50から100枚程度の画像で十分に学習できます。JetsonNanoであれば10分程度と現実的な時間で学習が完了します。

日本のコミュニティについて

より AI RC Carを深く知るには実際に動いているAI RC Carを見て、自分で手を動かすことが重要です。そのための日本での情報源、コミュニティについて紹介します。

Facebookグループ

AI RC Carに関連するFacebookグループはいくつかありますが、個人的な主観で一番活発に思えるのが「AIでRCカーを走らせよう!」グループです。このページでは活発な意見交換ややってみた記事、走行会情報が流れてきます。

Slack グループ

上記Facebookグループから派生してSlackのコミュニティ AI Car Communityがあります。世界的なSlackのグループとしてはDonkeyです。こちらはDonkeyCarのコミュニティーページから参加することができます。英語でのコミュニケーションですが、海外での盛り上がりを感じることができます。申請すればどなたでも参加することができます。

www.donkeycar.com

まとめ

2018年末ごろから徐々に盛り上がりを見せたAI RC Carですが、2019年はより大きな盛り上がりを見せた年だったのではないでしょうか。私自身、今年の春ごろからなんとなく存在を知り、7月にはどっぷりと沼にはまっていってしまいました。初めて見ると意外に簡単に始めることができます。その後奥の深さにどっぷりとひきづりこまれますが。。。もう始めているよという方も、この記事を見て興味を持ったという方も、2020年はどこかで一緒にAI RC Carを走らせられることを楽しみにしています。