PointPillars 学习笔记

PointPillars是一种高效处理点云数据的对象检测方法,采用PillarFeatureNetwork将点云转换为伪图像,利用2D卷积进行特征提取,并结合SSD检测头实现3D目标检测。

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

《PointPillars: Fast Encoders for Object Detection from Point Clouds》CVPR2019
PointPillars: 用于从点云进行对象检测的快速编码器


前言

首先说应用深度学习在点云上做object detection的两个思路,一个是3D卷积,VoxelNet是第一个endtoend的网络, 后来SECOND对此作了改进,但是仍然3D卷积的瓶颈依旧明显;另一个是投影到BEV (Bird's Eye View)图像做二维卷积,第二种方法虽然时间更快,但是点云的稀疏性让卷积的不实用,效率很低,所就用了 Fast Encoder简单来说就是对点云密度比较高的地方进行卷积, 速度提升还是很明显的。处理思路依然是3d转2d,先把3维的点云转成2d的伪图像。

  • 提出一种新的encoding points的方式:Pillar。与体素不同,支柱是点组织形式,表示点云以垂直列组织。支柱是在z方向上具有无限空间范围的体素。
  • fast: 62Hz ,faster version-- 105 Hz, 超过SECOND三倍。但是105Hz这样的运行时间可能会被认为是过度的,因为激光雷达的工作频率通常是20Hz。

一、网络结构

在这里插入图片描述
图2.网络概述。该网络的主要组成部分是Pillar Featrue Net、Backbone和SSD检测头。网络首先将原始点云转换为堆叠柱张量和柱索引张量。然后用编码器使用堆叠的支柱来学习一组特征,这些特征可以分散到卷积神经网络的2D伪图像上。通过Backbone进一步提取特征。最后将特征输入SSD检测头,预测对象的3D检测框。

Point-Pillars接受点云作为输入,并估计面向汽车、行人和骑自行车的3D盒。 它由三个主要阶段组成(图2):(1)转换的特征编码器网络 稀疏伪图像的点云;(2)将伪图像处理为高级表示的二维卷积骨干;(3)检测和回归3D检测框的检测头SSD。

二、Pillar Feature Network

Pointcloud to Pseudo-Image

为了应用二维卷积结构,我们首先将点云转换为伪图像

对于识别Car而言,识别范围为 前后左右上下[(0, 70.4), (-40, 40), (-3, 1)],将点云在x-y平面上投影出 H × W 个Pillar,再沿着z轴向上拉就成了柱体,每个Pillar (栅格柱子) 的大小为 0.16 x 0.16, 可以理解为图像里的一个像素, 那么伪图像的尺寸就是 440 x 500。Pillar中的每个点特征D长度9D=[x, y, z, r, x_c, y_c, z_c, x_p, y_p],其中c下标表示与支柱中所有点的算术平均值的距离,p下标表示与支柱x,y中心的偏移量。

因为~97% 的Pillar都很稀疏, 所以需要筛选出稠密(dense)的Pillar做卷积,每个柱子中点多于N的进行采样,少于N的进行填充0。于是就形成了(D,P,N)D=9, N为每个pillar的采样点数(设定值),P为pillar总数目,H*W。这样点云数据就表达成了一个(D,P,N)的Tensor。

这里用了一个PointNet的简化版本,其中,对于每个点,一个线性层被应用,之后接了一个BN和一个ReLU得到尺度为(C, P, N) 的Tensor,这里特征C的长度为64,然后经过max操作得到尺寸为(C, P)的Tensor, 一旦编码,这些特征就会分散到原始的支柱位置,以创建(实际就是变形)一个大小为(C,H,W)的伪图像,因为反投影的Pillar个数只有P个, 剩下的将被填充为0,其中H和W表示画布的高度和宽度。至此,我们就用一个(C,H,W)的tensor完成了点云数据的表达。

请注意,线性层可以表示为跨越张量的1x1卷积,从而产生非常有效的计算。

三、Backbone

使用2D CNN处理

主干网有两个子网:一个自顶向下的网络,以越来越小的空间分辨率和a产生特征;第二个网络,执行自上而下功能的上采样和级联。 自顶向下的骨干可以用一系列的块块(S,L,F)来表征。

分为2部分

  • top-down network产生空间分辨率逐步降低的feature map
  • second network做upsample和concatenation,精细化feature。

top-down部分可以描述为一系列的block(S,L,F) S代表相对pseudo-image(即feature net得到的tensor)的stride。一个block有L个3x3的2D卷积层,F代表输出的channel数目。

backbone输出的tensor为(6C,H/2,W/2)

四、Detection Head

我们使用SSD[18]设置来执行3D对象检测。 类似于SSD,我们使用2D联合交叉(IoU)将先验框与ground truth 进行匹配[4]。 边界框的高度和标高未用于匹配;相反,给定2D匹配,高度和高程成为额外的回归目标。

五、Loss Function

定位Loss

我们使用SECOND[28]中引入的相同的损失函数。 ground truth box和anchor由(x,y,z,w,l,h,θ)定义。 ground truth与anchor之间的定位回归残差重新定义:
在这里插入图片描述
其中xgt 和xa分别代表ground truth和anchor。

总体定位损失为:
在这里插入图片描述
方向loss

由于角度定位损失不能区分翻转框,我们在离散化方向[28]Ldir上使用Softmax分类损失,使网络能够学习航向。

分类loss

focal loss通过对不同样本的loss赋予不同的权重,该权重是一个与当前样本预测概率相关的值。系数为(1-p)的变种,从而达到p越小,loss权重越大的目的,即放大hard example的loss。从而使得模型更好地适应难以分类的样本。
在这里插入图片描述
总损失
在这里插入图片描述
其中Npos是正anchor、βloc=2,βcls=1,和βdir=0.2。

Pointpillar 可以识别朝向,也就是会做是否旋转180°的处理。
在这里插入图片描述
在这里插入图片描述

参考(感谢)
https://zhuanlan.zhihu.com/p/107975261
https://zhuanlan.zhihu.com/p/102994173
https://blog.csdn.net/a_123456598/article/details/107486129

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值