周辺認識とBEV — 世界を「上から」把握する

カメラは世界を透視投影で歪めて見ます。しかし「あの車まで何m? 割り込まれる?」という判断は、真上から見た地図=鳥瞰図(BEV: Bird's-Eye View)の上でやるのが自然です。点群のクラスタリングから3Dボックス、静と動の2層表現、そしてマルチカメラBEVまで — 自動運転の「認識」の出力形式を動かして理解します。

1. カメラの見る世界と、計画が欲しい世界

同じ交差点シーンを、カメラ視点とBEVで並べて見てみましょう。カメラ画像では遠くの車ほど小さく、距離は「見た目のサイズ」から推測するしかありません。物体同士も重なり合います。一方 BEV では、距離も進行方向も重なりも、そのままの幾何で読み取れます。

カメラ視点 ⇔ 鳥瞰図(BEV)— マウスを載せると両ビューで連動ハイライト
物体にマウスを載せると、もう一方のビューでも同じ物体が光ります
左=車載カメラの透視投影、右=BEV。カメラでは対向車(オレンジ)が近づくほど急激に巨大化し、交差車両(紫)は先行車と重なって見えます。BEVではどの物体も同じ縮尺・同じ形。「2秒後にどこで交差するか」は右の図でしか素直に議論できません。
POINT — なぜ BEV 表現か ①距離・速度・進行方向がユークリッド座標のまま読める。②物体同士のオクルージョン(重なり)が解消される。③後段の予測・経路計画がまさにこの平面上で動くので、座標変換なしで受け渡せる。つまりBEVは「認識の出力」と「計画の入力」を繋ぐ共通言語。認識パイプラインの仕事は、センサごとにバラバラな生データを、この1枚の地図に翻訳することだと言ってよい。

2. 点群から物体へ — クラスタリングとボックスフィット

LiDAR は「物体の表面で反射した点の集まり」をくれるだけで、どの点とどの点が同じ物体かは教えてくれません。古典的な第一歩がユークリッドクラスタリング:近い点同士を鎖のように繋いでグループ化する方法です。

‖pi − pj‖ < dth ⟹ pi と pj は同じクラスタ 距離しきい値 dth 以下の点を連結成分としてまとめる。各クラスタには主成分分析(PCA)で向き付きボックスをフィットする

下のデモでしきい値を動かしてみてください。小さすぎると1台の車が複数クラスタに割れ(過分割)、大きすぎると隣り合う物体がくっつきます(併合)。

ユークリッドクラスタリング — しきい値ひとつで世界の切り分けが変わる
シーンの真実は「車4台・歩行者2人・壁1枚」=7個。dth を 0.4 m 以下へ下げていくと、遠くの壁や車の面が破片化してクラスタ数が不安定に増えます(過分割)。≈ 1.2 m で歩行者ペアが1つに併合し、≈ 1.8 m で縦列駐車の2台(左奥)が融合、さらに上げると車が壁に飲み込まれます。奥の車は手前の車の陰(オクルージョン)で数点しか見えていないことにも注目。ちょうど良い値はシーンごとに違う — これが古典手法の限界です。
注意 — しきい値1つでは全員を救えない 歩行者ペアに最適な dth と、まばらな遠方の車に最適な dth は一致しない。しかも「クラスタ=1物体」という仮定は、密着した群衆やトレーラーで簡単に破れる。この壁を越えるために、現在は点群を直接ニューラルネットに入れて「車らしさ」ごと学習する検出器が主流になった。
古典:クラスタリング系現代:深層学習系
物体の定義「点が密な塊」(幾何のみ)「学習データで車・人とラベル付けされたパターン」
出力クラスタ+フィットしたボックスクラス・信頼度つき3Dボックス
長所学習不要・軽量・未知物体も塊として拾える密着物体の分離、クラス識別、遠方の疎な点にも強い
短所しきい値依存、クラス不明、密着・分裂に弱い学習データに無い物体が苦手、計算コスト
代表例Euclidean Cluster Extraction(PCL)PointPillars、CenterPoint、BEVFormer など

名前だけ紹介すると、PointPillars は点群をBEVの柱(ピラー)状セルに束ねて2D CNNで検出する高速手法、CenterPoint は物体を「BEV上の中心点」として当てる手法。いずれも処理の舞台はBEV平面である点が共通です。

3. 静的な世界と動く物体 — 2層で持つ

検出した物体をどう保持するか。ここで前回(SLAM)の占有グリッドが再登場しますが、ひとつ罠があります。動く物体を地図に書き込むと、通過跡が壁のような「幽霊」として残るのです。

そこで実システムは世界を2層に分けます:動かないもの(壁・駐車車両)は静的な占有グリッドへ、動くもの(車・歩行者)は速度ベクトル付きの動的物体リストへ。

静的地図 + 動的物体リスト — 2層表現
黒=静的な占有(建物・駐車車両)、色付きセル=動的物体(矢印は速度)。「分離せず書き込む」を入れると、走行車や歩行者の通過跡が黒い帯として地図を汚していきます — 静と動を分ける理由が一目で分かるはず。動的リスト側は次レッスン「軌道予測」の入力になります。
POINT — 2層それぞれの役割 静的レイヤは「どこが走れない場所か」を答え、経路計画のコストマップになる。動的レイヤは「誰がどこへ動くか」を答え、軌道予測と衝突判定の入力になる。更新頻度も違う:静的層はゆっくり確実に、動的層は毎フレーム追跡(トラッキング)で更新する。

4. カメラだけで BEV を作る — マルチカメラBEV

LiDAR の点群は最初から3D座標を持つのでBEV化は簡単ですが、カメラ画像からBEVを作るのは一仕事です。古典的な方法は「路面は平ら」と仮定して画素を地面に逆投影する逆透視投影(IPM):

Z = f · Hcam / (v − cv),   X = (u − cu) · Z / f 画素 (u, v) が地面(高さ0)にあると仮定すれば奥行き Z と横位置 X が決まる。ただし段差・坂・立体物では仮定が破れて歪む

現代的な手法は、この変換自体をニューラルネットに任せます。車の周囲に付けた6個前後のカメラの特徴マップを、1枚のBEV特徴マップへ投影・統合するのです(Lift-Splat-Shoot は深度分布を推定して特徴を持ち上げ、BEVFormer は BEV 側のクエリが Attention で各カメラから情報を集めます)。概念図を眺めてみましょう。

マルチカメラBEV — 6つの視野が1枚の特徴マップに溶け合う(概念図)
左=車を囲む6カメラとその視野(色分け)。各カメラの画像特徴が右のBEVグリッドへ投影されていきます。視野が重なる領域では複数カメラの色が混ざる=複数視点の情報が同じBEVセルで統合されることに注目。この1枚のマップの上で検出・予測・計画が走ります。

5. まとめ

一歩先へ — 占有グリッド予測(Occupancy Prediction) 「3Dボックス」という表現には弱点がある:形が箱で近似できない物体(はみ出した積み荷、倒れた木、工事の資材)や、学習データに無い未知物体を取りこぼすのだ。そこで最先端では、ボックスを介さず3D空間のボクセルごとに「占有されているか+何クラスか+どの速度で動くか」を直接ニューラルネットが出力する Occupancy Network 系の手法が使われ始めている(Tesla の Occupancy Network、学術界の Occ3D・OccWorld など)。これは実は、本レッスンの占有グリッドを「学習で予測される・時間方向にも展開される4D表現」へ拡張したもの — 古典と最先端が一本の線で繋がっている好例だ。