SemanticKITTI:Development Kit的学习记录-README.md阅读

前言

http://www.semantic-kitti.org/resources.html
在这里插入图片描述
最近有个困惑,怎样将点云数据中带有不同标签的点分开处理,比如一帧点云中,有带有“人”这个标签的点,如何获取到这个标签的点以便后续的处理。
通过相关论文找到了这个开发包,它的功能描述如下:
该开发工具包包含用于以下目的的Python代码:
读取和映射用于不同任务的标签。
易于使用的可视化工具显示点云和标签。
用于生成论文中结果的评估脚本和评估服务器。
验证脚本,在上传到Codalab竞赛之前检查您的提交。(这个是codalab平台,其设计的初衷就是打破机器学习、深度学习代码结果难以复现的魔咒,提供一个公开的平台,用来协作和分享,提高科研效率。https://zhuanlan.zhihu.com/p/372557325

///
通过上面的描述,我认为其可以帮助我达到点云数据关联label文件的目的。
///

阅读-README.md

1、首先打开其git仓库-https://github.com/PRBonn/semantic-kitti-api
2、下载其压缩包到本地。
3、阅读README.md,了解如何配置环境。

**README.md:**这个存储库包含用于打开、可视化、处理和评估SemanticKITTI数据集中点云和标签结果的脚本。
链接到原始KITTI里程数基准数据集
链接到SemanticKITTI数据集。
链接到SemanticKITTI基准竞赛。
链接到SemanticKITTI MOS基准竞赛(在SemanticKITTI网站添加MOS后可能会删除)。
来自序列13的3D点云示例:
在这里插入图片描述
来自序列13的二维球面投影示例:
在这里插入图片描述
用于语义场景修复完成任务的体素化点云示例:
在这里插入图片描述

数据结构

数据的结构格式如下:
在这里插入图片描述

从KITTI测程计:

Image_2和image_3对应每个序列的RGB图像。
Velodyne包含每个序列中每个扫描的点云。每个.bin扫描都是一个[x,y,z, relief]格式的float32点列表。参见laserscan.py查看如何读取这些点。

从SemanticKITTI:

Labels包含每个序列中每个扫描的标签。每个.label文件都包含对应的.bin扫描中的每个点的uint32标签。参见laserscan.py了解如何读取标签。
poses.txt包含每个捕获(在相机帧中)的手动闭环姿势,注释工具使用这些姿势来聚合所有点云。--不太懂这个是干啥的。
体素 包含语义场景完成任务所需的所有信息。每个**.bin文件包含每个体素,如果该体素被打包的二进制格式的激光测量所占用。这是语义场景完成任务的输入,它对应于单个LiDAR扫描的体素化。每一个 .label 文件包含完成的场景的每个体素的一个二进制格式的标签。标签是每个体素的16位无符号整数(又名uint16_t) . .invalid. occlented包含体素的遮挡信息。无效体素是从每个视图位置被遮挡的体素,被遮挡体素在第一个视图点被遮挡。有关加载数据的更多信息,请参见SSCdata .py**。

数据的主要配置文件在config/semantic- kiti .yaml中。在这个文件中,你会发现:
labels: 将.label文件中的数字标签映射到字符串类的字典。例如:10:“车”
**Color_map:**将.label文件中的数字标签映射到BGR颜色以进行可视化的字典。例10: [245, 150, 100] # car, blue-ish
**content:**在标签中包含每个类的内容的字典,作为数据集中总点数的比例。这可以通过运行./content.py脚本获得(获取该数据集中各个标签的点占总点数的比列),并用于计算所有基线方法中交叉熵的权重(为了处理类不平衡)。
**Learning_map:**将每个类标签映射到其交叉熵当量的字典,用于学习。这样做是为了屏蔽不需要的类,将不同的类映射到一起,并且因为交叉熵期望值为[0,numclasses - 1]。我们还提供了./remap_semantic_labels.py脚本,它使用这个字典将标签文件放入交叉熵格式,以便您可以在训练pipeline.中直接使用这些标签。例子:在这里插入图片描述
**Learning_map_inv:**字典,与前面的映射相反,允许只将类映射回感兴趣的类(以原始标签格式保存点云预测)。我们还提供了./remap_semantic_labels.py脚本,它使用这个字典将标签文件以原始格式放置,当使用——inverse标志实例化时。将预测的结果保存起来。
**Learning_ignore:**字典,包含每个交叉熵类是否会在训练和评估期间被忽略。例如,在训练和评估中,未标记的类都会被忽略。
**Split:**包含3个列表,带有用于训练、验证和评估的序列号。

API的依赖关系:

系统依赖:$ sudo apt install python3-dev python3-pip python3-pyqt5.qtopengl # for visualization
Python的依赖:$ sudo pip3 install -r requirements.txt (创建一个虚拟环境)

脚本

所有的脚本都可以用——help (-h)标志来调用,以获得额外的信息和选项。

可视化

Point Clouds
要可视化数据,请使用visualize.py脚本。它将打开点云的交互式opengl可视化,以及每次扫描到64 x 1024图像的球形投影。
$ ./visualize.py --sequence 00 --dataset /path/to/kitti/dataset/
Sequence是要访问的序列。
Dataset是序列目录所在的kitti数据集的路径。
导航:
N是下一次扫描,
B是之前的扫描,
Esc或q退出。
为了可视化您的预测,——forecasts选项将标签的可视化替换为预测的可视化:
$ ./visualize.py --sequence 00 --dataset /path/to/kitti/dataset/ --predictions /path/to/your/predictions

语义场景完成的体素网格

要可视化数据,请使用visualize_voxels.py脚本。它将打开一个交互式的opengl体素网格可视化和选项可视化提供的LiDAR数据体素化。
$ ./visualize_voxels.py --sequence 00 --dataset /path/to/kitti/dataset/
注意:按住前进/后退键会触发回放模式。

基于lidar的运动目标分割(Moving Object Segmentation -MOS)

要可视化数据,请使用visualize_mos.py脚本。它将打开一个交互式的opengl体素网格可视化和选项可视化提供的LiDAR数据体素化。
$ ./visualize_mos.py --sequence 00 --dataset /path/to/kitti/dataset/

评估

要评估一个方法的预测,使用evaluate_semantics.py评估语义分割,使用evaluate_completion.py评估语义场景完成,使用evaluate_panoptic.py评估全景分割(将instance segmentation与semantic segmentation结合在一起,提出全景分割(panoptic segmentation)-即分割图片中的所有可见的部分)。重要提示:标签和预测需要采用原始的标签格式,这意味着如果一个方法学习了交叉熵映射的类,它们需要通过learning_map_inv字典发送到原始数据集格式。这是为了防止数据集兴趣类的更改影响方法的中间输出,因为原始标签将保持不变。对于语义分割,我们提供了remap_semantic_labels.py脚本,以便在训练和评估之前进行转换,选择配置文件中感兴趣的类。数据需要是:在一个单独的目录中,格式如下:
在这里插入图片描述
$ ./evaluate_semantics.py --dataset /path/to/kitti/dataset/ --predictions /path/to/method_predictions --split train/valid/test # depending of desired split to evaluate
或者
$ ./evaluate_completion.py --dataset /path/to/kitti/dataset/ --predictions /path/to/method_predictions --split train/valid/test # depending of desired split to evaluate
或者
$ ./evaluate_panoptic.py --dataset /path/to/kitti/dataset/ --predictions /path/to/method_predictions --split train/valid/test # depending of desired split to evaluate
或MOS
$ ./evaluate_mos.py --dataset /path/to/kitti/dataset/ --predictions /path/to/method_predictions --split train/valid/test # depending of desired split to evaluate
在这里插入图片描述
然后运行(将预测目录设置为与数据集相同的目录):
$ ./evaluate_semantics.py --dataset /path/to/kitti/dataset/ --split train/valid/test # depending of desired split to evaluate
相反,如果需要IoU vs距离,则以相同的方式执行计算,但使用evaluate_semantics_by_distance.py脚本。这将分析IoU的5个距离范围:{(0m:10m), [10m:20m), [20m:30m), [30m:40m), (40m:50m)}。

验证

为了确保您的zip文件是有效的,我们提供了一个小的验证脚本validate_submit .py,用于检查每次扫描的正确文件夹结构和一致数量的标签。
提交文件夹期望获得一个包含以下文件夹结构的zip文件(如上面的单独案例)
在这里插入图片描述
总之,您只需为扫描的每个点提供包含预测的标签文件,这也由我们的验证脚本进行检查。如果你想要获得更多关于我们维护的排行榜的信息(即将发布!),你(目前)必须提供一个额外的包含信息的description.txt文件,我们目前无法通过API访问。
在这里插入图片描述
$ ./validate_submission.py --task {segmentation|completion|panoptic} /path/to/submission.zip /path/to/kitti/dataset
这个命令用来检查提交的zip文件。注意:不检查标签是否有效,因为无效的标签会被评估脚本忽略。

统计数据

content.py 允许评估训练集的类内容,以便衡量训练的损失,处理不平衡的数据。
count.py 返回数据中每个序列的扫描计数。

生成

generate_sequence .py使用我们的标记工具中使用的手动循环闭合姿势生成扫描序列,并将它们存储为单个点云。例如,如果我们想为每个点云生成一个数据集,其中包含自身与前4次扫描的聚合,那么:
$ ./generate_sequential.py --dataset /path/to/kitti/dataset/ --sequence_length 5 --output /path/to/put/new/dataset
Remap_semantic_labels.py允许将标签重新映射到交叉熵格式,以便标签可以用于训练,而预测可以用于评估。该文件使用配置文件中的learning_map和learning_map_inv字典来映射标签和预测。

Docker for API

如果首选不安装需求,则提供docker容器来运行脚本。
要在交互式会话中构建和运行容器,它允许运行X11应用程序(和GL),并将此repo复制到工作目录,使用
$ ./docker.sh /path/to/dataset
其中/path/to/dataset是语义kitti数据集的位置,可以在容器中的~/data或/home/developer/data中的图像中使用,以便与api一起进一步使用。这是通过创建一个共享卷来完成的,因此它可以是包含API脚本将要使用的数据的任何目录。

可视化WADS数据集

按照kitti的文件结构,将下载的数据文件格式更改为sequences/11/…
1、激活AI虚拟环境;
2、运行./visualize.py --sequence 11 --dataset /media/pf/Elements/DATA/Snowy_Data/Open_dataset/WADS/11_20211109T212945Z_001/
运行结果如图。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值