PointPillars: Fast Encoders for Object Detection from Point Clouds
code ID: /nutonomy/second.pytorch
目录
PointPillars: Fast Encoders for Object Detection from Point Clouds
概要
本文方法
实验结果
概要
在计算机视觉中,虽然深度学习表现出优越的性能,但是雷达数据并不能直接使用图像的卷积操作,它和图像有关键性差异:
the point cloud is a sparse representation, while an image isdensethe point cloud is 3D, while the image is 2D.
现有方法有三种:1 3D卷积;2, 投影到图像平面(前)3 在鸟瞰图上操作;(这三种方法在几乎没有遮挡和模棱两可的情况下有效)。鸟瞰图比较稀疏,直接使用卷积网络效率低。效果差;体素方法应运而生,但是太慢(4HZ);
设计一个j仅仅使用二维卷积就能实现端到端的3D点云学习,是一个适合于点云的编码器;学习点云的柱子(垂直列)上的特性,从而为对象预测面向3D的框。速度比较快,精度较高;
本文方法
三个阶段:
(1) A feature encoder network that converts a point cloud to a sparse pseudo-image;(2) A 2D convolutional backbone to process the pseudo-image into high-level representation;(3) A detection head that detects and regresses 3D boxes.
(1)生成伪图像
首先在俯视图的平面上打网格(H x W)的维度;然后对于每个网格所对应的柱子中的每一个点都取(x,y,z,r,x_c,y_c,z_c,x_p,y_p)9个维度。其中前三个为每个点的真实位置坐标,r为反射率,带c下标的是点相对于柱子中心的偏差,带p下标的是对点相对于网格中心的偏差。每个柱子中点多于N的进行采样,少于N的进行填充0。于是就形成了(D,N,P)D=9, N为点数(设定值),P为H*W。
然后学习特征,用一个简化的PointNet从D维中学出C个channel来,变为(C,N,P)然后对N进行最大化操作变为(C,P)又因为P是H*W的,我们再展开成一个伪图像形式,H,W为宽高,C为通道数。
(2)基础网络
包含两个子网络(1、top-down网络,2、second网络)top-down网络结构为了捕获不同尺度下的特征信息,主要是由卷积层、归一化、非线性层构成的,second网络用于将不同尺度特征信息融合,主要有反卷积来实现。具体细节如下:
(3)检测头和损失函数
检测头:SSD的检测头,目标高度和z 单独回归。
损失函数:
分类:focal loss
回归损失:其中,
上标gt表示真实标签,a表示anchor预测。
是引入的航向角loss,使用的是一个将航向角进行softmax分类准确度来定义。
(4)数据增广
数据增广也是本文性能提升的一个重要因素,
1)受SECOND方法启发,创建一个所有类别的3D 点云BOX查询表,对于每一个类别,随机选取一些样本box,把这些样本box放到当前点云中去(相当于统一位置的相同类别的样本不同个体之间相互换位置),然后每个box再进行旋转和平移变换。
2)全局扩展,沿着X轴镜像翻转、旋转、尺度变换、全局平移。
实验结果
需要指出的是:车和 行人自行车 使用不同的模型;