FCOS3D Fully Convolutional One-Stage Monocular 3D Object Detection 论文学习

news2024/9/25 15:25:34

论文地址:Fully Convolutional One-Stage Monocular 3D Object Detection
Github地址:Fully Convolutional One-Stage Monocular 3D Object Detection

1. 解决了什么问题?

单目 3D 目标检测由于成本很低,对于自动驾驶任务非常重要。但是由于天然缺乏深度信息,它要比传统的 2D 场景更加困难。虽然 2D 目标检测取得一些进展,但要把它们适配到 3D 任务上没那么轻松。现有的 3D 检测算法背后都有一个基础问题,即如何使用 2D-3D 的对应关系,将 3D 目标分配到 2D 空间,然后做预测。

2. 提出了什么方法?

FCOS3D 是一个全卷积、单阶段的检测器,首先将 7 自由度的 3D 目标框投影到 2D 图像空间,得到所谓的 3D 中心点,区别于之前的 2D 中心点。有了这个投影后,3D 中心点就包括了 2.5D 信息,即 2D 位置和深度信息。2D 位置可以简化成距离图像上某一点的 2D 偏移,作为 2D 属性使用。3D 属性则包括了深度、3D 尺寸和朝向信息。然后依据它们的 2D 尺度分配这些目标到不同的特征层级,训练时只根据投影后的 3D 中心点来给每个样本分配回归目标。FCOS 用点到四条边的距离来计算 centerness,而 FCOS3D 则基于 3D 中心的位置,使用 2D 高斯分布来重新定义 3D 的 centerness。
单目 3D 检测需要预测 3D 边框,需要将其解耦、转换到 2D 图像平面上。

2.1 架构概述

全卷积单阶段检测器一般包括三个组成:用于特征提取的主干网络、多层级分支的 necks 和做密集预测的 heads。

主干网络

使用带可变形卷积的预训练的 ResNet-101 来提取特征,平衡准确率和效率,固定第一个卷积模块的参数来降低内存占用。

Neck

FPN 能帮助模型在不同的尺度上检出目标。作者延续了 FCOS 的设计,使用 P3 到 P5 层级,用 2 个卷积模块对 P5 层级做下采样得到 P6 和 P7。这 5 个特征图负责不同尺度的预测。

检测 Head

共享的检测 head 有两个亟需解决的问题。第一个是如何分配目标到不同的特征层级和不同的点。第二个是如何设计网络结构。作者遵循了 FCOS 和 RetinaNet,每个共享 head 包括 4 个共享的卷积模块,以及实现不同目标的小型 heads。从经验来讲,解耦后的 heads 对回归目标更加有效,因此每个任务都有一个小 head,如下图所示。
为了充分利用 2D 特征提取器,作者延续了 2D 检测器的主干和 neck 设计。在检测 head 内,首先用 center-based 范式重新表示 3D 目标,解耦为多任务学习。此外,作者改进了多层级目标分配和中心采样,使该框架能更好地处理重叠 GT 框和尺度变化问题。
在这里插入图片描述

回归目标

作者首先回顾了 anchor-free 检测算法 FCOS。给定主干网络的第 i i i层特征图,记做 F i ∈ R H × W × C F_i\in \mathbb{R}^{H\times W\times C} FiRH×W×C,基于该特征图的每个点来预测目标,这些特征点对应着原输入图像上均匀分布的像素点。对于特征图 F i F_i Fi的每个点 ( x , y ) (x,y) (x,y),假定到第 i i i层的总步长是 s s s,那么输入图像上对应的位置就是 ( s x + ⌊ s 2 ⌋ , s y + ⌊ s 2 ⌋ ) (sx+\lfloor\frac{s}{2}\rfloor,sy+\lfloor\frac{s}{2}\rfloor) (sx+2s,sy+2s⌋)。FCOS 没有用到 anchor,它评判一个点是前景还是背景不是依靠 anchors 和 GT 框的 IoU。只要一个点距离边框中心点足够近,FCOS 就认为它是前景样本。
如下图,在 2D 任务中,模型预测点到四条边的距离 t , b , l , r t,b,l,r t,b,l,r。而在 3D 任务中,回归点到 3D 框六个面的距离是很麻烦的。一个更加直观的办法就是将 7 自由度的回归目标转换为 2.5D 中心点和 3D 尺寸。使用相机内参矩阵,很容易将 2.5D 中心点转换回 3D 空间。2.5D 中心点回归可以进一步简化为某一前景点到边框中心点的偏移 Δ x , Δ y \Delta_x,\Delta_y Δx,Δy 及对应的深度值 d d d
在这里插入图片描述

为了进一步预测目标的朝向,将它分为两个部分:周期为 π \pi π的角度 θ \theta θ和 2-bin 方向分类。第一部分自然地建模了预测框和 GT 框的 IOU,第二部分则关注两个框具有相反朝向的场景。这种角度编码对模型很有帮助,朝向准确率高于 CenterNet。下图展示了该旋转角度编码。在 2-bin 边界上,方向相反的两个目标有着相同的旋转偏移量。为了区分开它们,回归分支额外预测一个方向类别。
在这里插入图片描述

除了这些与目标坐标和朝向相关的回归目标,作者也回归一个二值目标 centerness c c c。它作为一个软二值分类器来判断哪些点离中心点近一些,从而抑制低质量预测框。
回归分支需要预测 Δ x , Δ y , d , w , l , h , θ , v x , v y \Delta_x,\Delta_y,d,w,l,h,\theta,v_x,v_y Δx,Δy,d,w,l,h,θ,vx,vy、方向类别 C θ C_\theta Cθ和 centerness c c c,分类分支需要输出目标的类别标签和属性标签。

Loss

对于回归和分类目标,分别定义其损失,加权得到总的损失。首先,分类损失使用 Focal Loss:
L c l s = − α ( 1 − p ) γ log ⁡ p L_{cls}=-\alpha(1-p)^\gamma \log p Lcls=α(1p)γlogp
p p p是预测框的类别概率,采取既有的设定 α = 0.25 , γ = 2 \alpha=0.25,\gamma=2 α=0.25,γ=2。对于属性分类,使用一个简单的 softmax 分类损失,记做 L a t t r L_{attr} Lattr
对于回归分时,使用加权的 smooth L1 损失,
L l o c = ∑ b ∈ ( Δ x , Δ y , d , w , l , h , θ , v x , v y ) SmoothL1 ( Δ b ) L_{loc}=\sum_{b\in(\Delta_x,\Delta_y,d,w,l,h,\theta,v_x,v_y)}\text{SmoothL1}(\Delta_b) Lloc=b(Δx,Δy,d,w,l,h,θ,vx,vy)SmoothL1(Δb)
其中, Δ x , Δ y , w , l , h , θ \Delta_x,\Delta_y,w,l,h,\theta Δx,Δy,w,l,h,θ的权重是 1 1 1 d d d的权重是 0.2 0.2 0.2 v x , v y v_x,v_y vx,vy的权重是 0.05 0.05 0.05。使用 exp ⁡ ( x ) \exp(x) exp(x)来预测深度,在原始的深度空间计算损失,而非 log ⁡ \log log空间,这样预测的深度更加准确。方向分类使用 softmax 分类损失,记做 L d i r L_{dir} Ldir。centerness 回归使用 BCE 损失,记做 L c t L_{ct} Lct。整体损失为:
L = 1 N p o s ( β c l s L c l s + β a t t r L a t t r + β l o c L l o c + β d i r L d i r + β c t L c t ) L=\frac{1}{N_{pos}}(\beta_{cls}L_{cls}+\beta_{attr}L_{attr}+\beta_{loc}L_{loc}+\beta_{dir}L_{dir}+\beta_{ct}L_{ct}) L=Npos1(βclsLcls+βattrLattr+βlocLloc+βdirLdir+βctLct)
其中 N p o s N_{pos} Npos是预测的正样本个数, β c l s = β a t t r = β l o c = β d i r = β c t = 1 \beta_{cls}=\beta_{attr}=\beta_{loc}=\beta_{dir}=\beta_{ct}=1 βcls=βattr=βloc=βdir=βct=1

推理

推理时,将给定的图片输入网络,得到边框及类别得分、属性得分、centerness 预测。将类别得分与 centerness 相乘,作为每个预测结果的置信度,在 BEV 视角做 NMS 得到最终的结果。

2.2 2D 引导的多层级 3D 预测

要想训练一个带金字塔网络的检测器,我们需要设计如何分配目标到不同的特征层上。FCOS 研究了两个问题:

  • 如何使 anchor-free 检测器取得与 anchor-based 检测器相似的召回率;
  • 消除 GT 框重叠引发的歧义。

FPN 能提升召回率,取得比 anchor-based 方法更好的效果。该方法也能应用在 3D 场景。第二个问题就要牵扯入回归目标的具体设定。
原 FCOS 在不同的特征层级检测不同大小的目标,将不同大小的 GT 框分配到不同层级的特征图。首先计算每个特征层级上每个位置的 2D 回归目标 l ∗ , r ∗ , t ∗ , b ∗ l^*,r^*,t^*,b^* l,r,t,b。那些满足 max ⁡ ( l ∗ , r ∗ , t ∗ , b ∗ ) > m i \max(l^*,r^*,t^*,b^*)>m_i max(l,r,t,b)>mi max ⁡ ( l ∗ , r ∗ , t ∗ , b ∗ ) < m i − 1 \max(l^*,r^*,t^*,b^*)<m_{i-1} max(l,r,t,b)<mi1的点将作为负样本, m i m_i mi表示第 i i i个特征层级最大的回归范围。FCOS3D 也延续了该设计,但 2D 检测框只用于标签分配时过滤无效目标。完成目标分配之后,回归目标就只剩下 3D 相关的了。根据投影后的 3D 边框的外矩形框,就能计算得到 2D 框,因此不再需要 2D 检测标注或先验知识。
下面介绍如何消除歧义。一个点若处在同一特征层级的多个 GT 框内,这个点应该分配到哪一个 GT 框呢?常用的方法是根据 2D 框的面积选择。面积小的框作为该点回归的目标框。这种机制叫做 area-based 标准,有着明显的缺陷:这样处理后,大目标得到的注意力就少许多。于是,作者提出了 distance-based 标准,选择中心点离回归目标近的边框。该机制与定义回归目标的 center-based 机制是一致的。距离目标中心点越近,局部特征就越全面、均衡,越容易产生高质量预测框。如下图,该机制能明显提升大目标的召回率和 mAP,也能提升整体 mAP。
[图片]
除了使用 center-based 方法,作者也使用了 3D 中心点来判断前景点,距离中心点足够近的点才被看作为正样本。作者定义了一个超参半径来定义中心区域。距离目标中心点小于 radius × stride \text{radius}\times \text{stride} radius×stride的点都是正样本,本文中 radius = 1.5 \text{radius}=1.5 radius=1.5
将不同回归分支的输出 x x x替换为 s i x s_i x six,区分不同特征层级的共享 heads。这里 s i s_i si是一个可训练标量,调节层级 i i i exp ⁡ \exp exp函数,能带来表现的小幅提升。

2.3 2D 高斯分布表示 3D Centerness

在原 FCOS,centerness c c c定义为:
c = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) c=\sqrt{\frac{\min(l^*,r^*)}{\max(l^*,r^*)}\times \frac{\min(t^*,b^*)}{\max(t^*,b^*)}} c=max(l,r)min(l,r)×max(t,b)min(t,b)
l ∗ , r ∗ , t ∗ , b ∗ l^*,r^*,t^*,b^* l,r,t,b是 2D 回归的目标。由于回归目标变为了 3D 中心的范式,使用 2D 高斯分布来定义 centerness,原点是投影后的 3D 中心点。2D 高斯分布简化为:
c = e − α ( Δ x 2 + Δ y 2 ) c=e^{-\alpha(\Delta_x^2+\Delta_y^2)} c=eα(Δx2+Δy2)
α = 2.5 \alpha=2.5 α=2.5用于调节从中心点到外围的衰减强度。将 c c c作为 centerness 的 GT 值,用回归分支来预测它,过滤掉低质量的预测框。Centerness 阈值在 0 0 0 1 1 1之间,于是采用 BCE 损失训练该分支。

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

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

相关文章

可视化工作流管理

​本场景是可视化工作流&#xff0c;通过可视化的精益看板将价值流进行可视化&#xff0c;通过精益思维消除瓶颈、加速流动&#xff0c;提升效率。 创建工作流任务看板 •通过Leangoo可视化工作流项目模板&#xff0c;创建一个工作流看板。 •通过看板&#xff0c;我们可以将…

K_A35_017 基于STM32等单片机驱动TTP229矩阵触摸传感器 串口与OLED0.96双显示

K_A35_017 基于STM32等单片机驱动TTP229矩阵触摸传感器 串口与OLED0.96双显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序:对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCTTP229矩阵触摸模块1.2、STM32F103C8T6TTP229矩阵触摸模块 五、基…

医院安全(不良)事件报告系统 PHP语言实现

医院安全&#xff08;不良&#xff09;事件报告制度 一、目的 规范医院安全&#xff08;不良&#xff09;事件的主动报告&#xff0c;增强风险防范意识&#xff0c;及时发现医疗不良事件和安全隐患&#xff0c;将获取的医疗安全信息进行分析反馈&#xff0c;并从医院管理体系…

UG NX二次开发(C++)-UF_OBJ_cycle_all获取所有的体对象

文章目录 1、前言2、在UG NX创建多个体对象3、用UF_OBJ_cycle_all来创建一个新的方法4、测试结果4.1 用UF_OBJ_cycle_objs_in_part&#xff08;&#xff09;结果4.2 用 UF_OBJ_cycle_all&#xff08;&#xff09;结果 5、结论 1、前言 在前面的一篇博客中&#xff0c;我们介绍…

Linux线程:概念、特点、线程间资源共享情况

1. 线程概念 线程是轻量级的进程&#xff1b;Linux中&#xff0c;线程本质上仍是进程。 进程是OS分配资源的最小单位&#xff0c;线程是OS调度的最小单位。 NPTL 当前Linux线程库为redHat开发的NPTL&#xff0c;查看本地线程库版本&#xff1a; getconf GNU_LIBPTHREAD_VE…

在VM VirtualBox6.1中安装redhat7.3过程实录

最近试用皕杰报表工具&#xff0c;需要把报表部署到linux系统&#xff0c;因而在VM VirtualBox虚拟机上安装linux操作系统&#xff0c;现把过程记录下来&#xff0c;作为今后的备忘。 打开VM VirtualBox虚拟机&#xff0c;见下图&#xff1a; 点击控制菜单选择新建&#xff1…

第二十九章 Unity关节Joint

关节组件将刚体连接到另一个刚体或空间中的固定点。关节施加使刚体移动的力&#xff0c;而关节限制功能可以限制该移动。Unity 提供的以下关节可以对刚体组件施加不同的力和限制&#xff0c;从而使这些刚体具有不同的运动&#xff1a; Hinge Joint铰链关节&#xff1a;使两个刚…

Android 11 WebView无法加载libwebviewchromium.so

概述 Android WebView 是 Google 提供的一个预安装系统组件&#xff0c;用以支持 Android 应用显示网页内容。 如果您希望在客户端应用中提供 Web 应用&#xff08;或只是网页&#xff09;&#xff0c;则可以使用 WebView 执行该操作。WebView 类是 Android 的 View 类的扩展&a…

凌恩生物美文分享|HGTree v2.0:水平基因转移数据库

水平基因转移(HGT)是指遗传物在物种间从一个相邻生物体到另一个生物体横向传递&#xff0c;是原核生物遗传变异的重要过程。HGT是负责塑造原核生物基因组和在自然选择中生存的驱动力之一&#xff0c;对原核生物的进化有很大贡献&#xff0c;但它会使物种进化史复杂化&#xff0…

观景台售票情况数据分析【Python】

任务1&#xff1a;数据预处理 表格数据资源如下百度网盘&#x1f447; 链接&#xff1a;https://pan.baidu.com/s/1Ry8emM-daxoegF1di4FRyw 提取码&#xff1a;jimb author&#xff1a;用户名rating&#xff1a;消费后打的分time&#xff1a;消费时间year&#xff1a;消费年份…

小米强制淘汰老破小,苹果华为带了好头

了解电脑手机处理器参数的朋友应该对 x86 x64 ARM 等字样不陌生&#xff0c;它们代表着不同的平台架构指令集。 对普通用户来说只需要知道&#xff0c;x86 是32位、x64 &#xff08;又称x86_64、AMD64&#xff09;是64位。 手机上则是以 ARMv7、v8 版本号来作为32、64位分界。…

3 ROS2服务通讯基础

ROS2服务通讯基础 3.1 服务通讯介绍3.2 ROS2服务通讯的基本流程3.2.1 创建ROS2服务通讯功能包的基本流程3.2.2 创建ROS2服务通讯功能包示例 3.3 使用C/C实现ROS2服务通讯3.3.1 创建C/C服务通讯服务端功能包并编写节点文件3.3.2 配置C/C服务通讯服务端功能包3.3.3 编译并运行C/C…

符号三角形-计算机算法设计与分析【1600+字解析 dfs全排列 列举情况】【题意分析】【算法分析】【思路是怎么来的】【过程是什么】

符号三角形 题意分析思路过程分析算法分析 下图是由14个“”和14个“-”组成的符号三角形。2个同号下面都是“”&#xff0c;2个异号下面都是“-”。 在一般情况下&#xff0c;符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n&#xff0c;计算有多少个不同的符号…

JMeter进阶——详解Java请求关于事务的操作 (附源码)

Jmeter事务操作 前面写过一篇文章&#xff0c;介绍Jmeter如何来调用java请求的&#xff0c;可以参考文章 详解JMeter Java请求的设计方法 但这篇文章中有一个问题&#xff0c;在方法public SampleResult runTest(JavaSamplerContext arg0) 中只对一个类的一个api 进行调用&am…

LeetCode 2106. 摘水果

【LetMeFly】2106.摘水果 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-fruits-harvested-after-at-most-k-steps/ 在一个无限的 x 坐标轴上&#xff0c;有许多水果分布在其中某些位置。给你一个二维整数数组 fruits &#xff0c;其中 fruits[i] [positio…

Java Test: Specification and Structure Testing(line, branch, path coverage)

这篇文章梳理一下Java软件测试中的Secification test和Structure test。 Specification Test 规范测试&#xff08;specification test&#xff09;&#xff1a;又称黑盒测试&#xff08;black-box testing&#xff09;或需求驱动测试&#xff08;requirements-driven testin…

B树(B-tree、B-树)理论详解

文章目录 基本概念n阶B树的性质&#xff08;n>2&#xff09;B树的搜索B树元素的添加上溢出解决 删除删除叶子节点删除非叶子节点删除——导致下溢出删除——解决下溢出方法一删除——解决下溢出方法二 MongoDB 基本概念 B树是为磁盘或其他直接存取的辅助存储设备而设计的一…

Gitlab on k8s最佳实践

文章目录 gitlab on k8sGitLab部署helm 安装 postgresqlhelm 安装 redis 集群gitlab manifest 部署gitlab如何上传项目&#xff1f;gitlab监控metricsgitlab runner helm 部署helm部署问题k8s中gitlab exector架构图what is Gitlab Runner Helper?gitlab如何连接上k8s&#xf…

【Windows】关闭Windows Update自动更新

目录 一 服务中关闭Win10自动更新及关联服务 二 注册表中关闭Win10自动更新 三 组策略中关闭Win10自动更新 四 计划任务中关闭Win10自动更新 电脑系统盘不够用了&#xff0c;为此准备关闭Windows Update自动更新&#xff0c;以节省空间。为保证关闭之后不死灰复燃&#xff…

Ajax入门

在B/S架构中&#xff0c;浏览器端发送请求的传统方式如下&#xff1a; 1.直接在浏览器地址栏上输入url 2.超链接 3.from表单 4.在JavaScript代码中发送请求 1&#xff09;window.open(url) 2&#xff09;document.location.href url 3&#xff09;window.location.href url ……