一、概述

在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,直接对那些点做平均池化。

3D点云目标检测算法综述相关推荐

  1. 一文尽览 | 基于点云、多模态的3D目标检测算法综述!(Point/Voxel/Point-Voxel)

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 目前 ...

  2. 3D单目(mono 3D)目标检测算法综述

    layout: post title: 3D单目(mono 3D)目标检测算法综述 date: 2021-01-22 22:08:39.000000000 +09:00 categories: [算法 ...

  3. 如何提高3D点云目标检测的难例精度?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文是一篇将注意力机制应用在点云目标检测中的文章<TANet: Robust 3D O ...

  4. 基于深度学习的目标检测算法综述(一)

    基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文内容原创,作者:美图云视觉技术部 检测团队,转载请注明出处 目标检测(Object ...

  5. 基于深度学习的目标检测算法综述(二)

    转自:https://zhuanlan.zhihu.com/p/40020809 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文 ...

  6. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  7. 基于深度学习的目标检测算法综述(从R-CNN到Mask R-CNN)

    深度学习目标检测模型全面综述:Faster R-CNN.R-FCN和SSD 从RCNN到SSD,这应该是最全的一份目标检测算法盘点 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述 ...

  8. 目标检测算法综述 | 基于候选区域的目标检测器 | CV | 机器视觉

    目标检测算法综述 | 基于候选区域的目标检测器 | CV | 机器视觉 滑动窗口检测器 自从 AlexNet 获得 ILSVRC 2012 挑战赛冠军后,用 CNN 进行分类成为主流.一种用于目标检测 ...

  9. 红外弱小目标检测算法综述

    红外弱小目标检测算法综述 ------ 参考文献: 李俊宏,张萍,王晓玮,黄世泽.红外弱小目标检测算法综述[J].中国图象图形学报,2020,25(09):1739-1753. ------ 依据是否 ...

  10. AI综述专栏 | 基于深度学习的目标检测算法综述

    https://www.toutiao.com/a6685618909275488780/ 2019-04-30 17:35:53 关注微信公众号:人工智能前沿讲习, 重磅干货,第一时间送达 AI综述 ...

最新文章

  1. POJ 1207 The 3n + 1 problem
  2. python 检验数据正态分布程度_Python DataFrame 检验数据正态分布及平均值差异检验...
  3. Netty之十大核心模块组件介绍
  4. c语言进制转换pdf下载,C语言 十六进制和十进制间的转换.pdf
  5. java filter教程_Java Web Filter 过滤器学习教程(推荐)
  6. Linux用一键安装包快速部署禅道项目管理平台
  7. 在网页上获取当前日期,数字时钟
  8. django.forms生成HTML,python – 在django中为表单自动生成表单字段
  9. 【Python精彩案例】随拍文档转PDF扫描版
  10. Jenkins的定时构建与轮询SCM
  11. web工程引用其他java工程_并读取spring配置文件_SpringBoot项目实战(8):四种读取properties文件的方式...
  12. C语言中不同类型之间的混合运算
  13. 1038 Recover the Smallest Number
  14. 报错:further occurrences of HTTP request parsing errors will be logged at DEBUG level
  15. 高通android编译命令,高通Android源码
  16. 转载 javascript联动菜单
  17. linux boost库安装
  18. 添加 polygon 网路
  19. 饿了么技术往事(下)
  20. cglib demo以及Enhancer源码解析

热门文章

  1. 没想到你们是这样的女生……
  2. 研究背调:云安全--CASB、CSPM、CWPP
  3. W ndows7系统的桌面不见了,windows7桌面音量控制键不见了怎么办(图文)
  4. java双开_修改Android源码实现原生应用双开,应用多开
  5. 微信投票软件制作代码
  6. Nodejs+MongoDB+WebRTC搭建视频通话协同应用
  7. vue自动计算日期天数
  8. 使用极狐GitLab限制开发者使用CI/CD的权限,三种方案
  9. 三层交换 VLAN 互访配置
  10. 如何获取手机的屏幕尺寸