BEVFusion (北京大学 & アリババ) 環境構築チュートリアル

BEVFusion環境のセットアップ

論文のタイトル: BEVFusion: シンプルで堅牢な LiDAR とカメラの融合フレームワーク

論文アドレス: https://arxiv.org/pdf/2205.13790.pdf

代償地址:ADLab-AutoDrive/BEVFusion: 「BEVFusion: シンプルで堅牢な LiDAR-Camera Fusion Framework」の公式 PyTorch 実装 (github.com)

まえがき: これは今年出版された新しい論文です。初めて読んだとき、コードはまだオープンソースではありませんでした。数日前にそれがオープンソースであることを知りました。フレームワークは非常に明確です。できます。」この研究に基づいた融合ソリューションに慣れることができ、わずかに改善することもできます。

作者の環境:

システムプラットフォーム: Linux
Python: 3.8.3 | conda-forge によってパッケージ化されています。(デフォルト、2020 年 6 月 1 日、17:43:00) [GCC 7.5.0]
利用可能な CUDA: True
GPU 0,1: NVIDIA GeForce RTX 3090
CUDA_HOME: /usr
NVCC: Build cuda_11.5.r11.5/compiler.30672275_0
GCC: gcc (Ubuntu 7.5.0-6ubuntu2) 7.5.0
PyTorch: 1.8.0+cu111
PyTorch コンパイルの詳細: PyTorch は以下で構築されました:

  • GCC 7.3
  • C++ バージョン: 201402
  • インテル® 64 アーキテクチャー・アプリケーション用インテル® マス・カーネル・ライブラリー バージョン 2020.0.0 製品ビルド 20191122
  • インテル® MKL-DNN v1.7.0 (Git ハッシュ 7aed236906b1f7a05c0917e5257a1af05e9ff683)
  • OpenMP 201511 (別名 OpenMP 4.5)
  • NNPACKが有効になっています
  • CPU 能力使用率: AVX2
  • CUDA ランタイム 11.1
  • NVCC アーキテクチャ フラグ: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode ;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86
  • CuDNN 8.0.5
  • マグマ 2.5.2
  • ビルド設定: BLAS_INFO=mkl、BUILD_TYPE=Release、CUDA_VERSION=11.1、CUDNN_VERSION=8.0.5、CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/c++、cxx_flags = -wno -deprecated -fvisibility -inlines -hidden -duse_pthreadpool -fopenmp -dndebug -duse_kineto -duse_fbgemm -duse_qnnpack -duse_pytorch_qnnnpack -duse_xnnpack -2 -fulnow -fulnow -fulnow -fulnow -fulnoin return-type -wno-missing -field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused -result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=非推奨宣言 -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error =redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping -math -Werror=format -Wno-stringop-overflow、LAPACK_INFO=mkl、PERF_WITH_AVX=1、PERF_WITH_AVX2=1、PERF_WITH_AVX512=1、TORCH_VERSION=1.8.0、USE_CUDA=ON、USE_CUDNN=ON、USE_EXCEPTION_PTR=1、USE_GFLAGS=OFF、USE_GLOG=OFF、USE_MKL=ON、USE_MKLDNN=ON、USE_MPI=OFF、USE_NCCL=ON、USE_NNPACK=ON、 USE_OPENMP=ON、

トーチビジョン: 0.9.0+cu111
OpenCV: 4.6.0
MMCV: 1.4.0
MMCV コンパイラー: GCC 7.3
MMCV CUDA コンパイラー: 11.1
MMDetection: 2.11.0
MMDetection3D: 0.11.0+9d3e162

人間の用語では、torch1.8.0+cuda111、グラフィックス カードは 3090、残りの環境は公式ドキュメントに従って構成されています。

1. インストール

1. BEVFusion コードのクローンを作成します。

git clone https://github.com/ADLab-AutoDrive/BEVFusion.git

2. 新しい仮想環境を作成する

conda create -n bevfusion python=3.8.3
conda activate bevfusion #激活

3. cudaのバージョンに応じてtorchをインストールします

1.7 または 1.8 を選択してください。CUDA バージョンは
2022 年 11 月 22 日に対応する必要があります。更新: 1.7 を選択してください。1.8 のバグにより、トレーニングにいくつかの問題が発生します。2022 年 12 月 2 日更新
: 最近忙しすぎます。 1.7 の torch が数日前に利用できなくなったことがわかりました。このプロジェクトでの使用に適しています。具体的な理由は、3090 グラフィックス カードと関連ライブラリの欠如に関連しています (3090 は少なくとも cuda11.1 をサポートし、torch1.7 はサポートしています)。 7 は最大で cuda11.0 をサポートします)

pip install torch=1.8.0+cu111 torchvision=0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

4. mmcv-full をインストールする

これは自分の torch と cuda に依存しますが、BEVFusion 公式ドキュメントではバージョン 1.4.0 を推奨しています。

次の URL から適切なバージョンを見つけてください

https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

このうち、cu_version は cuda のバージョンを表し、torch_version は torch のバージョンを表します。

たとえば、私のアドレスは torch1.8.0+cuda111 なので、アドレスは次のようになります。

https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html

作成した環境はpython3.8なのでcp38を選択します。mmcvのフルバージョンは1.4.0であることを忘れないでください。whlファイルをダウンロードしてサーバーに転送し、whlファイルをpipします(行きません) whl、Baidu の pip インストールについて詳しく説明します)

ここに画像の説明を挿入します

5.MMDetectionをインストールする

以下はBEVFusionが公式に推奨する環境です

python=3.8.3
mmdet=2.11.0 ( mmdetection-2.11.0 に mmdet をインストールしてください)
mmcv=1.4.0
mmdet3d=0.11.0
numpy=1.19.2
torch=1.7.0
torchvision=0.8.0

mmdet を mmdetection-2.11.0 にインストールしてください。作成者はこのフォルダーをすでにウェアハウスに配置しています。このフォルダーを直接入力します
ここに画像の説明を挿入します

次に、以下を実行します。

pip install -r requirements/build.txt
pip install -v -e .  # or "python setup.py develop"(推荐执行后者)

6.MMDetection3Dをインストールする

BEVFusion のルート ディレクトリに戻り、次のコマンドを実行します。

pip install -v -e .  # or "python setup.py develop"(推荐执行后者)

これで設定は完了です

以下は私の環境です

パッケージ バージョン 編集可能なプロジェクトの場所


absl-py 1.3.0
addict 2.4.0
anyio 3.6.2
argon2-cfi 21.3.0
argon2-cffi-bindings 21.2.0
asttokens 2.1.0
attrs 22.1.0
backcall 0.2.0
beautifulsoup4 4.11.1
black 22.10.0
ブリーチ 5.0 .1cachetools
5.2.0
certifi 2022.9.24
cffi 1.15.1
charset-normalizer 2.1.1
click 8.1.3
contourpy 1.0.6cycler
0.11.0
Cython 0.29.32
debugpy
1.6.3decorator 5.1.1
defusedxml 0.7.1
Depthwise- conv2d-implicit-gemm 0.0.0
デカルト 1.1.0
エントリポイント 0.4
例外グループ 1.0.4
実行 1.2.0
fastjsonschema 2.16.2
filelock 3.8.0
fire 0.4.0
flake8 5.0.4
fonttools 4.38.0
google-auth 2.14.1
google-auth-oauthlib 0.4.6
grpcio 1.50.0
h5py 3.7.0
ハギングフェイスハブ 0.11.0
idna 3.4
imageio 2.22.4
importlib-metadata 5.0.0
importlib-resources 5.10.0
iniconfig 1.1.1
ipykernel 6.17.1
ipython 8.6.0
ipython-genutils 0.2.0
ipywidgets 8.0.2
jedi 0.18.1
Jinja2 3.1.2
joblib 1.2.0
jsonschema 4.17.0
jupyter 1.0.0
jupyter_client 7.4.6
jupyter-console 6.4.4
jupyter_core 5.0.0
jupyter-server 1.23.2
jupyterlab-pygments 0.2.2
jupyterlab-widgets 3.0.3
kiwisolver 1.4.4
llvmlite 0.31.0
loguru 0.6.0
lyft-dataset-sdk 0.0.8
Markdown 3.4.1
MarkupSafe 2.1.1
matplotlib 3.6.2
matplotlib-inline 0.1.6
mccabe 0.7.0
misstune 2.0 .4
mmcls 0.24.1
mmcv-full 1.4.0
mmdet 2.11.0 /home/wistful/work/my_bevfusion/mmdetection-2.11.0
mmdet3d 0.11.0 /home/wistful/work/my_bevfusion
mmpycocotools 12.0.3
msgpack 1.0.4
msgpack-numpy 0.4.8
multimethod 1.9
mypy-extensions 0.4.3
nbclassic 0.4.8
nbclient 0.7.0
nbconvert 7.2.5
nbformat 5.7.0
nest-asyncio 1.5.6
networkx 2.2
Ninja 1.11.1
Notebook 6.5.2
Notebook_shim 0.2.2
numba 0.48.0
numpy 1.23.4
nuscenes-devkit 1.1.9
oauthlib 3.2.2
opencv-python 4.6.0.66
パッケージング 21.3
pandas 1.4.4
pandocfilters 1.5.0
parso 0.8.3
pathspec 0.10.2
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.3.0
pip 22.3.1
pkgutil_resolve_name 1.3.10
platformdirs 2.5.4
putly 5.11.0
pluggy 1.0.0
plyfile 0.7.4
prettytable 3.5.0
prometheus-client 0.15.0
プロンプトツールキット 3.0.32
protobuf 3.20.3
psutil 5.9.4
ptyprocess 0.7.0
pure-eval 0.2.2
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycocotools 2.0.6
pycodestyle 2.9.1
pycparser 2.21
pyflakes 2.5.0
Pygments 2.13.0
pyparsing 3.0.9
pyquaternion 0.9.9
pyrsistent 0.19.2
pytest 7.2.0
python-dateutil 2.8.2
pytz 2022.6
PyWavelets 1.4.1
PyYAML 6.0
pyzmq 24.0.1
qtconsole 5.4.0
QtPy 2.3.0
リクエスト 2.28.1
リクエスト-oauthlib 1.3.1
rsa 4.9
scikit-image 0.19.3
scikit-learn 1.1.3
scipy 1.9.3
Send2Trash 1.8 .0
setuptools 65.5.1
Shapely 1.8.5.post1
six 1.16.0
sniffio 1.3.0
Soupsieve 2.3.2.post1
stack-data 0.6.1
tabulate 0.9.0
tenacity 8.1.0
tensorboard 2.11.0
tensorboard-data-server 0.6.1
tensorboard-plugin-wit 1.8.1
tensorpack 0.11
termcolor 2.1.0
terminado 0.17.0
ターミナルテーブル 3.1.10
threadpoolctl 3.1.0
tifffile 2022.10.10
timm 0.6.11
tinycss2 1.2.1
toml 0.10.2
tomli 2.0.1
torch 1.8.0+cu111
torchaudio 0.8.0
torchpack 0.3.1
torchvision 0.9.0+cu11 1
竜巻 6.2
tqdm 4.64.1
traitlets 5.5.0
trimesh 2.35.39
testing_extensions 4.4.0
urllib3 1.26.12
wcwidth 0.2.5
webencodings 0.5.1
websocket-client 1.4.2
ツール 2.2.2
ホイール 0.38.4
widgetsnbextension 4.0.3
yapf 0.32.0
zipp 3.10.0


システムプラットフォーム: Linux
Python: 3.8.3 | conda-forge によってパッケージ化されています。(デフォルト、2020 年 6 月 1 日、17:43:00) [GCC 7.5.0]
利用可能な CUDA: True
GPU 0,1: NVIDIA GeForce RTX 3090
CUDA_HOME: /usr/local/cuda
NVCC: Build cuda_11.1.TC455_06.29069683_0
GCC: gcc (Ubuntu 7.5.0-6ubuntu2) 7.5.0
PyTorch: 1.8.0+cu111
PyTorch コンパイルの詳細: PyTorch は以下で構築されました:

  • GCC 7.3
  • C++ バージョン: 201402
  • インテル® 64 アーキテクチャー・アプリケーション用インテル® マス・カーネル・ライブラリー バージョン 2020.0.0 製品ビルド 20191122
  • インテル® MKL-DNN v1.7.0 (Git ハッシュ 7aed236906b1f7a05c0917e5257a1af05e9ff683)
  • OpenMP 201511 (別名 OpenMP 4.5)
  • NNPACKが有効になっています
  • CPU 能力使用率: AVX2
  • CUDA ランタイム 11.1
  • NVCC アーキテクチャ フラグ: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode ;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86
  • CuDNN 8.0.5
  • マグマ 2.5.2
  • ビルド設定: BLAS_INFO=mkl、BUILD_TYPE=Release、CUDA_VERSION=11.1、CUDNN_VERSION=8.0.5、CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/c++、cxx_flags = -wno -deprecated -fvisibility -inlines -hidden -duse_pthreadpool -fopenmp -dndebug -duse_kineto -duse_fbgemm -duse_qnnpack -duse_pytorch_qnnnpack -duse_xnnpack -2 -fulnow -fulnow -fulnow -fulnow -fulnoin return-type -wno-missing -field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused -result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=非推奨宣言 -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error =redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping -math -Werror=format -Wno-stringop-overflow、LAPACK_INFO=mkl、PERF_WITH_AVX=1、PERF_WITH_AVX2=1、PERF_WITH_AVX512=1、TORCH_VERSION=1.8.0、USE_CUDA=ON、USE_CUDNN=ON、USE_EXCEPTION_PTR=1、USE_GFLAGS=OFF、USE_GLOG=OFF、USE_MKL=ON、USE_MKLDNN=ON、USE_MPI=OFF、USE_NCCL=ON、USE_NNPACK=ON、 USE_OPENMP=ON、

トーチビジョン: 0.9.0+cu111
OpenCV: 4.6.0
MMCV: 1.4.0
MMCV コンパイラー: GCC 7.3
MMCV CUDA コンパイラー: 11.1
MMDetection: 2.20.0
MMDetection3D: 0.11.0+9d3e162

2. データセットを整理する

一般に、mmdetection3d フレームワークを使用する場合、データ セットはプロジェクトのルート ディレクトリにデータ ディレクトリを作成するのではなく、mmdetection3d/dataの下に編成する必要があることに注意してください。したがって、データセットは BEVFusion/mmdetection3d/data の下に編成する必要があります。

データセットのルートを にシンボリックリンクすることをお勧めします$MMDETECTION3D/dataフォルダー構造が以下と異なる場合は、構成ファイル内の対応するパスの変更が必要になる場合があります。

データセットの構成については詳しく説明しませんが、公式の構成形式に従って構成する必要があります。

mmdetection3d
§── mmdet3d
├── ツール っていつ
── configs
§── データ
│ §── nuscenes
│ │ §── マップ
│ │ ├── サンプル
│ │ §── スイープ
│ │ §── v1.0-test
| | §── v1.0-trainval
│ ├── kitti
│ │ ├── ImageSets
│ │ §── テスト
│ │ │ ├── calib
│ │ │ §── image_2
│ │ │ §── velodyne
│ │ §── ─ トレーニング
│ │ │ §─ calib
│ │ │ §─ image_2
│ │ │ ├─ label_2
│ │ │ ├─ velodyne
│ ├─ waymo
│ │ §─ waymo_format
│ │ │ §─ トレーニング
│ │ │ §── バリデーション
│ │ │ ├── テスト
│ │ │ §── gt.bin
│ │ §── kitti_format
│ │ │ §── ImageSets
│ ├── lyft
│ │ ├── v1.01-train
│ │ │ §── v1.01-train (train_data)
│ │ │ §── lidar (train_lidar)
│ │ │ ├ ── 画像 (train_images)
│ │ │ ∴─ マップ (train_maps)
│ │ §─ v1.01-test
│ │ │ §─ v1.01-test (test_data)
│ │ │ §─ lidar (test_lidar)
│ │ │ ├─ 画像 (test_images)
│ │ │ §─ マップ (test_maps)
│ │ │ ├─ train.txt
│ │ ├─ val.txt
│ │ ├─ test.txt
│ │ §─ sample_submission .csv
│ §── scannet
│ │ ├── メタデータ
│ │ §── スキャン
│ │ メソッド──batch_load_scannet_data.py
│ │ メソッド──load_scannet_data.py │
│ メソッド──scannet_utils.py
│ │ メソッド── README。 MD
│ §── sunrgbd
│ │ ├── OFFICIAL_SUNRGBD
│ │ §── matlab
│ │ §── sunrgbd_data.py
│ │ §── sunrgbd_utils.py
│ │ §── README.md

(上記のデータセットをすべて必要とするわけではなく、どの組織が必要かだけが必要です)

次に、BEVFusion/tools/create_data.py スクリプトを使用してファイルを整理します。これは、nuScenes データ セットが正常に整理されたスクリーンショットです。

ここに画像の説明を挿入します

3. トレーニングとテスト

1. 分散トレーニング

# first train camera stream
./tools/dist_train.sh configs/bevfusion/cam_stream/bevf_pp_4x8_2x_nusc_cam.py 8
# then train LiDAR stream
./tools/dist_train.sh configs/bevfusion/lidar_stream/hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d.py 8
# then train BEVFusion
./tools/dist_train.sh configs/bevfusion/bevf_pp_2x8_1x_nusc.py 8

./tools/dist_train.sh configs/bevfusion/cam_stream/bevf_pp_4x8_2x_nusc_cam.py 8このうち 8 は GPU の数を表します

sh ファイルをトレーニングやテストに使用する場合、アクセス許可がないという問題が発生する場合があります。chmod 777 tools/dist_train.shアクセス許可を変更するために使用してください。
ここに画像の説明を挿入します

このうち、設定ファイルについては説明しませんが、公式の簡易テストを使用することができますが、独自の設定ファイルを使用する必要がある場合は、mmdetection3d 公式ドキュメントを参照してください。

注目に値するのは、テストに分散メソッドと非分散メソッドを使用した場合、非分散メソッドは正常に実行されましたが、分散メソッドでは依然としてデータ セットが見つからないというメッセージが表示されたことです。これprint(os.getcwd())印刷したところ、非分散トレーニングを使用する場合、作業パスは/home/wistful/work/my_bevfusion/mmdetection3d/toolsBEVFusion/mmdetection3d/tools の下にあり、分散トレーニングを使用する場合、作業パスは BEVFusion ルート ディレクトリの下に/home/wistful/work/my_bevfusionあることわかりました。そこで、次を使用してos.chdir('/home/wistful/work/my_bevfusion/mmdetection3d/tools')作業パスを変更しました
ここに画像の説明を挿入します

2. 分散型トレーニング

pycharm で各パラメータを直接設定してトレーニングするだけで、詳細は必要ありません。

3. テスト

./tools/dist_test.sh configs/bevfusion/bevf_pp_2x8_1x_nusc.py ./work_dirs/bevfusion_pp.pth 8 --eval bbox
 # 前者是配置文件,后者是GPU个数

# 如需可视化
./tools/dist_test.sh configs/bevfusion/bevf_pp_2x8_1x_nusc.py ./work_dirs/bevfusion_pp.pth 8 --eval bbox --show-dir YourVisualResultsDir --show --eval bbox #根据test.py的参数看一下

可視化結果は、以下に示すように、指定したディレクトリに保存され、
ここに画像の説明を挿入します
CloudCamare にインポートして表示できます。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/u014295602/article/details/127933607