nuScenes formatのLidar点群の前処理をしてみたメモ

本サイトはアフィリエイト広告を利用しています。
AI

nuScenes形式のデータセットの学習前の前処理をしてみました。

3D物体検出をするために、LIDAR点群を処理しています。

データセットの入れ方から、プログラムの実行まで紹介します。

 

スポンサーリンク

nuScenes formatのLidar点群の前処理をしてみたメモ

nuScenes形式のデータセットを取り扱ってみました。

第6回AIエッジコンテストのデータセットです。nuScenesのフォーマットでした。

自動車運転の画像・LIDAR点群で3D物体検出を行うことが目的です。

 

第6回AIエッジコンテストのデータセットにはnuScenesと違う箇所があります。

完全にはnuScenesとは同じで無いため、汎用のライブラリを使うとエラーになります。

  • 速度情報が無いこと(nuScenesは有)
  • 前方のカメラ・LIDAR情報しかない(nuScenesは複数のカメラが有)

 

エラーの内容・解決した方法含めて、紹介します。

 

実行環境

下記の環境で実行しました。

  • Vitis AI 2.5 + nuScenes_PointPillarsのライブラリ
  • 第6回AIエッジコンテストのデータセット

 

PC環境は下記となります。

  • CPU…Core i5 6400
  • GPU…NVIDIA GeForce GTX 1650
  • メモリ…16GB
  • SSD…500GB

 

nuScenes miniで動作確認済

同様なテスト環境下で、nuScenes miniにて前処理・評価・学習の動作を確認済です。

(nuScenes mini…4Gbyte程度の限定されたnuScenesのデータセット)

今回の記事との違いはデータセットの違いだけです。

 

Vitis AI上でのnuScenes_PointPillarsのライブラリでの実行例含めて説明しています。

詳細の環境に関しては下記記事をご確認お願いします。(リンク先はこちら)

nuScenes miniのdatasetを試してみる

nuScenes miniのdatasetを試してみる
nuScenesのデータセットは数百Gbyteと莫大です。 nuScenes miniならば数Gbyteのため、テストレベルなら簡単に使えます。 ダウンロードして、Vitis AI環境下で簡単に評価まで実施してみました。

 

mmdetection3dの環境でも確認済

今回はVitis AIの環境下で実行しています。

但し、Vitis AI(というDocker)上でmmdetection3dをインストールして実行しているだけです。

 

今回の前処理は単純にmmdetection3dだけをインストールしても対応できます。

また別の記事で紹介します。

 

nuScenes形式のLIDAR点群のデータを前処理します

予め、コンテストのデータセットのLIDAR情報(3d_labels)を用意します。

特に弄る必要はなく、「/data/nuscenes」に入れてもらえれば大丈夫でした。

 

(今回は)sweepsを0にする

本来nuScenesには画像・LIDAR点群だけでなく、速度・マップなど多くのメタ情報が有ります。

線形補間することで、学習・評価に使うデータを増やすことが可能です。

本来のnuSceneのデータセットにはsweepsのフォルダ内にデータが入っていました。

 

但し、今回のコンテストのデータセットには速度が無いの無視しました。

(sweepsを有りにしても良いですが、データが増えて学習時間に影響します)

 

赤字の --max-sweeps 0 を追加してsweepsを無しにして、前処理を行います。

python code/mmdetection3d/tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --max-sweeps 0

(vitis-ai-pt1_7) Vitis-AI /workspace/pt_pointpillars_nuscenes_40000_64_108G_2.5 > python code/mmdetection3d/tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --max-sweeps 0
======
Loading NuScenes tables for version v1.0-trainval...
20 category,
8 attribute,
4 visibility,
2176 instance,
2 sensor,
74 calibrated_sensor,
2475 ego_pose,
37 log,
37 scene,
2475 sample,
4950 sample_data,
42142 sample_annotation,
37 map,
Done loading in 0.520 seconds.
======
Reverse indexing ...

 

前方のカメラ・LIDARのみ処理する

今回、エラーで止まりました。前方右側のカメラの情報が無いとエラーがでます。

KeyError: 'CAM_FRONT_RIGHT'

コンテストのデータセットは前方にしかカメラ・LIDARがないためです。

[                                                  ] 0/2475, elapsed: 0s, ETA:Traceback (most recent call last):
  File "code/mmdetection3d/tools/create_data.py", line 225, in <module>
    max_sweeps=args.max_sweeps)
  File "code/mmdetection3d/tools/create_data.py", line 55, in nuscenes_data_prep
    root_path, info_prefix, version=version, max_sweeps=max_sweeps)
  File "/workspace/pt_pointpillars_nuscenes_40000_64_108G_2.5/code/mmdetection3d/tools/data_converter/nuscenes_converter.py", line 74, in create_nuscenes_infos
    nusc, train_scenes, val_scenes, test, max_sweeps=max_sweeps)
  File "/workspace/pt_pointpillars_nuscenes_40000_64_108G_2.5/code/mmdetection3d/tools/data_converter/nuscenes_converter.py", line 202, in _fill_trainval_infos
    cam_token = sample['data'][cam]
KeyError: 'CAM_FRONT_RIGHT'

 

nuscenes_converter.pyを修正する

エラーが出たため下記の前処理のプログラムを弄ります。

「/code/mmdetection3d/tools/data_converter/nuscenes_converter.py」

前方カメラ・LIDAR情報のCAM_FRONT以外をコメントアウトしました。

def export_2d_annotation、def obtain_sensor2topの2か所同じ表記がありました。

        # obtain 6 image's information per frame
        camera_types = [
            'CAM_FRONT',
            # 'CAM_FRONT_RIGHT',
            # 'CAM_FRONT_LEFT',
            # 'CAM_BACK',
            # 'CAM_BACK_LEFT',
            # 'CAM_BACK_RIGHT',
        ]

 

再度実行すると、評価・学習に必要なデータの前処理が完了しました。

最後にテストデータが無いよとエラーが出ていますが、特に問題ないと思います。

コンテストには実際に試験するテストデータは用意されていないためです。

Create GT Database of NuScenesDataset
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 2288/2288, 3.1 task/s, elapsed: 738s, ETA:     0s
load 866 bicycle database infos
load 12439 car database infos
load 117 barrier database infos
load 24 construction_vehicle database infos
load 2431 pedestrian database infos
load 1012 traffic_cone database infos
load 2380 truck database infos
load 178 motorcycle database infos
load 4 animal database infos
load 61 static_object.bicycle_rack database infos
load 152 bus database infos
load 5126 static.manmade database infos
load 25 movable_object.debris database infos
load 49 trailer database infos
load 59 movable_object.pushable_pullable database infos
load 1 human.pedestrian.personal_mobility database infos
load 6 vehicle.emergency.police database infos
Traceback (most recent call last):
  File "code/mmdetection3d/tools/create_data.py", line 233, in <module>
    max_sweeps=args.max_sweeps)
  File "code/mmdetection3d/tools/create_data.py", line 55, in nuscenes_data_prep
    root_path, info_prefix, version=version, max_sweeps=max_sweeps)
  File "/workspace/pt_pointpillars_nuscenes_40000_64_108G_2.5/code/mmdetection3d/tools/data_converter/nuscenes_converter.py", line 36, in create_nuscenes_infos
    nusc = NuScenes(version=version, dataroot=root_path, verbose=True)
  File "/home/vitis-ai-user/.local/lib/python3.7/site-packages/nuscenes/nuscenes.py", line 59, in __init__
    assert osp.exists(self.table_root), 'Database version not found: {}'.format(self.table_root)
AssertionError: Database version not found: ./data/nuscenes/v1.0-test

 

無事学習・評価に必要なpklファイルが出来ています。

データベースのload情報数も、リファレンス環境で前処理したものと同じになりました。

 

まとめ

nuScenes形式の第6回AIエッジコンテストのデータセットでも前処理が出来ました。

次は少ないGPUメモリでも3D物体検出の学習を進めていきます。(リンク先はこちら)

LIDAR点群の3D物体検出の学習に失敗したメモ

LIDAR点群の3D物体検出の学習に失敗したメモ
自動車のLIDAR点群データを使った3D物体検出の学習を試してみました。ただ、Xilinxからサンプルで提供されている学習済のモデル(重み)には勝てず…。色々と試して失敗した内容含めて紹介します。LIDAR点群の3D物体検出の学習に失敗した...

 

今回の記事含めて、第6回AIエッジコンテストの一環でした。

下記にてコンテストでテスト・実施したことのまとめを紹介しています。

第6回AIエッジコンテストが凄く難しいけど勉強になった感想

第6回AIエッジコンテストが凄く難しいけど勉強になった感想
第6回AIエッジコンテストに参加していました。 RISC-Vを使って、画像とLIDAR点群からの3D物体検出が課題でした。 ただ貴重な勉強の機会になりましたし、自身への忘備録としても内容を紹介します。

コメント