PointPillarsプロジェクトの再現

PointPillarsプロジェクトの再現

先赞后看,养成好习惯。有帮助的话,点波关注!我会坚持更新,感谢谢您的支持!

要件: PointPillars を学習して再現し、展開中に発生したさまざまな問題を解決します。元の参照プロジェクトはPointPillars_MultiHead_40FPS_ROS注释版以及添加ROS节点版本内のPointPillars_MultiHead_40FPS です。参考と学習のために、メッセージを残してください。

参照プロジェクト:
1. PointPillars_MultiHead_40FPS
2. OpenPCDet
3. onnx2trt
4. onnx2trt のインストール中に発生する可能性のある問題
5. Spconv


ここに画像の説明を挿入


1. 準備

1.プロジェクトをダウンロードする

  • PointPillars_MultiHead_40FPS: 点群ターゲット検出ネットワークメインプロジェクト
  • OpenPCDet工具: pth モデルを onnx モデルに変換するために使用されます
  • onnx-tensorrt工具: onnx から trt モデルへの変換に使用されます。
git clone https://github.com/hova88/PointPillars_MultiHead_40FPS.git --recursive
git clone https://github.com/hova88/OpenPCDet.git 
git clone https://github.com/onnx/onnx-tensorrt.git

2. モデル変換:
注意 :
2 つの onnx ファイルと 2 つのリンク ファイルの公式アドレスが無効であるため、OpenPCDet ツールは onnx の生成にのみ使用できます。
1) cbgs_pp_multihead_pfe.onnx. 2) cbgs_pp_multihead_backbone.onnx
2.1) pth を onnx に変換する
OpenPCDet ツール プロジェクトで、次の操作を実行します。

  • A. *.pth 重みファイルをダウンロードし、OpenPCDet プロジェクトにコピーします。
  • B. 構成の変更
    主に、tools/onnx_utils/trans_pfe.py および tools/onnx_utils/trans_backbone_multihead.py の関連パスを変更します。次に例を示します。
## 1. trans_pfe.py, 修改main文件中三处路径, 用### 标记
if __name__ == "__main__":
    from pcdet.config import cfg, cfg_from_yaml_file
    cfg_file = '/home/cui/workspace/deepLearning/OpenPCDet/tools/cfgs/nuscenes_models/cbgs_pp_multihead.yaml' ###
    filename_mh = "/home/cui/workspace/deepLearning/OpenPCDet/pp_multihead_nds5823_updated.pth" ###
    cfg_from_yaml_file(cfg_file, cfg)
    model_cfg=cfg.MODEL
    pfe , dummy_input  = build_pfe( filename_mh, cfg)
    pfe.eval().cuda()
    export_onnx_file = "/home/cui/workspace/deepLearning/OpenPCDet/cbgs_pp_multihead_pfe.onnx" ###
    torch.onnx.export(pfe,
                    dummy_input,
                    export_onnx_file,
                    opset_version=12,
                    verbose=True,
                    do_constant_folding=True) # 输出名
                    
## 2. trans_backbone_multihead.py,同样修改三处路径,形式如下:
if __name__ == "__main__":
    from pcdet.config import cfg, cfg_from_yaml_file
    cfg_file = '/home/cui/workspace/deepLearning/OpenPCDet/tools/cfgs/nuscenes_models/cbgs_pp_multihead.yaml'
    filename_mh = "/home/cui/workspace/deepLearning/OpenPCDet/pp_multihead_nds5823_updated.pth"
    cfg_from_yaml_file(cfg_file, cfg)
    model_cfg=cfg.MODEL
    pfe , dummy_input  = build_pfe( filename_mh, cfg)
    pfe.eval().cuda()
    export_onnx_file = "/home/cui/workspace/deepLearning/OpenPCDet/cbgs_pp_multihead_pfe.onnx"
    torch.onnx.export(pfe,
                    dummy_input,
                    export_onnx_file,
                    opset_version=12,
                    verbose=True,
                    do_constant_folding=True) # 输出名
  • C. SparseConv ライブラリをインストールします
    。システムの CUDA バージョンに応じて異なるコマンドを実行します。詳細についてはSpconvを参照してください。この記事での CUDA10.2 は次のとおりです。
pip install spconv-cu102  # 本人使用cuda10.2版本
  • D. pcdet ツールをインストールする
conda create -n pointpillars python=3.6   #创建pointpillars
conda activate pointpillars    #进入pointpillars虚拟环境
pip install -r requirements.txt   # 安装依赖,在OpenPCDet工程下
python setup.py develop
  • E. onnx 生成スクリプトを実行します。
cd tools/onnx_utils
python trans_pfe.py   # 在OpenPCDet目录下,生成cbgs_pp_multihead_pfe.onnx
python trans_backbone_multihead.py  # 在OpenPCDet目录下,生成cbgs_pp_multihead_backbone.onnx

: 执行脚本过程中有任何问题,参考第五部分问题答疑

2.2) onnx を trt モデルに変換する
前の手順の 2 つの onnx ファイルを workspace/tools/onnx-tensorrt/build ディレクトリにコピーし、変換コマンドを実行します。

cd workspace/tools/onnx-tensorrt/build  # 进入onnx-tensorrt工具的目录
onnx2trt cbgs_pp_multihead_pfe.onnx -o cbgs_pp_multihead_pfe.trt -b 1 -d 16
onnx2trt cbgs_pp_multihead_backbone.onnx -o cbgs_pp_multihead_backbone.trt -b 1 -d 16

次のような結果が生成されます。つまり、生成は成功しました。

----------------------------------------------------------------
Input filename:   cbgs_pp_multihead_backbone.onnx
ONNX IR version:  0.0.7
Opset version:    10
Producer name:    pytorch
Producer version: 1.10
Domain:           
Model version:    0
Doc string:       
----------------------------------------------------------------
Parsing model
[2022-07-29 02:47:54 WARNING] [TRT]/home/cui/workspace/tools/onnx-tensorrt/onnx2trt_utils.cpp:220: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
Building TensorRT engine, FP16 available:1
    Max batch size:     1
    Max workspace size: 1024 MiB
Writing TensorRT engine to cbgs_pp_multihead_backbone.trt
All done

3. モデルパスの変更
4つのモデルファイルをPointPillars/modelにコピーします。
モデル ファイルが変更された場合は、bootstrap.yaml ファイル内の *.onnx および *.trt モデル パスを変更する必要があります。

## bootstrap.yaml文件内容
BoxFeature: 7
ScoreThreshold: 0.1
NmsOverlapThreshold: 0.2
UseOnnx: false 

PfeOnnx: ../model/cbgs_pp_multihead_pfe.onnx
BackboneOnnx: ../model/cbgs_pp_multihead_backbone.onnx

PfeTrt: ../model/cbgs_pp_multihead_pfe.trt
BackboneTrt: ../model/cbgs_pp_multihead_backbone.trt

ModelConfig: ../pointpillars/cfgs/cbgs_pp_multihead.yaml

InputFile: ../test/testdata/nuscenes_10sweeps_points.txt
OutputFile: ../test/testdata/demo_boxes.txt

4. テスト点群データ
nuscenes_10weaks_points.txtをダウンロードします。


2. コンパイル

cd PointPillars_MultiHead_40FPS
mkdir build && cd build
cmake .. && make -j8

: 编译过程中有任何问题,参考第五部分问题答疑

3. テストを実行する

./test/test_model

: 运行过程中有任何问题,参考第五部分问题答疑

4. 可視化結果

python viewer.py

ここに画像の説明を挿入

5. トラブルシューティング

Q1 . CMakeLists.txt:1 (cmake_minimum_required) での CMake エラー:
CMake 3.17 以降が必要です。バージョン 3.16.6 を実行しています
A1 : Cmakelists.txt の cmake バージョンが高すぎるため、バージョンを下げてください。

cmake_minimum_required(VERSION 3.16) # 本机是3.16版本

Q2 . テストの Cmakelist がエラーを報告します、test/CMakeLists.txt:1 (add_subdirectory) での CMake エラー: ソース ディレクトリ
A2 : プロジェクトがまだ作成されていないため、プロジェクト内の test/gtest はサブプロジェクトのサブモジュールに属しています。完全にダウンロードされました。

git clone https://github.com/hova88/PointPillars_MultiHead_40FPS.git --recursive

Q3 . NVINFER NOT FOUND
A3 : TensorRT のアドレスを追加

set(CMAKE_PREFIX_PATH "/usr/local/TensorRT/TensorRT-7.1.3.4/lib") # 设置前缀路径

Q4 . #error – unsupported GNU version! gcc version until 6 are not support!
A4 : CUDA環境を確認し、バージョンが間違っているのでCUDA10.2のconda環境に切り替えて再コンパイルして実行してください。

Q5 . 致命的なエラー: NvInfer.h: そのようなファイルまたはディレクトリはありません
A5 : インクルード ディレクトリは追加されず、ローカル TensorRT の状況に従ってインクルード パスが追加されます

include_directories("/usr/local/TensorRT/TensorRT-7.1.3.4/include")

Q6 . nuscenes_10weaks_points.txt のサンプルデータのダウンロードアドレスが間違っています
A6 . ダウンロードアドレスがnuscenes_10weaks_points.txt に変更されます 新しいダウンロードアドレス

Q7 . ビジュアル スクリプト python viewer.py を使用すると、データが見つからないというプロンプトが表示されます
A7 . bootstrap.yaml ファイル内のデータ パスを変更する必要があります。たとえば、InputFile と OutputFile を変更します。

InputFile: ../test/testdata/nuscenes_10sweeps_points.txt # 将Q6中下载好的数据放入此文件夹中
OutputFile: ../test/testdata/demo_boxes.txt

Q8 . trans_pfe.py スクリプトを実行すると、エラー SyntaxError が報告されます: ファイル trans_pfe.py の 113 行目に非 ASCII 文字 '\xe8' がありますが、エンコーディングが宣言されていません; A8. trans_pfe ファイルの先頭に次のコードを追加します
漢字をサポートするための .py ファイル

# -*- coding:utf-8 -*-

Q9 . trans_pfe.py スクリプトを実行すると、「No module names 'pcdet」というエラーが報告されます。
A9 .インストール チュートリアルに従って、最初にpcdet プロジェクトをインストールする必要があります。この記事の 2.1) C. の手順も参照してください。 。

Q10 . trans_pfe.py スクリプトを実行すると、エラーが報告されます AttributeError: module 'spconv' has noattribute 'SparseModule'
A10 . 参考:
1. github spconv の問題
2. Openpcdet プロジェクト コード (デバッグおよび Q&A レコード)
pcdet/models を変更する/backbones_3d/spconv_backbone .py ファイルおよび pcdet/models/backbones_3d/spconv_unet.py ファイル

## 文件初始位置引入spconv
from spconv.pytorch import ops
from spconv.pytorch.conv import (SparseConv2d, SparseConv3d, SparseConvTranspose2d,
                         SparseConvTranspose3d, SparseInverseConv2d,
                         SparseInverseConv3d, SubMConv2d, SubMConv3d)
from spconv.pytorch.core import SparseConvTensor
from spconv.pytorch.identity import Identity
from spconv.pytorch.modules import SparseModule, SparseSequential
from spconv.pytorch.ops import ConvAlgo
from spconv.pytorch.pool import SparseMaxPool2d, SparseMaxPool3d
from spconv.pytorch.tables import AddTable, ConcatTable

class SparseBasicBlock(SparseModule)  ## 去掉spconv.

Q11 . trans_pfe.py スクリプトを実行すると、「No such file or directory: 'cfgs/dataset_configs/nuscenes_dataset.yaml」というエラーが表示されます。
A11 . tools/cfgs/nuscenes_models/cbgs_pp_multihead.yaml ファイルの 5 行目を変更します。_BASE_CONFIG_ は絶対です。パスを変更すると、次の効果が得られます。

_BASE_CONFIG_: /home/cui/workspace/deepLearning/OpenPCDet/tools/cfgs/dataset_configs/nuscenes_dataset.yaml

Q12 . ビジュアル スクリプト python viewer.py を実行すると、エラー ModuleNotFoundError: No module names 'open3d'
A12 . open3d をインストールします

pip install open3d

Q13 . gtest ファイルを通常のファイルに変更します。これは、ファイル内の変数を表示するためのシングルステップ デバッグに便利です。コンパイル時に、次のエラーが報告されます。「サポートされていない GNU バージョン! gcc バージョン 6 以降はサポートされていません。A13 .コンパイル時に、cmake コマンドは
gcc g++6.0 バージョンを指定します。

cmake -DCMAKE_C_COMPILER=/usr/bin/gcc-6 -DCMAKE_CXX_COMPILER=/usr/bin/g++-6 ..

おすすめ

転載: blog.csdn.net/weixin_36354875/article/details/126051498