|
Download README.md from OpenExplorer/pointpillars: direct link, hf CLI and curl.
- Browser
- Download file 4.27 kB
-
https://huggingface.co/OpenExplorer/pointpillars/resolve/main/README.md
- Command line
-
hf download hf://OpenExplorer/pointpillars/README.md
-
curl -L -o README.md https://huggingface.co/OpenExplorer/pointpillars/resolve/main/README.md
4.27 kB
| license: other | |
| tags: | |
| - heal | |
| - horizon | |
| - lidar | |
| # PointPillars (Car) | |
| PointPillars voxelizes point clouds into pillars; `PillarFeatureNet` learns pillar features, which are scattered into pseudo-images via `PointPillarScatter`, then multi-scale feature extraction and 3D box regression are performed by a SECOND-style FPN (`SECONDNeck`) and `PointPillarsHead`; training uses joint supervision with FocalLoss + SmoothL1Loss + direction classification. | |
| --- | |
| ## Deployment Metrics | |
| ### Model Parameters | |
| | Model | Model Input | Backbone | Neck | Model Output | | |
| |---|---|---|---|---| | |
| | PointPillars | Single-frame LiDAR point cloud `(N,4)` | PointPillarScatter | SECONDNeck | Car 3D detection boxes `(B,N,cls+reg)` | | |
| ### Accuracy Metrics | |
| | March | Metric | float | calibration | qat | hbm | | |
| | --- | --- | --- | --- | --- | --- | | |
| | J6M | 3D AP (Car) | 0.7731 | 0.7569 | 0.7709 | 0.7707 | | |
| > Data measured with `march = March.NASH_M` (J6M) configuration. | |
| > | |
| > HEAL version: heal 0.0.2 / hbdk4-compiler 4.11.11 / horizon_plugin_pytorch 3.3.10. | |
| ### Performance Metrics | |
| > **Performance test methodology**: FPS is measured with single-core eight-thread; Latency is measured with single-core single-thread; Memory is peak DDR usage. | |
| | March | latency (ms) | fps | Memory Usage (MB) | | |
| |---|---|---|---| | |
| | J6M | 22.52 | 213.58 | 55.90 | | |
| | J6P | 20.43 | 344.88 | 55.90 | | |
| | J6B | 1650.03 | 1.99 | 53.00 | | |
| --- | |
| ## Model Overview | |
| ### Core Design | |
| PointPillars voxelizes point clouds into pillars; `PillarFeatureNet` learns pillar features, which are scattered into pseudo-images via `PointPillarScatter`, then multi-scale feature extraction and 3D box regression are performed by a SECOND-style FPN (`SECONDNeck`) and `PointPillarsHead`; training uses joint supervision with FocalLoss + SmoothL1Loss + direction classification. | |
| - **Task type**: 3D object detection (LiDAR point cloud 3D Object Detection). | |
| - **backbone**: `PointPillarScatter` (scatters 64-dim pillar features learned by `PillarFeatureNet` into `H×W×64` pseudo-image feature maps by coordinates, `use_horizon_pillar_scatter=True`). | |
| - **neck**: `SECONDNeck` (SECOND-style FPN: downsample layer channels `[64, 128, 256]`, strides `[2, 2, 2]`; upsample layer channels `[128, 128, 128]`, strides `[1, 2, 4]`; outputs three-scale features concatenated to 384 channels). | |
| - **Point cloud preprocessing**: `PointPillarsPreProcess` (voxelization: `pc_range=[0, -39.68, -3, 69.12, 39.68, 1]`, `voxel_size=[0.16, 0.16, 4]`, max 100 points per voxel, max 12000 voxels). | |
| - **Feature extraction**: `PillarFeatureNet` (`num_filters=(64)`, 4-dim input, MLP + max-pool to 64-dim pillar features). | |
| - **Detection head**: `PointPillarsHead` (`in_channels=384`, `use_direction_classifier=True`, outputs classification + box regression + direction classification). | |
| - **Anchor generation**: `Anchor3DGeneratorStride`: Car anchor size `1.6×3.9×1.56`, stride `[0.32, 0.32, 0.0]`, offset `[0.16, -39.52, -1.78]`, rotation angles `[0, 1.57]`; match threshold `0.6`, mismatch threshold `0.45`. | |
| - **Post-processing**: `PointPillarsPostProcess`: NMS (`nms_iou_threshold=0.5`, `score_threshold=0.4`, `nms_pre_max_size=1000`, `nms_post_max_size=300`, `max_per_img=100`). | |
| - **Loss**: `FocalLoss` (classification, `alpha=0.25, gamma=2.0, weight=1.0`) + `SmoothL1Loss` (box regression, `beta=1/9, weight=2.0`) + `CrossEntropyLoss` (direction, `weight=0.2`). | |
| - **Model input**: Single-frame LiDAR point cloud, shape `(N, 4)`, N = number of points (deployment input padded to `150000` points), 4 dims = `[x, y, z, intensity]`. | |
| - **Model output**: Car 3D boxes per frame (`x, y, z, w, l, h, θ`) + score + direction. | |
| - **Classes**: `["Car"]`. | |
| **Deployment notes**: The PointPillars deployment graph includes full voxelization + feature extraction + backbone + head + post-processing. HBIR export enables `enable_vpu=True`; compilation uses `input_source=["ddr"]` (point cloud read from DDR, not pyramid image input), unlike image-based tasks. This task has no subgraph export; only one `deploy.py`. | |
| ### Official Repo and Paper | |
| Official repo: https://github.com/nutonomy/second.pytorch | |
| Paper: https://arxiv.org/abs/1812.05784v1 | |
| ### Reference | |
| For more J6 chip deployment details, see https://developer.horizon.auto/blog/14086 | |