nuScenes miniのdatasetを試してみる

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

nuScenesのデータセットは数百Gbyteと莫大です。

nuScenes miniならば数Gbyteのため、テストレベルなら簡単に使えます。

ダウンロードして、Vitis AI環境下で簡単に評価まで実施してみました。

 

スポンサーリンク

nuScenes miniのdatasetを試してみる

nuScenesのデータセットを慣れるために、nuScenes miniを触ってみました。

通常のnuScenesだと、自動車のデータセット(Lidar点群+画像)のため数百Gbyteあります。

nuScenes miniならば、限定されたデータのため数Gbyteで済みます。

 

今回Vitis AIの環境上で、nuScenes miniの前処理、評価、学習までテストしてみます。

 

nuScenes miniのダウンロード

nuScenesのHPからダウンロードできます。登録すれば誰でも入手可能です。

 https://www.nuscenes.org/nuscenes#download

miniに関しては「Full dataset (v1.0) →Mini」の箇所です。4Gbyteほどです。

 

ダウンロードしたファイルは、tarで解凍できます。

tar -xzvf v1.0-mini.tar

 

実行環境

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

  • Vitis AI 2.5
  • nuScenes Full dataset (v1.0) mini

 

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

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

 

nuScenesは複数のカメラ、LIDAR点群、マップ情報など多くのデータを持ちます。

本来は学習・評価するにも相当なハイスペックのPC・GPU環境が要求されます。

但し、筆者の一般PCでも前処理・学習済の重みの評価程度ならば可能でした。

 

Vitis AI

Vitis AIはXilinxのFPGAの向け(AI関連の)開発環境です。

今回の学習・評価にはGPUの環境が必須です。

インストール・GPUのdocker環境については下記記事で紹介しています。

VItis AI 2.5やPetaLinuxなどインストールしてみたメモ

Vitis AI GPU dockerの環境構築をしたメモ

 

nuScenes_PointPillarsのライブラリ

Vitis AIにはサンプルライブラリが多く用意されています。

nuScenes用のもあり、下記のyaml内のリンクからダウンロードできます。

今回はPointPillarsというLIDAR点群を使った3D物体検出を行います。

 https://github.com/Xilinx/Vitis-AI/tree/2.5/model_zoo/model-list/pt_pointpillars_nuscenes_40000_64_108G_2.5

 

wget https://www.xilinx.com/bin/public/openDownload?filename=pt_pointpillars_nuscenes_40000_64_108G_2.5.zip
unzip openDownload?filename=pt_pointpillars_nuscenes_40000_64_108G_2.5.zip

 

nuScenes miniのデータの準備

Vitis AIのサンプルにREADME.mdにありますので、手順に従って進めていきます

ただ今回はデータセットがnuScenes miniのため、少し手順を変えています。

主に変更した箇所を紹介します。

 

ライブラリをダウンロードすると、dataフォルダの中身は空となっています。

解凍したnuScenes miniを「/data/nuscenes/」の中に入れます。

「v1.0-mini」と表記はありますが、特にフォルダ名を変更する必要はありません。

 

README.mdの記載しているコマンドに従って、学習用のデータを作成します。

nuScenes mini のため、赤字箇所の「--version v1.0-mini」が追加した箇所です。

python code/mmdetection3d/tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini

(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 --version  v1.0-mini
======
Loading NuScenes tables for version v1.0-mini...
23 category,
8 attribute,
4 visibility,
911 instance,
12 sensor,
120 calibrated_sensor,
31206 ego_pose,
8 log,
10 scene,
404 sample,
31206 sample_data,
18538 sample_annotation,
4 map,
Done loading in 0.531 seconds.
======
Reverse indexing ...

 

学習・評価に必要なデータ「***.pkl」ファイルが何種類が作成されるはずです。

(またnuscenes_gt_databaseのフォルダも作成されてます)

これでデータの準備が無事出来ました。

 

学習済の重みファイルを評価

Vitis AIのライブラリの中には、既に学習済の(重み)ファイルが入っています。

一度評価して、ライブラリが正常に動作するかを確認します。

スクリプトが用意されており、実行するとエラーなく評価値を確認できました。

(vitis-ai-pt1_7) Vitis-AI /workspace/pt_pointpillars_nuscenes_40000_64_108G_2.5 > bash run_eval.sh
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 81/81, 1.3 task/s, elapsed: 64s, ETA:     0s
Formating bboxes of pts_bbox
Start to convert detection format...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 81/81, 39.4 task/s, elapsed: 2s, ETA:     0s
Results writes to /tmp/tmpl48hk97e/results/pts_bbox/results_nusc.json
Evaluating bboxes of pts_bbox
mAP: 0.3684                                                                                                                                                                                                 
mATE: 0.5275
mASE: 0.5187
mAOE: 0.5868
mAVE: 0.4248
mAAE: 0.3040
NDS: 0.4480
Eval time: 3.6s

Per-class results:
Object Class	AP	ATE	ASE	AOE	AVE	AAE
car	0.860	0.192	0.160	0.122	0.106	0.107
truck	0.546	0.241	0.170	0.112	0.104	0.055
bus	0.969	0.172	0.152	0.028	0.471	0.143
trailer	0.000	1.000	1.000	1.000	1.000	1.000
construction_vehicle	0.000	1.000	1.000	1.000	1.000	1.000
pedestrian	0.818	0.172	0.254	0.338	0.242	0.124
motorcycle	0.266	0.272	0.282	1.254	0.070	0.002
bicycle	0.225	0.227	0.169	0.427	0.406	0.000
traffic_cone	0.000	1.000	1.000	nan	nan	nan
barrier	0.000	1.000	1.000	1.000	nan	nan

 

nuScenes miniの学習をすると…

train(学習)もスクリプトファイルになっており、簡単に実行できます。

但し、デフォルトのrun_trainはGPUを4つも使う構成になっており、そのままでは使えません。

下記のように修正します。

export CUDA_VISIBLE_DEVICES=0,1,2,3 → export CUDA_VISIBLE_DEVICES=0

GPU_NUM=4 → GPU_NUM=1

export CUDA_VISIBLE_DEVICES=0
GPU_NUM=1

CONFIG=float/hv_pointpillars_secfpn_sbn-all_4x4_2x_nus-3d.py
WORK_DIR=workspace

export W_QUANT=0
bash ./code/mmdetection3d/tools/dist_train.sh ${CONFIG} ${GPU_NUM} --work-dir ${WORK_DIR}

 

ただし,GPUのメモリ不足のエラーが発生します。

RuntimeError: CUDA out of memory

今回はnuScenes miniを触ってみるという目的だったので、一旦ここで終了とします。

RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 3.82 GiB total capacity; 2.99 GiB already allocated; 8.44 MiB free; 3.03 GiB reserved in total by PyTorch)
Traceback (most recent call last):
  File "/opt/vitis_ai/conda/envs/vitis-ai-pt1_7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pt1_7/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pt1_7/lib/python3.7/site-packages/torch/distributed/launch.py", line 260, in <module>
    main()
  File "/opt/vitis_ai/conda/envs/vitis-ai-pt1_7/lib/python3.7/site-packages/torch/distributed/launch.py", line 256, in main
    cmd=cmd)
subprocess.CalledProcessError: Command '['/opt/vitis_ai/conda/envs/vitis-ai-pt1_7/bin/python', '-u', './code/mmdetection3d/tools/train.py', '--local_rank=0', 'float/hv_pointpillars_secfpn_sbn-all_4x4_2x_nus-3d.py', '--launcher', 'pytorch', '--work-dir', 'workspace']' returned non-zero exit status 1.

 

Vitis AI docker上のコマンド

実際にVitis AI上で実行したコマンドの履歴を残しておきます。

基本はライブラリのREADMEの手順を従っています。

(vitis-ai-pt1_7) Vitis-AI /workspace/pt_pointpillars_nuscenes_40000_64_108G_2.5 > history
    1  conda activate vitis-ai-pytorch
    2  wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
    3  sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
    #  wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
  4  sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
    5  sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
    6  sudo apt-get update
    7  sudo apt-get install -y cuda-toolkit-10-2
    8  sh docker/dockerfiles/replace_pytorch.sh vitis-ai-pt1_7
    9  conda activate vitis-ai-pt1_7
   10  cd pt_pointpillars_nuscenes_40000_64_108G_2.5/
   11  export CUDA_HOME=/usr/local/cuda
   12  sudo update-alternatives --config gcc
   13  cd code/
   14  cd mmcv/
   15  MMCV_WITH_OPS=1 pip install --user -e .
   16  cd ..
   17  cd mmdetection
   18  pip install --user -r requirements/build.txt
   19  pip install --user -v -e .
   20  cd ..
   21  cd mmdetection3d
   22  pip install --user -r requirements.txt
   23  pip install --user -v -e .
   24  cd ..
   25  pip uninstall pycocotools
   26  pip uninstall mmpycocotools
   27  pip install --user mmpycocotools
   28  export PYTHONPATH=${PWD}/code/mmdetection3d:${PYTHONPATH}
   29  python code/mmdetection3d/tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version  v1.0-mini
   30  bash run_eval.sh
   31  bash run_train.sh

 

まとめ

nuScenes miniをダウンロードして、実際に評価・学習まで実施してみました。

(あくまでサンプルに従っただけですが…)

次は同じnuScenes形式である第6回AIエッジコンテストのデータセットを試しています。

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

 

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

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

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

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

コメント