首页 > 其他分享 >介绍自动驾驶的感知任务--3D Occupancy Semantic Prediction

介绍自动驾驶的感知任务--3D Occupancy Semantic Prediction

时间:2024-07-15 21:30:18浏览次数:17  
标签:Semantic -- Prediction Occupancy nuScenes Autonomous 3D

介绍自动驾驶感知任务中的--3D Occupancy Semantic Prediction

什么是Occupancy

自动驾驶领域,按照传统会分为perception, prediction, planning和control四大部分,有时会加上map。

其中最为重要的就是perception,也是目前自动驾驶的瓶颈所在,如果感知算法给了下游任务错误的视觉信息,那么整个自动驾驶技术也无从保证了。

感知任务的输入格式主要有三种:相机,激光LiDAR,声波Radar。近几年纯视觉(只有相机输入)的感知算法异军突起,如何从相机的输入中获得准确的深度信息,一直是一个难题。

而Occupancy是自动驾驶感知任务一种近几年非常热门的输出格式。

Occupancy将这个场景划分成正方体网格,每个网格被赋予语义标签,即,标注这个网格内的物体属于哪个类别,或标注为没有被占用。

为什么需要Occupancy

在很长一段时间里,bounding box(简称为bbox)都是非常主流的输出格式。就是给目标物体打上一个3D立方体的标注框。我们一般称这种任务为Object Detection。

但是,这种输出格式也有一些问题:

(1)3D标注框的这种表示消除了物体的几何细节,如挖掘机具有从主体突出的机械臂,bounding box在标注这类物体时就没有办法有很准确的表示;

(2)不常见的类别,如街道上的垃圾桶,往往被忽略,在nuScenes和Waymo数据集中都没有标记,因为开放世界中的对象类别不能被广泛枚举。这些在Occupancy任务中会被归结为General Object(GO)类。

于是就有了Occupancy的提出,他是最近一种非常火热的输出格式,相当于是把颗粒度从object-level给精细化到了voxel-level。

但是Occupancy在这些有点上,也有一些局限性:

(1)相比于Object Detection这个任务,丢失了object或者说instance的概念,没有办法做运动追踪和动态物体的运动补偿;

(2)整个场景很大,但是被占据的位置非常少,监督很稀疏,加大了训练难度;

(3)想要更小的分辨率,就会有巨大的计算量;

(4)还是没有open vocabulary,没有办法穷举所有的uncommon categories。

区分和BEV的概念

BEV是Bied's Eye View的缩写,意为鸟瞰图。并不作为一种感知任务的输出格式,更多的是作为一个特征空间。但是这个特征空间是2D的,每个位置在z轴方向上的信息被隐式地蕴含在了channel这个维度里面。

RGB的相片和点云都可以通过经典的backbone得到BEV这个特征空间上的特征变量,然后用上不同的decoder也可以得到不同的输出,比如map, bounding box, 3D Occupancy.

主流的混合传感器,或者多下游任务同时训练,都会使用BEV作为统一地特征空间,因为这种特征非常灵活。

Occupancy Dataset

Occupancy的真值(ground truth,简称gt)生成,一般是选定一个有相机和雷达数据的自动驾驶数据集,然后有一套复杂的pipeline能够完成这件事情,具体可以参考Occ3D的pipeline。

以下是目前主流的Occupancy数据集,分别来自以下几篇论文,括号内部写的是基础数据集和发表的会议:

主流的Occupancy方法

一些Object Detection上的主流方法可以在更换一个decoder后用来做Occupancy这个任务上使用,比如BEVDet, BEVFormer, TPVFormer, SOLOFusion, FB-BEV等等。

一些我认为Occupancy中重要的方法论文,括号内部是发表的会议:

还可以参考这两篇survey,括号内是挂在arxiv上的日期:

标签:Semantic,--,Prediction,Occupancy,nuScenes,Autonomous,3D
From: https://www.cnblogs.com/yzc5827/p/18304001

相关文章

  • C# 1.方法
    方法组成: 1.修饰符:public一般定义共有的2.方法返回值:void无返回值;非void,可以写成其他类型例如int,float,string,string[]等3.方法名:Add大驼峰命名法,每一个首字符大写。4.参数列表:两个参数直接使用逗号隔开inta5.方法体:【】//定义类publicclassText{publ......
  • LogRotate 切割 Nginx 日志
     发布于 2023-12-0410:20:327140举报文章被收录于专栏:码农UP2U一直以来做日志切割都是使用shell+crontab来搞,shell脚本可以在网上找到各种版本的,改改就用了,懒省事。这样的做法很传统,却忽略了系统的给我们提供的优秀的工具——logrotate。......
  • vue2和vue3的生命周期对比?
    Vue2和Vue3在生命周期钩子函数方面存在明显的区别,这些区别主要体现在命名、新增钩子函数、触发时机以及API的使用方式等方面。以下是对两者生命周期的详细对比:一、命名变化Vue2:生命周期钩子函数的名称通常以"before"、"created"、"mounted"等前缀命名,如beforeCreate、crea......
  • 定积分之分部积分法
    brief设函数\(u=u(x)\)与\(q=q(x)\)在\([a,b]\)上分别具有连续的导数:\(u'(x)\)与\(q'(x)\),则有分部定积分公式:\[\int_{a}^{b}udq=[uq]_{a}^{b}-\int_{a}^{b}qdu\]instance0\[\begin{align}\int_{0}^{\frac{\pi}{2}}x\cos(x)dx=?\\\......
  • 转型Web3开发第二课:Dapp开发入门基础 | 01 | 安装MetaMask
    前言完成了《转型Web3开发第一课》之后,得到了不少读者的认可,很多都在问什么时候开始下一课,近期终于抽出了时间开始搞起这第二课。这第二课的主题为「Dapp开发入门基础」,即想要转型做Dapp开发的人员,不管是做前端开发、后端开发、智能合约开发,都需要掌握的基础知识。这......
  • Day11(二叉树) | 二叉树的递归遍历 二叉树的迭代遍历 二叉树的统一迭代法 二
    二叉树的递归遍历终于来到了递归!!!递归是进入动态规划的第一步,有部分的递归完全可以写成动态规划!这里可以移步到左程云的视频观看.递归的步骤:确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返......
  • 0基础学python-12:命名空间和作用域
    目录前言命名空间(Namespace)特点和用途:Python中一般有三种命名空间: 命名空间的查找顺序:作用域(Scope)Python的作用域一共有4种: 作用域查找顺序:代码实例:总结:  前言        命名空间(Namespace)和作用域(Scope)是程序设计中重要的概念,它们有助于组织和管......
  • Redis深度解析:从基础到高级特性,剖析关键技术
    一、关于RedisRedis介绍REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统,是跨平台的非关系型数据库。Redis是一个开源的使用ANSIC语言编写、遵守BSD(开源协议)协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value......
  • 牛客TOP101:反转链表
    文章目录1.题目描述2.解题思路3.代码实现1.题目描述2.解题思路  简单粗暴的写法,就是从头到尾挨个将所有结点的指向翻转即可。需要注意的是,翻转之后会失去原有指向的结点,所以需要提前保存。  具体做法就是,使用cur标记当前结点,代表这我们将要翻转这个结点......
  • RabbitMQ复习
    消息中间件的作用:(1)异步处理(2)应用解耦(3)流量削峰消息中间件的缺点:引入了新的东西,也就增加了新的故障点。比如消息中间件挂了,影响系统的可用性。两种框架:JMS和AMQP最大的区别是JMS是是javaapi,对跨平台的支持较差,但在纯java技术栈内首选。AMQP是跨平台的,序列化方式选json,......