基于 Stereo R-CNN 的自动驾驶 3D 目标检测

news2024/12/17 4:52:05

论文地址:https://openaccess.thecvf.com/content_CVPR_2019/papers/Li_Stereo_R-CNN_Based_3D_Object_Detection_for_Autonomous_Driving_CVPR_2019_paper.pdf
论文代码:https://github.com/HKUST-Aerial-Robotics/Stereo-RCNN

论文背景

大多数 3D 物体检测方法严重依赖 LiDAR 数据来在自动驾驶场景中提供准确的深度信息。然而,LiDAR 的缺点是成本高、感知范围相对较短(∼100 m)和信息稀疏(与 >720p 图像相比为 32、64 线)。另一方面,单目相机为 3D 物体检测提供了替代的低成本解决方案。
深度信息可以通过场景中的语义属性和物体大小等来预测。然而,推断的深度不能保证准确性,特别是对于未见过的场景。

基于单目的方法不可避免地会缺乏准确的深度信息,与单目相机相比,立体相机通过左右 photometrix 对准提供更精确的深度信息。与激光雷达相比,立体相机成本较低,同时对于具有重要视差的物体也能实现相当的深度精度。立体相机的感知范围取决于焦距和基线。因此,立体视觉具有通过组合不同焦距和基线的不同立体模块来提供更大范围感知的潜在能力。

论文框架

在这里插入图片描述

在这篇论文中,通过充分利用立体图像中的语义和几何信息来研究 3D 对象的稀疏和稠密约束,并提出一种基于立体 R-CNN 的精确 3D 目标检测方法。Stereo R-CNN 同时检测和关联左右图像的目标。

网络架构如图 1 所示,可分为三个主要部分。
Stereo RPN 模块,它输出相应的左右 RoI proposal。
分别在左右特征图上应用 RoI Align 后,连接左右 RoI 特征来对对象类别进行分类,并在 stereo regression 分支中回归准确的 2D 立体框、视点和尺寸。关键点分支用于仅使用左 RoI 特征来预测目标关键点。
这些输出形成了 3D 框估计的稀疏约束(2D 框、关键点),其中制定了 3D 框 corners与 2D 左右框和关键点之间的投影关系。

为确保3D 定位性能的关键组件是密集的 3D 框对齐。论文将 3D 目标定位视为学习辅助几何问题,而不是端到端回归问题。没有直接使用没有明确利用对象属性的深度输入,而是将对象 RoI 视为一个整体而不是独立的像素。对于规则形状的物体,可以根据粗略的 3D 边界框推断出每个像素与 3D 中心之间的深度关系。

论文根据与 3D 目标中心的深度关系将左侧 RoI 中的密集像素扭曲到右侧图像,以找到最小化整个光度误差的最佳中心深度。整个目标 RoI 从而形成 3D 对象深度估计的密集约束。根据对齐的深度和 2D 测量结果,使用 3D 框估计器进一步校正 3D 框。

论文内容

与 Faster R-CNN 等单帧检测器相比,Stereo R-CNN 只需稍作修改就可以同时检测和关联左右图像的 2D 边界框。论文使用权重共享 ResNet-101 和 FPN 作为主干网络来提取左右图像上的一致特征。

Stereo RPN

区域提议网络(RPN)是一种基于滑动窗口的前景检测器。特征提取后,利用 3×3 卷积层来减少通道,然后使用两个同级全连接层对每个输入位置的对象性和回归框偏移进行分类,该输入位置使用预定义的多尺度框进行锚定。
与 FPN 类似,论文通过评估多尺度特征图上的锚来修改金字塔特征的原始 RPN。不同之处在于论文在每个尺度连接左右特征图,然后将连接的特征输入立体 RPN 网络。

能够同时进行目标检测和关联的关键设计是目标分类器和立体框回归器的不同真实值(GT)框分配。
在这里插入图片描述
论文将左右 GT 框的并集(称为并集GT框)指定为对象性分类的目标。如果锚点与任一并集 GT 框的交集比 (IoU) 高于 0.7,则为该锚点分配正标签;如果其与任一并集框的 IoU 低于 0.3,则为该锚点分配负标签。因此,正锚点往往包含左侧和右侧对象区域。

计算正锚点相对于目标联合 GT 框中包含的左右 GT 框的偏移量,然后分别将偏移量分配给左回归和右回归。立体回归量有六个回归项: [ Δ u , Δ w , Δ u ′ , Δ w ′ , Δ v , Δ h ] [\Delta u,\Delta w, \Delta u^{'},\Delta w^{'},\Delta v, \Delta h] [Δu,Δw,Δu,Δw,Δv,Δh],其中 u , v u, v u,v 表示图像空间中 2D 框中心的水平和垂直坐标, w , h w, h w,h 表示框的宽度和高度,上标 ( ⋅ ) ′ (\cdot )^{'} ()表示右图中的对应项。对左框和右框使用相同的 Δ v , Δ h \Delta v,\Delta h Δv,Δh 偏移量,因为要使用校正过的图像。因此,有六个用于 stereo RPN 回归器的输出通道,而不是原始 RPN 实现中的四个输出通道。由于左右 proposal 是从同一个 anchor 生成的并且共享 objectness 分数,因此它们可以自然地一一关联。分别对左右 RoI 使用非极大值抑制 (NMS) 来减少冗余,然后从保留在左右 NMS 中的条目中选择前 2000 个候选者进行训练。为了进行测试,仅选择前 300 名候选者。

Stereo R-CNN

Stereo 回归

在 Stereo RPN 之后,得到相应的左右提案对。在适当的金字塔级别分别在左侧和右侧特征图上应用 RoI Align [1]。左右 RoI 特征被连接并输入两个连续的全连接层(每个层后面都有一个 ReLU 层)以提取语义信息。使用四个子分支分别预测对象类、立体边界框、尺寸和视点角度。

[1] K. He, G. Gkioxari, P. Doll´ar, and R. Girshick. Mask r-cnn. In Computer Vision (ICCV), 2017 IEEE International Conference on, pages 2980–2988. IEEE, 2017.

视点角度不等于从裁剪图像 RoI 中无法观察到的物体方向。
在这里插入图片描述
论文使用 θ \theta θ 表示相对于相机框架的车辆方向,使用 β \beta β 表示相对于相机中心的物体方位角。三辆车的方向不同,但是它们在裁剪后的 RoI 图像上的投影完全相同。因此,将视点角度 α α α 回归定义为: α = θ + β α = θ + β α=θ+β。为了避免不连续性,训练目标是 [ sin ⁡ α , cos ⁡ α ] [\sin α, \cos α] [sinα,cosα] 对而不是原始角度值。

借助立体框和物体尺寸,可以直观地恢复深度信息,并且还可以通过解耦视点角度与3D位置之间的关系来解决车辆方向。
在对 RoI 进行采样时,如果左侧 RoI 与左侧 GT 框之间的最大 IoU 高于 0.5,同时右侧 RoI 与相应右侧 GT 框之间的 IoU 也高于 0.5,则我们将左右 RoI 对视为前景。如果左 RoI 或右 RoI 的最大 IoU 位于 [ 0.1 , 0.5 ) [0.1, 0.5) [0.1,0.5) 区间内,则左右 RoI 对被视为背景。对于前景 RoI 对,通过计算左侧 RoI 与左侧 GT 框之间的偏移量以及右侧 RoI 与相应右侧 GT 框之间的偏移量来分配回归目标。仍然对左右 RoI 使用相同的 Δ v , Δ h Δv, Δh Δv,Δh。对于维度预测,只需将真实维度与先验维度之间的偏移量回归即可。

关键的预测

除了立体框和视点角度之外,论文注意到投影在框中间的3D框 corners 可以为3D盒估计提供更严格的约束。

在这里插入图片描述

定义了四个 3D 语义关键点,表示 3D 边界框底部的四个角。只有一个 3D 语义关键点可以明显投影到框中间(而不是左边缘或右边缘)。将这个语义关键点的投影定义为透视关键点。
论文还预测了两个边界关键点,它们可以作为规则形状对象的实例掩模的简单替代方案。只有两个边界关键点之间的区域属于当前对象,并将用于进一步的密集对齐。
论文按照 Mask R-CNN 中的 proposal 预测关键点。仅左侧特征图用于关键点预测。将 14 × 14 14 × 14 14×14 RoI 对齐的特征图输入到六个连续的 256-d 3 × 3 3 × 3 3×3 卷积层,每个卷积层后面都有一个 ReLU 层。使用 2 × 2 2 × 2 2×2 反卷积层将输出尺度上采样至 28 × 28 28 × 28 28×28。可以发现,除了 2D 框之外,只有关键点的 u u u 坐标提供了附加信息。
为了简化任务,论文对 6 × 28 × 28 6 × 28 × 28 6×28×28 输出中的高度通道求和以产生 6 × 28 6 × 28 6×28 预测。因此,RoI 特征中的每一列都将被聚合并有助于关键点预测。前四个通道表示四个语义关键点中的每一个被投影到相应的 u u u 位置的概率。另外两个通道分别表示每个 u u u 位于左边界和右边界的概率。要注意的是,四个 3D 关键点中只有一个可以明显投影到 2D 框中间,因此将 softmax 应用于 4 × 28 4×28 4×28 输出,从而将一个专有语义关键点投影到单个位置。该策略避免了透视关键点类型(对应于哪个语义关键点)可能出现的混淆。对于左右边界关键点,分别对 1 × 28 1 × 28 1×28 输出应用 softmax。

在训练过程中,最小化 4 × 28 4 × 28 4×28 softmax 输出的交叉熵损失以进行透视关键点预测。 4 × 28 4×28 4×28 输出中只有一个位置被标记为透视关键点目标。忽略了没有 3D 语义关键点明显投影在框中间的情况(例如,截断和正交投影情况)。对于边界关键点,独立地最小化两个 1 × 28 1 × 28 1×28 softmax 输出的交叉熵损失。每个前景RoI将根据GT框之间的遮挡关系分配左右边界关键点。

3D Box 估计

利用稀疏关键点和 2D 框信息来求解粗略 3D 边界框。
3D 边界框的状态可以用 x = { x , y , z , θ } x = \{x, y, z, θ\} x={x,y,z,θ} 表示,分别表示 3D 中心位置和水平方向。
给定左右 2D 框、透视关键点和回归维度,可以通过最小化 2D 框和关键点的重投影误差来求解 3D 框。
在这里插入图片描述
从 stereo 框和透视关键点中提取七个测量值: z = { u l , v t , u r , v b , u l ′ , u r ′ , u p } z =\{u_l, v_t, u_r, v_b, u_l^{'}, u_r^{'}, u_p\} z={ul,vt,ur,vb,ul,ur,up},它们代表左 2D 框的左、上、右、下边缘,左,右侧 2D 框的右边缘,以及透视关键点的 u u u 坐标。每个测量值均由相机内部标准化,以简化表示。给定透视关键点,可以推断出 3D 框 corners 和 2D 框边缘之间的对应关系。
通过投影变换制定3D-2D关系:
v t = ( y − h 2 ) / ( z − w 2 sin ⁡ θ − l 2 cos ⁡ θ ) , u l = ( x − w 2 cos ⁡ θ − l 2 sin ⁡ θ ) / ( z + w 2 sin ⁡ θ − l 2 cos ⁡ θ ) , u p = ( x + w 2 cos ⁡ θ − l 2 sin ⁡ θ ) / ( z − w 2 sin ⁡ θ − l 2 cos ⁡ θ ) , . . . u r ′ = ( x − b + w 2 cos ⁡ θ + l 2 sin ⁡ θ ) / ( z − w 2 sin ⁡ θ + l 2 cos ⁡ θ ) v_t = (y - \frac{h}{2})/(z-\frac{w}{2}\sin \theta - \frac{l}{2} \cos \theta),\\ u_l=(x-\frac{w}{2}\cos \theta - \frac{l}{2} \sin \theta)/(z+\frac{w}{2}\sin \theta - \frac{l}{2} \cos \theta),\\ u_p=(x+\frac{w}{2}\cos \theta - \frac{l}{2} \sin \theta)/(z-\frac{w}{2}\sin \theta - \frac{l}{2} \cos \theta),\\ \\...\\ u_r^{'}=(x-b +\frac{w}{2}\cos \theta + \frac{l}{2} \sin \theta)/(z-\frac{w}{2}\sin \theta + \frac{l}{2} \cos \theta) vt=(y2h)/(z2wsinθ2lcosθ),ul=(x2wcosθ2lsinθ)/(z+2wsinθ2lcosθ),up=(x+2wcosθ2lsinθ)/(z2wsinθ2lcosθ),...ur=(xb+2wcosθ+2lsinθ)/(z2wsinθ+2lcosθ)

使用 b b b 表示立体相机的基线长度,使用 w w w h h h l l l 表示回归尺寸。共有七个方程对应七个测量值,其中 { w 2 , l 2 } \{\frac {w}{2},\frac {l}{2}\} {2w,2l} 的符号应根据对应的3D框子角点适当改变。上述七个方程的截边被删除。这些多元方程通过高斯-牛顿法求解。通过联合利用 stereo 框和回归维度来更鲁棒地恢复 3D 深度信息。

在某些情况下,可以完全观察到少于两个侧面并且没有向上的透视关键点(例如,截断、正交投影),从纯几何约束中无法观察到方向和尺寸。使用视点角α来补偿不可观测的状态: α = θ + arctan ⁡ ( − x z ) \alpha = \theta + \arctan (-\frac{x}{z}) α=θ+arctan(zx) 通过 2D 框和透视关键点求解,粗糙的 3D 框具有精确的投影并且与图像很好地对齐,使得能够进一步密集对齐。

密集 3D 框对齐

左右边界框提供了 object-level 视差信息,以便我们可以粗略地求解 3D 边界框。然而,立体框是通过聚合 7 × 7 7 × 7 7×7 RoI 特征图中的高级信息来回归的。由于多个卷积滤波器,原始图像中包含的像素级信息(例如角点、边缘)会丢失。
为了实现亚像素匹配精度,论文检索原始图像以利用像素级高分辨率信息。要注意的是,论文的任务与像素级视差估计问题不同,其中结果可能会在不适定区域遇到不连续性(SGM),或在边缘区域出现过度平滑(基于 CNN 的方法)。论文仅在使用 dense object patch 时解决 3D 边界框中心的视差,即使用大量像素测量来解决单个变量。
将目标视为规则形状的立方体,可以知道每个像素与3D 边界框中心之间的深度关系。 为了排除属于背景或其他目标的像素,论文定义了一个有效的 RoI,该区域位于左右边界关键点之间,并且位于 3D 框的下半部,因为车辆的下半部适合 3D 框更紧密。
对于位于左图像有效 RoI 中归一化坐标 ( u i , v i ) (u_i, v_i) (ui,vi) 的像素,光度误差可定义为: e i = ∣ ∣ I l ( u i , v i ) − I r ( u i − b z + Δ z i , v i ) ∣ ∣ e_i = ||I_l(u_i,v_i)-I_r(u_i-\frac{b}{z+\Delta z_i},v_i)|| ei=∣∣Il(ui,vi)Ir(uiz+Δzib,vi)∣∣
其中,用 I l , I r I_l, I_r Il,Ir 分别表示左右图像的 3 通道 RGB 向量; Δ z i = z i − z Δz_i = z_i − z Δzi=ziz 像素 i i i 与 3D 框中心的深度差; b b b 基线长度。 z z z 是需要解决的唯一目标变量。
使用双线性插值来获得右侧图像上的子像素值。总匹配成本定义为有效 RoI 中所有像素的平方差之和 (SSD): E = ∑ i = 0 N e i E = \sum_{i=0}^{N} e_i E=i=0Nei

中心深度 z z z 可以通过最小化总匹配成本 E E E 来求解,可以有效地枚举深度以找到最小化成本的深度。
首先在初始值周围以 0.5 米的间隔枚举 50 个深度值,以获得粗略的深度,最后在粗略深度周围以 0.05 米的间隔枚举 20 个深度值,以获得精确对齐的深度。然后,使用 3D 框估计器通过固定对齐深度来校正整个 3D 框。将目标 RoI 视为几何约束整体,论文的密集对齐方法自然避免了立体深度估计中的不连续性和不适定问题,并且对强度变化和亮度主导具有鲁棒性,因为有效 RoI 中的每个像素都会对对象做出贡献深度估计。
该方法非常高效,并且可以作为任何基于图像的 3D 检测的轻量级插件模块,以实现深度校正。尽管 3D 目标并不严格拟合 3D 立方体,但由形状变化引起的相对深度误差比全局深度小得多。

论文总结

论文提出了一种自动驾驶场景中基于 Stereo R-CNN 的 3D 目标检测方法。将 3D 目标定位表述为学习辅助几何问题,利用了目标的语义属性和密集约束。
论文提出的 3D 目标检测框架灵活实用,每个模块都可以扩展和进一步改进。例如,Stereo R-CNN 可以扩展用于多个对象检测和跟踪。可以用实例分割替换边界关键点,以提供更精确的有效 RoI 选择。通过学习物体形状,论文提出的3D 检测方法可以进一步应用于一般目标。

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

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

相关文章

Kubernetes Service控制器详解以及切换为ipvs代理模式

文章目录 一、Service 存在的意义二、Pod与Service的关系三、Service定义与创建四、Service三种常用类型五、Service代理模式六、切换Service代理模式七、service总体工作流程八、kube-proxy ipvs和iptables的异同九、Service DNS名称 一、Service 存在的意义 service的引入主…

P11 Linux进程编程exec族函数

前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🛸推荐专栏3: ​​​​​​《链表_C…

基于ssm人力资源管理系统论文

摘 要 随着企业员工人数的不断增多,企业在人力资源管理方面负担越来越重,因此,为提高企业人力资源管理效率,特开发了本人力资源管理系统。 本文重点阐述了人力资源管理系统的开发过程,以实际运用为开发背景&#xff0…

南京大学-软件分析-课程01-Introduction

1. PL and Static Analysis 程序语言和静态分析。 2. Why We Learn Static Analysis? 提高程序的可靠性(空指针,内存泄漏)提高程序的安全性 (隐私泄露,注入攻击)编译优化(死代码删除&#x…

【Web】SCU新生赛个人wp及完赛感想

目录 一些碎碎念: Web Guideline 2048 ezupload hardupload ezphp ezweb ezsql webbuilder tarit tarit_revenge VipDinner simplespi 一些碎碎念: scu新生赛是我全心全力打的第二场比赛,历时七天,期间不免煎熬&…

Fabric链码部署-go语言

最近在搞Fabric,今天刚刚明白如何把自己的链码部署并能跑通 网上的中文教程完全不友好,上来直接开始写代码,我连新建什么文件夹都不知道啊!! 于是痛定思痛,爆肝了一周多的官方文档 准备自己写一个&#…

调用别人提供的接口无法通过try catch捕获异常(C#),见鬼了

前几天做CA签名这个需求时发现一个很诡异的事情,CA签名调用的接口是由另外一个开发部门的同事(比较难沟通的那种人)封装并提供到我们这边的。我们这边只需要把数据准备好,然后调他封装的接口即可完成签名操作。但在测试过程中,发现他提供的接…

用23种设计模式打造一个cocos creator的游戏框架----(五)工厂方法模式

1、模式标准 模式名称:工厂方法模式 模式分类:创建型 模式意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 结构图: 适用于: 1、当一个类不知道它…

探索开源游戏的乐趣与无限可能 | 开源专题 No.47

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm:Dark Days Ahead 是一个回合制的生存游戏,设定在一个后启示录世界中。尽管有些人将其描述为 “僵尸游戏”,但 Cataclysm 远不止于此。在这个残酷、持久、程序生成的世…

RocketMq集成SpringBoot(待完善)

环境 jdk1.8, springboot2.7.3 Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> <!-- lookup parent from…

Sprint Boot 3.0

1. 简介 视频教程特点&#xff1a; Spring Cloud带动了Spring BootSpring Boot成就了Spring Cloud

彻底解决org.gradle.api.artifacts.DependencySubstitutions

需求背景 最近在使用android studio导入hbuilder的HBuilder-Integrate-AS工程时候报错&#xff0c;错误消息如下两种。 错误描述 第一种 Failed to notify dependency resolution listener. void org.gradle.api.artifacts.DependencySubstitutions$Substitution.with(org.g…

【工具使用-JFlash】如何使用Jflash擦除和读取MCU内部指定扇区的数据

一&#xff0c;简介 在调试的过程中&#xff0c;特别是在调试向MCU内部flash写数据的时候&#xff0c;我们常常要擦除数据区的内容&#xff0c;而不想擦除程序取。那这种情况就需要擦除指定的扇区数据即可。本文介绍一种方法&#xff0c;可以擦除MCU内部Flash中指定扇区的数据…

【数据库】简单连接嵌套查询

目录 &#x1f387;简单查询 &#x1f387;连接查询 &#x1f387;嵌套查询 分析&思考 &#x1f387;简单查询 --练习简单查询 --select * from classes --select * from student --select * from scores --1.按Schedule表的结构要求用SQL语言创建Schedule表 --字段名…

linux 应用开发笔记---【标准I/O库/文件属性及目录】

一&#xff0c;什么是标准I/O库 标准c库当中用于文件I/O操作相关的一套库函数&#xff0c;实用标准I/O需要包含头文件 二&#xff0c;文件I/O和标准I/O之间的区别 1.标准I/O是库函数&#xff0c;而文件I/O是系统调用 2.标准I/O是对文件I/O的封装 3.标准I/O相对于文件I/O具有更…

基于ssm校园活动管理平台论文

摘 要 使用旧方法对校园活动信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的校园活动管理平…

2024年网络安全竞赛-Web安全应用

Web安全应用 (一)拓扑图 任务环境说明: 1.获取PHP的版本号作为Flag值提交;(例如:5.2.14) 2.获取MySQL数据库的版本号作为Flag值提交;(例如:5.0.22) 3.获取系统的内核版本号作为Flag值提交;(例如:2.6.18) 4.获取网站后台管理员admin用户的密码作为Flag值提交…

【Linux】探索Linux进程状态 | 僵尸进程 | 孤儿进程

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 目录 一、进程状态1.1运行状态1.2阻塞状态1.3挂起状态 二、具体L…

C++ queue 和priority_queue

目录 1.什么是queue 2.模拟实现 3.仿函数 模板参数Compare 仿函数 4.什么是priority_queue 模拟实现 1.什么是queue 1.队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 2.队列作为…

【数据结构】——排序篇(中)

前面我们已经了解了几大排序了&#xff0c;那么我们今天就来再了解一下剩下的快速排序法&#xff0c;这是一种非常经典的方法&#xff0c;时间复杂度是N*logN。 快速排序法&#xff1a; 基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码…