接下来将详细介绍VoxelNet三维点云目标检测模型,将参考Github上的源码进行介绍,Github地址为https://github.com/skyhehe123/VoxelNet-pytorch。

本节将重点介绍数据处理中的crop.py的裁剪功能。

1 代码环境部署

conda create -n torch04 python=3.6
conda activate torch04
pip install torch==0.4.1
pip install torchvision==0.2.2
pip install cython opencv-python shapely cffi scipy mayavi
python setup.py build_ext --inplace
python nms/build.py

2 数据介绍

代码中的数据集采用的是KITTI数据集。为了快速进行算法调试和验证,我制作了一份Mini KITTI数据集,目录结构与KITTI完全一致,含20个训练样本和5个测试样本。下载地址为:minikitti数据集-深度学习文档类资源-CSDN下载。KITTI数据集的介绍请参考KITTI数据集简介 — Mini KITTI_Coding的叶子的博客-CSDN博客。

MINI KITTI数据集解压后按照下面目录保存。

除此之外还需要,在training文件夹下新建train.txt、val.txt、test.txt文件,指定各个任务对应的文件名称。样例请参考:train_val_testforminikitti-深度学习文档类资源-CSDN下载。

3 crop.py

crop程序的作用是把在图像坐标之外的点云进行裁剪删除,便于后期可视化验证。主要流程如下:

(1)读取图像数据(375x1242x3)和激光雷达数据(4xK),K表示激光雷达点云中点的数量,4分别表示x、y、z、反射强度。

(2)读取标定校准参数,各个参数的相关介绍参考。外参矩阵Tr_velo_to_cam(3x4)需要增加一行[0, 0, 0, 1]变成4x4的矩阵,这样可以同时对反射强度进行保存。同样地,R0_rect也增加一行[0, 0, 0, 1]变成4x4的矩阵。内参矩阵P的维度为3x4。相应的函数段为:

def load_calib(calib_dir):# P2 * R0_rect * Tr_velo_to_cam * ylines = open(calib_dir).readlines()lines = [ line.split()[1:] for line in lines ][:-1]#P = np.array(lines[CAM]).reshape(3,4)#Tr_velo_to_cam = np.array(lines[5]).reshape(3,4)Tr_velo_to_cam = np.concatenate(  [ Tr_velo_to_cam, np.array([0,0,0,1]).reshape(1,4)  ]  , 0     )#R_cam_to_rect = np.eye(4)R_cam_to_rect[:3,:3] = np.array(lines[4][:9]).reshape(3,3)#P = P.astype('float32')Tr_velo_to_cam = Tr_velo_to_cam.astype('float32')R_cam_to_rect = R_cam_to_rect.astype('float32')return P, Tr_velo_to_cam, R_cam_to_rect

(3)从原始点云中选出强度大于0的点,点云维度降为(4xL)。

(4)将点云第4个维度反射强度暂时设置为1,以便与外参矩阵和R0矩阵相乘时进行平移操作。内参矩阵左乘R0矩阵左乘外参矩阵左乘点云坐标后得到点云在相机坐标系中的坐标,参考:KITTI数据集简介(四) — 标定校准数据calib_Coding的叶子的博客-CSDN博客。筛选出z大于0的点,即在相机前方的点,这样点云维度进一步下降至4xL。将得到的点云坐标除以z方向上坐标后,可得到点云在像平面上的ix、iy坐标。相应的函数段为:

def project_velo_points_in_img(pts3d, T_cam_velo, Rrect, Prect):'''Project 3D points into 2D image. Expects pts3d as a 4xNnumpy array. Returns the 2D projection of the points thatare in front of the camera only an the corresponding 3D points.'''# 3D points in camera reference frame.pts3d_cam = Rrect.dot(T_cam_velo.dot(pts3d))# Before projecting, keep only points with z>0# (points that are in fronto of the camera).idx = (pts3d_cam[2,:]>=0)pts2d_cam = Prect.dot(pts3d_cam[:,idx])return pts3d[:, idx], pts2d_cam/pts2d_cam[2,:], idx

(5)筛选出ix、iy坐标在图像宽高(242、375)范围内的点云,并将点云的颜色复制为图像中对应像素的颜色。最终点云的维度为Nx9,每个点有9个维度,即x、y、z、reflectance、R、G、B、ix、iy。最后将点云以bin格式保存到crop文件夹下。

4 运行crop程序

在运行crop.py之前,需要先在training和testing文件夹下新建crop文件夹,否则运行程序时会提示找不到相应文件。默认处理的文件夹为testing,循环次数需要由7518改为5,这是因为MINI KITTI中的测试样本数量为5。然后在程序中将处理的改文件夹为training,循环次数需要由5改为20,这是因为MINI KITTI中的训练样本数量为20。

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(一):crop.py详解相关推荐

  1. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  2. 目标检测特殊层:PSROIPooling详解

    1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...

  3. 深度学习之目标检测(十一)--DETR详解

    深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...

  4. onestage方法_目标检测——One-stage和Two-stage的详解

    目标检测--One-stage和Two-stage的详解 发布时间:2019-01-15 14:16, 浏览次数:2784 , 标签: One stage Two 二.Two-stage类别的目标检测 ...

  5. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

  6. Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解

    Torchvision更新到0.3.0后支持了更多的功能,其中新增模块detection中实现了整个faster-rcnn的功能.本博客主要讲述如何通过torchvision和pytorch使用fas ...

  7. 深度学习_目标检测_SPP(Spatial Pyramid Pooling)详解

    在目标检测领域,很多检测算法最后使用了全连接层,导致输入尺寸固定.当遇到尺寸不匹配的图像输入时,就需要使用crop或者warp等操作进行图像尺寸和算法输入的匹配.这两种方式可能出现不同的问题:裁剪的区 ...

  8. 【目标检测】YOLO系列——YOLOv1详解

    本篇是关于目标检测算法YOLOv1的学习笔记.网上的博客大多是摘抄翻译论文中的重点内容加上自己的理解,或者是梳理论文的大致思路,在没看过原文的情况下可能总会有些看不懂的地方.所以强烈建议博客搭配原文食 ...

  9. 目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)

    一.RCNN 1. 介绍 2. 步骤流程 3. 部分详解 4. 缺点 二.Fast RCNN 1. 介绍: 2. 步骤流程 3. 部分详解 4. 比较 三.Faster RCNN 1. 介绍 2. 步 ...

最新文章

  1. OC基础回想(十二)协议
  2. OnTimer定时器使用踩坑实例和使用方法
  3. virtualbox 在物理机是无线网卡的时候做桥接配置 - juandx - 博客园
  4. 话里话外:流程管理进入2.0时代
  5. Ch2 空间配置器(allocator) ---笔记
  6. 笔记本选购:i5轻薄本和i7轻薄本该如何选择?
  7. Orange——The Data
  8. python编写交互界面查分app_Django项目中model的数据处理以及页面交互方法
  9. AtCoder Regular Contest 088 E - Papple Sort(树状数组+结论)
  10. java左手握右手_在队列中,向中看齐举哪个手?
  11. python中关于字典的基础运用
  12. 大学生如何自学PR剪辑以及PS教程?
  13. 雷电云手机无限雷币版v1.60
  14. 给移动互联网创业公司的六条建议
  15. epoch训练时间不同_epoch、batch size和iterations
  16. 情人节快乐 2008 追赶情人的情人节
  17. 怎样卸载teams_如何在Windows 10上永久卸载Microsoft Teams
  18. 标签超出图像控件c语言,VC++标签控件之图像标签控件
  19. Promise.all中对于reject的处理
  20. Keep悦动圈竞品分析报告(1)

热门文章

  1. UI应该怎么学?有哪些方式呢?
  2. 席南华院士:数学的意义(2020.5.30)
  3. 如何获取彩色图像中的主色彩
  4. python求不规则图形面积_Python求阴影部分面积
  5. 手机防盗版本修改步骤
  6. 4g网络设置dns地址_4G网速越来越慢?别再去过多的责怪运营商,不妨试试这几个方法...
  7. python怎么应用在机械领域的国家砝码_2020尔雅通识课Python璇█搴旂敤答案获取...
  8. 计算机 拔电源 重启,电脑在关机就自动重新启动。但拔掉电源插头再关就又不会重新启动了。求高手帮忙!!!...
  9. 求平方根问题 (C++ 实现)
  10. 基于OSM的地图大数据应用开发-1