【论文笔记】SAM3D: Zero-Shot 3D Object Detection via Segment Anything Model

news2024/11/27 3:40:48

原文链接:https://arxiv.org/pdf/2306.02245.pdf

1.引言

  分割一切模型(SAM)作为视觉领域的基石模型,有强大的泛化性,能解决很多2D视觉问题。但是SAM是否可以适用于3D视觉任务,仍需要被探索。
  目前几乎没有关于3D目标检测的零样本学习,如何使SAM的零样本能力适用于3D目标检测是本文的主要研究内容。
  本文提出SAM3D,使用SAM分割BEV图,然后从输出的掩膜预测物体。

2.方法

2.1 准备知识

  问题定义

  给定一个在有标注的源数据集 D s = { X i s , Y i s } D_s=\{X_i^s,Y_i^s\} Ds={Xis,Yis}上训练的模型 F F F,以及一个3D检测无标签数据集 D t = { X i t } D_t=\{X_i^t\} Dt={Xit}(在本文中 X i t X_i^t Xit表示激光雷达点云),零样本3D目标检测任务的目标就是在不使用 D t D_t Dt标签的情况下,最大化 F F F D t D_t Dt上的性能。

  SAM的回顾

  虽然SAM的能力很强大,但模型很简单:强大的图像编码器和提示编码器分别将图像与提示转换为嵌入特征,随后轻量级的掩膜解码器用于组合信息并预测分割结果。
  具体来说,图像编码器是使用MAE预训练的ViT,提示编码器使用CLIP中现成的文本编码器,利用位置编码和自由文本表达点与边界框。掩膜提示使用卷积嵌入,并与图像嵌入特征按元素求和。掩膜解码器使用Transformer解码器(含提示自注意力和两个方向的交叉注意力),并使用动态掩膜头,在图像的每个位置计算掩膜前景概率。

2.2 整体框架

  由于本文使用的是3D点云,而SAM的输入是2D图像,因此本文先将激光雷达点云转换为类似2D图像的表达以减小域间隙。基于BEV,本文的使用SAM的模型如下图所示。
在这里插入图片描述
  本文的方法分5个步骤:

  • 激光雷达到BEV的投影:将激光雷达信号转化为BEV图像。使用投影方程决定每个点在图像平面的坐标,并预定义一组强度到RGB的映射,以得到BEV图像像素的RGB值,使处理时更具判别力。
  • BEV后处理:将原始BEV图像进行一个简单的操作,以获得更稳定的SAM输入,使分割更简单、性能更好。
  • SAM分割:将改进的BEV图像和网格提示输入SAM,在BEV中分割前景物体。为加速分割,还对提示进行了修剪,这不会牺牲性能。
  • 掩膜后处理:使用先验推导出的规则过滤带噪声的掩膜,以减少FP。
  • Mask2Box:对前景掩膜寻找最小边界框,提取BEV下的2D框,与激光雷达点云交互后,预测最终的3D边界框。

2.3 激光雷达到BEV的投影

  目的是将 N p N_p Np个激光雷达点 P = { ( x i , y i , z i ) } i = 1 N p P=\{(x_i,y_i,z_i)\}_{i=1}^{N_p} P={(xi,yi,zi)}i=1Np(满足 L x ≤ x i ≤ U x , L y ≤ y i ≤ U y L_x\leq x_i\leq U_x,L_y\leq y_i\leq U_y LxxiUx,LyyiUy)转化为一张BEV图像 I ∈ R H × W × 3 I\in\mathbb{R}^{H\times W\times 3} IRH×W×3
  每个点都会落入BEV图像上的一个网格,网格的坐标 ( c x , c y ) (cx,cy) (cx,cy)按下式计算: c x i = ⌊ ( U x − x i ) / s x ⌋ c y i = ⌊ ( U y − y i ) / s y ⌋ cx_i=\left \lfloor (U_x-x_i)/s_x\right \rfloor\\cy_i=\left \lfloor (U_y-y_i)/s_y\right \rfloor cxi=(Uxxi)/sxcyi=(Uyyi)/sy其中 s x , s y s_x,s_y sx,sy x , y x,y x,y方向的柱体大小。
  此后,需要得到填入BEV图像中的像素值,使BEV图像更具判别力。点的反射强度 R = { r i } i = 1 N p R=\{r_i\}_{i=1}^{N_p} R={ri}i=1Np可以用于形成BEV图像的特征向量。首先将反射强度归一化到 [ 0 , 1 ] [0,1] [0,1]内,并用其从预定义的调色板上选择色彩向量: c i = Pallete ( Norm ( r i ) ) ∈ R 3 I [ c x i , c y i , : ] = c i c_i=\text{Pallete}(\text{Norm}(r_i))\in \mathbb{R}^3\\I[cx_i,cy_i,:]=c_i ci=Pallete(Norm(ri))R3I[cxi,cyi,:]=ci其中 Pallete : R → R 3 \text{Pallete}:\mathbb{R}\rightarrow\mathbb{R}^3 Pallete:RR3是将强度标量转化为RGB向量的调色板。
  无对应点的BEV像素,使用零向量填充。最后得到有判别力的BEV图像 I ∈ R H × W × 3 I\in\mathbb{R}^{H\times W\times 3} IRH×W×3

2.4 BEV后处理

  SAM的图像是在“密集”的自然图像上训练的,而BEV图像是“稀疏”的。为减小间隙,本文使用形态扩张(即最大池化): I ′ = MaxPool2D ( I ) I'=\text{MaxPool2D}(I) I=MaxPool2D(I)

2.5 使用SAM分割

  SAM支持使用各种提示,如点、框和掩膜。这一步的目标是分割处尽可能多的前景目标,因此本文使用网格提示覆盖整张图像。具体来说,创建 32 × 32 32\times32 32×32的、在图像平面均匀分布的网格,将它们视作SAM的点提示。
  但是由于稀疏BEV图像有很多空的区域,本文还对提示进行了修剪。将提示投影到BEV图像上,检查每个提示的邻域,将周围无激活像素的提示丢弃掉。该步骤使得整个流程被极大地加速。
  该步骤完成后,得到 N m N_m Nm个分割掩膜 M = { m i ∈ R H × W } i = 1 N m M=\{m_i\in\mathbb{R}^{H\times W}\}_{i=1}^{N_m} M={miRH×W}i=1Nm

2.6 掩膜后处理

  尽管SAM有强大的零样本能力,这里仍然存在不可忽视的域间隙。因此SAM输出的掩膜是有噪声的,需要进一步处理。
  在自动驾驶领域中,汽车是有大概的面积和长宽比的,可以用于滤除 M M M中的某些FP。具体来说,本文使用面积阈值 [ T l a , T h a ] [T_l^a,T_h^a] [Tla,Tha]和长宽比阈值 [ T l r , T h r ] [T_l^r,T_h^r] [Tlr,Thr]来过滤掩膜。
  最终,得到 N o N_o No个相对高质量的前景掩膜 M ′ = { m i ∈ R H × W } i = 1 N o M'=\{m_i\in\mathbb{R}^{H\times W}\}_{i=1}^{N_o} M={miRH×W}i=1No,每个掩膜对应一个前景物体。

2.7 Mask2Box

  可以直接从2D掩膜估计3D边界框的水平属性(水平位置 ( x 3 D , y 3 D ) (x^{3D},y^{3D}) (x3D,y3D)、长宽 ( d x 2 D , d y 3 D ) (dx^{2D},dy^{3D}) (dx2D,dy3D)、朝向 θ 3 D \theta^{3D} θ3D),但对于垂直属性(垂直位置 z 3 D z^{3D} z3D和高 d z 3 D dz^{3D} dz3D),需要使用激光雷达点进行信息补偿。
  首先从掩膜提取最小边界框: B 2 D = { ( x i 2 D , y i 2 D , d x i 2 D , d y i 2 D , θ i 2 D ) } i = 1 N o B^{2D}=\{(x^{2D}_i,y^{2D}_i,dx^{2D}_i,dy^{2D}_i,\theta^{2D}_i)\}_{i=1}^{N_o} B2D={(xi2D,yi2D,dxi2D,dyi2D,θi2D)}i=1No  然后将2D属性投影为对应的3D属性: x i 3 D = U x − ( x i 2 D + 0.5 ) × s x y i 3 D = U y − ( y i 2 D + 0.5 ) × s y d x i 3 D = d x i 2 D × s x d y i 3 D = d y i 2 D × s y θ i 3 D = θ i 2 D x^{3D}_i=U_x-(x_i^{2D}+0.5)\times s_x\\y^{3D}_i=U_y-(y_i^{2D}+0.5)\times s_y\\dx^{3D}_i=dx^{2D}_i\times s_x\\dy^{3D}_i=dy^{2D}_i\times s_y\\\theta^{3D}_i=\theta^{2D}_i xi3D=Ux(xi2D+0.5)×sxyi3D=Uy(yi2D+0.5)×sydxi3D=dxi2D×sxdyi3D=dyi2D×syθi3D=θi2D  最后选择落在2D边界框内的激光雷达点,使用垂直坐标计算边界框的垂直属性: Z i = { z j ∣ ( x j , y j , z j ) 在 B E V 上的投影位于 B i 2 D 中 } d z i 3 D = max ⁡ ( Z i ) − min ⁡ ( Z i ) z i 3 D = min ⁡ ( Z i ) + d z i 3 D 2 Z_i=\{z_j|(x_j,y_j,z_j)在BEV上的投影位于B_i^{2D}中\}\\dz_i^{3D}=\max(Z_i)-\min(Z_i)\\z_i^{3D}=\min(Z_i)+\frac{dz_i^{3D}}{2} Zi={zj(xj,yj,zj)BEV上的投影位于Bi2D}dzi3D=max(Zi)min(Zi)zi3D=min(Zi)+2dzi3D

3.实验

3.1 设置

  本文在Waymo Open的验证集上对汽车类别进行评估,且只考虑最多30m内的物体。

3.2 定性结果

  可视化表明,SAM能在不接触3D标注的情况下生成高质量的2D边界框,且能进一步得到高质量的3D边界框。
  但也存在一些明显的失效情况:当物体距离较近时,SAM会重复生成掩膜;与汽车外观类似的物体会被SAM错误分割为前景;由于激光雷达点云的稀疏性以及截断或遮挡等,部分汽车在BEV图像中被部分激活,因此SAM会忽略这些物体,导致很多FN。

3.3 消融研究

  柱体大小的影响

  当柱体大小较大,量化误差增大,且难以区分近距离的物体;当柱体大小较小同样会损害性能,因为激光雷达点云的稀疏性使得来自同一物体的点难以形成连通区域,SAM倾向于将一个物体分割为多个部分。

  反射强度的影响

  将本文的预定义的强度到RGB的映射方法与二值法(生成黑白双色的二值图像)、强度法(生成灰度图像)比较,实验表明本文的方法在性能上能大幅超过二值法与强度法,因为彩色图像更具判别力,SAM更容易分割。

  SAM结构的影响

  实验表明,使用小容量模型会导致性能下降,但使用大容量模型也仅能带来微小的性能提升。这说明模型容量不是性能瓶颈,且SAM的能力仍需被充分释放。

  BEV后处理的影响

  实验表明,去除BEV后处理会带来显著的性能下降,这表明BEV后处理能缩减BEV图像和自然图像的间隙。

  掩膜后处理的影响

  面积与长宽比的后处理均对性能提升有帮助,因为仍然存在不可忽视的域间隙。

4.讨论

  本文的实验表明,使用SAM进行零样本3D目标检测任务是可行的。
  但仍存在一些需改进的重要方面:

  • 使用BEV图像表达,可能无法进行室内的3D目标检测,需要寻找更好的场景表达。
  • 由于遮挡和截断,以及激光雷达点云的稀疏性,本文的方法会产生许多FN,特别是对于远距离物体。结合其余模态的信息可能有帮助。
  • 虽然通过提示修剪大幅减小了推断时间,推断速度仍受限于SAM的复杂性。模型压缩和蒸馏可能可以解决此问题。
  • 本文的方法还不支持多类别物体检测,因为SAM缺乏语义标签的输出。可以使用视觉-语言模型(如CLIP Goes 3D)进行零样本分类。

  使用少样本学习和提示工程等技术,可以更有效地利用视觉基石模型解决3D任务。

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

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

相关文章

深蓝学院C++基础笔记 第 2 章 对象和基本类型

第 2 章 对象和基本类型 1. 从初始化/赋值语句谈起 初始化 / 赋值语句是程序中最基本的操作,其功能是将某个值与一个对象关联起来 – 值:字面值、对象(变量或常量)所表示的值…… – 标识符:变量、常量、引用…… –…

《Lua程序设计》--学习2

表 Lua语言中的表本质上是一种辅助数组(associative array),这种数组不仅可以使用数值作为索引,也可以使用字符串或其他任意类型的值作为索引(nil除外)。 Lua语言中的表要么是值要么是变量,它…

Linux进程间通信【命名管道】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、什么是命名管道1.1、创建及简单使用1.2、命名管道的工作原理1.3、命名管道…

Shell脚本攻略:文本三剑客之awk

目录 一、理论 1.awk原理 2.awk打印 3.awk条件判断 4.awk数组与循环 5.awk函数 6.常用命令 二、实验 1.统计磁盘可用容量 2.统计/etc下文件总大小 3.CPU使用率 4.统计内存 5.监控硬盘 一、理论 1.awk原理 (1)概念 awk由 Aho,W…

PriorityBlockingQueue的介绍及方法内部实现

SynchronousQueue的介绍 SynchronousQueue是一个优先级队列,不满足先进先出FIFO的概念。 会将插入的数据进行排序,输出排序之后的结果(小根堆,由小变大升序) 内部实现原理介绍 SynchronousQueue是基于二叉堆结构实现…

Linux——多线程

Linux多线程 多线程进程内进行资源划分什么是线程进一步理解线程线程的优缺点Linux进程VS线程线程的异常 创建线程两个的接口线程的控制线程的创建线程的终止线程的等待线程取消C的线程库线程的分离如何理解每个线程都有自己独立的栈结构 封装线程接口 多线程 进程内进行资源划…

Java代码块和属性的赋值顺序

代码块 类的成员之四:代码块(初始化块)(重要性较属性、方法、构造器差一些) 1.代码块的作用:用来初始化类、对象的信息 2.分类:代码块要是使用修饰符,只能使用static 分类:静态代码块 vs 非静态…

nacos升级到2.0.3(单机模式)

前提&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud AlibabaSpring CloudSpring BootNacos2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE2.0.3 一、pom.xml文件 <parent><groupId>org.springframework.boot&…

网工内推 | 高级网工专场,上市公司,3年经验以上,HCIE证书优先

01 名创优品&#xff08;广州&#xff09;有限责任公司 &#x1f537;招聘岗位&#xff1a;高级网络工程师 &#x1f537;职责描述&#xff1a; 1、负责集团总部有线&#xff06;无线、公有云、仓库的网络规划建设与运维&#xff1b; 2、负责公有云的网络台日常上线部署、规划…

3.3 分析特征内部数据分布与分散状况

3.3 分析特征内部数据分布与分散状况 3.3.1 绘制直方图 bar()3.3.2 绘制饼图 pie()3.3.3 绘制箱线图 boxplot()3.3.4 任务实现1、绘制国民生产总值构成分布直方图2、绘制国民生产总值构成分布饼图3、绘制国民生产总值分散情况箱线图 小结 3.3.1 绘制直方图 bar() 直方图&#x…

Vue源码解析

【尚硅谷】Vue源码解析之虚拟DOM和diff算法 【Vue源码】图解 diff算法 与 虚拟DOM-snabbdom-最小量更新原理解析-手写源码-updateChildren] 文章目录 2. snabbdom 简介 及 准备工作2.1 简介2.2 搭建初始环境1. 安装snabbdom2. 安装webpack5并配置3. 复制官方demo Example 3. …

IJCAI 2023 | 如何从离散时间事件序列中学习因果结构?

本文分享一篇我们在IJCAI 2023的最新工作&#xff0c;文章分析了在离散时间事件序列上存在的瞬时效应问题&#xff0c;提出了一种利用瞬时效应的结构霍克斯模型&#xff0c;且在理论上证明了事件序列上的瞬时因果关系同样是可识别的。 相关论文&#xff1a; Jie Qiao et al. “…

基于SpringBoot的家庭记账管理系统的设计与实现

摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

数据结构之线性表

1.线性表的定义 线性表是由n(n≥0)个类型相同的数据元素组成的有限 序列&#xff0c;记作:L &#x1d44e;0, &#x1d44e;1, ⋯ , &#x1d44e;&#x1d456; , ⋯ , &#x1d44e;&#x1d45b;−1 2 线性表的顺序存储结构实现 线性表的顺序存储结构称为顺序表&#xff08;…

2023年前端面试汇总-HTML

1. src和href的区别 src和href都是用来引用外部的资源&#xff0c;它们的区别如下&#xff1a; src表示对资源的引用&#xff0c;它指向的内容会嵌入到当前标签所在的位置。src会将其指向的资源下载并应用到文档内&#xff0c;如请求js脚本。当浏览器解析到该元素时&#xff…

HyperLogLog数据结构

基数计数(cardinality counting) 通常用来统计一个集合中不重复的元素个数&#xff0c;例如统计某个网站的UV&#xff0c;或者用户搜索网站的关键词数量。数据分析、网络监控及数据库优化等领域都会涉及到基数计数的需求。 要实现基数计数&#xff0c;最简单的做法是记录集合中…

34岁出来面试,还被拒绝有多惨?

我强烈建议大家定期去参加一下外面的面试&#xff0c;尤其是BAT大厂的面试&#xff0c;不要一直闷在公司里&#xff0c;不然你很容易被这个世界遗弃。 前言 昨天&#xff0c;我们小组长奉命去面了一个34岁的测试员。 去了大概半个多小时吧&#xff0c;回来后&#xff0c;他的…

图数据库(二):Java操作图数据库

在上篇文章中&#xff0c;我们介绍了什么是Neo4j&#xff0c;什么是Cypher以及Neo4j的使用&#xff0c;今天我们学习一下如何使用Java操作Neo4j图数据库。 Cypher查询 在使用Java操作Neo4j之前&#xff0c;我们先了解一点&#xff0c;Cypher语句简单查询。 本文使用的是Neo4j…

Flutter的状态管理之Provider

Provider简介 Flutter Provider是Flutter中一个非常流行的状态管理库&#xff0c;它可以帮助开发者更加方便地管理应用程序中的状态。Provider提供了一种简单的方式来共享和管理应用程序中的数据&#xff0c;并且可以根据数据的变化来自动更新UI界面。 Provider的核心思想是将…

网络协议——什么是RIP协议?工作原理是什么?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是RIP协议&#xff1f; 二、为什么要使用RIP&#xff1f; 三、RIP用在哪里&#xff1f; 四、RIP协议的工作原理 五、总结 …