labelCloud
:information_source: 交互式文档
一个用于在点云中标注3D边界框的轻量级工具。
安装
:information_source: 目前labelCloud支持Python 3.7到3.9版本。
通过pip(PyPI)安装
pip install labelCloud
labelCloud --example # 使用示例点云启动labelCloud
通过git手动安装
git clone https://github.com/ch-sa/labelCloud.git # 1. 克隆仓库
pip install -r requirements.txt # 2. 安装依赖
# 3. 将点云文件复制到`pointclouds`文件夹中。
python3 labelCloud.py # 4. 启动labelCloud
通过编辑config.ini
文件或设置来根据您的需求配置软件(参见配置)。
标注
labelCloud支持两种不同的标注方式(选点和框选),以及多种鼠标和键盘选项用于后续修正。
(也可以观看https://www.youtube.com/watch?v=8GF9n1WeR8A 获取工具的简短介绍和预览。)
选点模式
- 选择边界框的位置(前上边缘)。
- 通过鼠标滚轮调整z轴旋转。
框选模式
- 通过选择四个顶点来依次框选边界框的长度、宽度和高度。
- 最后两个顶点(宽度和高度)的图层将被锁定,以便于选择。
修正
- 使用左侧的按钮或快捷键来修正边界框的平移、尺寸和旋转。
- 将光标悬停在边界框的一侧,并使用鼠标滚轮来调整其大小。
默认情况下,边界框的x轴和y轴旋转将被禁用。
要标注9自由度边界框,请在菜单、设置或config.ini
文件中停用仅z轴旋转模式
。
之后边界框可以围绕所有三个轴自由旋转。
语义分割(基于边界框)
labelCloud还支持基于边界框创建分割标签。 要激活语义分割模式,请在启动对话框中切换分割按钮。 然后像往常一样进行标注,并在当前边界框内的所有点都应该被标注为当前类别时按下分配按钮。
生成的标签将以*.bin
文件的形式存储在labels/segmentation/
目录中。
每个*.bin
文件包含一个形状为(点数, )的数组,数据类型为np.int8
。
每个条目代表原始点云中对应点的标签索引。
导入和导出选项
labelCloud旨在支持所有常见的点云文件和用于存储3D边界框的标签格式,以适应多样化的使用需求。 该工具设计为易于适应多种用例。欢迎对话框将询问最常见的参数(模式、类别、导出格式)。
如需更多配置,请编辑labels/_classes.json
中的相应字段以进行标签配置,或编辑config.ini
以进行一般设置(参见配置以了解所有参数的描述)。
支持的导入格式
类型 | 文件格式 |
---|---|
彩色 | *.pcd , *.ply , *.pts , *.xyzrgb |
无颜色 | *.xyz , *.xyzn , *.bin (KITTI) |
支持的导出格式
标签格式 | 描述 |
---|---|
centroid_rel | 质心 [x, y, z] ;尺寸 [长, 宽, 高] ;相对旋转,以弧度表示的欧拉角 (-pi..+pi) [偏航角, 俯仰角, 翻滚角] |
centroid_abs | 质心 [x, y, z] ;尺寸 [长, 宽, 高] ;绝对旋转,以度数表示的欧拉角 (0..360°) [偏航角, 俯仰角, 翻滚角] |
vertices | 边界框的8个顶点,每个顶点 [x, y, z] (顺序见约定) |
kitti | 质心;尺寸;z轴旋转(见规范);需要校准文件 |
kitti_untransformed | 同上,但不进行转换(如果你只想使用相同的标签结构) |
你可以通过继承抽象类 BaseLabelFormat 轻松创建自己的导出器。 所有旋转都是逆时针的(即z轴旋转90°/π是从正x轴到负y轴!)。
快捷键
快捷键 | 描述 |
---|---|
导航 | |
鼠标左键 | 围绕点云质心旋转相机 |
鼠标右键 | 平移相机 |
鼠标滚轮 | 缩放点云 |
修正 | |
W , A , S , D | 向后、左、前、右平移边界框 |
Ctrl + 鼠标右键 | 在所有维度平移边界框 |
Q , E | 向上、下移动边界框 |
Z , X | 绕z轴旋转边界框 |
C , V | 绕y轴旋转边界框 |
B , N | 绕x轴旋转边界框 |
I / O | 增加/减少边界框长度 |
K / L | 增加/减少边界框宽度 |
, / . | 增加/减少边界框高度 |
在边界框侧面上滚动鼠标("侧面拉伸") | 改变边界框尺寸 |
R /左 , F /右 | 上一个/下一个样本 |
T /上 , G /下 | 上一个/下一个边界框 |
Y , H | 将当前边界框类别更改为列表中的上一个/下一个 |
1 -9 | 用数字键选择前9个边界框中的任意一个 |
通用 | |
Del | 删除当前边界框 |
P /Home | 重置视角 |
Esc | 取消选中的点 |
有关软件构建原则,请参阅约定。
使用与引用
使用本工具时,欢迎发送邮件给我提供反馈或描述你的使用场景(christoph.sager[at]gmail.com)。 如果你在科研项目中使用本工具,请考虑引用我们的论文:
# CAD 期刊
@article{Sager_2022,
doi = {10.14733/cadaps.2022.1191-1206},
url = {http://cad-journal.net/files/vol_19/CAD_19(6)_2022_1191-1206.pdf},
year = 2022,
month = {mar},
publisher = {{CAD} Solutions, {LLC}},
volume = {19},
number = {6},
pages = {1191--1206},
author = {Christoph Sager and Patrick Zschech and Niklas Kuhl},
title = {{labelCloud}: A Lightweight Labeling Tool for Domain-Agnostic 3D Object Detection in Point Clouds},
journal = {Computer-Aided Design and Applications}
}
# CAD 会议
@misc{sager2021labelcloud,
title={labelCloud: A Lightweight Domain-Independent Labeling Tool for 3D Object Detection in Point Clouds},
author={Christoph Sager and Patrick Zschech and Niklas Kühl},
year={2021},
eprint={2103.04970},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
致谢
我要感谢Robotron RCV团队在软件准备和用户评估方面给予的支持。
这个软件是作为我在德累斯顿工业大学商业信息学(特别是智能系统)教席的毕业论文"labelCloud:点云中3D物体检测的标注工具开发"的一部分而开发的。相关的持续研究可以在我们的ResearchGate项目中关注。