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で解凍できます。
1 |
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などインストールしてみたメモ
nuScenes_PointPillarsのライブラリ
Vitis AIにはサンプルライブラリが多く用意されています。
nuScenes用のもあり、下記のyaml内のリンクからダウンロードできます。
今回はPointPillarsというLIDAR点群を使った3D物体検出を行います。
1 2 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
(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のライブラリの中には、既に学習済の(重み)ファイルが入っています。
一度評価して、ライブラリが正常に動作するかを確認します。
スクリプトが用意されており、実行するとエラーなく評価値を確認できました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
(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
1 2 3 4 5 6 7 8 |
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を触ってみるという目的だったので、一旦ここで終了とします。
1 2 3 4 5 6 7 8 9 10 11 |
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の手順を従っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
(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エッジコンテストの一環でした。
下記にてコンテストでテスト・実施したことのまとめを紹介しています。
コメント