Lidar based 3D object detection_lidarobjectdetection-程序员宅基地

技术标签: Lidar  物体检测  分类  

M. Himmelsbach, A. M¨uller, T. L¨uttel and H.-J. W¨unsche. 2008

摘要

本文描述了基于激光雷达的感知地面机器人移动系统,包含了3D物体检测,分类和跟踪。 该系统被应用于我们的自动地面车辆MuCAR-3,使其能够安全地在城市交通以及野外场景种航行。 我们的方法的效率源于2D和3D数据处理技术的独特组合。 其中点云快速分割在2.5D网格中进行,物体聚类在原始3D点云中完成。为了快速切换域,增强了占用网格使其具有哈希表的性质,以快速获取3维点云。 现在大多数3D点云分类工作都不能做到实时操作,但我们的系统可以0.1s帧速率实时执行。

I. 引言

本文解决了将3D扫描数据分割为已知对象的问题。给定3D点的集合,分割的目标是将点归到一组候选对象类别。在地面自动机器人领域,分割能力不仅对高级别任务(如场景理解和规划)而言至关重要,也可以用于扫描配准和机器人定位(如SLAM框架[1])。另外,了解对象的类别在动态环境中特别有用,它有助于规划和估计:使用合适的动力学模型可以改善估计,规划可以纳入关于特定对象类的典型行为或意图的知识。

我们的感知方法可以分解为3步:分割、分类和追踪。分割在占用网格中进行,产生不属于地面的连通网格,然后通过一个高效的方法确定所有与分割物体对应的3D测量点。在分类步骤中,我们通过对象点云提取特征,在每个点周围固定支持体积内捕获局部空间分布并提取相对属性,然后给出手工标记的点云案例,利用支持向量机(SVM)来分类点云,例如其他交通参与者。

A. 相关工作

随着距离扫描设备成为移动机器人的标准设备,3D扫描分割和分类的任务是增加实际相关性的任务之一。有趣的是,尽管距离扫描仪是DARPA城市挑战赛2007的主要传感器,但主要是在2.5-D占用网格上进行分割。 如果有的话,分割对象的分类是在2D域中完成的,通过拟合L形或边界框并根据简单规则验证它们[2][3]。 由于严格的竞赛规则,分类可以被省略,因为在道路边界内检测到的每个物体只能对应另一辆车。

相比之下,Anguelov[4]和Lalonde[5]描述了为每个扫描点分配类标签的方法。给出标记的点云,然后分割扫描是十分直接的。虽然为每个点提取的特征没有显着差异——两种方法都使用局部点云统计进行特征提取,稍后将详细说明——但遵循不同的分类范例。 Anguelov等人[4]通过概率分布对点的类标签进行建模,该概率分布以局部特征和点邻域中的标签为条件。 因此,它们利用扫描中的相邻点应具有相似标签的事实来强制空间连续性。该分布由马尔可夫随机场(MRF)建模,其参数在监督学习阶段中确定,使得得到的分类器最大化所学习的类之间的余量,如SVM那样。 虽然[4]中没有给出运行时间,但从[6]可以得出结论,该方法不允许实时使用。

Lalonde等[5]通过在手标记的训练数据集上使用期望最大化(EM)算法拟合高斯混合模型(GMM)来学习每个类的特征分布的参数模型。通过在分类之后运行简单的基于规则的过滤器来保证空间连续性,例如,通过将点的标签更改为其邻域中频率最高的类。但是,为了使它们的方法能实时执行,尚需进行一些修改。特别是不再对单个点进行分类,而是对3D体素网格单元中的原型点进行分类,分类速度可以达到7000个体素/秒。

我们采用了一种截然不同的独特方法,即基于2.5D占用网格压缩数据进行分割。然后,我们再次使用Velodyne的3D点云中包含的丰富信息,再次将域切换为3D,现在仅对所有点云的子集进行分类,因为每个子集代表一个单独的对象。 由于2D和3D数据处理技术的有效组合,可以在自动车辆上实时地对由其3D点云表示的对象进行分类。

II. 物体检测

A. 占用网格

我们使用一个2.5维的以自车为中心的维度占用网格100m x 100m,每个单元覆盖0.15m x 0.15m的小地面块。每个单元存储单个值,表示该单元被障碍物占用的程度。在我们的实现中,该值具有物理单位[m]的度量长度。在我们详细说明其含义和计算之前,请注意在我们的方法中,我们在每次新的LIDAR数据帧中创建一个新的占用网格,比如每0.1s。因此,我们不会累积更长时间的数据。这个决定的原因是双重的。首先,Velodyne一帧提供了大约100000个3D点,这证明是足够的。其次,如果不以非常高的精度估计传感器的物理运动,则累积占用网格的质量可能容易恶化。传感器估计的小角度偏差可能导致大的误差。相互定位扫描,例如使用ICP算法[7]或它的一些衍生物,可以解决这个问题,但需要大量额外的计算负荷。

为了计算占用率值,我们首先对LIDAR扫描进行惯性校正,考虑车辆的运动(利用IMU和测距信息)。这是通过将当地点云测量转换到全局3D空间的同时移动局部坐标系来完成的。 在一帧完成之后,所有点都被转换回车辆的最后一个局部坐标系,模拟扫描,好像所有测量都是在单个时间点而不是一个LIDAR旋转的0.1s时间段进行的。然后,与Thrun等类似[8],每个单元的值计算为落入相应网格单元的所有点的z坐标的最大绝对差。当激光束击中网格单元并更新其占用值时,我们将激光点存储在单元中,以便后续可以查询,详见第III节。图2显示了具有叠加点云的占用网格。

图2. 占用网格

B. 分割对象

为了获得初始对象假设,我们接下来查找网格单元的连通子图来执行对占用的网格单元的分割。为了应用连通子图算法,首先需要对网格进行二值化。可以简单地将所有单元的占用值与适当的值(对于MuCAR-3为0.15m,从其轮胎的直径得到)进行阈值处理,将所有占用值低于1的单元设置为0,其他的设置为1。然后,可以应用从机器视觉[9]中的标准连通子图算法,其为每个网格单元c_i 分配它所属的连通子图的标签 。

对于每个连通子图,我们给出未知类的对象3D边界框。可以根据属于相应连通子图的所有单元c_i的离散网格坐标 gc_i=(u,v)^T来计算对象边界框的x轴和y轴,cc_k=\left \{ gc_i^{ego}|label_i=k \right \} 。 这里,“ego”上标用于表示现在所有网格坐标都在自车坐标系中表示,通过自车和网格单元之间的静态几何关系极大地简化了转换。边界框的轴对应于坐标协方差矩阵 \Sigma _{cc_K}的正交特征向量e_1,e_2,通过降序保存,即对应特征值 d_1\geq d_2

将所有 gc_i^{ego}\in cc_k线性变换到特征向量定义的坐标系中(所谓特征空间), 然后在结果坐标中取最大最小值,就得到包络盒的平面尺寸。对象的位置 pos_k简单地定义为连接子图的重心。这个2D包络盒的可以保证覆盖连接子图的所有单元,但是丧失了一些期望的性质,例如具有最小包络面积。虽然目前运作良好,但是未来可能会进一步改进。

假设对象的z轴垂直xy平面,可将z的值设为所有单元中的最大值。至此,获得了最终的3D边界框。

                                  图3. 占用网格的3D包络盒

III. 分类

如前所述,我们希望根据3D点测量值对检测到的对象进行分类。但是,对象检测只为我们提供了对象的边界框表示。在本节中,我们将展示如何通过占用网格查询给定对象的3D点,以及从点云中提取何种特征。 最后,我们描述了如何训练我们的对象分类器并简要展示一些分类结果。

A. 对象点云

回忆到在使用激光点云更新网格单元时,我们将激光数据存储在单元中。因此,获得对应于对象的点云的简单方法是简单地收集存储在相应连通子图内的所有激光数据。然而,这在我们的案例中是不合适的。原因在于,连通子图仅由z坐标差异大的单元构成,并且不能理所当然地认为对象的所有测量都落入这样的单元中。因此,仅从连接子图单元中取出点可能会错过大量的对象测量并且使得后续分类步骤变得困难。

相反,我们提取对象3D边界框中包含的所有激光读数。为此,我们扩充网格的功能,以响应对任意(凸面和非凸面)多边形的数据的查询,其中顶点在局部坐标系中定义。 给定这样的查询,我们首先将顶点坐标从局部坐标变换为网格坐标,并将得到的多边形分割成三角形。接下来,我们在每个结果三角形上应用三角形扫描线算法,以得到原始多边形中包含的每个网格单元。然后,回答查询就简化为收集存储在被访问单元中的所有激光数据的问题。

                                          图4. 查询包络盒内所有点云

B. 点云特征提取

下一步是从点云中提取有意义的特征。主要困难是找到点云的紧凑表示,从而与原始点云相比显着降低维度。否则,生成的分类器将不能实时执行。同时,丢弃过多的原始数据可能导致分类器做出太多错误的决定而根本没用。

Anguelov等人使用的特征[4]和Lalonde等[5]为我们提供了这一步骤的基础。然而,它们不能直接应用,因为在我们的例子中,提取的特征必须提供可能包含大量点的点云数据紧凑描述,而Anguelov和Lalonde的工作中使用的特征仅需要描述单个点的突出属性。另一方面,可以从点云计算的特征不限于本地点属性。相反,某些特征还应该捕获全局对象属性,例如对象的尺寸或体积等。因此,我们将同时使用局部和全局特征来描述点云。

形式上,点云P可写为 P=\left \{ l_1,...,l_M \right \},其中 l_i=\left \{ x_i,y_i,z_i,I_i \right \}表示单个激光读数,由坐标x_i,y_i,z_i和强度 I_i 组成。 对于实际数据,对象点云的大小通常在M = 100 ~1000的范围内。 然而,对于更接近传感器的物体,M = 10000点的点云在极端情况下是可能的。在实时操作时,针对如此大量的点计算每个激光读取的本地统计数据是难以处理的。因此,我们对每个点云进行均匀的降采样,以在特征提取之前将点数减少到常数M = 200。

我们现在描述从降采样后的点云中提取的特征。

1)对象级特征:我们不涉及任何局部计算特征为“对象级特征”。 在我们最终的特征向量中包括了4个这种特征,它们都是标量值。

  1. 最大对象强度I_{max}=maxI_i  
  2. 平均对象强度\mu I = M^{-1}\sum I_i
  3. 对象强度方差\sigma I = M^{-1}\sum_{i}(I_i - \mu I)^2
  4. 对象体积V,由3D包络盒计算得到

显然,上述计算中 。

       2) 点级特征:对象级特征不涉及局部点属性,我们现在转向捕获局部点云统计类型的特征。为了将特征从点级别转移到对象级别,我们为每个点要素引入直方图,并通过对每个点的特征评估更新直方图。在为计算了所有点的特征之后,我们通过将每个bin值除以M来标准化相应的直方图。然后,将得到的直方图输入到我们的最终特征向量中。为了能够在固定的有限范围内定义直方图区间,我们将所有点特征标准化为0~1范围内的值。

  • Lalonde特征 L_1,L_2,L_3

Ladone等人[5]通过检查相邻点的分布计算了表示点散射度 L_1 、线形度 L_2 和表面度 L_3 的特征。为了计算特征,他们对相邻点的3D坐标的协方差矩阵进行特征值分析,得到特征向量 e_1,e_2,e_3,相应特征值 d_1,d_2,d_3 。然后令 L_1=d_1L_2=d_1-d_2L_3=d_2-d_3 。由于这些特征没有任何实际的上限,我们可以做个替换 d_i \mapsto \frac{d_i}{\sum_i{d_i}}  使得 \forall L_i : 0 \leq L_i \leq 1。 为了将这些点级特征转换为对象级,我们将3个直方图添加到最终特征向量中,每个直方图由4个0~1之间的等间隔bins组成。

Anguelov特征 A_1

Anguelov等人[4]描述了两个特征,但我们只使用了其中一个特征,因为另一个特征Lalonde特征没有显着差异。我们采用的特征定义了一个高度为2m且半径为0.1m的垂直圆柱体,该圆柱体围绕计算该特征的点。然后将该圆柱体垂直等分成3个部分A_{1,i} ,并统计每个部分包含点的数量占整个圆柱内所有点数的比。这将另外三个4槽直方图添加到最终特征向量,描述给定点云中A_1 的分布。

       我们还没有准确定义“相邻点”这个词。在这里它指的是该点0.5m范围内最近邻的20个点。最近邻点可以通过构造一个kd树来找到。

       最终的特征向量包含了4个标量,6个直方统计特征,每个直方统计特征包含4个直方条,总共28个特征

                                                f=\left \{ I_{max}, \mu I, \sigma I, V, H_{L_1}^{4}, H_{L_2}^{4},H_{L_3}^{4},H_{A_{1,1}}^{4},H_{A_{1,2}}^{4},H_{A_{1,3}}^{4} \right \}  

其中 H_{v}^{b}  表示直方图上的标量值变量v有b个bin值。

C. 训练SVM分类器

SVM分类器在手工标记的训练数据集上训练。与Anguelov等人使用的最大间隔MRF(M3)一样,SVM最大化了它所训练的不同类之间的间距,但缺乏空间连续性的概念。不过我们在分类之前已做了分割,空间连续性就不太重要了。我们使用通用的\nu -SVM 变体,它允许一些标记被判定为错误标识,以防止类别在特征空间中不能完全分离[10]。多分类的方法是一对所有(one-against-all)分类,针对每个类训练一个二分类器,将其与所有其他类分开

关于车的二分类效果如下图所示,其中上面四行是正例,下面四行是反例。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tyl532667325/article/details/96754285

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签