Uberの自律走行車事故, 原因を考察してみた
Uberの自律走行車の死亡事故から約2週間が経過し, 情報もだいぶ上がってきました.
事故原因についての大まかな考察はこちらのwiredの記事で技術・制度の両面からすでになされているので, このブログでは技術面から少し詳しめに事故原因について考えてみようと思います.
事故概要についておさらい
- 2018年3月18日夜, 米国アリゾナ州にて自動車死亡事故が発生
- 自動走行モードで走行中のUber社の車両が歩行者と衝突
- 被害者は49歳女性, 事故当時自転車を押して車道を横断中
- 走行中の車両には緊急用にオペレーターが在中していた
車載カメラが捉えた衝突の瞬間. より具体的に状況がわかるかと思います.
なぜ事故が起こったのかを考えるために, 次項ではUberのシステムがいかにして事故を防ぐのかを書いていきます.
自律走行車の障害物検知メカニズム
Uberの自律走行車には大きく3種類の障害物検知センサが搭載されています.
- 赤外線ライダー(車体上部の箱っぽいやつ):
360度全方位に赤外線を照射し, その跳ね返りをもとに車体周辺の三次元距離データを数フィートから最大数百フィートの範囲でスキャンする. スキャンは毎秒数回行われる. - シグナルレーダー(車体前面):
電波を照射することでその跳ね返りをもとに周辺環境をスキャンする. 赤外線と異なり霧や雪による機能低下を起こさないため, ライダーセンサーの補助として使われる. - 遠近両用光学カメラ(車体上部の板っぽいやつ):
一般的なカメラの原理で車体周辺を撮影する. 上記2つと異なり, 色を検出できるため, 後述のアルゴリズム処理を加えることで, 正確なオブジェクトの特性検知(ex: 歩行者の特徴, 標識に書いてある文字...etc)を可能にする.
異なる役割のセンサを組み合わせることで, 複雑な周辺環境を漏れなく掌握しようとしているんですね.
続いて, センサからの情報はコンピュータービジョン(CV)アルゴリズムで処理されます.
そして, この処理を経た情報が, ハンドルやブレーキといった車体の動作に命令を出す指示系統に送られることによって, 最終的に自動走行車は安全に駆動することができます.
これらの機構を用いて, 一般的に自律走行車は, 下記のフローで人物を検知し安全に運行しています.
- CVアルゴリズムはまず, ライダーとレーダーの情報をもとに動く(or静止した)点のパターンとして歩行者を検知する. この情報のみでは我々人間が見てわかるようなレベルで歩行者の特徴を認識しているわけではない.
- これに加えて, 光学カメラで撮影された映像情報を処理することによって最終的にアルゴリズムは歩行者の情報を包括的に検知することができる.
- 検知された情報が運転命令系統に伝わり自律走行車は適切な挙動(ハンドル, ブレーキ)で事故を防ぐことができる.
しかし, 以上はあくまでもレギュラーケースであり, 今回の事故では様々な悪条件が重なりました.
今回の事故についてケース検証
掲載した事故映像を見てもらえばわかる通り, 大きく3つの要素がCVの認識プロセスにマイナスに働きました.
- 悪条件1: 現場は街灯が間隔おきに並ぶ夜道
- 悪条件2: 被害者は街灯に照らされていない区画にいた
- 悪条件3: 被害者は上下ともに暗めの服装で, 上半身は黒一色のコートを着用
条件1, 2より光学カメラセンサでは歩行者を事前に検出することができなかったと考えられます.(おそらくカメラセンサは暗視対応していない ※要調査)
これらを踏まえると, 映像を根拠に事故原因として以下の2つが考えられます.
- 可能性1: 歩行者を事前に検知できていたが, 運転系統への伝達が間に合わなかったor伝達系統が故障していた
- 可能性2: ライダーとレーダーの情報では歩行者を正しく検知することができなかった
ただし, 可能性1については, 下の記事に
"Uberのシステムは衝突の0.9秒前には被害者を検知できていた"
とあり, CVアルゴリズムから運転系統までのコミュニケーションに約1秒もかかるとは考えにくいです.
そのため, おそらく事故原因は可能性2であると思われます.
可能性2とは具体的には,
走行車は衝突の0.9秒前に被害者を検知することができた.
しかし, ライダーとレーダーの情報のみでは
車体前方に三次元のオブジェクト(人間)があり, 現在接近中, このままでは衝突する.
とまでは判断できなかった.
ということです.
ライダーからのデプス情報をもとに正確に環境情報を認識するアルゴリズムを実装することは, 自動運転技術の最も難しい課題でもあり, 今回の事故はその根本的な課題を突いているとみることもできます.
例えば, 下のようなデプス画像を見せられて, 人間にはなんとなくその情景がわかりますが, 機械学習ではこれを点の集合体としてではなく, 2次元の情景として理解させることは難しいのです.
また, 悪条件3の通り, 歩行者は夜間に黒めの服装であり, 赤外線は黒色の認識に弱いことから, ライダー情報からでは判断系統が正しく機能しなかったこともうかがえます.
まとめ
ここまでを総括して, 以下に筆者の考える事故原因を整理してみました.
- 自動走行車は判断アルゴリズムの決め手の部分で光学カメラに依ると頃が大きいが, 夜間であったことと被害者が暗闇にいたことから光学カメラが適切に機能しなかった
- 歩行者の服装は赤外線ライダーの検出メカニズムと相性が悪かった
- こうした不完全なセンサリングデータからでは, アルゴリズムは"パターンを検出"することはできたが, "歩行者を検知"することはできなかった
- アルゴリズムが衝突可能性があると判断しなかったため, 停止命令系統も作動しなかった
結論としては, 悪条件が重なったとはいえ正しく歩行者を認識することができなかったCVアルゴリズムに非があると言えます.
今後, 同様の事故を防ぐためには,
といった方向性が考えられますが,
今回の事故が起こってしまった以上は, これが現時点での自動運転技術の限界だと言えるでしょう.
最後に, そもそも搭乗オペレーターが機能していれば死亡事故には至らなかったのでは, と考える人は多いと思います.
あの視界状況とはいえ, ライトに歩行者が映ってから衝突までにハンドルなりブレーキをきることは人間の運転手であれば可能だったはずです.
人間がいるからこそ発生しうる, イレギュラーな状況への対処も含めて,
完璧に自律走行車に安全を遵守させるということが, 現時点では高望みだったのかもしれません.
※追記
これを書き終えた次の日にwiredが詳細な検証記事を出してました.
こちらの記事では, 事故原因として命令系統のバグも挙げられていますね.
このブログでは, 命令系統のバグに関しては一考してスルーしてましたが...