【自作UAV】深層学習が何を学んでいるのかを知る NVIDIA BB8がルールをどう作ってるの?【PilotNet・TensorKart】

スポンサーリンク
広告

TensorKartのプログラムはNvidiaを参照している

こないだから、VRCを自動学習で走らせられないか?夜中にコツコツ遊んでいます(笑)

【Windows】USB取り込みのためのVisual Studio。。 DirectX SDKのインストールが止まるのよねぇ~からのUSB取り込み成功【Visual C++】
USB取り込まなきゃなんだけどSDKが入らない問題 で、ちょいと不明のままだったんですが・・ Zilinx のFPGAのボードを眺め...

画像とUSBをWindowsで保存するところまでできていますが、も一度、TensorKartを読みなおそうと。。

GitHub - kevinhughes27/TensorKart: self-driving MarioKart with TensorFlow
self-driving MarioKart with TensorFlow. Contribute to kevinhughes27/TensorKart development by creating an account on GitHub.

それで、これを見ていると

Special Thanks To

という記述があって、それに飛ぶと・・

Autopilot-TensorFlow

A TensorFlow implementation of this Nvidia paper with some changes.

ってなってました。ということは、NvidiaのBB8っていう自動運転のモデルを、GoogleのTensorFlow向けに変更したというものが基本になっているんです。

って、知ってたんですが・・・あらためて、プログラミングするために、まずは復習して、中身のモデルや概要を勉強してみます(笑)

Nvidiaの自動運転はエンドツーエンド学習

元になっている論文は、自動運転車のためのエンドツーエンド学習 ですね。

概要を読むと・・まさにTensorKart(笑)

畳み込みニューラルネットワーク(CNN)をトレーニングして、単一の前面カメラから生のピクセルをステアリングコマンドに直接マッピングしました。このエンドツーエンドのアプローチは驚くほど強力でした。人間からの最小限の訓練データを用いて、システムは、路線標示の有無にかかわらず、高速道路上の地方道路の交通量を知ることを学び、また、駐車場や舗装されていない道路などの視覚的なガイダンスが不明なエリアでも動作します。このシステムは、訓練信号として人間の操舵角のみを有する有用な道路特徴を検出するなど、必要な処理ステップの内部表現を自動的に学習する。道路の概要などを検出するために明示的に訓練したことはありませんでした。レーンマーキング検出、経路計画、制御などの問題の明示的な分解と比較して、エンドツーエンドのシステムはすべての処理ステップを同時に最適化します。我々はこれが最終的により良い性能とより小さいシステムにつながると主張する。人間が選択した中間的な基準を最適化する代わりに、内部コンポーネントが自己最適化して全体的なシステム性能を最大化するため、より良い性能が得られる。例えば、車線検出。そのような基準は、人間の解釈を容易にするために選択されており、最大のシステム性能を自動的には保証しない。最小の処理ステップ数でシステムが問題を解決することを学習するので、より小さいネットワークが可能です。私たちはトレーニングのためにNVIDIA DevBoxとTorch 7を使用し、運転する場所を決定するためにTorch 7を実行するNVIDIA DRIVETM PX自走車コンピュータも使用しました。システムは毎秒30フレーム(FPS)で動作します。

学習のシステムは、このように、3つのカメラ画像をCNN(畳み込みニューラルネットワーク)の入力として、ステアリング信号とCNNの差分をバックプロバケーションで学習させているようです。僕が修士の時にやってたロボットの力覚制御と同じだけど、当時は、これができなかったんですよねぇ~

動かす時は、あれまぁ~ 真ん中のカメラ画像だけで、ステアリングを動かしてます。おもろいなぁ。。 画角違いの信号を入れて学習しておいて、動かす時は1つの画像なんですね。なんかここに秘密があるのかな?

ネットワークのモデルは、9層のディープラーニングモデルのようです。どこまでをニューラルネットと呼ぶかで、何層って数えるのか難しいですねぇ(笑)。 どこをどうしたら9層なんだろう?(笑)

Inputは66×200ピクセルの画像3枚。 正規化層が2層あって、特徴抽出のCNN層が5層で、総接続で集約する層は3層のようです。

学習用のビデオは10FPS(Frames per Sec)で行ったとのこと。Argumentationなど少し画像をシフトしたり、ローテションしたりしているって本文でも書いてありますね。Figure2(図2)の通りなんでしょう。

シミュレータで動かして、600msec以内でできる計算量にしているみたいですね。ラジコンが100msecなので、かなりゆっくりしか走れなさそうですけど、GPUのパワーでもこれくらいが2016年時点での限界だったんでしょうね。

ちなみに、Jetsonも少し安くなってきてるかな? 学習側はクラウドでして、実行側はJetsonでという組み合わせだとできるのかもね。。

TK1だと 少し安くなってきてるのですね。

最近、またこの学習器がどんな学習をしているのか?っていう論文がでてます。

ディープニューラルネットワークがエンドツーエンド学習でどのように車を操縦するかを説明する

ディープニューラルネットワークがエンドツーエンド学習でどのように車を操縦するかを説明する

同じように概要だけ・・ブラックボックスだったニューラルネットが何を見ているのか?っていうのが書かれています。

自律走行のための完全なソフトウェアスタックの一環として、NVIDIAはPilotNetと呼ばれるニューラルネットワークベースのシステムを開発しました。 PilotNetは、人間がデータ収集車を運転して発生させた操舵角と対になった道路画像を使用して訓練されています。それは、人間の運転手を観察することによって必要な領域の知識を導き出す。これにより、人間のエンジニアがイメージ内で重要なことを予期する必要性がなくなり、安全運転に必要なすべてのルールが予見されます。路面標示が存在するかどうかにかかわらず、PilotNetはさまざまな運転条件でのレーンキープを成功させることができました。ここで説明する作業の目的は、PilotNetの学習内容とその決定方法を説明することです。この目的のために、道路画像のどの要素がPilotNetのステアリングの決定に最も影響するかを判断する方法を開発しました。結果は、PilotNetが確かに道路上の関連オブジェクトを認識することを学ぶことを示しています。レーンマーキング、道路の端、その他の車のような明白な機能を学習することに加えて、PilotNetは、道路の端を覆うブッシュや非定型車両クラスなど、エンジニアが予測してプログラムすることが難しいより微妙な機能を学びます

上に書いたディープラーニングの層の平均値をとってみると、特徴点がわかるそうです。論文みると、単に、OpenCVでレーンキープのレーンを認識と同じようなことが出来ているってことのようです。じゃぁ、OpenCVのレーン認識でいいじゃん。。って突っ込んだりしますが、このレーンの認識から、ステアリングの動きに変換するのが、たぶん一苦労するところなんでしょうね。

CNNの可視化については、この論文が元のようですね。

VisualBackProp:CNNの効率的な可視化

NvidiaでこのPilotNetを研究開発しているのは、Bojarski(ボヤッキー)みたいです。

arXiv.org Search

AutoPilot-tensorflowは・・

こいつの、model.pyを見てみると、66×200の画素で、まったく同じディープラーニングのモデルをTensorFlowで書き直したようになっていますね。

で・・・肝心のTensorKartは?

長くなったので、また次回(笑)

コメントを残していただけるとありがたいです

Loading Facebook Comments ...
%d人のブロガーが「いいね」をつけました。