Occupancy感知算法如何获取数据标签?如何编码?任何解码?

作者 | FudanMagicLab  编辑 | 自动驾驶与AI

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

ADAS巨卷干货,即可获取

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

后台回复【OccupanyNetwork】获取Occupany Network相关论文干货资料!

PART

01

How to get Occupancy Label?

1.1

[OpenOccupancy] AAP

{3D目标检测label, 3D语义分割label}生成{occupancy label, semantic label} of voxel,AAP(Augmenting And Purifying) 的流程:

  • Step 1: 将多帧静态点云变换到世界坐标系下,将多帧移动的点云变换到相应 bounding box的坐标系下,然后将它们栅格化为初步的  ,对于一些没有语义标签的点云给一个pseudo的semantic label (self-training)。

  • Step 2: 在  数据上训练一个多模态的coarse的  (不计算之前无语义点云的semantic loss),   的 coarse occupancy label 由预训练模型提供。

  • Step 3:   , 用  填补  中空的格子。

  • Step 4: 人工purify一下前面生成的occupancy label。

d51d554e90959e2c85c54d7b1d83b531.png

1.2

[SurroundOcc] Dense occupancy ground truth generation

{3D目标检测label, 3D语义分割label}生成{occupancy label,semantic label} of voxel

  • Step 1: 根据目标检测label将点云分为static和dynamic,并分别累计多帧静态点云和动态点云。

  • Step 2: 累计的多帧点云还存在hole,因此用泊松重建的方法得到更稠密的volumetric occupancy label。

  • Step 3: 没有语义信息的grid选择距离最近的带有语义标注的grid作为自己的semantic label。

664abd47f584d83ea034314764d9ec86.png

PART

02

Sensor data → OccFeature 

(Encoder)

2.1 [TPVFormer] HCAB(Hybrid Cross Attention Block) + HAB(Hybrid Attention Block)

2483eabf57fe10653c63f7f9d79df985.png

  • Input: Multi-RGB

    Output: TPV Feature

    (这篇文章不涉及gt occupancy label,是相对早一些的工作,只用点云语义信息作为标注,但是能展示出很好的occupancy推理效果)

  • Step 1: Employ an image backbone network to extract multi-scale features for multi-camera images.

    Step 2: 使用cross-attention将2D feature lift 到 3D feature。

    Step 3: 使用HyBird-Attention跨视图融合feature。

    (Cross-Attention就是在不同尺度上的特征层做self-atten,HyBird-Attention是TPV三个特征之间做self-atten,且全部使用deformable transformer来减少计算量。)

2.2 [OpenOccupancy] 

点云/Multi-RGB/(点云+Multi-RGB) → Feature

8c9b370e643fb41b868f4335080474b3.png

  • Lidar-based pipeline

    • Input:   

      Output:   

    • Step 1: 雷达点云经过3D sparse Convolution得到voxelized features。

      Step 2: voxelized features经过3D Convolution得到multi-scale voxel features (  )。

      Step 3:多尺度的feature经过上采样得到:

                (  )。

  • Camera-based pipeline

    • Input: Multi-RGB

      Output:   

    • Step 1: Resnet提取6张图的feature  

      Step 2: 使用2D to 3D transform将2D feature变换到车身坐标系下的3D feature。

  • Multi-model based pipeline

    • Input: Multi-RGB + Lidar PointCloud  

      Output:   

    • Step 1: Adaptive Fusion Module

        都过一个3D卷积计算这俩的类似权重关系的值  

      Step 2: 类似加权求和

  • 3D Sparse Convolution:

    由于点云是稀疏的,3D稀疏卷积是通过建立哈希表,保存特定位置的计算结果实现卷积操作: (1) 依据常规卷积流程记录有值生成的output并记录相应的位置索引作为  ,每个离散的点都对应一张  , 将它们取并集,得到  哈希表。(2) 建立Rulebook: Rulebook主要实现输入索引到输出索引的映射。记录离散的输入到底只需要卷积核的哪个参数,并将对应的offset写入GetOffset()表中,整体实现的就是根据输入的索引找到其在卷积核中对应权重的位置索引的流程。

2.3 [SurroundOcc] ResNet101 + 2D-3D spatial attention

f32304201d9c6dab701d416b5795830b.png

  • Input:   

    Output:  

  • Step 1: N张图分别过Resnet101提feature, 提M个Level,最终得到M×N的features(FPN)。

    Step 2: 设计了一种 2D-3D 类似U-Net的结构,把UNet的Conv Block换成了空间注意力(Spatial Attention), 将M×N的 feature 变成 3D feature, 记作volume feature。(在每一个Level作spatial cross attention)

    Step 3: 将输出的3D volume feature(H×W×Z) upsample得到多种scale的3D volume feature: {H×W×Z, 2H×2W×2Z, ... 8H×8W×8Z}

  • 空间注意力(Spatial Attention):

    类似于BEVFormer中的空间注意力, 由于多摄像头3D感知的输入规模很大,普通多摄像头注意力的计算成本非常高。因此使用基于 Deformable attention的Spatial Attention模块:

2.4 [OccFormer] LLS’s method + Dualpath Encoder

4f19d1fdc4405b3a58e89c7fb393c7c4.png

  • Input:   

    Output:   

  • Step 1: Image Encoder提2D features    (N个相机,C个Channel)

    Step 2: Image-to-3D transformation: 将2D feature lift到3D volume(借鉴了LLS的方案)。

    Step 3: 多帧2D feature得到上下文信息  与深度分布,最终生成  。

PART

03

OccFeature → Occupancy 

(Decoder) 

相关文章都没有详细介绍这一部分,我从文章中了解到的信息:

  • OpenOccupancy: 只在图片中写了个FC作为occupancy head。

  • TPVFormer: 为了预测semantic occupancy,对TPV feature求和以后,过一个轻量级的occupancy head

PART

04

Summary

  • Sensor→ Feature:

     提取点云feature的工作较少,用的是3D稀疏卷积。分别提取多图像feature大多使用的ResNet提取multi-scale的2D feature,主要区别在于之后“如何将2D feature们lift成3D feature”与“如何融合每张图的feature”: (1) TPVFormer并没有3D Feature,是用3张BEV feature(TPV Feature)存储的,同时在三张feature间做了attention; (2) SurroundOcc的方案是“UNet+Spatial Attention”, UNet的多尺度跳跃连接可以帮助网络学习低级细粒度特征,多尺度的监督学习可以帮助模型更好的收敛; (3) OpenOccupancy的方案是“2D to 3D transform”,这个是BEVFusion中的方案; (4) OccFormer的方案借鉴了LLS的方法,得到了3D Feature Volume;

  • 资源消耗:

    method
    train
    infer(1600×900)
    SurroundOcc
    8×3090,
    2.5days
    1×3090,
    memory: 12.4G
    latency: 0.73s
    TPVFormer
    ---
    1×3090, 
    memory: 5.1G,
    latency: 0.32s
    OpenOccupancy
    8×A100
    20~40h
    ---

参考文献

[1] MonoScene,CVPR2022: https://github.com/astra-vision/MonoScene

[2] SurroundOcc: https://github.com/weiyithu/SurroundOcc

[3] TPVFormer,CVPR2023:https://github.com/wzzheng/TPVFormer

[4] OpenOccupancy: https://github.com/JeffWang987/OpenOccupancy

[5] Semantic KITTI: http://semantic-kitti.org/

[6] OccFormer: https://github.com/zhangyp15/OccFormer

[7] BEVFusion,ICRA2023: https://github.com/mit-han-lab/bevfusion

(一)视频课程来了!

自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

284950642fce29fb4b818ba73a8db0d9.png

(扫码学习最新视频)

视频官网:www.zdjszx.com

(二)国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

4a0835085483d711cb174a2a63659193.jpeg

(三)自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

e4db18f5425cb9b2e54e585b9632e61e.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要测试自己的数据集,可以按照以下步骤使用occupancy_networks进行操作: 1. 数据集准备:首先,需要准备自己的数据集。数据集应包含3D物体的点云数据以及对应的表面网格数据。数据集可以从现有的3D模型数据库中获得,或者通过扫描实际物体获得。确保数据集包含足够的物体样本以及它们的形状、尺寸、姿态等多样性。 2. 数据预处理:对于点云数据,可以使用现有的点云处理软件(如CloudCompare、MeshLab)进行滤波、对齐和下采样等处理,以确保数据的质量和一致性。对于表面网格数据,可以使用网格处理软件(如QGIS、MeshLab)进行一些处理,如去除不必要的顶点、边缘和面,以及修复可能存在的孔洞和噪声。 3. 数据划分:将数据集分成训练集、验证集和测试集。通常,训练集用于模型训练,验证集用于调整模型的超参数,测试集用于评估模型的性能。确保每个集合中的物体样本具有多样性和均衡性,以避免对特定样本过拟合。 4. 数据格式转换:将点云数据和表面网格数据转换成occupancy_networks可接受的格式。occupancy_networks通常接受3D点的坐标信息和一个二值标记,表示点是否在物体内部。可以使用Python库如Open3D或trimesh来读取和转换数据格式。 5. 模型训练与测试:使用occupancy_networks代码库提供的训练与测试脚本,按照其文档说明进行模型训练和测试。在训练阶段,指定训练集路径和参数,训练网络进行物体的隐式表示学习。在测试阶段,使用测试集评估网络对输入数据的预测准确性。 6. 结果评估:根据测试集的标签和网络的预测结果,可以计算指标如准确率、召回率、F1分数等来评估occupancy_networks在自己的数据集上的性能表现。同时,可以可视化预测结果,比较真实标签和网络预测的差异。 通过以上步骤,可以使用occupancy_networks对自己的数据集进行测试,评估模型在物体重建和隐式表示学习任务上的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值