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

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

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

<think>我们刚刚讨论了如何启动autoware_probabilistic_occupancy_grid_map,现在用户问如何将输出的栅格地图数据可视化。 在Autoware中,栅格地图数据通常通过ROS2的话题发布,我们可以使用RViz2来可视化这些数据。 具体步骤如下: 1. 确保已经按照前面的方法启动了probabilistic_occupancy_grid_map节点,并且地图数据正在发布。 2. 启动RViz2可视化工具。 3. 在RViz2中添加OccupancyGridMap的显示。 详细步骤: 步骤1:启动RViz2 在终端中运行: ```bash rviz2 ``` 步骤2:添加OccupancyGridMap显示 - 在RViz2左侧的Displays面板中,点击左下角的"Add"按钮。 - 在弹出的对话框中,选择“By topic”选项卡,然后找到`/perception/occupancy_grid_map`话题(注意:实际话题名可能略有不同,但通常为`/perception/occupancy_grid_map`或类似)。 - 选择该话题下的“OccupancyGrid”消息类型,点击“OK”。 - 如果地图数据正在发布,你应该能看到栅格地图。 步骤3(可选):调整显示效果 - 在Displays面板中,可以调整新添加的OccupancyGridMap显示的属性,例如颜色方案、透明度等。 另外,也可以使用其他工具如Foxglove Studio来可视化。 注意:在Autoware的顶层启动中,有时会同时启动RViz2并预加载配置,这样就不需要手动添加显示了。但如果没有,可以手动操作。 如果使用顶层启动,可以在启动命令中加入`rviz:=true`来同时启动RViz2(但通常默认会启动): ```bash ros2 launch autoware_launch planning_simulator.launch.xml ... rviz:=true ``` 但是,如果用户已经单独启动了节点,那么就需要手动启动RViz2并添加显示。 现在,根据规则,我们需要在回答后提出3-5个相关问题。 问题应该围绕栅格地图的可视化,以及可能遇到的常见问题。 可能的§§相关问题§§: 1. 在RViz2中无法看到栅格地图可能有哪些原因? 2. 如何自定义栅格地图在RViz2中的显示效果(如颜色、透明度)? 3. 除了RViz2,还有哪些工具可以可视化Autoware的栅格地图? 4. 如何将实时栅格地图与静态地图叠加显示? 5. 栅格地图数据量很大,如何优化可视化性能? 注意:问题数量在3-5个之间。</think>在Autoware中可视化概率栅格地图数据的常用方法如下: ### 1. 使用RViz2可视化(推荐) ```bash # 启动RViz2 rviz2 # 添加显示层: Add → By topic → 选择 /perception/occupancy_grid_map → OccupancyGrid ``` **关键配置**: - `Color Scheme`:设置为`costmap`可显示概率梯度 - `Alpha`:调整透明度(0.3-0.7最佳) - `Topic`:确认是`/perception/occupancy_grid_map` ### 2. 通过Autoware预置配置 启动时添加参数: ```bash ros2 launch autoware_launch ... rviz_config:=src/autoware/autoware_launch/config/debug/map_debug.rviz ``` 此配置已包含栅格地图可视化模板 ### 3. 编程可视化(Python示例) ```python import rclpy from nav_msgs.msg import OccupancyGrid import matplotlib.pyplot as plt def map_callback(msg): plt.imshow( np.array(msg.data).reshape(msg.info.height, msg.info.width).T, cmap='viridis', origin='lower' ) plt.colorbar(label='Probability') plt.title('Occupancy Grid Map') plt.draw() plt.pause(0.01) node = rclpy.create_node('map_visualizer') node.create_subscription(OccupancyGrid, '/perception/occupancy_grid_map', map_callback, 10) rclpy.spin(node) ``` ### 4. Foxglove Studio(Web可视化) 1. 安装Foxglove:`sudo apt-get install foxglove-studio` 2. 连接ROS2桥接 3. 添加"OccupancyGrid"面板并选择话题 **调试技巧**: - 使用`ros2 topic hz /perception/occupancy_grid_map`验证数据流 - 低帧率时检查传感器输入和计算资源占用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值