😀

LiDARデータによる物体検出を試してみた-Part1

2022/09/30に公開

はじめに

ちょっと気になってLiDARの物体検出手法を調べて実際に動かしてみたので備忘録。
(最近、開発中にZennの記事がよくヒットするので気になって投稿してみる)

背景

最近Unityをメインで使っていて、ROSに興味が出てきたので調べているとAutowareに行き着いた。
自動運転関連の情報を収集してると何度も何度もLiDAR関連の話が出てくるので1つくらいLiDAR関連のタスクに触れてみたくなった。
https://github.com/autowarefoundation/autoware

ということで今回はLiDARデータを用いた3D物体検出手法のPointPillarsを使ってみた。
あくまで本記事では学習は自分で回さずに重みデータを読み込んで推論だけ試してみる。

LiDARデータを用いた3D物体検出手法の発展過程を知るのに以下の記事が非常に参考になった。
https://aru47.hatenablog.com/entry/2020/03/07/152831
https://aru47.hatenablog.com/entry/2021/04/30/194007
https://qiita.com/chin_self_driving_car/items/362772f5078c0cbe4c0d

本題

まずは動かす

動作環境

  • 11Gen Corei5
  • Geforce RTX3060
  • Windows10
  • Anaconda

使用リポジトリ

Pytorch実装かつ学習済みデータが含まれていたのでこちらのリポジトリを利用した。
https://github.com/zhulf0804/PointPillars

ライブラリ

基本的にはリポジトリの内容に従って進める。新規の仮想環境を作って以下のコマンドを実行

pip install -r requirements.txt

が、さっそくエラー発生。叩いてもエラーが出て進まない。
一旦すでに用意してあったPytorchの仮想環境に切り替えてimportエラーがでたら都度最新版のライブラリをinstallする作戦に切り替えた。(正直Windowsでやっているのが原因な気がしたのでまずは先に進んでみた)

<仮想環境>

  • Pytorch 1.9.0
  • open3d 0.14.1
  • numba 0.55.1
  • CUDA 11.2(torch側がCUDAのバージョンにシビアだった気がしたので一応記入)

データセット準備

Kittiを学習できるようにチューニングしてあったのでとりあえずDLした。
Readmeに書いてあるURLを触れば落とせる。ただ40GBくらいあるので注意。(重い...)

DLしたら以下の形式でフォルダ構造を修正しておく。

データセット前処理

pre_process_kitti.pyを実行してデータの前処理を行う。

python pre_process_kitti.py --data_root your_path_to_kitti

なぜかここでエラーを吐いた。トラッキングしていくとnumbaのデコレータが張ってある部分で起きていたのでとりあえずUninstallしてからCondaでInstallしたら治った。

評価コード実行

とりあえず準備はできたので評価用のコードを実行してみた。

python evaluate.py --ckpt pretrained/epoch_160.pth --data_root your_path_to_kitti

結果はこんな感じ。自動的にAP(Average Precision)で計算して出してくれた。

==========Overall==========
bbox_2d AP: 80.5103 74.5816 71.4745
AOS AP: 74.9297 68.1301 65.2554
bbox_bev AP: 77.8518 69.7950 66.6673
bbox_3d AP: 73.3250 62.7918 59.6403

※APについて補足:平均適合率という評価指標で物体検出のタスクでは大体使われている。高ければ高いほど良い。
mAPとかIoUもよく出てくるのでセットで調べるといい感じ。

可視化もしてみる

数字だけ見ていてもよく分からないので可視化もしてみる。
githubに書いてあった可視化用のコマンドはトレーニングデータに対して実行していてなんだかちゃんとしたスペックを見れなそうだったので参照先のフォルダをtestingへ変更している。

python test.py --ckpt pretrained/epoch_160.pth --pc_path C:\Users\xxx\DataSets\kitti/testing/velodyne_reduced/000470.bin --calib_path C:\Users\xxx\DataSets\kitti/testing/calib/000470.txt --img_path C:\Users\xxx\DataSets\kitti/testing/image_2/000470.png --gt_path C:\Users\xxx\DataSets\kitti/testing/label_2/000470.txt

結果はこちら

車の検出は結構うまくいっている気がする。(点群オンリーからここまで検出できるのはちょっと驚いた)

まとめ

  • Windows環境でPointPillarsを動かしてみた
  • APは大体70%程度で実際に可視化した映像からもかなり正確に検出できているように感じた

課題

  • LiDARを使って物体検出できることは分かったけど実際のLiDARを持っていないからデータセットでしか検証ができない

つまらないので次回はUnity上でLiDARを作ってポイントクラウドを生成できるようにしてみる。

Discussion