3D点云目标检测算法综述

article/2025/8/24 17:33:53

一、概述

在3D点云目标检测领域,对于数据输入的处理一般有三种:

多视角。将三维点云投射到多个二维平面形成图像
体素,voxel,将三维点云切割成多个小块,这些小块就叫体素,类似像素。这是最自然的一种想法,正如像素通过规律排列形成二维图像,体素也是通过规律排列形成三维体的,并且可以使用3D卷积像图像一样进行操作。 现在的VoxelNet不还是回归到体素了吗?只不过VoxelNet不是直接对体素进行卷积,后面详细介绍。
直接输入点云数据(N,D),N是点云文件中点的数量,一般在万级,D则是特征维度,一般是x,y,z加一个强度,也就是4维。

二、PointNet(2017.7)

原生的点云数据有两大特点:

  1. 置换不变性(transformation invariance):任意交换各点的位置,不影响对形状的表达
  2. 旋转不变性:所有的点做相同的变换(旋转平移),不影响对形状的表达

PointNet的思路就是利用上述两个特点。

置换不变性
事实上有很多函数是不考虑输入集顺序的,比如求最大值和均值,PointNet采用了MaxPooling,即求每个维度的最大值。比如N×D最终输出一个D维数组作为特征代表,D太小,会损失很多信息,所以作者现将输入映射到N×1024,然后输出1024维的特征,这样可以保留更多信息。
旋转不变形
所谓旋转,就是乘以一个D×D的矩阵,作者采用了一个很巧妙的方式,训练一个这样的网络,让点云输入主网络之前自己调整到最好的姿态。

2.1 PointNet网络结构

在这里插入图片描述
PointNet有分类和分割两种网络,分类网络基本思想如下:

输入N个3维点,也就是点云
经过Tnet旋转到合适的角度,利用旋转不变性
经过一系列的卷积转换为N×1024维
Maxpooling,输出1024维的向量,利用置换不变性
经过全连接,输出k维向量,显然k就是分类数
分割是在分类的基础上做些演绎,最终输出N×M的矩阵,M代表分类,也就是说给每个点都进行了分类。

2.2 PointNet主要创新

  1. 首次直接将点云数据输入网络,而不是将其进行规范化
  2. 对旋转不变性和置换不变性的利用

三、VoxelNet(2017.9)

VoxelNet关注的更多是点云的稀疏性和密度不均衡性,虽然作为声称直接输入点云数据,但是看起来还是将点云进行了规范化,即投射到3D空间。
该算法发布于PointNet面世后两月,作者称赞了PointNet取得的成绩,然后反手就是一句我才是“state of the art”。具体来说,作者认为PointNet有两个问题:

能够容纳的点云数量太少(约1k,Nuscenes 32线 ~43k,Kitti 64线 ~153k)
没有目标检测功能(只有分类和分割)。
所以作者的主要目的就是要让自己的网络能够容纳更大规模的输入以及能够实现目标检测(带航向角的3D框,7个自由度)

3.1 VoxelNet网络结构和流程

在这里插入图片描述
VoxelNet网络整体分为三部分:

Feature learning network:全连接和最大池化,局部特征提取
Convolutional middle layers:3D卷积,并在最后将张量压缩一个维度
Region proposal network:2D卷积,输出目标map

3.1.1 Feature learning network

  1. 首先将3D空间均匀的划分为一个个3D格子,称为voxel(体素)。每个体素含有若干个激光点,而90%以上的voxel不含点,利用这个特性,后面会使用稀疏张量,大大节省空间和BP算法计算量。
    具体划分规则:以Kitti为例,首先限制点云范围在Z: [ -3, 1] , Y: [ 40, -40] , X: [0, 70.4],每个格子的尺寸相应为0.4,0.2,0.2,这样3D空间就被划分为10×400×352的网格(分别对应D-竖向,H-横向,W-纵向,也就是沿着道路的方向)。另外作者采取了随机采用的方式,对每个格子取点数量做限制,车取35,人和自行车取45,详见论文。
  2. 对每一个voxel,利用Voxel Feature Extraction(VFE)提取特征。VFE是作者声称的主要创新点,不过实际上相当于对每个voxel里的点集做PointNet做过的事,考虑到两篇论文时间相近,看来是两个作者想到一块去了?
  3. VFE
    在这里插入图片描述
    VFE的过程图中描述的很清楚,输入、全连接增加每个点的维度、最大池化提取这一堆点的特征(1维),在分别拼接到前面每个点的特征中,有点skip-connect的意思。经过一个VFE,输出了point-wise的feature,注意在整个网络中VFE是叠加的,并且每个VFE的参数不一样,详见论文。
  4. 在经过一些列的VFE层之后,在接上全连接层和池化层,输出一个一维的特征,这个特征就可以代表所在的这个voxel了,所以这个特征也叫voxel-wise feature,而没有point的voxel则不存在这个特征。作者在这里使用了稀疏张量,不必记录这些为0的voxel。
    所谓稀疏张量,是指记录张量尺寸、非零的值及其索引,这样可以节省内存和BP算法的计算开销
  5. 所有的voxel经过VFE后最终输出的是一个128 × 10 × 400 × 352的张量,也就是说每个voxel里的特征都是128维的。再次强调,这是一个稀疏张量sparse tensor

3.1.2 Convolutional middle layers

这个阶段比较简单,对128 × 10 × 400 × 352的张量做3次3D卷积,聚合各个voxel的特征(可以看到,从最开始的point-wise、voxel-wise再到现在聚合voxels特征,该网络对特征的提取层层递进,很是精妙啊!)。
这3次卷积之后输出的张量是64 × 2 × 400 × 352,接着压缩一个维度,最终输出3D的张量:128 × 400 × 352,事实上从这个张量的形状可以看到,这就相当于是提取了俯视图的特征,然而和图片不同的是:图片是直接降维,在Z方向把3D点云拍扁,而作者这样做对每个“俯视图”中的点都保留了128维的信息!

3.1.3 Region proposal network

在这里插入图片描述
RPN层,作者说参考的是Faster-RCNN,不过看起来更像是YOLO,因为这里输出的直接就是最后的预测结果了,而不是推荐区域。
上一层输出了3D张量,在本阶段就可以使用2D卷积了,基本上就是图像卷积里的老套路了,卷积、上采样、降采样、skip-connect等等。图中表达的很清楚,值得注意的是这个阶段缩小尺寸也是通过stride=2实现的,感觉现在的网络更加倾向于全连接,池化用的越来越少。
最重要的是输出,这层的输出就是最终结果了。作者设计了两个分支,一边分类,一边回归(毫无新意啊!)。
分类方面,输出2个维度,对应两个anchor,或者说每个网格预测两个结果。
回归方面,输出14个维度,也是对应两个anchor,而每组结果对应的是7个自由度。
顺便提一下损失函数,分类交叉熵损失,回归L1-smooth(毫无新意+1)

四、CenterPoint(2017.9)

按照作者描述,CenterPoint就是将VoxelNet的RPN层换成了CenterNet。(我真是醉了,这都能水论文)
从两个方面简单说一下两者区别:

  1. 首先VoxelNet的RPN层很简单,从上图可以看到只有十几层卷积,再加上resnet跳级连接的思想。而CenterNet无论是用DLA还是Hourglass网络规模和复杂度都要高很多,所以效果好是自然的。我觉得这不能算CenterPoint的贡献。
  2. 最后的输出也有差别。VoxelNet输出两个分支,分别对应分类和7个自由度的回归。CenterNet输出的是80张heat map分别代表80个类别的预测,而坐标等信息则通过另外的分支回归。而CenterPoint将输出分为两部分:prediction Y branch和regression branch,这个Y指什么?中心点坐标吗?因为作者说CenterPoint中对中心点的检测是核心。还有分类是怎么处理的?也是回归?

五、备注

  1. PointPillar和VoxelNet一样也是主流的3D点云检测算法,主要差别在于在最初划分体素是PointPillar将整条点划为一个voxel,就像一个柱子一样,所以后面也不需要3D卷积,速度快了不少。
  2. SECOND(2018.10)在VoxelNet的基础上简化了VFE,直接对那些点做平均池化。

http://chatgpt.dhexx.cn/article/ovNUsvFP.shtml

相关文章

传统目标检测算法

目标分类:给一张图片,分类 目标检测:给一张图片,找到目标,并用矩形框画出 分类是对一幅图整体,检测是更进一步,找出一幅图中一部分。一般检测以分类为基础, 目标检测就是找出图像中…

目标检测算法基础

人脸检测算法综述 0 前言1 人脸检测算法难点2 人脸检测算法流程2.1 选择检测窗口2.2 提取图像特征2.3 设计分类器2.3.1 AdaBoost2.3.2 SVM分类器2.3.3 决策树与随机森林 3 人脸检测算法3.1 传统的人脸检测算法3.2 深度学习3.2.1 基于候选框的二阶段检测算法3.2.2 直接预测结果框…

目标检测算法回顾之传统算法

传统的目标检测算法 总体回顾基于特征基于分割 一般流程经典算法HarrAdaboost流程Harr特征Adaboost算法 HOG SVM概述方法HOG特征的优缺点 DPMDPM特征DPM流程 DPM vs HOG 总结 说明:本文仅供学习 虽然传统的目标检测方法现在比较少用,但我们认为有必要了…

目标检测算法发展综述

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法 1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xf…

目标检测算法研究

1、目标检测基本介绍 1.1、项目结构 1.2、目标检测的算法分类 1.2.1两步走的目标检测:先进行区域推荐、而后进行目标分类 代表算法 :R-CNN、 SPP-net、Fast-R-CNN、Faster R-CNN 1.2.2、端到端的目标检测:采用一种网络一步到位 代表&#x…

目标检测算法分类

目标检测算法分类: 1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN 2、端到端的目标检测:采用一个网络一步到位,输入图片,输…

目标检测算法

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xff…

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 转自:七月在线实验室 一、目标检测常见算法 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解…

目标检测算法总结

一、基于候选区域的目标检测器 滑动窗口检测器 根据滑动窗口从图像中剪切图像块,把图像块处理成固定大小。随后输入CNN分类器中,提取特征。最后使用SVM分类器识别种类,并且用线性回归器得到边框。 选择性搜索selective search 首先将每个…

万字长文详解目标检测算法,超大超全(2022最新)

摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypoint-based 3.1.3 NMS 3.2 目标检测中的挑战 4 目标检测中的Head 4.1 ThunderNet 4.2 You Only Look Once(YOLO) 4.3 Single Sh…

常见经典目标检测算法

1、目标检测基本概念 1.1 什么是目标检测 目标检测(Object Dectection)的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。 1.2 目标检测要解决的核心问题 除图像分类外,目标检测要解决的核心问题是&#xff1a…

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 文章目录 一、目标检测常见算法二、传统的目标检测算法2.1 从图像识别的任务说起2.2 物体检测(Object Detection) 三、候选区域/窗 深度…

【NLP】预训练模型——GPT1

背景 废话不多说,先把三篇论文链接放出来:GPT1:Improving Language Understanding by Generative Pre-Training、GPT2:Language Models are Unsupervised Multitask Learners、GPT3:Language Models are Few-Shot Learners。李沐老师也在B站上放了介绍G…

ResNet50修改网络适应灰度图片并加载预训练模型

此博文是修改https://blog.csdn.net/jiacong_wang/article/details/105631229 这位大大的博文而成的,自己根据自己的情况稍微加了点东西 要修改的地方有4处 1.修改网络第一层,把3通道改为1 法一:直接在定义网络的地方修改 self.conv1 nn.…

TD-LTE R8 预编码学习笔记

预编码: MIMO系统中,当发射端通过某种方式获得一定的CSI(瞬时值,短期或中长期统计信息),就能通过一定的预处理方式对各个数据流加载的功率,速率乃至发射方向进行优化,并通过预处理在…

Task2-基于MobileaNet的预训练模型优化

##项目背景 mobilenet_v2_0.75_224 预训练模型是基于224224的训练集图片训练而来,需要通过imagenet 100M数据集把模型训练成适用于448448的预训练模型 ##思考的问题 1、预训练模型怎么使用和导入 2、如何在服务器上训练 3、如何把训练集弄出来 4、如何评价训练效果…

波束形成 基于对角加载的稳健自适应波束形成

前言 本人刚刚入门阵列信号处理的波束形成方向,因此仿真过程中可能会出现错误,如果诸位大佬发现仿真过程中有错误,请不吝指出谢谢。 对角加载(Diagonal Loading, DL)是一种比较常用的提高Capon波束形成器鲁棒性的方法,通过在样本协…

Unity大场景数据加载及优化方案

前段时间,有几个虚拟仿真公司跟我请教关于大地形的加载优化问题,它们使用的引擎都是自己研发的,引擎对于开发者来说,大同小异,它们的基本构造是一样的,关键是在于解决问题的方法,正是基于这个前…

预训练模型

目录 一、BERT1、贡献1.1 MLM任务1.2 NSP任务 2、实验细节 二、ALBERT1、贡献1.1 词向量分解1.2 层参数共享1.3 SOP任务 三、 ERNIE1、贡献2、实验细节2.1 语料2.2 MLM任务2.3 DLM任务 四、DistilBERT1、贡献2、实验细节 五、RoBERTa1、贡献2、实验细节2.1 动态mask2.2 去掉NSP…

改动模型后,加载部分预训练权重文件

加载部分预训练权重文件 最近在做姿态估计相关内容,需要将Hrnet模型修改,Hrnet是基于coco数据集训练的,coco数据集是17个关节点,而我需要的是15个关节点,在将数据集标好训练之后,发现由于数据量比较小&…