一文看尽Occupancy!面向小白入门的Occ一百问~

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

>>点击进入→自动驾驶之心【占用网络】技术交流群

问题1

一个关于说从入门到精通的入门的点。就occupancy的数据格式而言,PPT讲了它是基于体素。但是如果我想修改occupancy到其他设备要改这个范围跟格子大小的时候,应该怎么改呢?这个xyz具体是怎么组织的,位置索引里是中心点还是端点?这些都没有提过。

修改范围和格子大小,是在config里面直接改就行,xyz的组织方式,如果是自己生成数据的话,要先确定xyz轴的坐标范围,以及voxel size,这样就能唯一确定一帧对应的体素数量。然后按一定顺序去存储和读取voxel的占用和语义信息,注意存储和读取保持一致。比如沿着z方向一层层读取x-y平面的voxel,x-y平面又从x和y坐标最小的地方开始(举个例子,不一定要这样保存)

如果您需要更系统的路线,欢迎学习:Occupancy从入门到精通全栈课程

问题2

相机我可以理解为体素投影到图像上只学习能投影上的,lidar的话如果不是机械雷达该怎么算呢?

标签是如何标注的?地面真相标签的占用来自累积LiDAR扫描与人类的注释,我们注释的占用在自我坐标系。如果一个体素反映了一个LiDAR点,那么它被分配为与LiDAR点相同的语义标签;如果激光雷达光束通过空气中的体素,则体素被设置为自由的;否则,我们将体素设置为未知,或未观察到的。这是由于LiDAR的稀疏性或体素被遮挡,例如被墙遮挡。在数据集中,【mask_lidar】是一个0-1的二进制掩码,其中0表示未观察到的体素。

问题3

请问一下,我在运行surroundocc训练指令的时候找不到chamfer这个包,但是我安装的时候现在安装了这个包,然后我pip list也没找到这个包,好像是按照在python里面了,我去找了网上的方法说重新编译,但是我编译了几次都不行,然后我尝试直接pip安装这个包,但是好像只能通过代码来安装,pip也失败了。

chamfer是算chamfer distance的,衡量occupancy预测和真值之间的距离,我看surroundocc里面有,你代码库本身编译了吗?docs/install.md里面有说明

问题4

可以解答一下,关于3D语义分割和Occupancy两种评价方式的区别吗,真值的区别,以点来评价还是以体素来评价

3D语义分割:评价通常基于点级别,即评估模型对每个点的分类准确性。

Occupancy:评价是基于体素级别,即评估模型在确定每个体素是否被占据方面的准确性,3D语义分割:真值通常是针对每个点的标签,这些标签代表了每个点属于的类别。

Occupancy:真值在这种情况下通常是基于体素,每个体素或者点云块儿被标记为占据或空闲。

问题5

以激光雷达语义分割结果生成真值的多模态occ和ssc的具体区别在哪里,有没有加visible mask吗?我的意思是如果把free作为一个语义的话这两个任务是不是都是在对所有体素进行分类,还有一个问题想请教一下小助教,就是一个scene里面往往激光雷达也只能扫到一部分,那么这样一辆车可能也就只有四分之三的体素标记为车,这样在大量数据的训练下网络能补全出完整的车辆吗?

主要区别在于输出的信息类型,occ通常只关注是否有物体占据空间,ssc还要求提供占据空间物体的具体类别,只是侧重点不同,3D检测中如果“free”作为一个类别,那么空区域就会被分为“free”,occ中是先把“free”区域定义为0,然后附上颜色,还取决于你模型的架构,一般都是学习到部分可见车辆的典型特征,后面就是要么更具之前的学习类容推断出不可见部分,要么就是前后帧关联推断这一帧

问题6

请问将bevfusion的3d检测头替换为占用和语义头可行吗?

这个本来就可以,那你直接把占据空间压缩成BEV空间就可以了,语义本来就有

问题7

这些OCC真值,和nuScenes里面的点云标注文件的区别是不是只是稠密跟稀疏的区别,那在训练的时候,还会读取nuScenes里面的bin文件吗,那如果我不生成GT,直接把nuScenes里面的bin转成npy当做OCC真值来训练可以吗?我还想问如果想输出密集的占用预测,是不是应该用带语义分割的雷达点云数据合并生成密集的占用真值作为监督?

也行,不过nuscenes本来就稀疏,再加上单帧,指标有多高不好说,针对surroundocc吗,针对nuscenes,那怎么转成npy真值呀,OpenOccupancy能转吗,npy不就一种格式么,想怎么转都行,bin文件格式搞清楚,写个脚本就行。可以的,这样预测准确性可以提高,但是也要取决于你真值生成得是否准确。

问题8

能不能把3d occ的算法几何头和语义头分开训练呢?如果几何头训练完换一个场景还能进行准确的占用预测吗?课程里面提到3d occ的一个优势是把几何和语义解耦开,老师能不能具体解释一下这句话?

没有见过分开训练的,但是见过解耦开,分两个分支设计模型的,几何分支,语义分支。SSC领域的论文很好的探讨了这个问题 你可以从头看一下,你可以简单理解,我说的解耦的意思是:原本是由一个层同时学习几何和语义特征 ,现在我用一个层专门学习几何特征 一个层专门学习语义特征 这两个层是并行的 然后将学到的两种特征做融合 这就是所谓解耦,群公告里有我整理的OCC paper list,OCC仓库:

https://github.com/autodriving-heart/Awesome-occupancy-perception

问题9

单目和环视的occ除了输入不同以外方法上有什么区别吗?

没什么本质区别,输入的不同,单目由于信息量更少,还有就是训练数据少,比较难做,前视上作为辅助用的多,也可以取个折中,比如用3目,三个前方的相机。

问题10

SurroundOcc在计算loss的时候,需要修改occ_size吗,如果换了范围的话,改了范围之后维度不对了,转真值的时候我也改了范围的,不知道训练的时候,除了配置文件要改范围,还有没有其他地方要改,老师给的数据

没了,mmdet的代码,写得好的话就是应该只改配置文件和脚本,高度模块化了,需要修改一下volume,和occ_size要对应修改

问题11

请问一下,怎么把surroundocc的可视化调大一点,那个画板空一大片,调小了voxel也跟着小,有什么方法能把可视化的体素调大点

MeshLab

问题12

Occ的优化是从哪些方面做的?

各种加数据,纯视觉bev这种方法,弱点就在于augmentation不是那么好加,所以很吃数据

问题13

想请教一下每个视角的可视化改怎么做呢?或者有没有什么项目也是这样做的。我现在得到了npz文件用open3d可视化只能拖拽了看,没法得到每个视角的occ结果

写脚本,可视化之后固定视角继续播放,你可以设置先打卡一个文件,调整到对应的视角,然后关闭并保存视角参数,随后连续播放

问题14

想请教一下有没有用3d occ和激光雷达点云做融合的方案

openoccupancy

问题15

请问有没有轻量实时的occ模型,想把这个当做base code

可以去看看suroundocc、bevdet4d_occ或者openoccupancy的camera-only,单阶段的那个

问题16

关于占用网络,有没有类似nuScenes Tasks那样的Leaderboard?

OpenOccupancy: A Large Scale Benchmark for Surrounding Semantic Occupancy Perception

问题17

两位老师早上好,我这边是做封闭场景重型机械的应用,目前用的是纯Lidar的方案,想在Lidar的基础上把Occ链路打通,所以有些问题想请教

问题:1. 老师课程中提及,Occ如果把voxel size无限缩小, 那就是和点云是同一表示, 请教一下老师, 如此看来, 纯视觉Occ和点云的栅格化地图有什么区别?

2. 纯视觉Occ是否能提供障碍物的深度信息/类别信息? 课程中老师提及汽车做行车安全不需要知道障碍物类别,只需要知道能不能撞,几何有没有占用. 那如果对不同的障碍物避障逻辑不同(比如人是直接刹停,其他车辆选择绕障),Occ是否可以满足这个需求?

3. Lidar+Camera的Occ方案 和 纯视觉Occ方案相比 有哪些优势?

4. Lidar+Camera的Occ方案 和 点云语义分割/点云目标检测 相比有哪些优势?

回复:

1.Occ表示该格子被占据的概率,点云栅格化地图每个栅格保存的是 Height 信息或点的数量,直接表示场景结构

2.纯视觉Occ能提供障碍物的深度信息/类别信息,这些信息一般都来自数据集的真值训练

2.1对不同的障碍物避障逻辑不同,这类问题归为控制类,个人认为,比如校车旁边支出来一个”停“的牌子,后期可以更具特有因素归为车体的voxel里面

3.Lidar的距离数据可以帮助校正和验证视觉算法估计的Occ概率,Lidar不依赖光照,当视觉算法在光照不足等情况下效果下降时,可以利用Lidar的数据进行补偿

4.1Occ方案更全面表示复杂环境,Occ提供了对空间结构和语义的整体表达,更适合规划导航,点云方法存在遮挡区域等空洞

4.2点云分割/检测需要后续处理来链接单个/多个检测,而Occ则减少了后续处理的工作量

4.3但是点云分割/检测可以提供更细粒度的语义理解

问题18

想请教一下SSC和3D Occ之间的差异

SSC关注精确补全图像背后的完整3D结构和表面细节,需要大量带精确3D ground truth的数据进行监督训练。而Occ更简单,只关心空间占据情况,对表面形状和细节建模较少,更易获得的2D监督信号进行训练,SSC之前了解过,实时性的需要是不是不满足,这点我没有深究下去!

问题19

最近在看openocc模型,作者把lidar camera融合的过程中是不是并没有用lidar做深度监督呢,感觉是直接把两个模型特征相加,两个传感器的特征相互没有关系,那如果其中一个分支预测出现偏差,这种自适应融合能够纠正吗?

对,虽然LiDAR和相机的特征在融合过程中没有直接的深度监督关系,但通过特征融合,两种传感器的信息可以相互补充和增强,从而提高周围占据感知的性能,你从他的实验就能看出如果其中一个分支的预测出现偏差,自适应融合模块无法自动纠正这种偏差,相加的方式只是简单地将两个分支的特征进行叠加,而不会对特征进行调整或修正,它的作用是通过整合多模态特征来提高周围占据感知的性能。

问题20

occupancy 数据集只能通过segmentation 结果生成吗?在工程上,怎么让标注人员标注呢?先将点云生成voxel,然后再标注吗?

1,现在基本都是根据segmentation 结果生成

2,你可以让标注人员标注体素单元中指定占用或非占用来进行标注

3,用SAM标注图像,然后相机和点云做配准,投影到点云体素上

问题21

想问下目前主机厂对于Occupancy Prediction持什么态度,目前的进展是什么,实测的话一般部署在什么设备上

实测部署在orin上,这个是必然要上的

问题22

做深度学习,两块12g的2060好,还是1块12g的3060好

3060,你两个卡还要买双x16的卡槽的主板,且3060的Ampere架构,CUDA核心数量是3584个,而RTX 2060只有1920个,而且很多现在代码有cuda版本限制,你买20系列的还要去改cuda代码适应你的版本

问题23

请问,我又同一区域不同尺度的点云(无人机获取的30m与50m),需要制作高精度地图,我应该先进行点云拼接呢,还是单独先作点云语义分割呢?

建议先进行点云拼接,然后再进行语义分割,拼接的目的是将来自同一区域但不同尺度的点云数据合并成一个统一的、连续的点云模型,可以确保在进行语义分割时,所有相关数据都被考虑在内,从而提高分割的准确性和地图的完整性,当然你要多考虑点云数据的质量、密度以及拼接和分割算法的性能

问题24

大家知道自动驾驶落地的定位技术常用的有哪些啊,尤其是传感器只有GPS,imu和双目的话

gPTP 提供精准时钟,RTK service ,底盘也许有里程计GVINS了解下,大疆的livox激光雷达几千块钱,也可以考虑,VIO的性能还是挺有限的,ORB-SLAM3是比较好的了!

问题25

特斯拉这种类似mesh的车机渲染是occ后处理嘛?大概多高分辨率能有这个效果呀?

个人觉得是学的sdf,光occ后处理达不到这个效果

自动驾驶之心汇总的一百问也会上传至『自动驾驶之心知识星球』,欢迎加入!

d179b730900a9fa2c9639f50cc8950f5.jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值