MVX-Net Multimodal VoxelNet for 3D Object Detection 论文学习

news2024/10/6 12:26:43

论文链接:MVX-Net Multimodal VoxelNet for 3D Object Detection

1. 解决了什么问题?

2D 目标检测取得了显著成效,但由于输入模态的本质区别,CNN 无法直接应用在 3D 检测任务。LiDAR 能准确地定位到 3D 空间的物体,基于 LiDAR 数据的检测方法通常优于 2D 方法。

一些方法将 3D 点云转换为特征表示,如 BEV maps,然后用 2D-CNN 方法来做检测和分类。但这些方法对于点云稀疏或几何变化大的物体效果就不太好。另一些方法则在体素网格中表示 3D 点云,然后用 3D CNN 来做预测。这类方法通常受限于内存占用,尤其是处理全场景时。

VoxelNet 将 LiDAR 点云体素化,用一组 Voxel Feature Encoding(VFE) 层来编码这些体素。这样,VoxelNet 就可以使用 3D RPN 来做检测。

与点云相比,图像能提供更加稠密的纹理信息,我们可以将图像和点云结合使用,提升检测的表现。

2019 年前后,涌现了诸多基于 LiDAR 点云的 3D 目标检测方案。这些方法表现不错,但它们一般只依赖于某一种模态,无法利用其它模态的信息,如相机。另一些方法则尝试通过复杂的流程或是后融合的方式来处理多模态数据,无法在早期阶段学习各模态间的交互。

2. 提出了什么方法?

本文基于 VoxelNet 架构提出了多模态的 VoxelNet。为了融合图像和点云数据的信息,首先从 2D 检测网络的最后一个卷积层提取特征。该 2D 网络是在 ImageNet 上预训练,然后对 2D 检测任务做微调得到。高层级的图像特征编码了语义信息,可作为先验来帮助推理目标。

本文扩展了 VoxelNet,提出了两种融合技术:

  • PointFusion:前融合方法,将点云投影到图像平面,然后用预先训练好的 2D 检测器来提取图像特征。然后将图像特征和对应的点云 concat,输入 VoxelNet。
  • VoxelFusion:将 VoxelNet 产生的非空 3D 体素投影到图像平面,然后对于每个体素的投影,用预先训练好的 CNN 提取出相应的图像特征。随后对这些图像特征做池化,添加到每个体素的 VFE 特征编码后面,然后用 3D RPN 来输出 3D 边框。

2D 检测网络

与激光雷达点云相比,RGB 图像能捕捉到丰富的色彩和纹理信息。为了提升 3D 检测准确率,本文方法将提取得到的高层级语义特征,融合到 VoxelNet 算法中。2D 检测网络 Faster RCNN 包括一个 RPN 和一个 RCN。基线模型是在 ImageNet 上预训练的 VGG16,然后用 2D 检测数据集对 Faster RCNN 微调。推理时,提取出 VGG16 网络的 conv5 \text{conv5} conv5层的特征,与点云或体素做融合。

VoxelNet

将 VoxelNet 作为 3D 检测的基线模型有两个原因:

  • 输入是原始点云,无需人为设计特征;
  • 提供了一个 3D 空间内有效的接口(点云或体素),方便融合不同细粒度的图像特征。

VoxelNet 包括三个模块:Voxel Feature Encoding 层、卷积中间层、3D RPN。VFE 是一个特征学习网络,在单个体素层级编码原始点云。给定一个点云,3D 空间被划分为大小相同的体素,将点划分到体素中。然后用一组 VFE 层来编码各个体素。首先,体素内的每个点 p i = [ x i , y i , z i , r i ] T \mathbf{p}_i=[x_i,y_i,z_i,r_i]^T pi=[xi,yi,zi,ri]T(包括 XYZ \text{XYZ} XYZ坐标以及反射值)用它的坐标和相对于体素内质心(centroid)的相对偏移量表示,即 p ^ i = [ x i , y i , z i , r i , x i − v x , y i − v y , z i − v z ] T ∈ R 7 \hat{\mathbf{p}}_i=[x_i,y_i,z_i,r_i,x_i-v_x,y_i-v_y,z_i-v_z]^T\in \mathbb{R}^7 p^i=[xi,yi,zi,ri,xivx,yivy,zivz]TR7,其中 x i , y i , z i , r i x_i,y_i,z_i,r_i xi,yi,zi,ri p i \mathbf{p}_i pi的坐标和反射值, v x , v y , v z v_x,v_y,v_z vx,vy,vz p i \mathbf{p}_i pi所属的体素内点的 centroid 坐标。然后,每个 p ^ i \hat{\mathbf{p}}_i p^i都通过 VFE 层(一个全连接网络)变换到特征空间,聚合 3D 点特征的信息,编码体素内的表面形状。全连接网络包括一个线性层、BN 层和一个 ReLU 层。使用逐元素的 max-pool \text{max-pool} max-pool操作来聚合每个体素内的特征,再将 max-pool \text{max-pool} max-pool后的特征向量与点特征 concat \text{concat} concat起来,得到最终的特征 embedding。所有的非空体素编码过程是相同的,共享全连接网络的参数。VFE 层将输入的点云数据变换成高维特征。

VFE 层的结果会输入进一组卷积中间层,用 3D 卷积来聚合体素特征。这些层会融入额外的上下文信息,提升检测表现。
卷积中间层后面跟着一个 RPN 网络,做 3D 检测。该网络包括三个全卷积层组成的模块。每个模块的第一层是通过步长为 2 2 2的卷积,对特征图做下采样,随后是步长为 1 1 1的卷积。每个卷积层后是一个 BN 和 ReLU 层。每个模块的输出会被上采样到固定大小,然后 concat \text{concat} concat起来构建一个高分辨率的特征图。最后,将该特征图映射成概率得分图和回归图。

Multimodal Fusion

VoxelNet 基于单模态,将其适配到多模态输入可以提升其表现。本文提出了两个简单的融合方法。

PointFusion

属于前融合方法,每个 3D 点都会与图像特征融合,获取稠密的语义信息。该方法首先使用一个预先训练好的 2D 检测网络提取高层级特征图,编码图像的语义。然后利用标定参数,将每个 3D 点投影到图像上,将投影位置索引的特征添加到该点的后面。注意,图像特征来自于 VGG16 网络的 conv5 \text{conv5} conv5层。先用一个全连接层将其从 512 512 512维降至 16 16 16维,然后 concat \text{concat} concat到点特征后。用一组 VFE 层来处理这个新的特征,最后用于检测。

下图是 MVX-Net PointFusion 方法,使用预先训练好的 2D Faster RCNN 计算图像特征图,RPN 和 RCN 并不用于 3D 推理流程。使用标定参数将 3D 点投影到图像,把对应的图像特征添加到 3D 点的后面。随后,VFE 层和 3D RPN 处理聚合后的特征,输出 3D 结果。
在这里插入图片描述

优点:图像特征很早就被 concat \text{concat} concat到一起,网络通过 VFE 层能学到两个模态有用的信息。

VoxelFusion

PointFusion 在早期阶段融合特征,而 VoxelFusion 则在较后面才做融合,图像特征添加到体素里面。VoxelNet 的第一阶段是将 3D 空间划分为相同大小的体素。根据 3D 点的位置将它们划分到各个体素里面,然后用一组 VFE 层来编码。将每个非空体素投影到图像平面,得到 2D ROI。使用 2D 预训练检测器的特征图(VGG16 的 conv5 \text{conv5} conv5层),池化 ROI 特征,输出 512 512 512维的特征向量,然后进一步降维成 64 64 64维,添加到 VFE 层输出的每个体素的特征向量的后面。这个过程编码了 2D 图像上每个体素的先验信息。

下图是 MVX-Net VoxelFusion 方法,使用预先训练好的 2D Faster RCNN 计算图像特征图,RPN 和 RCN 并不用于 3D 推理流程。使用标定参数将非空体素投影到图像,提取 ROIs。然后池化每个 ROI 内的特征,添加到 VFE 层计算出的体素特征后面。随后,3D RPN 处理聚合后的特征,输出 3D 结果。

在这里插入图片描述

尽管 VoxelFusion 的融合相对靠后一些,输出的结果略逊于 PointFusion。但其优点如下:

  • 降低了对高分辨率 LiDAR 点云的依赖,可以将图像信息融合到空体素里面,这些空体素可能是 LiDAR 点缺失造成或者远距离目标。
  • VoxelFusion 在内存占用上更加高效。

训练细节

2D 检测器

使用 Faster RCNN 网络,该双阶段检测架构包括一个 RPN 和一个 RCN。基线模型是 VGG16 架构,使用 RoIAlign \text{RoIAlign} RoIAlign操作来池化特征,再输入进 RCNN。在 conv5 \text{conv5} conv5层,使用了四组大小是 { 4 , 8 , 16 , 32 } \{4,8,16,32\} {4,8,16,32}的 anchors,以及三个宽高比 { 0.5 , 1 , 2 } \{0.5,1,2\} {0.5,1,2}。如果与 ground-truth 框的 IoU ≥ 0.7 \text{IoU}\geq 0.7 IoU0.7,anchors 则为正样本;如果与 ground-truth 框的 IoU < 0.3 \text{IoU}< 0.3 IoU<0.3,则是负样本。训练时,图像的短边缩放为 600 600 600个像素,用翻转和随机噪声对数据集做增广。RCNN 阶段,batch size 为 128 128 128 25 % 25\% 25%的样本留作前景 ROIs。网络用 SGD 训练,学习率为 5 × 1 0 − 4 5\times 10^{-4} 5×104 momentum = 0.9 \text{momentum}=0.9 momentum=0.9

Multimodal VoxelNet

保留了 VoxelNet 的大部分设定。将 3D 空间划分为大小 v D = 0.4 , v H = 0.2 , v W = 0.2 v_D=0.4,v_H=0.2,v_W=0.2 vD=0.4,vH=0.2,vW=0.2的体素。使用了两组 VFE 层和三个卷积中间层。根据融合方式不同,这些层的输入和输出维度也不同。

  • 对于 PointFusion,VFE 层的配置为 VFE-1 ( 7 + 16 , 32 ) \text{VFE-1}(7+16, 32) VFE-1(7+16,32) VFE-2 ( 32 , 128 ) \text{VFE-2}(32, 128) VFE-2(32,128) VFE-1 \text{VFE-1} VFE-1的输入是将 3D 点特征和图像特征 concat \text{concat} concat起来,点特征有 7 7 7个维度,图像特征有 16 16 16个维度。2D 检测网络的 conv5 \text{conv5} conv5层的特征有 512 512 512个维度,然后降维至 96 96 96,最终用两个全连接层降至 16 16 16维。
  • 对于 VoxelFusion,VFE 层的配置为 VFE-1 ( 7 , 32 ) \text{VFE-1}(7, 32) VFE-1(7,32) VFE-2 ( 32 , 64 ) \text{VFE-2}(32, 64) VFE-2(32,64)。2D 检测网络的 conv5 \text{conv5} conv5层的特征有 512 512 512个维度,然后用两个全连接层降维至 128 128 128维和 64 64 64维。然后将降维后的特征与 VFE-2 \text{VFE-2} VFE-2的输出 concat \text{concat} concat起来,每个体素就得到 128 128 128维的向量。

为了降低内存占用,在 RPN 中只使用一半个数的 ResNet blocks。对于这两个融合方法,网络用 SGD 训练,前 150 150 150个 epochs 的学习率为 0.01 0.01 0.01,然后学习率除以 10 10 10。尽管 RPN 变小了,也没有用特殊的数据增强,本文方法取得的准确率仍要明显高于原来只用激光雷达数据的 VoxelNet。

下图展示了在 KITTI 验证集上的可视化效果。(a) 是 VoxelNet,(b) 是用了 VoxelFusion 的 MVX-Net,© 是用了 PointFusion 的 VoxelNet。绿色框表示检测结果,红色框表示漏检和误检的结果。
在这里插入图片描述

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

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

相关文章

根据对象数组的key进行分组

简单版&#xff1a; const arr [{key: aaa,tableName: bbbbb},{key: aaa,tableName: bbbbb},{key: www,tableName: bbbbb},{key: www,tableName: bbbbb},{key: mysql_ytr,tableName: bbbbb} ]// 把arr按key進行分組&#xff0c; 輸出結果是對象&#xff0c;對象裡面用key做鍵…

logback自定义调用以及文件输出

1、logback 首先五大日志等级是不可更改的&#xff0c;我们所定义的日志输出和调用也是用的这五大等级&#xff0c;这个就不多说了&#xff0c;没啥用。 2、效果 调用 String msg "测试日志"; MyLoger.myloger(msg); 输出 2023-07-18 10:55:05 [main] INFO m…

[element-ui] el-select,虚拟滚动(vue-virtual-scroll-list)

一、问题描述 表单中某下拉框&#xff0c;由于数据过多&#xff0c;选择的时候会因为数据量过大导致页面卡顿&#xff0c;于是对于el-select进行二次封装&#xff0c;实现虚拟滚动。 二、实现如下&#xff1a; 看起来是加载了全部数据&#xff0c;实际上只加载了自己设定的1…

单例模式类设计|什么是饿汉模式和懒汉模式

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

汇编实现1-100累加(ARMv7)

汇编实现1-100累加 代码.text .globl _start _start:mov r0,#0 summationmov r1,#0 autoIncrementbl funadd funadd:cmp r1,#100addccs r0,r1,r0addccs r1,r1,#1mov pc,lr stop:b stop .end运行效果

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型 给本帖投票 56211打赏收藏 分享 转发到动态举报 写回复 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增>> 11 条回复 切换为时间正序 请发表友善的回复… 发表回复 microsof…

UWB天线设计之一种优化扁平超宽带单极的新方法

文章亮点 一种新颖的方法提出了扁平超宽带单极天线。 通过应用收缩,可以设计具有相同性能的更小的天线作为平面单极天线。 优化结果表明该方法能够设计非常小的天线。 在这项研究中,提出了一种优化扁平超宽带单极天线的新方法。在该方法中,一般性地描述了天线的形状。这种一…

Http 接口测试框架

目录 前言&#xff1a; 实际效果 框架的下一步 最新框架图&#xff08;红色部分未完成&#xff09; 部分代码 你需要做的 前言&#xff1a; 在进行HTTP接口测试时&#xff0c;使用一个可靠的测试框架可以提高测试效率和质量。HTTP接口测试框架是一种用于自动化测试HTTP接…

STM32数字小键盘

基于STM32的数字小键盘 自己的键盘小键盘数字键坏了几个&#xff0c;准备自己用STM32做一个数字键盘。 硬件 找了一些资料&#xff0c;感谢知乎老哥。 原理图 采用的是主控是STM32F103RBT6&#xff0c;上拉1.5K接高速USB。按键采用的是矩阵按键。轴位可以自己选择。还接了一…

OpenCv之图像轮廓

目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 一、图像轮廓定义 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析物体的识别与检测 注意点: 为了检测的准确性&#xff0c;需要先对图像…

AI 救不了好莱坞,16 万演员联合编剧上演史诗级「罢工大戏」

内容一览&#xff1a; 近日&#xff0c;美国演员工会正式加入编剧工会行列&#xff0c;开始举行罢工&#xff0c;由此&#xff0c;被多家媒体称为好莱坞「末日」时刻来临。值得关注的是&#xff0c;本次罢工的原因&#xff0c;除了老生常谈的薪资问题&#xff0c;还有一个重要的…

多用户商城系统Dokan评测优点与缺点(2023)

目录 多用户商城系统Dokan优点 多用户商城系统Dokan缺点 您应该开始使用多供应商市场吗&#xff1f; 多用户商城系统Dokan评论 为什么选择Dokan&#xff1f; 用户界面 用户友好的前端 仪表板和后端 管理员后台 供应商仪表板 第三方兼容性 Dokan 可以卖什么&…

c#调用cpp库,debug时不进入cpp函数

选中c#的项目&#xff0c;右击属性&#xff0c;进入属性页&#xff0c;点击调试&#xff0c;点击打开调试启动配置文件UI&#xff0c;打开启用本机代码调试。

Scrapy和Selenium整合(一文搞定)

文章目录 前言一、开始准备1. 包管理和安装chrome驱动2. 爬虫项目的创建&#xff08;举个栗子&#xff09;3. setting.py的配置 二、代码演示1. 主爬虫程序2. 中间件的配置3. 定义item对象4. 定义管道 总结 前言 scrapy和selenium的整合使用 先定个小目标实现万物皆可爬&#…

Loadrunner结合Fiddler实现脚本的录制

Loadrunner一直被业内认为是最好用的性能测试工具&#xff0c;行业大哥大, 但是用过Loadrunner的朋友都知道&#xff0c;工具功能的确牛&#xff0c;但实际使用过程中总会有一些困扰新手的问题&#xff0c;无法录制脚本&#xff0c; 如遇到Loadrunner不支持的IE版本、对Chrome、…

【C语言】Sleep()函数----详解

&#x1f341; 博客主页:江池俊的博客 &#x1f341;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; 目录 前言 &#x1f4cc;C语言sleep函…

一本通1919:【02NOIP普及组】选数

这道题感觉很好玩。 正文&#xff1a; 先放题目&#xff1a; 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid1919 描述 已知 n 个整数 x1,x2,…,xn&#xff0c;以及一个整数 k&#xff08;k&#…

Docker 容器生命周期:创建、启动、暂停与停止----从创建到停止多角度分析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Vuex基本使用

目录 一、什么是vuex二、什么时候使用 Vuex三、Vuex 工作原理图四、vuex 核心概念和 API4.1 state4.2 actions4.3 mutations4.4 getters 五、代码生成器5.1 mapGetters5.2 mapState5.3 mapActions5.4 mapMutations 六、vuex模块化编码七、求和案例 一、什么是vuex 专门在 Vue …

文本生成人工评价指标及一致性校验方法总结(附代码实现)

前言&#xff1a;人工评估&#xff08; Manual Evaluation / Human Evaluation&#xff09;是文本生成工作评估中非常重要的一环。在对模型的文本生成质量进行评估时&#xff0c;除客观的自动评价指标&#xff0c;还需有人工评价指标的主观判断&#xff0c;综合二者的结果完成评…