🚗

【TURING】End-to-Endで限定コースをぐるぐる走る機械学習モデルを作って実際に車を動かした話【自動運転】

2022/02/28に公開

こんにちは、TURING株式会社でエンジニアをしている しおつか です。

この記事を読んでいただいている皆様の多くはTURINGって?そんな感じだと思います。

名前を知っていただいている方でも、最近Twitterとかで聞くけど結局なにやってるの?実際なにかやったの?という感じかもしれません。

TURINGは、2021年8月に創業した完全自動運転EVの製造・開発を目指す会社です。
この記事では、TURING最初のプロジェクト「Budapest」 についてお話しします。

構成は、

1. 概要
2. 技術的アプローチ
3. その後の取り組み
4. 終わりに
付録:Budapestの名前の由来

です。

1. 概要

Budapestは、カメラ画像から深層学習でEnd-to-Endでハンドルを制御し、限定空間の決まったルートを周回し続けるというプロジェクトです。
このプロジェクトの目的は、車の改造から、制御、深層学習による実車走行、を社内で一気通貫して行うことで、自動運転スタートアップとして知見を溜めること。それを皆さんに共有することでTURINGがどういう会社なのか知ってもらうことです。

訓練データには、カメラで取得した”画像”とそのときの”ハンドル角度”が含まれています。このペアを深層学習で学習し、任意の画像から対応するハンドル角度を予測します。

この予測を実際の車で行うと決まったコースをぐるぐるすることができます。

https://twitter.com/issei_y/status/1470936756208168965

YouTube Channelはこちら

2. 技術的アプローチ

ここでは、以下の構成でわたしたちのアプローチをお話しします。

  • ベース構成
  • 未来への時系列モデル
  • スリットモデル
  • 過去からの時系列モデル

2.1. ベース構成

2.1.1. 車の改造

最初に車の改造を行いました。まずは、車の情報の読み込みです。車にはハンドルの角度や速度、アクセル値、ヨーレート、さらにはドアの開閉状態などの様々な情報がCANと呼ばれる通信方式で流れています。それらをOBD-Ⅱ(車載式故障診断装置)からパソコンに取得できるようにしました。次に、車への書き込みです。ハンドルの角度や車体の速度などをパソコンから指定して車を動かせるようにしました。

ここまでくれば後は機械学習の問題になります。機械学習で大事なものはデータモデルです。

2.1.2. データについて

Budapestで取得したデータは2つです。走行画像とその時点のハンドル角です。

走行画像

カメラとしてウェブカメラを用いました。当初はウェブカメラの横に写っているGoProをカメラとして使うことを試みました。しかし、GoProの想定された使い方は主に録画であり、リアルタイムでパソコンと通信をする場合、頻繁にドライバにエラーが生じてしまいました。

そのため、私たちはより安定性の高いウェブカメラを採用したのですが、このことによりある問題が起こりました。これについては2.2章で触れます。

ハンドル角

Budapestでは、ハンドルの角度を機械学習モデルに推論させました。そのため、走行画像に対応するハンドル角をCANから取得しました。これに基づいて教師ありデータセットを作成し、機械学習に必要なデータが準備できました。

2.1.3. モデルについて

ここでは学習時と実機走行時(推論)に分けてお話しします。

学習

機械学習モデルにはresnet18を採用しました。ResNetは深層学習の代表的モデルの1つです。簡単に触れると、従来のモデルはモデルの出力を学習に使っていたのですが、ResNetは入力と出力の差(残差)で学習することで、モデル劣化を改善しています。モデル劣化とはモデルを大きくしていくとある段階で学習がうまくいかなくなるという問題です。

モデルは入力として車前方の画像を受け取り、出力としてハンドル角を推論します。
その後、モデルの出力と正解のハンドル角で損失を計算し、学習を行います。

実車走行(推論時)

推論時は、学習したモデルの結果を実際に車を制御するために用います。
ウェブカメラの画像を入力として受け取り、モデルがハンドル角を推論、PID制御によってハンドルを制御します。PID制御とは自動制御で最も多く使われる方式であり、Proportional(比例)、Integral(積分)、Differential(微分)の3つの変数により、きめ細かく安定した制御をすることができます。

その結果、上のTwitterの動画のような運転ができました。

それではこれから、改良した3つのモデルについてお話しします。

2.2. 未来への時系列モデル

ベースモデルを読んで皆様はどう思われたでしょうか。私ならこう思います。不安じゃない??
そうです。全然安定しませんでした。各場面(フレーム)ごとの推論結果を繋げてるだけなので、ハンドルガクガクでした。とても人を乗せられないし、周回もできませんでした。

そこで、未来nフレーム分のハンドル角をモデルに予測させてみました。実験では2~3秒先まで予測させました。

結果として、とてもうまくいきました。ハンドルは安定し周回にも成功しました。

周回できたのでBudapestはここで終わるつもりでした。ですが、ここでウェブカメラを使ったことによる問題が起きました。

当初、ウェブカメラは車の中に固定する予定でした。Budapestは11~12月に行ったプロジェクトなので、車内の温度もそこまで上がらず壊れないだろうという判断です。……壊れました。直射日光の影響も考えられましたが、おそらく熱のようでした。車内の熱のこもりやすさを甘くみていました。このため、Budapestでは固定を諦め、降車時に毎回ウェブカメラを取り外していました。

その結果、同じ場所の画像でも毎回微妙にズレが発生し、カメラの取り付け位置に非常にセンシティブな機械学習モデルができてしまいました。

この問題を解決するために取り組んだものが次のスリットモデルです。

2.3. スリットモデル

カメラの取り外しによって発生する走行画像のズレはウェブカメラを使う限り解決できない問題でした。そこでズレの発生自体は許容し、ズレに対し堅牢なモデルを考案しました。

下図はスリットモデルの概略図です。画像を一部隠し(少し黒い部分)、見えている範囲を動かすことで疑似的にズレを発生させ修正動作を学習させました。

例えば、画像の右側を隠したとします。車は疑似的に左に寄っている状態です。そのときモデルには本来の軌道に戻るようなハンドル角度を学習させます。

その結果、モデルはズレに対し堅牢になり安定して周回をすることができるようになりました。

現在、来客の方に体験していただく場合やYouTubeの動画はこのモデルをベースとしています。

最後にこのモデルに対しあと少しだけ工夫を加えて安定性を向上させた過去の時系列情報の考慮をご紹介します。

2.4. 過去からの時系列モデル

ここまでは1枚の画像からハンドル角度を予測していました。しかし、運転は過去からの積み重ねによって成り立ちます。そこで、過去のnフレーム分の画像を入力として与えることで現在フレームに至るまでの過程を考慮させることができます。だいたい2~3秒前からの画像を与えています。

ここまでの、「未来への時系列モデル」+「スリットモデル」でも周回できていましたが、さらに「過去からの時系列モデル」を追加することでより安定性が増しました。

3. その後の取り組み

Budapestの目的は、決まったルートカメラだけ深層学習によるEnd-to-Endで自動走行する。というものでした。
その目的は達成されたので、Budapestというプロジェクトは終了しました。

しかし、今後TURINGがLevel5自動運転を達成するためには、道路を、交通状況を、世界を、人間以上に知る必要があります。

その未来を見据え、Budapestの最後に単眼深度推定Semantic Segmentationなども複合的に学習させ、機械学習モデルがより状況を理解できるようにする取り組みをしました。

https://twitter.com/issei_y/status/1481865849451724801

今後は、物体検出や、単眼深度推定などの技術により、歩行者回避や車の停止機能なども加えていく予定です。

製品化に向けては、産業用カメラを用いることで高い安定性を保証し、複数台カメラによる周辺状況の深い理解を実現していきます。また、より豊富な計算資源による高精度なモデルの搭載を進めていきます。

ぜひ引き続きTURINGにご注目ください!

4. 終わりに

完全自動運転車のためには、機械、ロボット、AIなど多くの分野のエンジニアが必要です。TURINGは自動運転の実現とそれによる社会の未来を信じています。ぜひ現代最高のエンジニアリング課題の一つ完全自動運転を一緒に解いてみませんか。皆さんの応募を心からお待ちしています。

問い合わせ先
弊社求人一覧およびWantedlyをご覧ください。
また、 info@turing-motors.com 宛にお問い合わせいただけます。その他ご質問や気になる点がありましたら、お気軽にTwitterのDMをお送りください。共同代表山本・青木どちらもDMを開放しております。
@issei_y, @aoshun7

付録:Budapestの名前の由来

TURINGではプロジェクト名に世界の都市の名前をつけています。(他プロジェクトに、Amman(ヨルダン)やCanberra(オーストラリア)、Dakar(セネガル)など)。
Budapestはハンガリーの首都です。なぜBudapestが最初のプロジェクトに採用されたかというと、オフィスのカレンダーに載っていたからです。偶然です。Budapestはもともと別の町だったBudaとPestが合併したという歴史があり、自動車とAIの融合の先に到達する自動運転車とつながるところがあるという後付け設定はあります。


Budapest Member
Kento Tokuhiro, Keita Miwa, Yuichi Inoue, Daiki Shiotsuka

Written by
TURING エンジニア 塩塚大気

Tech Blog - Turing

Discussion