LiDAR点群で物体認識 - MMDet3Dのモデル比較
Autowareを中心に自動運転システムの開発をROS2で行う中でLiDAR点群の物体検出を行うことになったので、簡易的に検出モデルの性能比較をしてみました。
今回のテーマは、静止したロードサイドユニット上のLiDARで人や車両等の動的物体を観測するケースです。
実行環境
物体検出のプラットフォームとしてMMDetection3DおよびそれをROS2対応させたmmdet3dを使用しました。
そのほか、実行環境は下記の通りです。
- Ubuntu 22.04
- ROS2 Humble
- Pytorch 2.7.1
- NVIDIA RTX 4060
- Velodyne VLP-32
観測環境
今回LiDARを設置して観測した地点はこのような場所です。

画像の奥側、左手前側、右側の三方向から車両や人が往来する三叉路になっています。こちらで晴天下に記録したrosbagを使用して物体検出を行いました。
環境をわかりやすく地図で表したものが下図です。

比較するモデル
MMDetection3Dで使用できる屋外用のLiDARベースの3D物体検出モデルの一覧がこちら。
- SECOND
- PointPillars
- SSN
- 3DSSD
- SA=SSD
- PointRCNN
- Part-A2
- CenterPoint
- PV-RCNN
- CenterFormer
一部のモデルには、BackboneやVoxel typeの異なるモデルを複数用意しているものもあります。このうち、mAP等の評価の良いもの、学習済みモデルpthファイルが公開されているもの、CAR``PEDESTRIAN``CYCLISTの3クラス分類のもの等の条件で、今回の比較で対象とする5モデルを選抜しました。
検証対象5モデル
- PointPillars (KITTI, SECFPN)
- SSN (NuScenes, RegNetX-400MF-SECFPN)
- PointRCNN (KITTI, PointNet++)
- Part-A2 (KITTI, SECFPN)
- CenterPoint (SECFPN, voxel:0.075, Dcn)
評価
今回は簡易検証のため、検出結果をバウンディングボックスで可視化して目視にて検出性能を評価します。LiDARを設置した地点からの距離や位置による差をわかりやすくするため、下図のように3エリアに区画を分けて評価に使用します。

PointPillars
対応しているPedestrian``Cyclist``Carの3クラスについて、エリアA, Cでは位置・姿勢をほぼ全て正確に検出できています。
一方、エリアBにおいて検出率が下がってしまう印象を受けます。また、クラス外のため、バスの検出ができなかったり、バイクをCyclistと検出したりすることがあります。加えて、街路樹やモニュメントなどの景色をCarなどと誤検知するケースが多く見られます。


SSN
人の検出は全エリアにてほぼもれなく成功しています。さらにこちらはバス→"Bus"の検出にも対応している点が強みです。
一方で車については、エリアBにおける検出に弱いうえ、エリアA, Cにおいても"向き"を誤るケースが多くあります。また、自転車については検出できなかったり人やバイクと間違えたりしてほぼ全ての検出に失敗しています。


PointRCNN
高頻度で人や車を検出できていなかったり自転車→"Car"と誤検知してしまったりする挙動が目立ちます。また、景色の中の建造物や木を車や人と間違えるケースもしばしば生じます。
エリアによる検出精度の差は見受けられません。


Part-A2
全エリアにて、車・人・自転車の検出に概ね成功しており、向きも正確に捉えられています。PointPillarsと比較しても、エリアBにおける検出率や、周りの景色の誤検知が明らかに少ない点で一歩リードしている印象です。
PointPillarsと同様にPedestrian``Cyclist``Carの3クラス分類のため、バスやバイクの検出が課題です。

CenterPoint
全エリアにて車の検出は概ね正確にできていますが、逆に周りの景色など他のものを誤ってCarと判別するケースも多くあります。また、自転車はほぼ全てmotorcycleとなってしまいますが位置や姿勢は正確に検出できています。バスの検出は正しくできています。
一方で、人については高確率で検出できていません。また最大の特徴として、走行中の車両のバウンディングボックスのずれなどから、他の4モデルと比べてひときわ処理の負荷が大きい様子も伺えます。


比較
上記の評価をまとめると下表のようになります。
| Pedestrian | Cyclist | Car | Bus | エリアA | エリアB | エリアC | 景色の誤検出 | 処理負荷 | |
|---|---|---|---|---|---|---|---|---|---|
| PointPillars | ○ | ○ | ○ | × | ○ | △ | ○ | × | ○ |
| SSN | ○ | × | △ | ○ | ○ | △ | ○ | ○ | ○ |
| PointRCNN | × | × | × | × | × | × | × | × | ○ |
| Part-A2 | ○ | ○ | ○ | × | ○ | ○ | ○ | ○ | ○ |
| CenterPoint | × | △ | ○ | ○ | △ | △ | △ | × | × |
全体的に、距離の離れたエリアBにて検出性能が下がる傾向が見られます。
設定された3クラスPedestrian``Cyclist``Carのみに限って検討すると、今回検証した環境ではPart-A2が最も安定して性能の良い検出ができました。
おわりに
今回はLiDAR点群の物体検出に挑戦し、手軽に試せるモデルの性能を比較してみました。今後、機会があれば他の地点での検証や、車両上のLiDARで走行中の環境での検証、さらには他のセンサーでの物体検出も行いたいです。
Discussion