【3D目标检测】PointPillars论文和代码解析

PointPillars是一款在速度与精度间取得平衡的3D检测模型,它通过将点云数据转化为柱体,形成伪图片进行处理。相比VoxelNet和SECOND等模型,其检测速度更快,且精度不低。作者采用了SSD网络结构进行提案,代码已开源。这篇博客将解析PointPillars的创新点和工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

本文要解析的模型叫做PointPillars,是2019年出自工业界的一篇Paper。

该模型最主要的特点是检测速度和精度的平衡。该模型的平均检测速度达到了62Hz,最快速度达到了105Hz,确实遥遥领先了其他的模型。这里我们引入CIA-SSD模型中的精度-速度图,具体对比如下所示
在这里插入图片描述
可以看出,截止CIA-SSD论文发表前,PointPillars的检测速度都是遥遥领先的,而且精度也不低。

现有的一些研究喜欢将不规则、稀疏的点云数据按照以下两种方式进行处理,然后引入RPN层进行3D Bbox Proposal,这两种方法为:

(1)将点云数据划纳入一个个体素(Voxel)中,构成规则的、密集分布的体素集。常见的有VoxelNet和SECOND,这在之前的文章中已经解析过了;

(2)从俯视角度将点云数据进行处理,获得一个个伪图片的数据。常见的模型有MV3D和AVOD,这也说过了。

本文采用了一种不同于上述两种思路的点云建模方法。从模型的名称PointPillars可以看出,该方法将Point转化成一个个的Pillar(柱体),从而构成了伪图片的数据。

然后对伪图片数据进行BBox Proposal就很简单了,作者采用了SSD的网络结构进行了Proposal。

本文的论文地址为:https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1812.05784
代码地址为:https://link.zhihu.com/?target=https%3A//github.com/SmallMunich/nutonomy_pointpillars

2 数据处理和网络结构

前面说到本文的一大亮点是将点云划分为一个个的Pillar,从而构成了伪图片的数据。

如何构成这个伪图片呢?作者在论文中是给出了这样的图,如下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.损失函数

在这里插入图片描述

4 总结

PointPillars是一款能够平衡检测速度和检测精度的3D检测模型。最近我也正在看这个模型的代码,上手玩玩这个模型,希望最后的结果能够惊艳到我(微笑)。如果文章解析部分有理解不到位的地方,欢迎各位批评指正!

写的很清楚,转载自:https://zhuanlan.zhihu.com/p/357626425?ivk_sa=1024320u

### PointPillars 主网络中的 PointNet 架构实现 PointPillars 是一种高效的三维目标检测方法,在自动驾驶等领域广泛应用。该架构通过将点云数据转换成伪图像表示来简化处理流程,从而提高了计算效率。 #### 数据预处理阶段 原始 LiDAR 点云被分割成固定大小的柱状体(pillars)。对于每一个 pillar,提取其中所有点的空间特征并聚合这些局部几何特性。此过程利用了 PointNet 的能力来捕捉无序点集的本质属性[^1]。 ```python import torch.nn as nn class PillarFeatureNet(nn.Module): def __init__(self, num_input_features=9, use_norm=True, num_filters=(64,), with_distance=False): super().__init__() self._with_distance = with_distance # 定义 PointNet 层用于特征提取 self.pointnet_layer = nn.Sequential( nn.Conv1d(num_input_features, 64, kernel_size=1), nn.BatchNorm1d(64) if use_norm else nn.Identity(), nn.ReLU(inplace=True), nn.Conv1d(64, 128, kernel_size=1), nn.BatchNorm1d(128) if use_norm else nn.Identity(), nn.ReLU(inplace=True), nn.Conv1d(128, num_filters[-1], kernel_size=1) ) def forward(self, features, coords): pointwise = self.pointnet_layer(features) return pointwise.max(dim=-1)[0].unsqueeze(-1), None ``` #### 特征融合与卷积操作 经过初步编码后的pillar特征图会被进一步加工以增强表达力。具体来说,先应用一系列标准二维卷积层对pseudo-image进行多尺度抽象;之后再接上SSD风格的目标分类器边框回归头完成最终预测任务[^3]。 ```python from torchvision.models import vgg16_bn class Backbone_2d(nn.Module): def __init__(self): super().__init__() backbone = vgg16_bn(pretrained=True).features[:-1] layers = list(backbone.children()) self.layer1 = nn.Sequential(*layers[:7]) self.layer2 = nn.Sequential(*layers[7:14]) self.layer3 = nn.Sequential(*layers[14:]) def forward(self, x): l1 = self.layer1(x) l2 = self.layer2(l1) out = self.layer3(l2) return [l1, l2, out] ``` 上述代码片段展示了如何基于 PointNet 实现 PointPillars 中的核心组件——即从稀疏点云输入到密集特征映射输出的过程。值得注意的是,尽管这里采用了 VGG 风格的基础骨干网作为后续处理模块,实际部署时可根据需求替换为其他更先进的模型结构如 ResNets 或 Transformers 来提升性能表现[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值