【三维目标检测】Complex-Yolov4详解(一): 数据处理
前面分别介绍了基于点云的三维深度学习算法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详解(一): 数据处理相关推荐
- 【三维目标检测】Complex-Yolov4详解(二):模型结构
Complex-Yolo网络模型的核心思想是用鸟瞰图BEV替换Yolo网络输入的RGB图像.因此,在完成BEV处理之后,模型的训练和推理过程基本和Yolo完全一致.Yolov4中输入的RGB图片的尺寸 ...
- 目标检测算法YOLOv4详解
YOLOv4是精度速度最优平衡, 各种调优手段是真香,本文主要从以下几个方面进行阐述: YOLOv4介绍 YOLOv4框架原理 BackBone训练策略 BackBone推理策略 检测头训练策略 检测 ...
- 深度篇——目标检测史(七) 细说 YOLO-V3目标检测 之 代码详解
返回主目录 返回 目标检测史 目录 上一章:深度篇--目标检测史(六) 细说 YOLO-V3目标检测 下一章:深度篇--目标检测史(八) 细说 CornerNet-Lite 目标检测 论文地址:< ...
- 【三维目标分类】PointNet++详解(一)
上一节主要介绍了PointNet分类,本节将进一步介绍PointNet++点云分类.本节仍然参考Github上的源码进行介绍,PointNet采用全局最大值池化的方式对全体点云进行了特征抽取,这导致了 ...
- 【三维目标分类 】PointNet详解(一)
Pointnet是基于点云的三维目标检测网络,也是三维深度学习目标检测的基础网络之一.PointNet文章作者关于三维物体检测的讲解请参考3D物体检测的发展与未来 - 深蓝学院 - 专注人工智能与自动 ...
- 目标检测算法——YOLOV7——详解
1.主要贡献 主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器. 当前目标检测主要的优化方向: ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- 目标检测算法——SSD详解
目录 一. 背景(基本介绍) 二. 网络结构 三. 具体过程 1. default box 匹配 2. 损失函数 3. 数据增广 4. Atrous Algothrim 5. NMS(非极大值抑制) ...
- 目标检测算法YOLO-V2详解
❝ 上期我们一起学习了YOLO-V1算法的框架原来和损失函数等知识,如下: 目标检测算法YOLO-V1算法详解 目标检测模型YOLO-V1损失函数详解 [文末领福利] ❞ 今天,我们一起学习下YOLO ...
最新文章
- Android 开发包括哪些方面?如何提升?
- split函数python 未定义_Python字符串方法split()中的一道坑
- Linux 解压命令
- 210312阶段三通过sqlite3源码安装sqlite3
- 队列模块(Queue)
- 互联网日报 | 6月7日 星期一 | 华为已捐献鸿蒙全部基础能力;芝麻信用7年免押金4000亿;奈雪的茶通过港交所上市聆讯...
- 局部加权线性回归,线性回归高级版
- Python中线程池的使用及内存泄漏问题
- 关于传奇MapInfo地图文件参数详细说明
- 小马客服系统多种商户接入客服等!目前最好的客服系统 跟洽美差不多
- 微博情感分析 mysql_利用500万条微博语料对微博评论进行情感分析
- 小米路由器r2d_小米路由器二代R2D怎样设置无线中继模式
- MacOS 开发 — Dock 显示网速/消息
- [经]信用体系,金融改革
- html5学习开发指南
- 分布式事务 seata 最全入门教程
- Caused by java.lang.Exception Failed to send data to Kafka Expiring
- 组合数学_排列与组合
- 【frp】使用 frp 实现内网穿透(CentOS 云服务器 + Win10)
- 基于H5 小程序 UI框架选型 2020年9月10号
热门文章
- java ssm集装箱码头TOS系统调度模块的设计与实现
- 响铃:2018博鳌金融科技亮点 这些关键词你搞懂了几个
- 幼师和计算机学哪个好,大学不容易脱单的专业,计算机专业只是其一,幼师也会比较难...
- BZOJ2152 聪聪可可 点分治题解
- 利用ztree开发带有滑动条的地图图层列表
- 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录
- python新建文件夹代码_Python文件夹与文件的操作实现代码
- 吾爱这个PDF处理小工具,我私藏了一年才偷偷分享!
- Anaconda安装踩雷+解决Anaconda Navigator打不开
- vue 单元测试报错之 undefined is not a constructor (evaluating 'expect(vmComponent.count).toBe(1)')