基于激光雷达(LiDAR)点云进行以“人”(Pedestrian)为核心的目标检测,其核心难点在于:人体的点云数量远少于车辆、非刚体形态多变、易受遮挡。
要在满足精度高、延迟低、易部署这三个严苛指标下落地,目前工业界最成熟、首选的技术技术框架是:CenterPoint (Pillar-based) 算法或FastPillars 算法,配合OpenPCDet 训练框架与TensorRT 加速引擎。
一、 核心算法框架选择
综合对比 3D 点云检测的各类基线,最推荐的架构是CenterPoint的 Pillar 版本,或者专门为部署优化的FastPillars。大致流程图如下:
[3D 原始点云] ──> [Pillar 柱状体化] ──> [2D CNN / 骨干网络] ──> [Center Head (无锚点中心检测头)] ──> [3D Bounding Box (人)]
1. 为什么选择 Pillar(柱状体)表征?
Voxel(体素)方法(如 SECOND、PV-RCNN)虽然精度极高,但依赖 3D 稀疏卷积(
spconv),在边缘端硬件(如英伟达 Jetson 平台)上的算子支持和算力消耗非常高,不易部署。Pillar(柱状体)方法(如 PointPillars)将 3D 点云拉伸并投影为 2D 伪图像,后续全部采用成熟的 2D 卷积。对 TensorRT 极其友好,延迟极低(单帧通常 < 15ms)。
2. 为什么选择 Center-based 检测头?
传统的Anchor-based(基于锚框)方法在检测人时效果较差,因为人的朝向(Heading)在俯视图上呈圆形/正方形(人窄而高),Anchor 的角度回归非常不稳定。
CenterPoint将人简化为一个中心点(Keypoint),首先预测中心点,再回归高度、长宽和速度。这种无锚点(Anchor-free)机制极大地提升了行人的检测精度,且减少了 NMS(非极大值抑制)的计算耗时。
二、 工业级生产环境推荐组合(技术栈)
| 阶段 | 推荐工具/库 | 说明 |
| 数据与模型训练 | OpenPCDet | 社区最活跃、代码最规范的 3D 点云检测库(基于 PyTorch)。原生支持 CenterPoint、PointPillars 等,方便针对“人”做多类别/单类别训练。 |
| 模型导出 | ONNX | 将 PyTorch 训练好的模型通过符号化导出为标准的 ONNX 静态图(注意:需要将 Pillar 预处理和后处理部分剥离或写成自定义插件)。 |
| 推理加速引擎 | TensorRT | 在 NVIDIA 平台上实现低延迟的绝对核心。CenterPoint (Pillar) 的 2D CNN 主干网络能完美被 TensorRT 吞吐。 |
| 边缘部署上车 | C++/ROS2 | 负责驱动激光雷达(如速腾、禾赛),采集点云、进行 ROI 裁剪和降采样,调用 TensorRT 的.engine文件完成推理,最后输出 3D 框。 |
三、 针对“人”的高精度优化策略
如果你的场景里主要是人(如路侧感知、低速自动驾驶、园区小车),直接套用 KITTI 或 nuScenes 的默认车载参数往往效果不好,必须做以下针对性优化:
1. 空间分辨率与范围微调(ROI & Pillar Voxel Size)
车载场景通常看 70 米。但由于人体点云稀疏,有效检测距离通常在 30~40 米内。
缩小检测范围:建议将点云配置(
point_cloud_range)缩短,例如:X轴[-30, 30],Y轴[-30, 30],Z轴[-2, 3]。加密 Pillar 分辨率:默认的 Pillar 大小通常是
0.16m x 0.16m。为了精准捕捉行人的微小特征,建议将网格加密至0.1m x 0.1m甚至0.08m x 0.08m。
2. 针对行人的数据增强(Data Augmentation)
在 OpenPCDet 的配置文件中,强化以下数据增强模块:
GT-Sampling (Ground Truth 采样器):建立一个专门的“行人点云数据库”,在训练时将历史帧中的人随机“粘”到当前帧的空白区域,强行解决人样本较少的问题。
Random Flip & Rotate:围绕 Z 轴做小角度旋转和镜像翻转。
3. 多帧点云融合(Multi-frame Accumulation)
单帧点云下,远处的行人可能只有 3-5 个点,模型根本无法识别。
做法:利用里程计(Odom)或时间戳,将最近的3~5 帧点云进行时空同步并叠加(Accumulate),并在输入特征中增加一个时间通道(Time Delta)。这能让行人的轮廓瞬间变得密集,检测精度(尤其是召回率)会大幅提升。
四、 落地部署实施路径
要实现“低延迟、易部署”,建议采用“前处理(C++) -> 模型核心(TensorRT) -> 后处理(C++)”的解耦架构:
步骤 1:全 C++ 的点云预处理
不要把点云转化为 Pillar 的过程放在 Python 或 PyTorch 中。在 C++ 中利用 Open3D 或 PCL 库,编写一个高效的Voxelization算子(可利用 CUDA 加速),直接将原始点云填充进固定大小的 Tensor(如[Max_Pillars, Max_Points_per_Pillar, Feature_Dim])。
步骤 2:生成静态 ONNX 并转换为 Engine
由于去掉了 3D 稀疏卷积,CenterPoint (Pillar) 导出的 ONNX 图几乎全由标准 2D 卷积、Scatter 和 Linear 组成。 使用 TensorRT 命令行工具转换:
trtexec --onnx=centerpoint_pillar_people.onnx --saveEngine=centerpoint_people.engine --fp16注:强烈建议开启--fp16(半精度),在几乎不损失检测精度(尤其是对人这种强几何特征)的前提下,推理速度通常能提升 1.5 ~ 2 倍。
步骤 3:优秀开源参考实现
在实际编写部署代码时,无需从零开始,工业界有很多极佳的开源部署参考:
Autoware.Universe / Autoware.AI:业界最成熟的自动驾驶开源框架,其
lidar_centerpoint节点提供了极其完美的 C++/TensorRT 部署方案,直接支持 Pillar 模式,且对行人在内的 VRU(弱势路产)有深度优化。宇树科技/CyberDog 等四足机器人感知仓:在 GitHub 上搜索
CenterPoint-TensorRT,有大量开发者分享了将 OpenPCDet 模型部署到 Nvidia Jetson Orin 上的 C++ 源码。
总结
对于以人为主的激光雷达感知,OpenPCDet (训练) + CenterPoint-Pillar (算法) + TensorRT FP16 (推理) + 3帧点云融合 (前处理增强)是目前工业界在兼顾“高精度”和“线性能耗比”时的标准正确答案。这一套方案在 Nvidia Orin 平台上的端到端耗时通常可以控制在10-20ms以内,完全满足实时性要求。