IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 经典文献阅读之--FEC -> 正文阅读

[人工智能]经典文献阅读之--FEC

0. 简介

在激光雷达的特征提取中,对整帧的点云数据进行分割是至关重要的,但是非常明显的是在3D场景中,捕获的点云通常是稀疏且非结构化的,分割有可能误分割或者漏分割。今天我们来看一下22年的论文《FEC: Fast Euclidean Clustering for Point Cloud Segmentation》,这篇文章中提出一种新颖的快速欧几里得聚类算法,同时据作者说易于实现,具体只有40行的CPP代码。目前作者代码还没有开源,说是accept后就开源。虽然这篇文章并没有被大量的关注,但是从小代码,即插即用等特点,这给我们可以通过文章学习它的详细思想以及算法的可能性。

1. 文章贡献

从整篇文章来看,该算法在现有工作中使用的聚类方案之上应用了逐点方案。文中在一开始就提到相比于传统的聚类方法,速度提升了100多倍

图片

由于深度学习对点云的学习分割仍然还是比较耗资源的,所以使用传统的形态学分割仍然存在广泛的应用,通过对点云完成聚类,以区分不同的语义标签以及具有相同语义标签的各种实例。文中提到目前点云分割分为三大类:

  • 基于区域增长的方法,主要思想是分割具有均匀几何特性的点云,首先选择种子点,然后合并相邻点,如果它们在表面点属性(如方向、表面法线和曲率)方面具有相似性,但是这些方法对初始种子的位置和边界附近法线和曲率的不准确估计非常敏感,这会导致过度分割或欠分割。
  • 基于聚类的方法。聚类算法根据元素的相似性将元素划分为类别,可应用于点云分割。因此,K均值、均值漂移、DBSCAN和欧几里德聚类提取(EC)常被用于这项任务,尽管基于聚类的方法简单,但点云中每个点的高迭代率导致了高计算负担并降低了效率。
  • 基于深度学习的方法。目前除了传统的点云方法以外,还有使用深度学习或投影到二维图像中,以分割点云中的实例,基于深度学习的方法通常存在运行时间长和处理大规模点云的问题。

而文中的方法是属于聚类方法的一种变种,针对现有工作中应用的聚类方案使用逐点聚类。与之前的算法对比,实现了类似的质量,但比现有工作加快了100倍。

2. 算法推导

2.1地面滤除

首先文中提到会先对地面点进行滤除,虽然说是地面滤除,但是如果说我们需要实际上提取车道线点时候,可以直接使用地面提取,然后再对地面的特征点进行提取。文中提到使用了cloth simulation filter来提取和滤除接地点云。

img

CSF csf;
//step 1 Input the point cloud
csf.readPointsFromFile(terr_pointClouds_filepath);

clock_t start, end;
start = clock();

//In real application, the point cloud may be provided by main program
//csf.setPointCloud(pc);//pc is PointCloud class

//step 2 parameter setting
csf.params.bSloopSmooth = ss;
csf.params.class_threshold = atof(class_threshold.c_str());
csf.params.cloth_resolution = atof(cloth_resolution.c_str());
csf.params.interations = atoi(iterations.c_str());
csf.params.rigidness = atoi(rigidness.c_str());
csf.params.time_step = atof(time_step.c_str());

//step3 do filtering
std::vector<int> groundIndexes, offGroundIndexes;
if (argc == 2 && strcmp(argv[1], "-c")==0)
{
    std::cout << "Export cloth enabled." << std::endl;
    csf.do_filtering(groundIndexes, offGroundIndexes, true);
}
else
{
    csf.do_filtering(groundIndexes, offGroundIndexes, false);
}


end = clock();
double dur = (double)(end - start);
printf("Use Time:%f\n", (dur / CLOCKS_PER_SEC));

csf.savePoints(groundIndexes,"ground.txt");
csf.savePoints(offGroundIndexes, "non-ground.txt");

2.2 快速欧几里得聚类

与EC类似,我们使用欧几里得(L2)距离度量来测量无组织点云的接近度,并将相似性分组到同一聚类中,可以描述为

m i n ∥ P i ? P i ′ ∥ 2 ? d t h min\|\mathbf{P}_i - \mathbf{P}_{i'}\|_2 \geqslant d_{th} minPi??Pi?2??dth?

伪代码步骤为:

图片

流程整体来说还是比较清楚的,首先会将 P i \mathbf{P}_i Pi?的label全部置零,然后分割的 s e g L a b segLab segLab初始化为1,然后遍历所有的点,当发现遍历的点中label为0,则去找最近的关联点 P N N \mathbf{P}_{NN} PNN?。如果存在有点不为0,则找到最小的label值,这就代表存在联通。如果不存在则赋值,然后对 P N N \mathbf{P}_{NN} PNN?遍历,如果找到其他的label大于 m i n S e g L a b minSegLab minSegLab的值,则再次遍历所有的带你,然后将所有其他的label值,重置为 m i n S e g L a b minSegLab minSegLab的值。

…详情请参照古月居

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:29:07  更:2022-09-21 00:31:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:35:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码