Occupancy数据生成与模型实战课程即将开课!

Occupancy Network是自动驾驶感知任务中的一个非常重要角色。这种轻语义重几何的网络模型,能够更好地辅助自动驾驶系统感知free space,也是今年各大自动驾驶公司抢先量产的目标。在3D目标检测失效的范围内,能够进一步提升感知能力,形成闭环。下面让我们一起看看Occupancy是什么?为什么需要它?

为什么需要Occupancy?




自动驾驶在动静态障碍物感知领域的发展大概分为三个阶段:1)2D图像空间检测障碍物,映射到鸟瞰空间做多相机和时序融合;2)直接在BEV空间中完成动态障碍物的3D检测和静态障碍物的识别建模;3)直接在3D空间中感知占用关系,为系统规划可行驶空间。

目前2D检测方案基本被抛弃,逐渐转为BEV空间下的3D检测任务,这种方式更加友好,可以直接输出下游可用的目标。然而BEV感知也同样面临一些难解决的问题,比如截断目标、形状不规则、未有清晰语义的目标(比如挂车、树木、垃圾、以及石子等),传统的3D检测在这类场景上很容易失效。

5b8d2ea471cfacd2cd4e4a4023596236.png

那么是否可以直接对环境建模,表达为占据栅格的形式呢?不过度区分语义、更关注是否占用,是否为空。特斯拉的Occupancy Network给出了答案,国内几乎所有主流公司也快速投入研发,期望解决感知的下半场问题。

a446fbc70c741f58758a3be23a40268c.gif

b5c46cc6cde5cec1bb938cbcba7cd843.gif

当下,行业普遍把Occ作为下一代的感知范式,成为各大自动驾驶公司抢占的高地。2024年的量产车型中,几乎成了标配,无论是在行车或泊车场景,都发挥了巨大的作用。

Occ任务为什么难做?

BEV模型和Occupancy有较多相似之处,BEV的特征生成范式几乎和Occ完全相同,时序方法也完全适用。但为什么Occ任务这么困难呢?各家自动驾驶公司虽然投入了较多人力物力,但效果并不是很好。这就要说到几个关键部分:数据生成、数据优化、模型优化、模型监督等;

数据生成与优化占据了Occ任务的主要部分,和检测任务不同,Occupancy真值很难通过人工标注,需要借助3D box的位置和语义信息间接生成。那么怎么从原始点云生产出比较优质的Occ真值呢?一般认为,优质的真值需要包含以下几个部分:真值稠密化(不能太稀疏)、动静态目标不能有拖影、地面干净无误检、区分遮挡和非遮挡元素、类别划分正确、细粒度足够等等;这就涉及到前景稠密化、背景稠密化、多帧如何有效拼接?如何分割地面?如何清理地面等多个方面,实施起来难度较大,需要很多trick,很多同学训出来的模型往往误检测一大堆......

d13ea6bb140769f029f37367709e7a30.jpeg

模型的优化部分关注模型在已有数据下的性能上限提升,如何设计更好的特征提取模式,如何将2D特征有效投影到3D空间,如何把计算量较大的模型轻量化部署等,都是行业比较关注的难题

模型的监督部分关注监督模式,是直接用Occ真值监督还是通过点云监督,抑或是自监督?如果没有3D真值怎么办?能否借助NeRF完成2D层面上的监督,直接绕开3D真值?这些都是学术界和工业界比较关注的部分。

不得不说,看似简单的Occ任务,想要搭建一套完整的系统并不简单,不仅仅刚入门的小白不知道如何下手,即使是感知领域的老鸟想要快速开展起来也很难。

如何彻底搞懂Occ任务呢?

自动驾驶之心前期调研了学术界和工业界关于Occupancy Network的一些痛点和难点问题,联合了业界知名算法专家,针对数据生成、数据优化、模型优化、模型监督等多类问题展开了详述。彻底解决Occ入门难、关键问题卡脖子的痛处。

微信扫码领取,早鸟优惠券!

2587a1dc8c3833bf2a9224348de5bfaf.png

先到先得

本课程适用刚入门的小白、以及正在从事自动驾驶感知的算法工程人员、想要转入自动驾驶感知领域的同学。大纲如下:

704f87e0b9ace5e01fd4103859daa459.png

主讲老师

Kimi,清华大学博士,研究方向人工智能和自动驾驶,在TPAMI、CVPR、ICLR等国际顶级期刊及会议上发表相关论文20余篇,申请发明专利10余项,担任10余个国际期刊及会议审稿人。在自动驾驶算法设计和模型部署等方面具有丰富经验,主导10余项开源项目,其中star数过千的项目1个,过百的项目7个。

Michael, 清华大学在读博士,深耕自动驾驶感知算法设计多年,在计算机视觉国际顶会上发表多篇论文,在Occupancy感知方面有多项原创成果,独立搭建学术界首个基于环视的Occupancy开源代码库,被几十项工作引用。

课程亮点

1)从0到1带你生成和优化Occ真值数据

2)多个Occ实战代码详解,知其然知其所以然

e7bc3975e9628928724b48d7c4b1813a.png

f9fa9e420b8eb1ff3f81c4607441d307.png

62ff3833516f4b3959073dc2d637c252.png

3)彻底搞懂NeRF是怎么监督Occ任务的

83f04f0eb6a326de53b820071f641e8b.png

4)多个监督方式详解,熟悉常见的2D/3D/点云监督方案

5)丰富的大作业,让每个同学都学有所成

面向群体

1.计算机视觉与自动驾驶感知相关研究方向的本科/硕士/博士;

2.CV与自动驾驶2D/3D感知相关算法工程人员;

3.量产和预研工作需要的同学,面向L2~L4级应用;

4.想要转到自动驾驶领域的相关同学;

需要的基础

1.熟悉pytorch和python开发,一定的BEV和Occ任务基础;

2.一定的训练资源支持,建议显存在RTX3060及以上;

3.一定的线性代数和矩阵论等数学基础;

4.对自动驾驶有着充足的自信和热情,期望投入到行业潮流中;

开课时间

2024.5.28号,正式开课!离线视频教学+vip群内答疑。

扫码咨询

微信扫码领取,早鸟优惠券!

da9a8892e25d4b8444605029981ab2ef.png

欢迎咨询小助理了解更多!

0d60cab1bb8e2ca8ec16b51d6561a623.jpeg

版权声明

自动驾驶之心所有课程最终版权均归自动驾驶之心团队及旗下公司所属,我们强烈谴责非法盗录行为,对违法行为将第一时间寄出律师函。也欢迎同学们监督举报,对热心监督举报的同学,我们将予以重报!

投诉微信:AIDriver004(备注:盗版举报)

制作 Occupancy 数据集(如 nuScenes-Occupancy)通常涉及从多视角图像、激光雷达(LiDAR)和/或其他传感器数据中提取 3D 空间中的占据状态(Occupied、Free、Unknown)。以下是制作 Occupancy 数据集的一般方法和流程: ### 数据采集预处理 1. **传感器数据采集** 收集来自多个传感器的数据,包括: - 多视角相机图像(RGB图像) - LiDAR点云数据(提供精确的3D几何信息) - 车辆姿态和标定参数(用于坐标变换) 2. **数据同步标定** 确保图像、LiDAR 和车辆姿态数据在时间上同步,并完成传感器之间的空间标定(如相机内参、外参、LiDAR 到相机的转换矩阵)。 3. **点云投影语义标签映射** 将 LiDAR 点云投影到图像空间,结合图像的语义分割结果,为每个点云点赋予语义标签(如行人、车辆、建筑物等)。 ### 体素化占据状态标注 1. **3D 体素划分** 将场景划分为规则的 3D 体素网格(Voxel Grid),通常设定体素大小(如 0.4m × 0.4m × 0.4m)和空间范围(如 x: [-51.2m, 51.2m],y: [-51.2m, 51.2m],z: [-3m, 3m])。 2. **占据状态标注** 对每个体素判断其是否被物体占据: - **Occupied(占据)**:包含至少一个 LiDAR 点或被语义图像覆盖。 - **Free(自由)**:位于传感器视野内但未被任何点或图像像素覆盖。 - **Unknown(未知)**:超出传感器视野范围或遮挡区域。 3. **多尺度体素处理** 如引用中所述,可先生成低分辨率体素特征(如原始体素大小除以 S=4),再通过细化策略(如切割为 8 个子体素)进行精细化预测。 ### 特征融合模型训练 1. **图像特征提取投影** 使用 2D 图像模型(如 ResNet)提取图像特征,并将图像特征通过相机参数反投影到 3D 体素空间。 2. **几何特征提取** 利用 LiDAR 或图像深度估计获取几何信息,结合体素特征进行几何建模。 3. **特征融合预测头** 将图像投影得到的语义特征体素几何特征在特征维度上拼接,输入全连接层(FC)或 Transformer 模块,进行占据状态预测。 ### 示例代码片段(体素化处理) ```python import numpy as np def voxelize_points(points, voxel_size, grid_range): """ 将点云数据体素化 :param points: Nx3 的点云数组 :param voxel_size: 体素尺寸 (x, y, z) :param grid_range: 体素网格范围 [(x_min, x_max), (y_min, y_max), (z_min, z_max)] :return: 体素索引和占据状态 """ # 计算每个维度的体素数量 dims = np.array([(grid[1] - grid[0]) / vs for grid, vs in zip(grid_range, voxel_size)], dtype=int) # 将点坐标转换为体素索引 indices = np.floor((points - np.array([g[0] for g in grid_range])) / voxel_size).astype(int) # 过滤掉超出范围的点 valid = np.all((indices >= 0) & (indices < dims), axis=1) indices = indices[valid] # 初始化占据状态 occupancy = np.zeros(dims, dtype=np.uint8) occupancy[tuple(indices.T)] = 1 # 1 表示占据 return occupancy ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值