前面分别介绍了基于点云的三维深度学习算法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. 微信小程序 通过云函数请求http网站接口
  2. Oracle数据库表信息,序列,视图等导出,导入。(数据库备份和恢复)
  3. 万万没想到,枯燥的“机器学习”还可以这样学!
  4. 硬件基础:虚拟内存相关知识介绍?
  5. 总结面试时没有回答上的内存对齐问题
  6. 使用WxPython进行Win32下Python编程
  7. 201521145048《Java程序设计管理》第一周学习总结
  8. JavaScript事件处理程序的3种方式
  9. 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(远程升级WIFI内部程序)
  10. 优化理论08-----约束优化的最优性条件、拉格朗日条件、凸性、约束规范、二阶最优性条件(上)
  11. HTML5手机游戏将迎美好未来 .
  12. java 运算符适用类型_java基础(数据类型,运算符)
  13. python做一个考试系统_怎么做一个在线考试系统?
  14. Python 冒泡排序 代码实现
  15. 北斗卫星导航系统基础篇之(一)
  16. 机器学习系列2---经验风险最小化原则和结构风险最小化原则与VC维问题
  17. c语言问号的用法及举例,问号的使用方法和另类用法有哪些
  18. 帝国CMS7.5忘记后台密码怎么找回
  19. 《日瓦戈医生》读后感
  20. st-link v2怎么连接_三相交流电的描述及连接方式

热门文章

  1. UI设计基础知识点整理,值得收藏「干货」!
  2. 海瑞单薄 台词深奥 《大明王朝》续集全面“纠错”
  3. 高并发高流量网站架构详解
  4. 如何使用高防CDN防御DDOS攻击呢?
  5. android版本玩游戏卡怎么办,阴阳师安卓卡顿不流畅怎么办 玩阴阳师卡顿怎么解决...
  6. 硬核科普:什么是拓扑?
  7. 基于MATLAB的智能交通信号灯控制系统的实现
  8. Mac OS和Office版本问题
  9. 虚拟许可服务器访问失败,星外虚拟主机访问被控出现Unspecified error解决方法
  10. python怎么加注释