Skip to main content

BEV Perception

BEV Perception は、camera や LiDAR の sensor data を、上から見下ろした Bird's-Eye-View representation に変換して scene を理解する方法です。Autonomous driving で特に重要です。

なぜ BEV なのか

自動運転では、planning は車両周辺の地面平面に近い coordinate で行われます。Front camera image のままでは、距離や位置関係が perspective によって歪みます。BEV では、object、lane、road boundary、occupancy を同じ top-down coordinate で扱えます。

Camera-to-BEV

Camera から BEV を作るには、image feature を 3D / BEV 空間へ lift する必要があります。Depth distribution を推定して feature を lift する方法や、transformer attention で BEV query が image feature を参照する方法があります。

LiDAR-camera fusion

BEVFusion のような method は、LiDAR と camera の feature を BEV 空間で fuse します。LiDAR は正確な geometry、camera は texture / semantics に強いため、相補的です。

数式で見る image-to-BEV の lift と pooling

BEV perception の中心は、camera image の feature を ego 座標系の BEV grid に持ち上げることです。Camera ii の pixel u~\tilde{\mathbf{u}} を camera coordinate に戻し、depth dd を仮定すると 3D 点が得られます。

Xc=dKi1u~\mathbf{X}_c=d\,\mathbf{K}_i^{-1}\tilde{\mathbf{u}}

Camera から ego 座標への変換 TeciSE(3)\mathbf{T}_{e\leftarrow c_i}\in SE(3) を使って、ego 座標へ移します。

Xe=TeciXc\mathbf{X}_e=\mathbf{T}_{e\leftarrow c_i}\mathbf{X}_c

BEV grid 上の cell (x,y)(x,y) への projection を Πbev\Pi_{\mathrm{bev}} とすると、BEV feature は次のように pooling されます。

Fbev(x,y)=i,u:Πbev(Xe(i,u))=(x,y)wi,ufi(u)\mathbf{F}_{\mathrm{bev}}(x,y) =\sum_{i,\mathbf{u}:\Pi_{\mathrm{bev}}(\mathbf{X}_e(i,\mathbf{u}))=(x,y)} w_{i,\mathbf{u}}\,\mathbf{f}_{i}(\mathbf{u})

各項の意味は次の通りです。

  • fi(u)\mathbf{f}_i(\mathbf{u}) は camera ii の pixel feature です。
  • wi,uw_{i,\mathbf{u}} は depth 分布や visibility に応じた重みです。LSS のように depth distribution αi,u(d)\alpha_{i,\mathbf{u}}(d) を予測する場合、ww はこの確率を含みます。
  • 多 view の feature を同じ cell に重ねて足すことで、obstacle が複数 view から強く支持されている領域ほど BEV feature が強くなります。

この式の気持ちは、「camera image を平面に貼り付けるのではなく、各 pixel が ego 周りのどの位置を見ているかを幾何で計算し、地面座標の grid に積み上げる」というものです。Depth が不確実だと BEV feature がぼけるため、depth 分布を予測する LSS 型や、attention で BEV を直接 query する BEVFormer 型などの設計が使われます。

関連ページ

主なソース