PCDet项目自定义数据集构建完整指南

PCDet项目自定义数据集构建完整指南

OpenPCDet OpenPCDet 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPCDet

前言

在3D目标检测领域,PCDet作为一个优秀的开源框架,支持多种先进的点云检测算法。但在实际应用中,开发者常常需要处理自定义数据集。本文将详细介绍如何在PCDet框架中构建和使用自定义点云数据集,帮助开发者快速实现从数据准备到模型训练的全流程。

数据集格式规范

点云数据格式

PCDet要求点云数据以.npy格式存储,这是NumPy的标准二进制格式,具有加载速度快、存储效率高的特点。每个点云文件应包含N×D的矩阵,其中:

  • N代表点的数量
  • D代表每个点的特征维度(至少包含x,y,z坐标,可包含强度等附加特征)

标注文件格式

标注信息存储在.txt文件中,每行对应一个3D边界框,格式如下:

x y z dx dy dz heading_angle category_name

其中:

  • (x,y,z):边界框中心坐标
  • (dx,dy,dz):边界框长宽高尺寸
  • heading_angle:物体朝向角度(弧度制)
  • category_name:物体类别名称

示例:

1.50 1.46 0.10 5.12 1.85 4.13 1.56 Vehicle
5.54 0.57 0.41 1.08 0.74 1.95 1.57 Pedestrian

数据集目录结构

正确的目录结构是确保数据加载正常的关键,建议按以下方式组织:

data
├── custom
│   ├── ImageSets
│   │   ├── train.txt    # 训练集文件名列表
│   │   └── val.txt      # 验证集文件名列表
│   ├── points
│   │   ├── 000000.npy   # 点云数据文件
│   │   └── ...
│   └── labels
│       ├── 000000.txt   # 标注文件
│       └── ...

注意:

  1. ImageSets中的文本文件只需包含文件名(不含扩展名)
  2. 点云文件与标注文件应一一对应,且文件名相同

配置文件调整

点云特征配置

custom_dataset.yaml中需要根据实际数据调整点云特征设置:

POINT_FEATURE_ENCODING:
    encoding_type: absolute_coordinates_encoding
    used_feature_list: ['x', 'y', 'z', 'intensity']  # 使用的特征
    src_feature_list: ['x', 'y', 'z', 'intensity']   # 原始数据中的特征顺序

如果点云不包含强度信息,可调整为:

used_feature_list: ['x', 'y', 'z']
src_feature_list: ['x', 'y', 'z']

点云范围与体素化参数

对于基于体素的检测器(如SECOND、PV-RCNN等),需要特别注意:

  1. Z轴范围与体素大小的比值应为40
  2. XY轴范围与体素大小的比值应为16的倍数

例如:

POINT_CLOUD_RANGE: [0, -40, -3, 70.4, 40, 1]  # [x_min, y_min, z_min, x_max, y_max, z_max]
VOXEL_SIZE: [0.05, 0.05, 0.1]  # 体素大小

类别与锚框配置

需要根据自定义数据集的类别调整相关参数:

CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist']  # 自定义类别名称

# 与KITTI类别的映射关系(用于评估)
MAP_CLASS_TO_KITTI:
    'Vehicle': 'Car'
    'Pedestrian': 'Pedestrian'
    'Cyclist': 'Cyclist'

# 锚框尺寸配置(每个类别对应一组长宽高)
anchor_sizes: [[3.9, 1.6, 1.56], [0.8, 0.6, 1.73], [1.76, 0.6, 1.73]]

# 数据增强参数
PREPARE:
    filter_by_min_points: ['Vehicle:5', 'Pedestrian:5', 'Cyclist:5']  # 最小点数过滤
SAMPLE_GROUPS: ['Vehicle:20', 'Pedestrian:15', 'Cyclist:15']  # 各类别采样比例

数据信息文件生成

完成上述配置后,需要生成数据信息文件:

python -m pcdet.datasets.custom.custom_dataset create_custom_infos tools/cfgs/dataset_configs/custom_dataset.yaml

该命令会生成以下文件:

  • custom_infos_train.pkl:训练集信息
  • custom_infos_val.pkl:验证集信息

模型训练与评估

训练启动

使用标准训练命令即可开始训练:

python train.py --cfg_file tools/cfgs/custom_models/pointrcnn.yaml

评估注意事项

PCDet目前主要支持KITTI风格的评估方式,因此需要通过MAP_CLASS_TO_KITTI将自定义类别映射到KITTI的标准类别。评估指标包括:

  1. 3D检测精度(AP)
  2. BEV(鸟瞰图)检测精度
  3. 不同难度级别的检测结果

常见问题与技巧

  1. 数据增强优化:根据自定义数据集特点调整gt_sampling等数据增强策略
  2. 类别不平衡处理:通过调整SAMPLE_GROUPS参数平衡各类别样本
  3. 小物体检测:适当减小体素大小,但需注意显存消耗
  4. 自定义评估指标:可继承KITTI评估类实现特定评估逻辑

结语

通过本文的指导,开发者应能够顺利地在PCDet框架中使用自定义点云数据集进行3D目标检测任务。实际应用中,可能需要根据具体场景对参数进行进一步调优,特别是点云范围、体素大小和锚框设计等关键参数。建议从小规模数据开始验证,逐步扩展到完整数据集,以提高开发效率。

OpenPCDet OpenPCDet 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPCDet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/d3128e15f681 眨眼检测是一种生物特征识别技术,广泛应用于人机交互、疲劳驾驶监测等领域。本项目采用 Python 编程语言,结合 dlib 和 sklearn(Scikit-learn)库实现眨眼检测功能。dlib 是一个功能强大的 C++ 库,包含丰富的机器学习算法和工具,可方便地在 Python 中调用;而 sklearn 是 Python 中最受欢迎的机器学习库之一,主要用于数据挖掘和数据分析。 要实现眨眼检测,首先需要获取面部特征。dlib 库中的 shape_predictor 模型能够检测和定位面部关键点,包括眼睛位置。该模型通过预先训练好的 .dat 文件实现,项目中需引入此文件以实时定位人脸和眼睛。接下来,需定义算法判断眼睛状态,通常通过计算眼睛开放程度(眼睑闭合程度)实现,可采用计算眼睛区域像素差异或利用特定特征点(如眼角)的方法。获取这些信息后,可借助机器学习算法构建眨眼检测器。sklearn 库中的分类器(如 SVM 或决策树)可用于训练模型,根据眼睛状态(开放或闭合)预测是否眨眼。训练时需使用标注好的数据集,包含不同人的眨眼和非眨眼图像,这些图像需分为训练集和测试集,用于训练模型和评估性能。训练过程包括特征提取、特征选择和模型调优等,以达到最佳预测效果。在实际应用中,该系统可结合视频流处理,实时分析每一帧图像,检测到眨眼事件后可执行相应操作,如记录疲劳状态、提醒用户休息等。 项目文件夹 blink_detect 的结构如下:1. shape_predictor_68_face_landmarks.dat:dlib 的人脸关键点检测模型文件。2. preprocess.py:用于对图像进行预处理,如尺寸调整、灰度化等操作。3. eyelid_detector.py:包含眼睛状态检
资源下载链接为: https://pan.quark.cn/s/f7286fdf65f9 在工业自动化领域,松下A6驱动器是一种应用广泛的高性能电机控制器,其支持多种通信协议,其中MODBUS通信尤为常见。MODBUS协议是一种通用且开放的通信协议,它允许不同设备通过串行接口进行数据交换,从而简化了系统集成。本文将深入探讨松下A6驱动器如何与MODBUS通信,并介绍相关技术细节。 要了解松下A6驱动器与MODBUS通信,首先需掌握MODBUS通信的基本原理。MODBUS协议采用主从结构,由主设备(如PLC或PC)发起请求,从设备(如松下A6驱动器)进行响应。该协议规定了多种功能码,用于执行诸如读取、写入寄存器等操作。MODBUS支持ASCII、RTU和TCP三种传输模式,在串口通信中,通常选用RTU模式,因为它具有较高的数据传输效率。 松下A6驱动器的MODBUS通信涉及以下关键知识点: 地址配置:MODBUS网络中每个设备都拥有唯一地址,松下A6驱动器也不例外。在设置驱动器时,需分配一个非冲突的MODBUS地址,以便主设备能准确寻址。 寄存器映射:MODBUS通信通过读写寄存器实现,松下A6驱动器的参数和状态会映射到特定寄存器地址。例如,控制字寄存器可用于控制驱动器的启动、停止,反馈寄存器则包含电机的实际速度、位置等信息。 通信参数设置:进行MODBUS通信前,需配置通信参数,包括波特率(如9600、19200等)、奇偶校验(无、奇、偶)、数据位(通常为8位)和停止位(通常为1或2位)。这些参数需在主从设备间保持一致,以确保数据正确传输。 命令与响应:主设备向松下A6驱动器发送MODBUS命令,如功能码0x03用于读取输入寄存器,功能码0x06用于写入单个寄存器。驱动器接收并解析命令后,会返回相应数据或确认响应。 错误处理:MODBUS通信中可能出现超时、CRC校验错误等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜薇剑Dale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值