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

news2025/7/19 6:34:23

如有错误,恳请指出。


文章目录

  • 1.背景
  • 2. 网络结构
    • 2.1 体素特征表示
    • 2.2 卷积特征提取
    • 2.3 RPN网络
  • 3. 实验结果

paper:《VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection》

1.背景

以往的3d检测器都难免利用了手工设计特征(hand-crafted),不够智能不能实现end-to-end地自动提取特征,而如果利用全部点云输入,处理点云可能搞到100k个点的数据可能会带来极大的计算量(其实这里是可以对输入进行采样的,不过对于一个大场景来说数据点确实有点大,这时候对点云量化确实是一个比较好的选择,具体需要结合特定的场景和数据量)。为此,VoxelNet提出一个端对端的3d检测器,对点云数据进行量化,避免复杂场景带来的高计算。

具体来说,VoxelNet将点云划分为等间距的3D体素,通过堆叠的VFE层对每个体素进行编码,然后3D卷积进一步聚合局部体素特征,将点云转换为高维体积表示。最后在RPN结构利用高维体积的特征表示来产生检测结果。

此外,在related work中,介绍了对中体素(voexl)的编码方法。比如,每个非空体素Voexl导出6个统计量进行特征编码;融合多个局部统计对体素进行编码;计算体素网格中的截断带距离(truncated signed distance)进行编码;或者对3d体素网格进行二进制(binary encoding)编码等等。

ps:这里稍微介绍一下什么是Truncated Signed Distance,简写为TSDF(Truncated Signed Distance Function)
在这里插入图片描述

详细参考资料见:三维建模中基于体素的TSDF模型是什么


2. 网络结构

VoxelNet是一个anchor-based、one-stage的网络,其整体的网络结构大致可以分为体素特征表示,卷积特征提取以及RPN提取候选框三个部分。结构图如下所示。
在这里插入图片描述

2.1 体素特征表示

这里以对kitti数据集中的车辆检测为例进行说明。首先这里对点云场景进行区域划分,只考虑分别沿着Z、Y、X轴在[−3,1] × [−40,40] × [0,70.4]米范围内的点云。设置点云体素的体积为0.4x0.2x0.2,那么即可获得10x400x352数量的体素集合,在每个体素中设置T=35为最大考虑点。也就是分配在每个体素中的点为一组,在当前体素中采样35个点来表征当前的体素。由于T是最大采样点,所以每个体素中的点数量是不平衡的,此时需要对这些数量不平衡的体素表征点做处理来编码成voxel feature。

对于每个体素中的点,具有xyzr是个特征(位置特征xyz+反射强度r),计算出体素的质心位置为vx,vy,vz,将每个点位置与质心位置相减,提取到相对坐标位置重新添加到每个点的特征上。那么,现在体素中的每个点具有7个特征:[xi, yi, zi, ri, xi −vx, yi −vy, zi −vz]。随后,将每个体素通过Voxel feature encodeing layer(VFE)结构处理,具体的操作如下所示。
在这里插入图片描述

这里原始的点特征作为point-wise input,逐点进行全连接层编码操作(这里的FCN包含MLP+BN+ReLU三个部分),获得point-wise feature,将其进行max pooling操作之后再拼接回去每一个点特征上。那么,现在每一个点的特征包括了原始特征进行MLP操作后的feature,以及进行max pooling聚合了局部信息的feature两个部分。当前层的VFE的输出作为下一层VFE的输入,point-wise feature的维度会不断增加,因为每一个VFE层都有两部分特征进行拼接。在具体实现上,这里会有2层VFE,参数为:VFE-1(7, 32)、VFE-2(32, 128),对于最后每一个点的特征都编码成128维度。对于最后一层VFE的输出,再使用FCN层编码处理,随后进行max pooling聚合当前所有点的特征,作为最后的voxel-wise feature。

2.2 卷积特征提取

经过上个步骤的处理,现在对每一个体素都进行了编码,获得其voxel-wise feature。那么,按刚开始所说的对车辆的采样方式具有10x400x352个体素,现在的特征维度即为128x10x400x352。现在利用3d卷积进行特征提取,扩大其感受野进行聚合体素特征。对车辆检测具体的3d卷积设置为:Conv3D(128, 64, 3, (2,1,1), (1,1,1)),、Conv3D(64, 64, 3, (1,1,1), (0,1,1))、Conv3D(64, 64, 3, (2,1,1), (1,1,1))。每一层3d卷积都包含BN层和ReLU层。那么,128 x 10 x 400 x 352的特征输入现在经过3层卷积处理后变成了64 × 2 × 400 × 352的特征输出。

2.3 RPN网络

RPN网络的具体参数与结构如下所示(图以及画得很清晰,这里就不再作过多的解释)。
在这里插入图片描述

可以看见,最后的feature map回有两个head,一个用来分类,一个用来回归。这里需要解释下为什么score map的channels是2,而regression map的channels是14。对于feature map上的每个特征点,VoxelNet只对车辆检测设计了一种先验框(prior box):la = 0.8, wa = 0.6, ha = 1.73 meters centered at za = −0.6 meters,同时对反向设置了0°和90°两个方向。也就是每个特征点上配置2中尺度相同但是方向垂直的两个先验框,所以score map的channels是2。而VoxelNet用(xa, ya, za, la, wa, ha, θa)一组7个的参数来表示3d候选框,所以一个piror预测7组参数,2x7=14,所以regression map的channels是14。

此外,VoxelNet的7个回归参数采用的是直接回归不分bin的方法,来直接回归ground truth的参数。非常的简洁明了,但是由于过于简单感觉后续可以改进其损失函数来提升精度。损失函数如下所示。对于车辆检测来说,在俯视图上最高置信度以及iou>0.6的anchor设置为正样本,iou<0.45的anchor设置为负样本,剩余阈值中的直接排除。
在这里插入图片描述
在这里插入图片描述

在训练过程中,VoexlNet还使用了一些数据增强的方法。
(1)随机平移与旋转,并且平移之后不同目标在俯视图上不存在重叠,即不发生碰撞。
(2)随机旋转,对点云坐标和真实检测框8个顶点坐标进行随机旋转。
(3)随机缩放,对点云坐标和真实检测框8个顶点坐标进行随机缩放。

对于kitti的行人和直行车配置等其他细节,可以查看论文。


3. 实验结果

验证集上的结果如下所示:
在这里插入图片描述

在网络的具体处理中,由于点云的稀疏性导致90%的体素中完全没有点数据,为了使用GPUs来进行并行加速训练,VoxelNet设置了一个Efficient Implementation操作如下所示。
在这里插入图片描述

其中K是非空体素的最大数目,T是每个体素的最大点数,并且7是每个点的输入编码维度。在构建体素输入缓冲区之后,这些操作可在GPU上并行计算,实现稀疏体素结构重组为密集体素网格。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES6 入门教程 29 ArrayBuffer 29.1 ArrayBuffer 对象

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程29 ArrayBuffer29.1 ArrayBuffer 对象29.1.1 概述29.1.2 ArrayBuffer.prototype.byteLength29.1.3 ArrayBuffer.prototype.s…

善网ESG周报(第二期)

ESG报告&#xff1a; 聚焦五大战略&#xff0c;信公股份首次披露ESG报告 近日&#xff0c;信公股份发布首份ESG报告&#xff0c;报告主要涵盖可持续发展战略、高效现代的公司治理、可持续的商业模式与创新、传递社会影响力和守护地球家园等几个维度。 能链智电发布ESG报告&a…

SpringBoot——指标监控,自定义指标监控

为什么要进行指标监控&#xff1f; 在微服务架构中多个组件部署以后&#xff0c;我们需要能够监控到每个组件的健康情况&#xff0c;因此SpringBoot抽取了Actuator用于监控组件。 1.Java自带的监控工具&#xff08;不推荐&#xff09; 步骤&#xff1a; winr输入cmd 回车 进…

广告机联物联卡联网的优势?

广告机联物联卡联网的优势&#xff1f; 随着技术的发展、物联网技术的应用、物联网卡的授权&#xff0c;广告模式也在悄然发生变化&#xff0c;从传统的电视、报纸、杂志等广告模式逐渐转变为建筑之间的广告机。最常见的是地铁、公交车等公共区域设置的广告机或广告屏幕。 一…

67. SAP ABAP 监控用户事物码和程序执行的工具介绍

本文咱们不谈 ABAP 代码编写,而是介绍 SAP ABAP 系统里,如果想查找某个用户在某个时间段之内,在系统干了哪些事情,应该具体如何去做,SAP 又是提供了哪些工具来满足这种监控需求。 本文写作动机来源于一位朋友向我发起的咨询: 我们抛开 SAPGUI Script 这个因素不谈,本文…

第七章《Java的异常处理》第2节:异常的分类及处理方法

异常可以分为多种类型,Java语言允许程序员使用不同的方式来处理不同种类的异常,这样可以实现对异常的精细化处理。 7.2.1异常的分类 7.1小节中提到Exception是用来表示异常的类,但Exception并非Java语言中唯一用来表示异常的类,它只是庞大的异常类家族中的一员。下图7-7就…

[附源码]java毕业设计游戏网站设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第八章 动态规划 5 AcWing 1591. 快速排序

第八章 动态规划 5 AcWing 1591. 快速排序 原题链接 AcWing 1591. 快速排序 算法标签 DP 思路 直接枚举a[i]之前所有元素与a[i]之后所有元素 判断 时间复杂度 O(N2)O(1010)O(N^2)O(10^{10})O(N2)O(1010) 超时 a[i]之前所有元素小于a[i] &#xff0c;即小于a[i]之前所有元…

YOLO算法(You Only Look Once)系列讲解与实现(待完善)

文章目录前言一、指标分析1.mAP (mean Average Precision)2.IOU二、YOLO1.YOLO-v1&#xff08;1&#xff09;步骤&#xff08;2&#xff09;网络结构&#xff08;3&#xff09;损失函数&#xff08;4&#xff09;存在问题2.YOLO-v2&#xff08;1&#xff09;新的尝试-Better&am…

Pod的生命周期

Pod的生命周期 与容器一样&#xff0c;Pod也有生命周期&#xff0c;Pod在整个生命周期中被定义为各种状态。了解这些状态对于后面我们学习Pod的调度是有帮助的。 Pending 挂起状态&#xff0c;Pod已经被K8s系统所认可&#xff0c;但是目前还有一个或多个容器镜像还没有被创建&…

Git错误:Incorrect username or password (access token)

目录 问题描述&#xff1a; 解决办法&#xff1a; 步骤一&#xff1a;进入电脑控制界面 步骤二&#xff1a;进入用户账户 步骤三&#xff1a;管理你的凭据 步骤四&#xff1a;选择Windows凭据 步骤五&#xff1a;找到gitee 步骤六&#xff1a;修改正确的用户名和密码 问…

【学习笔记23】JavaScript数组的遍历方法

笔记首发 1、forEach 语法: 数组.forEach(function(item, index, origin){})参数&#xff1a; item: 数组实际每一项的值index: 数组每一项对应的下标origin:原数组 作用: 遍历数组返回值: 返回值是undefined&#xff0c;哪怕你手写了return&#xff0c;也是undefined var arr…

springboot 使用shiro集成阿里云短信验证码

目录 1.阿里云短信验证码服务 2.发送短信验证码 3.多个realm配置 4.验证短信验证码 5.一些拓展思路 引言&#xff1a;短信验证码是通过发送验证码到手机的一种有效的验证码系统&#xff0c;主要用于验证用户手机的合法性及敏感操作的身份验证。在注册和修改密码时需要用到…

手摸手教会你在idea中配置Tomcat进行servlet/jsp开发(多图超详)

1. 下载安装idea&#xff0c;创建project&#xff0c;如果没有JDK可以通过idea指定文件夹并下载JDK。工程就是普通的Java工程&#xff0c;名字为webdemo 2.因为是Web项目&#xff0c;所以要对这个普通的项目进行WEB扶持^^&#xff0c;在项目名称webdemo上右键单间选择菜单项&qu…

Hive搭建

Hive系列第二章 第二章 Hive搭建 2.1 MySQL5.6安装 1、检查删除已有的 有就删除&#xff0c;没有就不用管。 rpm -qa | grep mysql rpm -e mysql-libs-5.1.73-8.el6_8.x86_64 --nodepsrpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_642、删除mysql分…

Windows下Labelimg标注自己的数据集使用(Ubuntu18.04)Jetson AGX Orin进行YOLO5训练测试完整版教程

一、环境配置介绍 整个实现过程所涉及的文件目录&#xff0c;其中&#xff0c;自备表示自己需要准备的&#xff0c;生成表示无需自己准备。 使用yolov5时出现“assertionerror:no labels found in */*/*/JPEGImages.cache can not train without labels”问题 很多朋友都会遇…

SpringBoot+Vue项目医疗管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

待办事项是什么意思,怎么用?

待办事项是什么意思&#xff0c;为什么要用&#xff1f;待办事项工具怎么设置&#xff1f;这里一文给你讲清&#xff01; 废话不多说&#xff0c;下面直接教你&#xff1a;梳理待办事项清单的方法&#xff0c;以及待办工具的操作实操步骤。想要快速提升工作效率的小伙伴&#…

第三十七篇 Vue中封装Swiper组件

在上一篇内容的结尾讲到了将swiper初始化从mounted生命周期转移到updated中来能够让swiper动起来&#xff0c;但同时是否会造其他的一个问题&#xff1f;什么问题呢&#xff1f;在每次data中的状态发什么改变&#xff0c;updated中的内容会又重新执行&#xff0c;这样会导致swi…

二维数组与二级指针是好朋友吗?

抛出问题 有一个二维数组&#xff0c;我想把它传给一个函数。于是我把函数接口定义出来了&#xff0c;如下&#xff1a; int array[2][3] {1,2,3,4,5,6}; void fun(int **array) {array[0][0] 5; } 当我试图直接把数组名传给函数时候&#xff0c;fun(array)编译会报错&…