3D点云目标检测Complex-YOLO(训练篇)(一)———KITTI数据集预处理与制作

KITTI dataset

Download dataset

  • KITTI 3D Object Detection Evaluation 2017 link
  • 下载四个部分,共41.4GB
    在这里插入图片描述
    在这里插入图片描述
  • 解压后为四部分内容(相机校准矩阵calibRGB图像image_2标签label_2点云数据velodyne) 对应的testingtraining数据。其中,training数据为7481张(图片和点云对应的场景),testing数据 7518张(无label_2数据)。
    在这里插入图片描述

Data Preprocess

Part 1 3D Point Cloud Data Croping

  • clone这个利用TensorFlow实现的voxelNet,里面有数据预处理的相关内容。voxelnet
  • 这个tensorflow版本的voxelnet,首先将training集里的所有点云数据进行裁剪操作,具体的就是利用calib中存放的相机校准矩阵,将3d点云的点投影到2dRGB图像中(利用Tr_velo_to_cam将3d点云坐标映射到0号3d相机坐标系中,然后利用R_rect将多个相机图像位于同一平面内,最后利用对应相机的投影矩阵P将点投影到相机的平面上),在2dRGB图像坐标系以外的点云将被移除掉。

这里有两个点需要注意一下

  1. 图片读取的问题:1.6.3版本的scipy无法import imread,两种解决方法1)scipy降级 2)换库引入 from imageio import imread

  2. 输出文件名,和原来保持一致,6位数字高位补0


output_name = PC_NEW_ROOT + str(frame).zfill(6) + '.bin'
print(output_name)
# str(frame) int -> str
# zfill(6) 六位数字 高位补0
  1. 想要复现voxelnet的小伙伴,这个项目中原本用c生成的部分需要删掉,然后再在自己电脑里重新生成。还有就是pip install(速度慢只能换源解决)的时候强力推荐中科大源,https://pypi.mirrors.ustc.edu.cn/simple/
  • Crop.py代码详解,建议断点debug过一遍流程,过程中的矩阵中间量就很清晰了~
import numpy as np
from imageio import imread
# 换了imageio库来进行图片读取

CAM = 2 # 最终投影到2号相机上(0,1,2,3)

def load_velodyne_points(filename):
    # 读某一个.bin文件里的数据,000000.bin中,就有大概19000个点,即19000行
    # 4列表示x,y,z,intensity。intensity是回波强度,和物体与雷达的距离以及物体本身的反射率有关。
    points = np.fromfile(filename, dtype=np.float32).reshape(-1, 4)
    return points

def load_calib(calib_dir):
    # P2 * R0_rect * Tr_velo_to_cam * y
    # 最后就是利用上面这个转换式来转换

    # 按行读取并保存
    lines = open(calib_dir).readlines()
    lines = [ line.split()[1:] for line in lines ][:-1]

    # 投影矩阵 3x4矩阵
    # 这里是最终要投影到2号相机上,即左边彩色相机
    P = np.array(lines[CAM]).reshape(3,4)

    # Tr_velo_to_cam,4x4矩阵
    # 点云坐标系转换到0号相机坐标系,都是3维的哦~
    Tr_velo_to_cam = np.array(lines[5]).reshape(3,4)
    Tr_velo_to_cam = np.concatenate(  [ Tr_velo_to_cam, np.array([0,0,0,1]).reshape(1,4)  ]  , 0     )

    # R_cam_to_rect,4x4矩阵
    # 校准,将多个相机图像位于同一个平面上
    R_cam_to_rect = np.eye(4)
    R_cam_to_rect[:
要实现基于Complex-YOLO算法的激光雷达点云数据实时3D物体检测,首先要理解其核心组成部分和工作机制。Complex-YOLO通过其特有的Euler-Region-Proposal Network (E-RPN)在深度学习框架下展开工作,其设计亮点在于能够精确估计物体的姿态,以及在复数空间内回归3D框来检测和识别多类别对象。 参考资源链接:[Complex-YOLO点云实时3D物体检测的革新方案](https://wenku.csdn.net/doc/731ygs2zfh?spm=1055.2569.3001.10343) 具体实施步骤包括以下几个阶段: 1. **点云预处理**:激光雷达采集的原始点云数据通常是稀疏和无序的。在输入到网络之前,需要进行预处理,包括去噪、下采样或特征提取等,以提高数据的可用性和效率。 2. **数据编码**:将点云数据转换为适合神经网络处理的格式,如体素网格(Voxel grid)表示法。这种表示法将3D空间划分为体素,并对每个体素进行特征化。 3. **网络前向传播**:经过预处理点云数据输入到Complex-YOLO网络中。网络首先通过系列卷积层和池化层提取高阶特征,然后通过E-RPN生成三维区域提议。 4. **三维框回归和类别识别**:利用E-RPN生成的区域提议,网络对每个提议进行进步的回归,预测物体的三维位置、尺寸、方向以及分类概率。 5. **后处理和目标跟踪**:检测到的3D框和类别进行非极大值抑制(Non-Maximum Suppression, NMS),以去除重叠的检测结果。对于运动中的物体,还可以应用目标跟踪技术,以保持物体的连续识别。 为了提高实时性和精度,Complex-YOLO在设计时考虑了以下因素: - **网络结构优化**:通过高效的网络结构设计,比如使用深度可分离卷积,来减少计算量。 - **硬件加速**:使用GPU或其他专用硬件加速深度学习模型的推理过程。 - **模型压缩**:运用知识蒸馏、量化等技术减小模型大小和提高推理速度,同时尽量保持精度。 - **数据集和基准**:在KITTI数据集训练和测试模型,确保算法的泛化能力,并通过比较基准来持续优化模型性能。 通过上述步骤和优化策略,Complex-YOLO能够在保持高精度的同时,实现快速的实时3D物体检测,这对于自动驾驶系统来说是至关重要的。 为了深入理解这技术并解决可能遇到的问题,强烈推荐参阅《Complex-YOLO点云实时3D物体检测的革新方案》。该资料详细介绍了Complex-YOLO的设计思想、实验结果和性能评估,是学习和应用该技术不可或缺的宝贵资源。 参考资源链接:[Complex-YOLO点云实时3D物体检测的革新方案](https://wenku.csdn.net/doc/731ygs2zfh?spm=1055.2569.3001.10343)
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vanessa Ni

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

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

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

打赏作者

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

抵扣说明:

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

余额充值