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

2023-05-16

一、概述

在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,直接对那些点做平均池化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D点云目标检测算法综述 的相关文章

随机推荐

  • python数据分析基础-series基本统计运算,数据运算和比较运算

    linux 43 pycharm 43 anaconda 96 span class token comment 两个series数据运算 43 span num span class token operator 61 span pd s
  • python数据分析-柱状图绘制及常用参数设置

    linux 43 pycharm 43 anaconda span class token comment 柱形图绘制与参数设置 span span class token comment plt bar x height width bo
  • 爬取西窗烛app

    本文旨在学习 xff0c 不可做商业用途 span class token keyword import span csv span class token keyword import span json span class token
  • 爬取百度地图店家信息

    本文旨在交流学习 xff0c 勿作他用 xff0c 否则后果自负 span class token keyword import span json span class token keyword import span csv span
  • 爬取蝉妈妈数据平台商品数据

    本文旨在交流学习 xff0c 勿作他用 xff0c 否则后果自负 环境 linux 43 pycharm 43 anaconda span class token keyword import span json span class to
  • selenium+webdriver+chrome实现百度以图搜图

    1 环境搭建 1 webdriver 43 chrome的版本需匹配 2 打开chrome 输入 chrome version 来查看chrome版本 访问此网站 谷歌浏览器驱动 然后选择合适版本webdriver 2 收集原始图片和构建图
  • 无聊之重学c/c++

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Python配置Pip国内源

    临时指定下载源 以阿里云的镜像为例 pip install trusted host https mirrors aliyun com i https mirrors aliyun com pypi simple lt some packa
  • 爬虫效率提升方法

    协程 xff1a 在函数 特殊函数 定义的时候 使用async修饰 函数调用后 内部语句不会立即执行 而是会返回一个协程对象 任务对象 xff1a 任务对象 61 高级的协程对象 进一步封装 61 特殊的函数 xff0c 任务对象必须要注册
  • selenium JD爬虫

    python3 7 43 win10 span class token comment coding utf 8 span span class token comment 64 Time 2022 6 27 16 55 span span
  • 树莓派4b学习笔记三:三行命令极简安装vscode

    很多写代码的软件在树莓派上都不能用 xff0c 或者安装比较麻烦 恰巧 xff0c vscode作为一款轻量级代码编辑器 xff0c 可以在树莓上使用 xff0c 而且它通过简单的安装插件就可以支持很多种编程语言 我在网上搜了很多关于在树莓
  • you-get详细配置教程

    一 you get介绍 you get是一款能够直接从网页上下载视频 音乐 图片的命令行多媒体下载器 xff0c 它支持80多个网站 xff0c 包括某酷 某奇艺 某讯 Bzhan YouTube等 xff0c 具体说明及支持网站可点击下方
  • hyper-v虚拟机上的ubuntu 18.04 LTS通过xrdp传递声音遇到的一些坑

    背景 xff1a Windows10 pro上hyper v自带的ubuntu 18 04 LTS 在使用虚拟机时发现没有声音 xff0c 通过这篇博客Linux xrdp远程桌面连接声音重定向来到 pulseaudio module xr
  • 深入理解卡尔曼滤波算法

    最近做卡尔曼滤波跟踪的项目 xff0c 看原理花了一天 xff0c 再网上查找并看懂别人的kalman c 43 43 代码花了我近三天的时间 卡尔曼滤波就是纸老虎 xff0c 核心原理不难 xff0c 核心公式就5个 xff0c 2个状态
  • no module named ‘apex‘ 的解决方案

    背景 xff1a 部署fast reid工程环境的时候报出ModuleNotFoundError No module named 39 apex 的错误 纯粹记录一下 no module named apex 的解决方案 xff1a 1 官
  • C++ 中字符串查找、字符串截取、字符串替换

    1 字符串查找 s span class token punctuation span span class token function find span span class token punctuation span s1 spa
  • Jetson AGX Xavier 刷机指南

    目录 一 刷机准备 二 JetPack4 5刷机过程 三 安装Cudnn 四 开启高性能模式 五 打开风扇 六 上电自启 七 设置开机自启动 一 刷机准备 在刷机之前 xff0c 需要准备一台装有Ubuntu系统的宿主电脑 将 Xavier
  • Shp2osm:shp转换为osm格式文件

    概述 背景 因为opendrive是自动驾驶使用的较多的数据格式 xff0c 想把地图数据shp格式转换成opendrive格式的 xff0c 但是网上没有现成的转换脚本 xff0c 所以打算先从shp格式转到osm格式 xff0c 再从o
  • Linux笔记之Docker安装,基于Debian 11(bullseye)

    前置条件 Debian平台版本为 Debian 11 xff08 bullseye xff09 安装的是Docker Community Edition xff08 docker ce xff09 安装步骤 1 重新安装卸载旧版 xff0c
  • 3D点云目标检测算法综述

    一 概述 在3D点云目标检测领域 xff0c 对于数据输入的处理一般有三种 xff1a 多视角 将三维点云投射到多个二维平面形成图像 体素 xff0c voxel xff0c 将三维点云切割成多个小块 xff0c 这些小块就叫体素 xff0