時間情報の物体検出精度への影響度 (LiDAR Sweep)
概要
本記事では3D物体検出モデルで学習/推論する際に入力する時間情報が与える出力への影響度を調査したものである. ここで扱う時間情報とは LiDAR Sweep に付与される timestamp である. 自動運転領域では連続的に収集される複数の点群データをマージして1つの密な入力データとして取り扱うことがある. このとき基準となる点群データの timestamp と マージされる他の点群データの timestamp の差を特徴量としてモデルに入力する. この値を0に置換した場合とそのまま利用した場合にモデルの出力にどのような変化が起きるか調査した内容をここに記す.
LiDAR Sweep とは
LiDAR センサが周期的に周囲の環境を情報を収集する動作, またこれらで取得される点群データを示す. LiDARから照射したレーザーが物体に反射して戻ってくるまでの時間や強度を計測することで物体までの距離や形状情報を取得することができる. 以下にLiDAR Sweep の動作イメージを示す.
LiDAR Sweep の動作イメージ (参照元: https://www.kudan.io/blog/3d-lidar-slam-the-basics/)
このよう周囲の情報を取得することができるため, 自動運転技術においては高精度3次元地図の作成や周囲の環境変化を知覚するための技術に LiDAR Sweep が利用される. 自動運転技術における LiDAR や点群の役割については以下の論文を読むと理解が進む.
LiDAR Sweep を使用した3D物体検出
前述したとおり, LiDAR Sweep を利用することで周囲の物体の形状や物体までの距離を知覚できため, LiDAR Sweep を使用した3D物体検出の研究が進められている. これらの研究では2D (画像) の物体検出技術から派生した畳み込みやトランスフォーマーによる特徴量抽出が使用される. しかしながら, 画像と LiDAR Sweep のデータには規則性と密度に大きな違いがあるため, データの処理を工夫する必要がある.
画像に関しては画素が行と列で規則正しく並べれら, 一定間隔に情報が集約される. 一方で LiDAR Sweep に関しては, 素の各点が画像のように規則正しくならべられず, 3D空間から得られた情報を不規則に持つ. また, 画像については各ピクセルになにかしらの情報を持つ密なデータであるが, LiDAR Sweep に関しては LiDAR からのレーザーが反射する箇所が情報として表現されるため, 3D空間の大部分のに関しては情報がない疎なデータとなる.
このように画像と LiDAR Sweep では情報の性質が異なるため, Voxelization や BEV (Bird's-eye view) を利用することでLiDAR Sweepの情報を規則正しく, より密にすることで物体検出の精度を上げている.
以下のリポジトリでは3D物体検出モデルがまとめらているため, 手始めに利用すると LiDAR Sweep による3D物体検出の感覚を掴める.
また自動運転に限らず3Dセグメンテーション関連の技術がまとめられたリポジトリに関しては以下がある.
前述したとおり LiDAR Sweep は疎なデータである. このため3D物体検出では周期的に取得される複数の LiDAR Sweep をマージすることでより密なデータにすることがある. 以下に1シーケンス分および5シーケンス分の LiDAR Sweep を示す (緑: sequence1, 青: sequence2, 黄色: sequence3, 赤: BBox).
1シーケンス分の LiDAR Sweep
3シーケンス分の LiDAR Sweep
上記の画像で示したとおりシーケンス数を増やすことでより密なデータになる.
サブタスク (Velocity) の学習/推論
物体検出では特定の物体の位置情報をBBoxで示すが, このメインタスクの他に該当物体の velocity をサブタスクとして学習/推論することがある. 検出した物体の velocity を利用することで, 該当物体の次フレームの凡その位置を特定することができ, 連続したフレーム間における推論された velocity と物体検出された位置の関係から物体を追跡することができる.
学習時の velocity は推論対象となるフレームの前後フレームの物体中心と時差より算出でき, nuscenes-dvekit の box_velocisty が参考になる.
velocity の算出には物体の位置と時差が必要なるため, velocity を学習/推論するためにも時間情報が大きく寄与すると考えられる. 実施に OpenPCDet の nuscenes_dataset では time_lag (LiDAR Sweep のシーケンス間の時差) をモデルのへの入力値として学習及び推論をしている. 今回はこの値を変化させることで velocisty の学習にどのような影響がでるか実験した. 以降にその概要を示す.
物体検出モデルの学習
本学習/評価には nuScenes データセットを使用した. ベースとなるソース/アーキテクチャには OpenPCDet の CenterPoint を使用した. 主なソースコードの修正箇所は特徴量の1つである time_lag の算出部分になる. 以下に修正内容を示す.
- 修正箇所: pcdet/datasets/nuscenes/nuscenes_utils.pyの419行目
- from
time_lag = ref_time - 1e-6 * curr_sd_rec['timestamp']
totime_lag = 0
- from
パラメータについては, epoch: 10に設定し, その他については基本的に変更していない.
評価
定量評価 (評価値の確認)
velocity の評価指標については正解のBBoxと一定の基準でマッチした予測BBoxの velocity に関して l2 norm で評価した. 本実験では nuscenes_dataset を使用しているため, ここのソースを追うと理解が進む.
以下に time_lag を0にしたケースと素の time_lag を使用したケースに関して, NMS thresholdを0.1に固定し, score threshold を {0.3, 0.5, 0.7} の3つで評価した結果 (vel_error以外も含む) を示す.
[score threshold: 0.3, NMS threshold: 0.1]
評価指標 | time_lag=0 | time_lag=original |
---|---|---|
vel_err | 0.3288 | 0.3133 |
trans_err | 0.3052 | 0.3051 |
scale_err | 0.2507 | 0.2582 |
orient_err | 0.4951 | 0.4761 |
attr_err | 0.2118 | 0.2028 |
[score threshold: 0.5, NMS threshold: 0.1]
評価指標 | time_lag=0 | time_lag=original |
---|---|---|
vel_err | 0.2962 | 0.2983 |
trans_err | 0.2854 | 0.2768 |
scale_err | 0.2460 | 0.2527 |
orient_err | 0.4698 | 0.4408 |
attr_err | 0.2205 | 0.2145 |
[score threshold: 0.7, NMS threshold: 0.1]
評価指標 | time_lag=0 | time_lag=original |
---|---|---|
vel_err | 0.2544 | 0.5359 |
trans_err | 0.2537 | 0.5295 |
scale_err | 0.2368 | 0.5395 |
orient_err | 0.4390 | 0.6661 |
attr_err | 0.2403 | 0.5385 |
また, クラスごとの推論数とGT数を以下に示す.
[各学習モデルの予測数]
time_lag | score | car | truck | bus | trailer | construction_vehicle | pedestrian | motorcycle | bicycl | traffic_cone | barrier | total pred |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.3 | 57742 | 11137 | 2226 | 3182 | 2998 | 33884 | 5019 | 7788 | 18868 | 20452 | 163296 |
0 | 0.5 | 40433 | 5909 | 1631 | 1687 | 950 | 22578 | 1421 | 1515 | 8849 | 14200 | 99173 |
0 | 0.7 | 22455 | 1815 | 1060 | 762 | 246 | 8967 | 577 | 402 | 3724 | 6672 | 46680 |
original | 0.3 | 53627 | 12923 | 2777 | 5569 | 4929 | 28433 | 4211 | 6323 | 19290 | 17143 | 155225 |
original | 0.5 | 37800 | 4554 | 1475 | 1528 | 620 | 17235 | 901 | 984 | 6776 | 6995 | 78868 |
original | 0.7 | 20737 | 651 | 599 | 398 | 20 | 6879 | 262 | 148 | 1924 | 754 | 32372 |
[Ground Truth数 (シーン数: 150)]
car | truck | bus | trailer | vechile | pedestrian | motorcycle | bicycl | traffic_cone | barrier | total GT |
---|---|---|---|---|---|---|---|---|---|---|
53043 | 9260 | 2062 | 2331 | 1513 | 23500 | 1855 | 1824 | 10570 | 15903 | 121861 |
- score thrshold 0.3~0.5で両モデルを比較すると大差はないが, score thrshold 0.7で比較するとtime_lag=0の方が各指標で性能が良い. (time_lag=original の性能が急激に低下)
- time_lag=original のモデルに関して, score thrshold 0.7 にした場合に推論された物体数が最も少なくなるため, 推論された1つ1つの結果が評価指標に大きく影響していると考えられる
- クラスごとの評価結果については, 後日記載
定性評価 (可視化)
これら実験で推論された velocity (score threshold=0.5) を可視化したものを以下に示す(赤色: 正解, 緑: 予測).
case1 に関して, 画像右下の car の velocisty が time_lag=0 はGTよりも小さく推論されているが, time_lag=original はGTよりも大きく推論されている.
time_lag=0 case1
time_lag=original case1
case2 に関して, 画像左の car の velocisty が time_lag=0 はGTと同等の大きさで推論されているが, time_lag=original はGTよりも大きく推論されている.
time_lag=0 case2
time_lag=original case2
全体的に結果を眺めていないため, なんとも言い難いが, 現状 time_lag=0 にした場合においてネガティブな影響はほとんど確認できていない.
Discussion