前面分别介绍了基于点云的三维深度学习算法PointNet、PointNet++,和基于体素的三维深度学习算法VoxelNet。本节将开始介绍基于投影的三维深度学习算法Complex-Yolov4。三维投影算法主要思想是用激光雷达点云的鸟瞰图(BEV)和前视图(FV)作为模型输入,将三维点云转换为二维图片,早期工作开始于2017年的MV3D。

激光雷达点云的鸟瞰图和前视图的详细介绍请参考:点云鸟瞰图BEV原理与可视化_Coding的叶子的博客-CSDN博客和详细理解雷达点云前视图(FV, Front View)_Coding的叶子的博客-CSDN博客。

算法参考来源于Github上的Complex Yolov4,地址为:https://github.com/maudzung/Complex-YOLOv4-Pytorch。

1 数据目录结构

Complex-Yolov4的数据来源于KITTI数据集,其目录结构如下图所示。为了快速进行算法调试、训练、评估和验证,以及快速下载,我制作了一个mini kitti数据集,数据集的文件目录结构与完整KITTI数据集保持一致。其中,小型的KITTI数据集,即 mini kitti保存了20个训练样本和5个测试样本。下载地址为:minikitti数据集-深度学习文档类资源-CSDN下载,详细介绍请参考:KITTI数据集简介 — Mini KITTI_Coding的叶子的博客-CSDN博客https://blog.csdn.net/suiyingy/article/details/124820161。下载的数据包含4个部分,即激光雷达数据velodyne、图像数据image_2、校准数据calib和标注数据label_2。

除了Mini Kitti数据之外还需ImageSets和classes_names.txt。ImageSets文件夹中定义了训练、验证和测试样本的全部名称。ImageSets可以参考Complex-Yolov4自带的内容进行定义,需要与Mini Kitti保持一致,也可以直接下载,下载地址为:train_val_testforminikitti-深度学习文档类资源-CSDN下载。下载后将文件夹重名为ImageSets即可。

classes_names.txt存储了需要检测的目标类别,其默认内容如下图所示:

2 数据处理

(1)读取激光雷达数据Nx4、标签数据和校准数据。

(2)从标签中筛选出关注的标签,如Car,每个标签label长度为8,分别是x、y、z、h、w、l、ry,其中x、y、z和ry是相机坐标系中的取值。利用校准数据Calib,相机坐标系下的x、y、z和ry转换为雷达坐标系下的x、y、z和rz,具体原理和过程可以参考KITTI数据集简介(四) — 标定校准数据calib_Coding的叶子的博客-CSDN博客和三维点云目标检测 — VoxelNet详解之数据处理 (二)_Coding的叶子的博客-CSDN博客两篇博客。注意到,VoxelNet代码和Complex-Yolo代码中关于坐标从相机坐标系变换到雷达坐标系的代码是不同的,VoxelNet参考代码中少了R0_rect的逆矩阵。将补充后的代码如下所示:

def camera_to_lidar(x, y, z, V2C=None, R0=None, P2=None):p = np.array([x, y, z, 1])if V2C is None or R0 is None:p = np.matmul(cnf.R0_inv, p)p = np.matmul(cnf.Tr_velo_to_cam_inv, p)else:R0_i = np.zeros((4, 4))R0_i[:3, :3] = R0R0_i[3, 3] = 1p = np.matmul(np.linalg.inv(R0_i), p)p = np.matmul(inverse_rigid_trans(V2C), p)p = p[0:3]
return tuple(p)

(3)将标注参数投影到图像中,获得投影后的x、y、w、l,详细介绍同Voxelnet部分:三维点云目标检测 — VoxelNet详解之数据处理 (二)_Coding的叶子的博客-CSDN博客。

(4)将x、y、w、l、rz转换成yolo格式,其中rz用欧拉公式转换为虚部(im)和实部(re)。这样最终真实标签target由8个维度组成,即batch_id、class_id、x、y、w、l、im、re

(5)删除指定范围之外的激光雷达数据:kitti_bev_utils.removePoints(lidarData, cnf.boundary)。

(6)获取鸟瞰图(BEV)rgb_map:由强度图intensityMap(608x608)、高度图heightMap(608x608)和密度图densityMap(608x608)共同组成3x608x608维度的鸟瞰图,类似于3通道的RGB图片。这也是该算法核心思想的体现。鸟瞰图详细介绍请参考:点云鸟瞰图BEV原理与可视化_Coding的叶子的博客-CSDN博客。本程序中xoy平面内的网格尺寸由Discretization参数决定,取值为(boundary["maxX"] - boundary["minX"]) / BEV_HEIGHT

(7)读取到的数据需要经过随机水平翻转或Cutout增强。

经过上述7个步骤,可以得到模型输出的数据包含img_file、rgb_map、targets。假设Batch Size大小为B。img_file存储了image_2中对应图片的路径列表,长度为B。Rgb_map为步骤(6)中的鸟瞰图,维度为Bx3X608x608。targets为真实标签,根据(4)中定义可以知道其维度为Mx8,M为目标总数量。

3 数据可视化

运行src/data_process目录下的kitti_dataloader.py文件,可以得到部分可视化结果,如下图所示。

4 python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_python三维点云重建

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

【三维目标检测】Complex-Yolov4详解(一): 数据处理相关推荐

  1. 【三维目标检测】Complex-Yolov4详解(二):模型结构

    Complex-Yolo网络模型的核心思想是用鸟瞰图BEV替换Yolo网络输入的RGB图像.因此,在完成BEV处理之后,模型的训练和推理过程基本和Yolo完全一致.Yolov4中输入的RGB图片的尺寸 ...

  2. 目标检测算法YOLOv4详解

    YOLOv4是精度速度最优平衡, 各种调优手段是真香,本文主要从以下几个方面进行阐述: YOLOv4介绍 YOLOv4框架原理 BackBone训练策略 BackBone推理策略 检测头训练策略 检测 ...

  3. 深度篇——目标检测史(七) 细说 YOLO-V3目标检测 之 代码详解

    返回主目录 返回 目标检测史 目录 上一章:深度篇--目标检测史(六) 细说 YOLO-V3目标检测 下一章:深度篇--目标检测史(八) 细说 CornerNet-Lite 目标检测 论文地址:< ...

  4. 【三维目标分类】PointNet++详解(一)

    上一节主要介绍了PointNet分类,本节将进一步介绍PointNet++点云分类.本节仍然参考Github上的源码进行介绍,PointNet采用全局最大值池化的方式对全体点云进行了特征抽取,这导致了 ...

  5. 【三维目标分类 】PointNet详解(一)

    Pointnet是基于点云的三维目标检测网络,也是三维深度学习目标检测的基础网络之一.PointNet文章作者关于三维物体检测的讲解请参考3D物体检测的发展与未来 - 深蓝学院 - 专注人工智能与自动 ...

  6. 目标检测算法——YOLOV7——详解

    1.主要贡献 主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器. 当前目标检测主要的优化方向: ...

  7. 目标检测 RCNN算法详解

    原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...

  8. 目标检测算法——SSD详解

    目录 一. 背景(基本介绍) 二. 网络结构 三. 具体过程 1. default box 匹配 2. 损失函数 3. 数据增广 4. Atrous Algothrim 5.  NMS(非极大值抑制) ...

  9. 目标检测算法YOLO-V2详解

    ❝ 上期我们一起学习了YOLO-V1算法的框架原来和损失函数等知识,如下: 目标检测算法YOLO-V1算法详解 目标检测模型YOLO-V1损失函数详解 [文末领福利] ❞ 今天,我们一起学习下YOLO ...

最新文章

  1. Android 开发包括哪些方面?如何提升?
  2. split函数python 未定义_Python字符串方法split()中的一道坑
  3. Linux 解压命令
  4. 210312阶段三通过sqlite3源码安装sqlite3
  5. 队列模块(Queue)
  6. 互联网日报 | 6月7日 星期一 | 华为已捐献鸿蒙全部基础能力;芝麻信用7年免押金4000亿;奈雪的茶通过港交所上市聆讯...
  7. 局部加权线性回归,线性回归高级版
  8. Python中线程池的使用及内存泄漏问题
  9. 关于传奇MapInfo地图文件参数详细说明
  10. 小马客服系统多种商户接入客服等!目前最好的客服系统 跟洽美差不多
  11. 微博情感分析 mysql_利用500万条微博语料对微博评论进行情感分析
  12. 小米路由器r2d_小米路由器二代R2D怎样设置无线中继模式
  13. MacOS 开发 — Dock 显示网速/消息
  14. [经]信用体系,金融改革
  15. html5学习开发指南
  16. 分布式事务 seata 最全入门教程
  17. Caused by java.lang.Exception Failed to send data to Kafka Expiring
  18. 组合数学_排列与组合
  19. 【frp】使用 frp 实现内网穿透(CentOS 云服务器 + Win10)
  20. 基于H5 小程序 UI框架选型 2020年9月10号

热门文章

  1. java ssm集装箱码头TOS系统调度模块的设计与实现
  2. 响铃:2018博鳌金融科技亮点 这些关键词你搞懂了几个
  3. 幼师和计算机学哪个好,大学不容易脱单的专业,计算机专业只是其一,幼师也会比较难...
  4. BZOJ2152 聪聪可可 点分治题解
  5. 利用ztree开发带有滑动条的地图图层列表
  6. 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录
  7. python新建文件夹代码_Python文件夹与文件的操作实现代码
  8. 吾爱这个PDF处理小工具,我私藏了一年才偷偷分享!
  9. Anaconda安装踩雷+解决Anaconda Navigator打不开
  10. vue 单元测试报错之 undefined is not a constructor (evaluating 'expect(vmComponent.count).toBe(1)')