labelme 语义分割数据集_RangeNet++: 快速精确的雷达数据语义分割(IROS 2019)

7d9ac062e7957e49a19311ca56898739.png

本文主要介绍一篇关于雷达数据语义分割的文章。这篇文章将点云通spherical projection投到2D平面后,先通过高效的CNN网络得出segmentation结果,然后还原出点云的segmentation结果,最后用一个精巧的knn-search算法,对结果进行优化。论文、代码地址:

RangeNet++: Fast and Accurate LiDAR Semantic Segmentation​www.ipb.uni-bonn.dePRBonn/lidar-bonnetal​github.com
0face8244c7ec93935a35dde7652c33e.png

1. 总体流程

4d66e2f8549021daa94d1e9883e1d681.png

如上图所示,总体流程分为4步:

  • A:球映射(Spherical projection)
  • B:语义分割(Segmentation)
  • C:点云重建(Point cloud reconstruction)
  • D:点云后处理(Post-processing)

2. 球映射(Spherical projection)

这步主要将3D点云映射为2D的range image,即将

映射为
。映射公式如下:

156cf17e957a678be10d25ade1f10973.png

其中:

  • 为2D range image的宽和高;
  • 分别为雷达垂直方向的上、下视角范围
  • 垂直方向总的视角范围
  • 表示一个点到雷达的3D距离

映射完位置后,接着给每个2D位置设置feature。这里,根据每个

点对应的3D点,选取一下信息:
  • 3D坐标
  • 反射率(remission)
  • 距离(range)

每个坐标对应以上5个数值,所以最后可以得出一个

的向量。

这种映射方式可能会丢失一些点。因此,为了后面后处理时对结果进行优化,将丢失的点补上,把所有3D点对应的

座标组成一个list保存起来,后面会用到。

3. 语义分割(Segmentation)

这步主要对range image进行语义分割。具体使用如下图所示的沙漏形状的网络:

8dfc60ec32492817f964118cb28503c7.png

从图中可以看出,网络在进行downsample和upsample时,只在宽度上进行操作,保持高度不变。只要原因是,使用的数据集是用Velodyne HDL-64E激光扫描仪采集的,垂直方向只能采集64个值,相对于水平方向可以任意旋转360度采集数据来说(2048左右),数据量少很多。因此,为了防止垂直方向的信息步丢失,所以,只在水平方向进行downsample和upsample。

训练时的loss,使用加权的cross-entropy:

其中,

表示特定的类别出现的频率。这里主要是为了处理各个类的点数不均匀的情况。可以看出,加上
后,出现率低的类对应的点,相比出现率高的类对应的点,惩罚更大一些。

4. 点云重建(Point cloud reconstruction)

这步主要是把2D range image 图片segmentation的结果,映射到每个3D点上。这里需要注意的是,2D range image上的一个

点, 可能对应多个实际的3D点,比如为了考虑计算速度,2D range image的尺寸尽可能小而需要下采样时,多个3D点可能就映射到了同一个2D点。

具体操作是用之前保存的所有3D点对应的2D座标,找出其对应的segmentation结果。

5. 点云后处理(Post-processing)

2178472d1b839c1dc4e6649792815fe0.png

如上图所示,2D range image经过segmentation后,结果看上去还不错。但是把结果投回到3D点云后,一些物体边缘部位的点出错的效果就很明显了。因此,后处理的目的就是对这些边缘点的结果进行修正。整体思路比较直观:通过每个点的一些邻居点的类别,来决定该点的类别。一个边缘点如果出错了,那么在3D点云中,这个点和它的大部分邻居点的类别应该会不一致。反过来,一个点大概率会和它的大部分邻居点的类别保持一致。

基于这种想法,论文提出了一种kNN search的操作。算法流程如下:

  1. 在2D range image上,定义一个大小为
    的窗口,分别用每个2D点作为窗口中心点,用该窗口取出其邻居点(落在窗口内的其他点,视为邻居点)。这步操作可以参考matlab里面的im2col。im2col后,可以得到每个点的邻居点,组成一个矩阵,尺寸为:
    ,每列即为对应点的所有邻居点的索引。
  2. 前面说到,一个2D的点,可能对应多个3D点,所以,实际的3D点数可能比
    要多。通过3D点到2D点的对应关系,还原出每个3D点的在2D图片上的邻居点,得出一个矩阵,尺寸为:
  3. 每个2D邻居点,包含了其对应的3D点的座标、类别。所以,可以从这些邻居点中,用KNN算法找出距离跟目标点最近的前k个点作为邻居点。论文中使用的距离,是两个点的range差的绝对值,而不是3D距离。这样做,是为了提高效率。此外,论文还使用了一个inverse Gaussian Kernel,来对距离进行调整,即:距离越近,权重越小;距离越远,权重越大。
  4. 接着,用一个距离阙值(cutoff threshold)对k个邻居点进行过滤,去掉距离大于阙值的邻居点。
  5. 对于剩下的邻居点集,哪个类的点数比较多,目标点就属于哪个类。

6. 总结

这篇论文提出了一种很直观的后处理方式kNN search。从实验结果看,对性能有明显帮助。

5403d2983a714c6f1eb9968d6251cd07.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

plc控制可调节阀流程图_PLC五大主流编程语言你会几种?

PLC的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,且要满足易于编写和调试的要求。早期的PLC仅支持梯形图编程语言和指令表编程语言,现根据国际电工委员会制定了五种…

成功案例_APP成功推广案例

app软件的推广成本通常是多少目前国内App开发者正面临推广困境,推广的费用正在进一步提高,(一些推广形式的费用没有变化但是效果正在下降),效果好的推广形式价格一般较高,无疑将开发者推向高门槛的推广之路。一、预装渠道:(推广用户质量:中)虽然植入到rom中软件的存活时间会更长…

用C++写一个星空

大家好,这是我学完C后,完整的编写的一个程序之一,有兴趣的可尝试编写,画面(动态的)还可以。 本程序总结有两个版本,分别是对C中的继承、多态等一些方面的练习。 编写用的是VS2019,e…

解决方案_环网柜监测解决方案

户外环网柜环境条件各异,复杂。温度过高容易发生火灾,温度过低则会形成凝露从而发生短路等事故,温湿度超过一定阀值都会影响配电功能的正常运行,对环网柜的环境状态进行监测与调节十分重要。行业需求居民小区环网柜公共建筑环网柜…

python建筑案例_Python数据分析实战-链家北京二手房价分析

前言最近在自学Python,通过学习大家的分享案例,看到使用Python进行较多的主要4个方面:爬虫,数据处理,数据可视化以及机器学习建模。对我来说目标就是:熟练使用numpy pandas 进行数据清洗和预处理&#xff1…

execve系统调用_Linux系统编程——进程替换:exec 函数族

在 Windows 平台下,我们可以通过双击运行可执行程序,让这个可执行程序成为一个进程;而在 Linux 平台,我们可以通过 ./ 运行,让一个可执行程序成为一个进程。但是,如果我们本来就运行着一个程序(…

idea shell 使用linux_Linux使用shell定时任务实现ffmpeg视频转码和截图

Linux安装操作系统:CentOS7 ffmpeg版本:3.4.1安装先访问ffmpeg官网下载linux安装包 http://ffmpeg.org/download.html ,这里我下载的是官方已经编译过的版本,别问我为啥不自己编译,因为我自己编译耗费了好久&#xff0…

曾辉机器人_武昌理工学子在2020年中国机器人大赛中夺冠

“它在过弯的时候非常稳,而且速度快,跑完一圈的时间比第二名少十秒左右。”武昌理工学院学生余辉激动地说。11月27日从武昌理工学院获悉,在刚刚结束的2020中国机器人大赛中,武昌理工学院人工智能学院“晨旭队”,经过激…

升级bios_华硕400系主板升级BIOS:静待11代酷睿CPU

1月份对PC玩家来说还有很多惊喜,AMD、NVIDIA、Intel都会在CES上推出新一代产品,其中Intel针对桌面端的产品是11代酷睿,代号Rocket Lake-S。Rocket Lake仍将采用14nm制造工艺,基本确定也将是Intel最后一代14nm处理器。CPU架构方面&…

取得数组下标_《零基础C++入门教程》——(8)搞定二维数组与循环嵌套

一、学习目标了解二维数组的使用方法了解循环嵌套的使用方法目录预备第一篇,使用软件介绍在这一篇,C与C使用的软件是一样的,查看这篇即可:《零基础看得懂的C语言入门教程》——(二)简单带你了解流程 想了解编译原理和学习方法点这…

linux 的swap具体分析_Linux SWAP 深度解读

概述本文讨论的 swap基于Linux4.4内核代码 。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题:1、 swap到底是干嘛的&…

物联卡的使用_物联卡在手机上使用有什么影响?网友:寿命分别是3个月,16天,9天...

个人使用物联卡是否合法?当然,个人是可以使用的,只不过是使用在除手机、平板以外的智能设备上。重点提醒:手机和平板除外。物联卡,是运营商为物流网服务企业提供的用于智能终端设备联网的,仅面对企业用户进…

多行文字cad提取数据_利用CAD自带的数据提取功能手动提取假表格至Excel

“吾生也有涯,而知也无涯,以有涯随无涯,殆已!”,在已经有了免费的“源泉设计”插件可以自动提取假表格至Excel之后,笔者为什么还要讲解手动提取的方法?无他,生命在于折(zhuang)腾(bi…

gridview标题居中显示_Pr:制作片尾滚动字幕(旧版标题法)

本文介绍使用 Pr 的旧版标题设计器来制作传统片尾滚动字幕的方法。效果视频◆ ◆ ◆一般方法与步骤1、首先,将文字内容输入到一个文本文件中。按 Ctrl/Cmd A 全选,按 Ctrl/Cmd C 复制以备用。2、Pr菜单:文件/新建/旧版标题。3、点击“滚动…

mysql 从库状态_大神教你自动发现监控mysql从库状态

导读zabbix从库如果复制有问题,在主库机器有问题的时候,切为主就会导致数据的丢失。或者主从分离的时候,如果从库出现延时状态的话,会导致前端页面展示的数据不是为最新的数据。因此,监控mysql从库的状态是必要的。mys…

服务器搭建php mysql5_Windows下php5+apache+mysql5 手工搭建笔记

Windows下php5apachemysql5 手工搭建笔记更新时间:2011年02月15日 01:35:09 作者:php运行环境对于站长们或者初学者来说可以直接用一键包的方式或者直接从服务提供商处得到支持,不必自己手工按部就班的搭建,所以这篇文章是写给我…

Java编程和C语言哪个更好?

学编程用哪一个编程语言好?很多人刚开始接触编程的时候都不知道自己该学哪个好,软件开发编程语言多达600余种,每种都有各自的特点和应用领域。目前,热门编程语言无外乎Java、C、C了,实际上,Java确实是从C语言和C语言继…

Java程序员常犯的几类错误

1.忽视异常 相信很多小伙伴在编程的过程中经常对异常置之不理。针对初学者和有经验的 Java 程序员,最佳实践仍是处理它们。异常抛出通常是带有目的性的,因此在大多数情况下需要记录引起异常的事件。不要小看这件事,如果必要的话,…

jdk1.8 mysql_Centos 7配置JDK1.8+MySQL5.7+Tomcat 8 开发环境

工具腾讯云服务器(可通过公网ip访问)Xshell 6Xftp 61、Xshell 6 连接云服务器打开xshell很简单,直接上图配置好之后连接云服务器,之后就可以对云服务器进行操作了。2、配置JDK 1.8a、下载JDK1.8如果直接在云服务器的命令行中使用wget http://download.or…

做为一名java高级程序员,需要了解哪些岗位?

一、Java高级程序员 要想成为JAVA(高级)程序员也称Java高级工程师,肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA高级程序员,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包…