|
| 1 | +# Note |
| 2 | + |
| 3 | +_This directory is a fork from [PointPillars](https://github.com/zhulf0804/PointPillars) (commit 620e6b0)._ |
| 4 | +----------------------- |
| 5 | + |
| 6 | +<details> |
| 7 | +<summary style="font-size:2em; font-weight:600">OpenVino Model Export and Inference</summary> |
| 8 | + |
| 9 | +```bash |
| 10 | +# Install the required packages |
| 11 | +sudo apt update && sudo apt install -y \ |
| 12 | + software-properties-common \ |
| 13 | + build-essential \ |
| 14 | + cmake \ |
| 15 | + git \ |
| 16 | + libx11-6 \ |
| 17 | + libgl1 |
| 18 | +``` |
| 19 | + |
| 20 | +Tested over python 3.10: |
| 21 | +```bash |
| 22 | +conda install python=3.10 |
| 23 | +conda create -n ovpp310 python=3.10 |
| 24 | +conda activate ovpp310 |
| 25 | +``` |
| 26 | +Considering the `REPO_ROOT` variable points to the `pointPillars` directory: |
| 27 | + |
| 28 | +```bash |
| 29 | +REPO_ROOT=/path/to/3d/pointPillars |
| 30 | +``` |
| 31 | + |
| 32 | +Install the required python packages: |
| 33 | +```bash |
| 34 | +# Install the required pip packages |
| 35 | +python -m pip install -r "${REPO_ROOT}/requirements-ov.txt" |
| 36 | +``` |
| 37 | + |
| 38 | +Build the pytorch extension required for exporting the model: |
| 39 | +```bash |
| 40 | +# Build the pytorch extensions (will be used only to export the model) |
| 41 | +cd ${REPO_ROOT} |
| 42 | +CPU_BUILD=1 python setup.py build_ext --inplace |
| 43 | +cd .. |
| 44 | +``` |
| 45 | + |
| 46 | +Build the OpenVino Extension required for inference: |
| 47 | +```bash |
| 48 | +# Build the openvino extension |
| 49 | +cd "${REPO_ROOT}/ov_extensions" && rm -rf build/ && bash build.sh && cd .. |
| 50 | +``` |
| 51 | + |
| 52 | +Exporting the model: |
| 53 | +```bash |
| 54 | +# Export the PointPillars .pth model to OpenVINO format |
| 55 | +python "${REPO_ROOT}/export_ov_e2e.py" --checkpoint "${REPO_ROOT}/pretrained/epoch_160.pth" --output "${REPO_ROOT}/pretrained/pointpillars_ov" |
| 56 | +``` |
| 57 | +The above command will generate the following five files: |
| 58 | +- pointpillars_ov_config.json |
| 59 | +- pointpillars_ov_nn.bin |
| 60 | +- pointpillars_ov_nn.xml |
| 61 | +- pointpillars_ov_pillar_layer.xml |
| 62 | +- pointpillars_ov_postproc.xml |
| 63 | + |
| 64 | +Running inference using OpenVINO over a single pc data: |
| 65 | +```bash |
| 66 | +# Run inference with OpenVINO |
| 67 | +python "${REPO_ROOT}/e2eOVInference.py" --config "${REPO_ROOT}/pretrained/pointpillars_ov_config.json" --pc_path "${REPO_ROOT}/pointpillars/dataset/demo_data/test/000002.bin" |
| 68 | +``` |
| 69 | +The Kitti dataset Download and Preprocess steps are described in [this section](#datasets). Say, it is stored in `${REPO_ROOT}/Datasets`. |
| 70 | + |
| 71 | +Evaluate model over the KITTI val set: |
| 72 | +```bash |
| 73 | +python "${REPO_ROOT}/evaluate-e2eOV.py" --device CPU --data_root "${REPO_ROOT}/Datasets" --config "${REPO_ROOT}/pretrained/pointpillars_full_config.json" --saved_path "${REPO_ROOT}/profiles/evals-e2eov-cpu" |
| 74 | +``` |
| 75 | + |
| 76 | +</details> |
| 77 | + |
| 78 | + |
| 79 | +# [PointPillars: Fast Encoders for Object Detection from Point Clouds](https://arxiv.org/abs/1812.05784) |
| 80 | + |
| 81 | +A Simple PointPillars PyTorch Implenmentation for 3D Lidar(KITTI) Detection. [[Zhihu](https://zhuanlan.zhihu.com/p/521277176)] |
| 82 | + |
| 83 | +- It can be run without installing [Spconv](https://github.com/traveller59/spconv), [mmdet](https://github.com/open-mmlab/mmdetection) or [mmdet3d](https://github.com/open-mmlab/mmdetection3d). |
| 84 | +- Only one detection network (PointPillars) was implemented in this repo, so the code may be more easy to read. |
| 85 | +- Sincere thanks for the great open-source architectures [mmcv](https://github.com/open-mmlab/mmcv), [mmdet](https://github.com/open-mmlab/mmdetection) and [mmdet3d](https://github.com/open-mmlab/mmdetection3d), which helps me to learn 3D detetion and implement this repo. |
| 86 | + |
| 87 | +## News |
| 88 | + |
| 89 | +- **2025-02** Making PointPillars a python package out of the code is supported. |
| 90 | +- **2024-04** Exporting PointPillars to ONNX & TensorRT is supported on branch [feature/deployment](https://github.com/zhulf0804/PointPillars/tree/feature/deployment). |
| 91 | + |
| 92 | +  |
| 93 | + |
| 94 | +## mAP on KITTI validation set (Easy, Moderate, Hard) |
| 95 | + |
| 96 | +| Repo | Metric | Overall | Pedestrian | Cyclist | Car | |
| 97 | +| :---: | :---: | :---: | :---: | :---: | :---: | |
| 98 | +| this repo | 3D-BBox | 73.3259 62.7834 59.6278 | 51.4642 47.9446 43.8040 | 81.8677 63.6617 60.9126 | 86.6456 76.7439 74.1668 | |
| 99 | +| [mmdet3d v0.18.1](https://github.com/open-mmlab/mmdetection3d/tree/v0.18.1) | 3D-BBox | 72.0537, 60.1114, 55.8320 | 52.0263, 46.4037, 42.4841 | 78.7231, 59.9526, 57.2489 | 85.4118, 73.9780, 67.7630 | |
| 100 | +| this repo | BEV | 77.8540 69.8003 66.6699 | 59.1687 54.3456 50.5023 | 84.4268 67.1409 63.7409 | 89.9664 87.9145 85.7664 | |
| 101 | +| [mmdet3d v0.18.1](https://github.com/open-mmlab/mmdetection3d/tree/v0.18.1) | BEV | 76.6485, 67.7609, 64.5605 | 59.0778, 53.3638, 48.4230 | 80.9328, 63.3447, 60.0618 | 89.9348, 86.5743, 85.1967 | |
| 102 | +| this repo | 2D-BBox | 80.5097 74.6120 71.4758 | 64.6249 61.4201 57.5965 | 86.2569 73.0828 70.1726 | 90.6471 89.3330 86.6583 | |
| 103 | +| [mmdet3d v0.18.1](https://github.com/open-mmlab/mmdetection3d/tree/v0.18.1) | 2D-BBox | 78.4938, 73.4781, 70.3613 | 62.2413, 58.9157, 55.3660 | 82.6460, 72.3547, 68.4669 | 90.5939, 89.1638, 87.2511 | |
| 104 | +| this repo | AOS | 74.9647 68.1712 65.2817 | 49.3777 46.7284 43.8352 | 85.0412 69.1024 66.2801 | 90.4752 88.6828 85.7298 | |
| 105 | +| [mmdet3d v0.18.1](https://github.com/open-mmlab/mmdetection3d/tree/v0.18.1) | AOS | 72.41, 66.23, 63.55 | 46.00, 43.22, 40.94 | 80.85, 67.20, 63.63 | 90.37, 88.27, 86.07 | |
| 106 | + |
| 107 | +- **Note: Here, we report [mmdet3d v0.18.1](https://github.com/open-mmlab/mmdetection3d/tree/v0.18.1) (2022/02/09-2022/03/01) performance based on the officially provided [checkpoint](https://github.com/open-mmlab/mmdetection3d/tree/v0.18.1/configs/pointpillars#kitti). Much improvements were made in the [mmdet3d v1.0.0rc1](https://github.com/open-mmlab/mmdetection3d/tree/v1.0.0rc1)**. |
| 108 | + |
| 109 | +## Detection Visualization |
| 110 | + |
| 111 | + |
| 112 | + |
| 113 | + |
| 114 | +## [Install] |
| 115 | + |
| 116 | +Install PointPillars as a python package and all its dependencies as follows: |
| 117 | + |
| 118 | +``` |
| 119 | +cd PointPillars/ |
| 120 | +pip install -r requirements.txt |
| 121 | +python setup.py build_ext --inplace |
| 122 | +pip install . |
| 123 | +``` |
| 124 | + |
| 125 | +## [Datasets] |
| 126 | + |
| 127 | +1. Download |
| 128 | + |
| 129 | + Download [point cloud](https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_velodyne.zip)(29GB), [images](https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_image_2.zip)(12 GB), [calibration files](https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_calib.zip)(16 MB)和[labels](https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_label_2.zip)(5 MB)。Format the datasets as follows: |
| 130 | + ``` |
| 131 | + kitti |
| 132 | + |- training |
| 133 | + |- calib (#7481 .txt) |
| 134 | + |- image_2 (#7481 .png) |
| 135 | + |- label_2 (#7481 .txt) |
| 136 | + |- velodyne (#7481 .bin) |
| 137 | + |- testing |
| 138 | + |- calib (#7518 .txt) |
| 139 | + |- image_2 (#7518 .png) |
| 140 | + |- velodyne (#7518 .bin) |
| 141 | + ``` |
| 142 | +
|
| 143 | +2. Pre-process KITTI datasets First |
| 144 | +
|
| 145 | + ``` |
| 146 | + cd PointPillars/ |
| 147 | + python pre_process_kitti.py --data_root your_path_to_kitti |
| 148 | + ``` |
| 149 | +
|
| 150 | + Now, we have datasets as follows: |
| 151 | + ``` |
| 152 | + kitti |
| 153 | + |- training |
| 154 | + |- calib (#7481 .txt) |
| 155 | + |- image_2 (#7481 .png) |
| 156 | + |- label_2 (#7481 .txt) |
| 157 | + |- velodyne (#7481 .bin) |
| 158 | + |- velodyne_reduced (#7481 .bin) |
| 159 | + |- testing |
| 160 | + |- calib (#7518 .txt) |
| 161 | + |- image_2 (#7518 .png) |
| 162 | + |- velodyne (#7518 .bin) |
| 163 | + |- velodyne_reduced (#7518 .bin) |
| 164 | + |- kitti_gt_database (# 19700 .bin) |
| 165 | + |- kitti_infos_train.pkl |
| 166 | + |- kitti_infos_val.pkl |
| 167 | + |- kitti_infos_trainval.pkl |
| 168 | + |- kitti_infos_test.pkl |
| 169 | + |- kitti_dbinfos_train.pkl |
| 170 | + ``` |
| 171 | +
|
| 172 | +## [Training] |
| 173 | +
|
| 174 | +``` |
| 175 | +cd PointPillars/ |
| 176 | +python train.py --data_root your_path_to_kitti |
| 177 | +``` |
| 178 | +
|
| 179 | +## [Evaluation] |
| 180 | +
|
| 181 | +``` |
| 182 | +cd PointPillars/ |
| 183 | +python evaluate.py --ckpt pretrained/epoch_160.pth --data_root your_path_to_kitti |
| 184 | +``` |
| 185 | +
|
| 186 | +## [Test] |
| 187 | +
|
| 188 | +``` |
| 189 | +cd PointPillars/ |
| 190 | + |
| 191 | +# 1. infer and visualize point cloud detection |
| 192 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path your_pc_path |
| 193 | + |
| 194 | +# 2. infer and visualize point cloud detection and gound truth. |
| 195 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path your_pc_path --calib_path your_calib_path --gt_path your_gt_path |
| 196 | + |
| 197 | +# 3. infer and visualize point cloud & image detection |
| 198 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path your_pc_path --calib_path your_calib_path --img_path your_img_path |
| 199 | + |
| 200 | + |
| 201 | +e.g. |
| 202 | +a. [infer on val set 000134] |
| 203 | + |
| 204 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path pointpillars/dataset/demo_data/val/000134.bin |
| 205 | + |
| 206 | +or |
| 207 | + |
| 208 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path pointpillars/dataset/demo_data/val/000134.bin \ |
| 209 | + --calib_path pointpillars/dataset/demo_data/val/000134.txt \ |
| 210 | + --img_path pointpillars/dataset/demo_data/val/000134.png \ |
| 211 | + --gt_path pointpillars/dataset/demo_data/val/000134_gt.txt |
| 212 | + |
| 213 | +b. [infer on test set 000002] |
| 214 | + |
| 215 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path pointpillars/dataset/demo_data/test/000002.bin |
| 216 | + |
| 217 | +or |
| 218 | + |
| 219 | +python test.py --ckpt pretrained/epoch_160.pth --pc_path pointpillars/dataset/demo_data/test/000002.bin \ |
| 220 | + --calib_path pointpillars/dataset/demo_data/test/000002.txt \ |
| 221 | + --img_path pointpillars/dataset/demo_data/test/000002.png |
| 222 | +``` |
| 223 | +
|
| 224 | +## Acknowledements |
| 225 | +
|
| 226 | +Thanks for the open source code [mmcv](https://github.com/open-mmlab/mmcv), [mmdet](https://github.com/open-mmlab/mmdetection) and [mmdet3d](https://github.com/open-mmlab/mmdetection3d). |
0 commit comments