本节主要介绍VoxelNet的数据处理部分,数据下载及预处理部分请参考:三维点云目标检测 — VoxelNet详解crop.py (一)_Coding的叶子的博客-CSDN博客。

其他三维目标检测算法的数据处理,特别是基于KITTI的三维目标检测,都可以参考这些处理方式,具有一定的通用性。

1 代码环境部署

请参考:三维点云目标检测 — VoxelNet详解crop.py (一)_Coding的叶子的博客-CSDN博客。

另外有两处需要进行修改:

(1)config.py:第35、36行需要进行如下修改,否则会报错:TypeError: 'float' object cannot be interpreted as an integer。

x = np.linspace(xrange[0]+vw, xrange[1]-vw, W//2)
y = np.linspace(yrange[0]+vh, yrange[1]-vh, H//2)

(2)voxelnet.py:第163行需要进行如下修改,否则会报维度不匹配的错误。

dense_feature[:, coords[:,0], coords[:,1], coords[:,2], coords[:,3]]= sparse_features.transpose(0, 1)

2 构建目标3D检测框

根据标签数据构建3D检测框:

(1)通过外参逆矩阵将标签中3D检测框中心坐标由相机坐标系变回到激光雷达坐标系。需要注意的是,在长度和宽度方向坐标处于中心位置,而高度方向的中心是底部坐标。在构建3D检测框的时候的坐标范围为(-l/2, l/2)、(-w/2, w/2)、(0, h)。

(2)标签数据中的ry旋转角度需要转换为雷达坐标系绕z轴的旋转角度,角度大小是与车正前方的夹角,而ry是与车身方向上的夹角,ry+rz=-pi/2,这个负号与坐标系正方向定义相关。

(3)根据rz构建旋转矩阵,将旋转矩阵乘以(1)中检测框后加上(1)中的中心坐标可以得到雷达坐标系中检测框的8个顶点。

相应函数为:

box3d_corner = box3d_cam_to_velo(obj[8:], Tr)

3 数据增强

(1)随机平移与旋转,并且平移之后不同目标在俯视图上不存在重叠,即不发生碰撞。源码似乎由错误,未将变换后的顶点坐标tmp更新到原始顶点坐标中去。

(2)随机旋转,对点云坐标和真实检测框8个顶点坐标进行随机旋转。

(3)随机缩放,对点云坐标和真实检测框8个顶点坐标进行随机缩放。

相应函数为:

lidar, gt_box3d = aug_data(lidar, gt_box3d)

4 空间范围筛选

筛选出指定空间范围内的点云和真实检测框顶点的坐标。x方向范围为(0, 70.4);y方向范围为(-40, 40);z方向范围为(-3, 1)。

lidar, gt_box3d = utils.get_filtered_lidar(lidar, gt_box3d)

5 体素化

体素尺寸为vw=0.2、vh=0.2、vd=0.4,全部体素个数为400x352x10,包含有点云的体素和无点云的体素。这里主要计算出含有点云的体素坐标。每个体素最多选择出35个点,对于不满足35个点的用零向量进行填充。每个有7个特征,前3个为35个点的xyz坐标,4-6为坐标与中心点坐标的差值,最后1维特征填充为0。返回体素特征voxel_features(Nx35x7)和体素坐标oxel_coords(Nx3)。

​​​​​​​voxel_features, voxel_coords = self.preprocess(lidar)

6 anchors

(1)生成200x176x2=70400个anchor,每个anchor有两种rz,所以乘以两倍。后续特征图大小为(200x176),相当于每个特征生成两个anchor。anchor的属性包括x、y、z、h、w、l、rz,即70400x7。

(2)通过计算anchor和目标框在xoy平面内外接矩形的iou来判断anchor是正样本还是负样本。正样本的iou 阈值为0.6,负样本iou阈值为0.45。正样本还必须包括iou最大的anchor,负样本必须不包含iou最大的anchor。

(3)由于anchors的维度表示为200x176x2,用维度为200x176x2矩阵pos_equal_one来表示正样本anchor,取值为1的位置表示anchor为正样本,否则为0。

(4)同样地,用维度为200x176x2矩阵neg_equal_one来表示负样本anchor,取值为1的位置表示anchor为负样本,否则为0。

(5)用targets来表示anchor与真实检测框之间的差异,包含x、y、z、h、w、l、rz等7个属性之间的差值,这跟后续损失函数直接相关。targets维度为200x176x14,最后一个维度的前7维表示rz=0的情况,后7维表示rz=pi/2的情况。

7 最终返回值

(1)voxel_features:Nx35x7

(2)voxel_coords:Nx3

(3)pos_equal_one:200x176x2

(4)neg_equal_one:200x176x2

(5)targets:200x176x14

(6)image:RGB图像,HxWx3

(7)calib:校准数据P2、R0、Tr_velo2cam

(8)self.file_list[i]:文件名

python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_python三维点云重建从三维基础知识到深度学习,将按照以下目录持续进行更新。更新完成的部分可以在三维点云专栏中查看。https://blog.csdn.net/suiyingy/category_11740467.htmlhttps://blog.csdn.net/suiyingy/category_11740467.html1、点云格式介绍(已完成)常见点云存储方式有pcd、ply、bin、txt文件。open3d读写pcd和plhttps://blog.csdn.net/suiyingy/article/details/124017716

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

【三维目标检测】VoxelNet(二):数据处理相关推荐

  1. 论文阅读笔记 | 三维目标检测——VoxelNet算法

    如有错误,恳请指出. 文章目录 1.背景 2. 网络结构 2.1 体素特征表示 2.2 卷积特征提取 2.3 RPN网络 3. 实验结果 paper:<VoxelNet: End-to-End ...

  2. 【三维目标检测】VoxelNet(三):模型详解

    前两节详细介绍了VoxelNet的数据处理部分,本节主要介绍VoxelNet详细的模型结构及其损失函数.数据处理部分请参考:三维点云目标检测 - VoxelNet详解之数据处理 (二)_Coding的 ...

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

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

  4. 【三维目标检测】Complex-Yolov4详解(一): 数据处理

    前面分别介绍了基于点云的三维深度学习算法PointNet.PointNet++,和基于体素的三维深度学习算法VoxelNet.本节将开始介绍基于投影的三维深度学习算法Complex-Yolov4.三维 ...

  5. 【三维目标检测】Second 模型 (二)

    Second模型的基本介绍.稀疏卷积.mini kitti数据集等请参考本专栏的上一篇博文:[三维目标检测]Second 模型 (一)_Coding的叶子的博客-CSDN博客.本节将介绍模型的详细结构 ...

  6. 【三维目标检测】3DSSD(二)

    数据和源码请参考上一篇博文:[三维目标检测]3DSSD(一)_Coding的叶子的博客-CSDN博客. 3DSSD三维目标检测模型发表在CVPR2020<3DSSD: Point-based 3 ...

  7. 三维目标检测论文阅读:VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

    VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection 理解了PointPillars这篇文章后,看这篇文章就清 ...

  8. 【三维目标检测】FCAF3D(二)

    FCAF3D数据和源码配置调试过程请参考上一篇博文:[三维目标检测]FCAF3D(一)_Coding的叶子的博客-CSDN博客.本文主要详细介绍FCAF3D网络结构及其运行中间状态. 1 模型总体过程 ...

  9. 【三维目标检测】Part-A2(二)

    本文为博主原创文章,未经博主允许不得转载. 本文为专栏<python三维点云从基础到深度学习>系列文章,地址为"https://blog.csdn.net/suiyingy/ar ...

最新文章

  1. 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】
  2. mqtt实例 php_php--mqtt实现推送
  3. 如何在用户登录时SAP时自动执行Tcode或者其他一些东西
  4. AndroidStudio部署项目时出现错误:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled
  5. 29. 栈的push,pop序列
  6. 操作系统中的同步和异步
  7. oracle使用parallel并行,多线程查询
  8. 查找整数c语言编程,关于算法:查找整数的位数
  9. 牛人和普通人的区别在于思维方式!
  10. python安装环境配置
  11. 设为首页 添加到收藏夹 (share)
  12. 【回归预测】基于matlab麻雀算法SSA优化混合核极限学习机KELM回归预测【含Matlab源码 1646期】
  13. java 发送 邮件通知 HTML模板 个性邮件 (十分钟内完成集成与调试)
  14. oracle dba 培训教程 第15章 管理角色
  15. Palabos用户手册翻译及学习(四)非本地操作的数据处理器和块之间的耦合
  16. 开发者大会优先谈云,对于微软Win10还重要吗
  17. JS字符串转数组和数组转字符串
  18. Wireshark抓取网易音乐的下载地址
  19. OAuth2第三方登录快速接入
  20. ubuntu下制作.c模板

热门文章

  1. vue Element
  2. 综合概括-中国制造 2025
  3. 网络基础之基于距离矢量的动态路由(RIP)
  4. 快来看看C语言必须学的最简单最基础的语句
  5. python多用户B2C商城系统毕业设计开题报告
  6. 玄子JAVA学习笔记
  7. Linux解决syntax error near unexpected token`问题
  8. POJ_3723_Conscription
  9. Linux云计算之VSFTP服务器概述-安装vsftp服务器端、客户端
  10. spring中的JdbcTemplate的使用方法