.pkl
.pkl是Python中常用的文件扩展名,代表pickle模块序列化对象所生成的二进制文件。pickle模块可以将Python对象序列化为字节流,反之亦然,可以将字节流反序列化为Python对象。.pkl文件通常包含一个Python对象,例如列表、字典、类等等,可以通过pickle模块进行读取和写入。pickle文件常用于将代码中的数据保存到本地或传输给其他计算机。需要注意的是,由于pickle文件是二进制格式,不便于人类直接阅读,因此在使用过程中需要格外小心,以避免数据损失或安全问题。
对所有的任务和场景,我们统一使用数据处理脚本转换后的 pkl 文件,该文件包含数据集的各种信息,包括数据集路径、calib 信息和标注信息等等,从而做到各个数据集内部格式尽可能的统一。
.pcd
.pcd是点云数据文件的扩展名,PCD代表Point Cloud Data。它是一种二进制文件格式,用于存储三维点云数据,例如激光雷达扫描结果或三维摄像机扫描结果。PCD文件包含点的位置和颜色信息,可以使用各种点云处理软件进行读取、编辑和可视化。这些软件通常也提供了将PCD文件转换为其他点云文件格式的功能。由于PCD格式具有可扩展性和跨平台性,因此被广泛应用于许多领域,如机器人、自动驾驶、虚拟现实等。
.ply
.ply是一种常见的三维模型文件格式,它通常用于存储点云数据或网格数据。PLY格式支持灵活的属性定义,可以包含顶点坐标、法向量、纹理坐标和颜色等信息。该格式的优点是易于阅读和执行,并且可以被许多3D软件所使用。许多3D扫描设备也可以输出.PLY格式的点云数据。
.bin
.bin是一个二进制文件格式的扩展名。它可以用来存储任意类型的二进制数据,如可执行文件、图像、音频、视频等等。由于二进制文件可以直接按照二进制格式存储在计算机硬盘上,因此通常比文本文件更节省空间和更快速地读写。 .bin格式具有通用性和兼容性高的特点,可以被许多不同的软件所识别和处理,因此在许多应用中都被广泛使用。
.las
.las是点云数据文件的扩展名,LAS代表Lidar Data Exchange Format。它是一种二进制文件格式,用于存储激光雷达扫描结果生成的点云数据。LAS文件包含点的位置和强度信息,可以使用各种点云处理软件进行读取、编辑和可视化。这些软件通常也提供了将LAS文件转换为其他点云文件格式的功能。由于LAS格式具有良好的标准化和兼容性,因此被广泛应用于许多领域,如地理信息系统、测绘和城市规划等。
.json
不同格式的配置文件:
配置文件管理
随着算法越来越复杂,参数越来越多,现在很难光靠命令行传参来配置训练所需的全部参数。把训练参数全部写到配置文件里的确不失为一个好办法,不仅方便配置更多的参数,还能够做版本管理,一举两得。
不同格式的配置文件
但是我们应该用什么格式的配置文件呢?python 文件本身是能作为配置文件的,我们可以通过 import 来解析配置文件的各种字段。这样的好处很明显:大部分的深度学习研究员、算法工程师是非常熟悉 python 的,使用 python 格式的配置文件最为直观。
然而 python 格式配置文件的短板也同样明显:假设我们想把训练的模型部署到移动端,而移动端又没有 python 的解释器,也就无法配置文件。
json 和 yaml 格式的配置文件固然通用,但是又不如 python 的直观。怎么办?小孩子才做选择,MMCV 全都要!
MMCV 支持 python、json、yaml 格式的配置文件,用户可以根据自己的偏好自行选择。
python 格式
toy_config.py
optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)
gpu_ids = [0, 1]
model = dict(type='ResNet', depth=50)
json 格式
toy_config.json
{"optimizer": {"type": "SGD", "lr": 0.02, "momentum": 0.9, "weight_decay": 0.0001}, "gpu_ids": [0, 1], "model": {"type": "ResNet", "depth": 50}}
yaml 格式
toy_config.yaml
gpu_ids:
- 0
- 1
model:
depth: 50
type: ResNet
optimizer:
lr: 0.02
momentum: 0.9
type: SGD
weight_decay: 0.0001
mmdetection3D的数据预处理:
在 MMDetection3D 中,不同的任务和不同的场景(室内或室外)的数据预处理都会存在一定的区别,如上图所示,会产生不同的预处理后的文件,便于后续训练。
- 对所有的任务和场景,我们统一使用数据处理脚本转换后的 pkl 文件,该文件包含数据集的各种信息,包括数据集路径、calib 信息和标注信息等等,从而做到各个数据集内部格式尽可能的统一。
- 对于点云 (多模态)3D 检测,室内和室外数据集生成的文件是不一样的:
对于某些室外数据集,我们会借助 pkl 文件的信息进一步提取 reduced_point_cloud
和 gt_database
:前者是仅包含前方视野的点云文件,通常存在于 kitti 数据集处理过程中,因为 kitti 数据集仅包含前方视野的标注;后者则是将包含在训练数据集的每个 3D 边界框中的点云数据分别提取出来得到的各个物体的点云文件,常用来在数据增强时使用(copy-paste)。
而对于室内数据集,由于室内点云较为密集的特点,通常会进行点云的下采样处理,保存在points
内。
- 对于单目 3D 检测,由于在前面提到,整个模型构建的流程是遵循 2D 检测的,同样的在数据处理的过程中,在生成基本的 pkl 文件后,还需要将其转换为 coco 标注格式的 json 文件,该过程中会对 pkl 的标注信息做相应处理,实际在该任务中,pkl 文件用来提供 data 信息,json 文件提供标注信息。
- 对于点云 3D 语义分割,目前 MMDetection3D 仅支持室内点云分割,相对于检测任务,如图所示需要生成额外的文件:
instance_mask
包含每个点云的实例标签,semantic_mask
包含每个点云的语义标签,seg_info
包含额外的辅助训练的信息。