【三维目标检测】VoxelNet(二):数据处理
本节主要介绍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(二):数据处理相关推荐
- 论文阅读笔记 | 三维目标检测——VoxelNet算法
如有错误,恳请指出. 文章目录 1.背景 2. 网络结构 2.1 体素特征表示 2.2 卷积特征提取 2.3 RPN网络 3. 实验结果 paper:<VoxelNet: End-to-End ...
- 【三维目标检测】VoxelNet(三):模型详解
前两节详细介绍了VoxelNet的数据处理部分,本节主要介绍VoxelNet详细的模型结构及其损失函数.数据处理部分请参考:三维点云目标检测 - VoxelNet详解之数据处理 (二)_Coding的 ...
- 【三维目标检测】Complex-Yolov4详解(二):模型结构
Complex-Yolo网络模型的核心思想是用鸟瞰图BEV替换Yolo网络输入的RGB图像.因此,在完成BEV处理之后,模型的训练和推理过程基本和Yolo完全一致.Yolov4中输入的RGB图片的尺寸 ...
- 【三维目标检测】Complex-Yolov4详解(一): 数据处理
前面分别介绍了基于点云的三维深度学习算法PointNet.PointNet++,和基于体素的三维深度学习算法VoxelNet.本节将开始介绍基于投影的三维深度学习算法Complex-Yolov4.三维 ...
- 【三维目标检测】Second 模型 (二)
Second模型的基本介绍.稀疏卷积.mini kitti数据集等请参考本专栏的上一篇博文:[三维目标检测]Second 模型 (一)_Coding的叶子的博客-CSDN博客.本节将介绍模型的详细结构 ...
- 【三维目标检测】3DSSD(二)
数据和源码请参考上一篇博文:[三维目标检测]3DSSD(一)_Coding的叶子的博客-CSDN博客. 3DSSD三维目标检测模型发表在CVPR2020<3DSSD: Point-based 3 ...
- 三维目标检测论文阅读: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这篇文章后,看这篇文章就清 ...
- 【三维目标检测】FCAF3D(二)
FCAF3D数据和源码配置调试过程请参考上一篇博文:[三维目标检测]FCAF3D(一)_Coding的叶子的博客-CSDN博客.本文主要详细介绍FCAF3D网络结构及其运行中间状态. 1 模型总体过程 ...
- 【三维目标检测】Part-A2(二)
本文为博主原创文章,未经博主允许不得转载. 本文为专栏<python三维点云从基础到深度学习>系列文章,地址为"https://blog.csdn.net/suiyingy/ar ...
最新文章
- 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】
- mqtt实例 php_php--mqtt实现推送
- 如何在用户登录时SAP时自动执行Tcode或者其他一些东西
- AndroidStudio部署项目时出现错误:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled
- 29. 栈的push,pop序列
- 操作系统中的同步和异步
- oracle使用parallel并行,多线程查询
- 查找整数c语言编程,关于算法:查找整数的位数
- 牛人和普通人的区别在于思维方式!
- python安装环境配置
- 设为首页 添加到收藏夹 (share)
- 【回归预测】基于matlab麻雀算法SSA优化混合核极限学习机KELM回归预测【含Matlab源码 1646期】
- java 发送 邮件通知 HTML模板 个性邮件 (十分钟内完成集成与调试)
- oracle dba 培训教程 第15章 管理角色
- Palabos用户手册翻译及学习(四)非本地操作的数据处理器和块之间的耦合
- 开发者大会优先谈云,对于微软Win10还重要吗
- JS字符串转数组和数组转字符串
- Wireshark抓取网易音乐的下载地址
- OAuth2第三方登录快速接入
- ubuntu下制作.c模板