专栏名称: 自动驾驶之心
自动驾驶开发者社区,关注计算机视觉、多维感知融合、部署落地、定位规控、领域方案等,坚持为领域输出最前沿的技术方向!
目录
相关文章推荐
哈佛商业评论  ·  无论处在人生哪一站,成为自己永远来得及 ·  21 小时前  
哈佛商业评论  ·  职场大变局来了,你还在按部就班工作吗? ·  2 天前  
鹤城发布  ·  突然公告!他确认辞职 ·  2 天前  
鹤城发布  ·  突然公告!他确认辞职 ·  2 天前  
51好读  ›  专栏  ›  自动驾驶之心

Sparse4D,一文带你了解稀疏的BEV感知!

自动驾驶之心  · 公众号  ·  · 2025-01-23 07:30

正文

作者 | Malignus 编辑 | 自动驾驶之心

原文链接:https://zhuanlan.zhihu.com/p/15362624581

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

戳我-> 领取 自动驾驶近15个 方向 学习 路线

>> 点击进入→ 自动驾驶之心 BEV感知 技术交流群

本文只做学术分享,如有侵权,联系删文

许久没有更新了,自从开始工作以后愈发的困在了Corner Case和各种各样的琐事,闲言少叙,这篇文章将用尽可能简洁的语言,帮助各位大佬了解地平线的Sparse 4D系列工作。(PS:对于Sparse4D中,不同帧间的信息不再依赖各自帧内的ego2global部分就不做介绍了,大佬工作的代码写的很清晰,有这样一个概念即可~)

Summary

  • 环视障碍物的检测,将不依赖显式的稠密BEV特征进行学习。
  • 基于K-Means的初始化Anchor, 让模型拥有更快的收敛速度,且Query的可解释性更好
  • 引入去噪过程,模型可更快收敛。
  • 考虑3D检测特点,引入质量估计
  • 以检测结果为基础,可出Tracking结果,不依赖BEV下的多目标追踪后处理

Methods

接下来,我们将分开两部分介绍模型结构部分;分开两部分的原因,是因为Denoising并不影响整体模型训练的pipeline,拆开两部分,可更好帮助各位大佬理解整体工作。

  1. 介绍模型整体的forward流程,包括Loss的设计
  2. 介绍Denoising的使用

Overall Pipeline

一言以蔽之:模型将基于query_based的instance_feature和anchor,进行整体的稀疏BEV感知;图像特征将不进行显式的深度信息编码,模型基于anchor的中心点,通过offset的学习,将图像特征引入至instance_feature。

接下来将基于开源的代码,进行尽可能简短的模型forward pipeline介绍。

  • instance_feature和anchor起始存储于instance_bank内。anchor( ,11)的初始化,是基于GT的kmeans计算得到。对应的11维信息:[x,y,z,l,w,h, , , , ,state]. 其中, 所有anchor的 速度为0 yaw角为0,最后一维信息可不关注,仅与denoise相关 。模型在训练过程中, anchor会伴随着模型的学习更新。但 在每一个iter的forward开始,instance_bank内 取到的初始化当前帧instance_feature都是全0(即instance_feature永远依赖于当前图像特征的提取,和后续的注意力计算)。
  • 在通过Transformer进行forward过程中,operation主要包括:deformable, ffn, norm, refine, temp_interaction, interaction在内的六部分。其中,ffn, norm很好理解,重点介绍deformable, refine, temp_interaction, interaction四部分。
    • 单帧decoder: deformable+FFN+Norm+Refine
    • 多帧decoder: temp_interaction+interaction+norm+deformable+ffn+norm+Refine
    • 模型整体包括两类decoder:

其中,Deformable模块负责将图像特征引入;Refine模块负责基于instance_feature获取感知结果;temp_interaction负责对当前帧特征信息与历史特征信息进行融合; interaction负责将当前帧特征进行自注意力计算。

  • deformable(图像特征引入):前面提到,Sparse4D中,模型将不在学习稠密的显式BEV特征。图像特征的使用主要依赖该module。该模块的作用, 是将图像特征基于anchor和采样点,对instance_feature进行更新(即引入图像特征)。
  • deformable依赖的输入包括instance_feature, anchor, anchor_embed, feature_maps与projection_mat. 最终输出的结果将用于更新instance_feature.
  1. instance_feature[B, ,256]: 当前帧的instance feature, 模型在每一轮forward时,第一次进入deformable中的instance_feature结果都是全0,是通过若干次调用deformable module的过程中,图像特征的不断引入堆叠才得到最终的instance_feature.
  2. anchor:[B, ,11]当前帧的anchor,即可能会存在于当前帧的框体的位置和对应大小的预设。
  3. anchor_embed:[B, ,256]当前帧anchor对应的position_embedding。

图像特征引入模块的forward流程五步走:

  1. 获取key_points[B, , ,3]:基于anchor_embed求解anchor中心点的对应位置偏移量,与anchor相加后得到key_points。此处的 指代的是anchor中心点对应采样在图像中采样点的个数,论文中 =8.
  2. 获取多尺度图像特征采样的权重weights[B, , , ]:对已有的instance_feature分别引入框体的位置编码信息(anchor_embed)和相机参数的编码信息(基于ego2img的全连接层进行的编码信息). 并通过全连接层和softmax层,以及15%的随机掩码,得到weights。论文中 =8, =8( 的引入理解为multi-head attention就好)。
  3. 获取采样后的图像特征features[B, , ,256]: 基于ego2img, 将key_points的点投影到图像特征中的归一化位置(在[0, 1]位置内)。通过grid_sample采样每个key_points在图像上的对应特征。对于采样点经ego2img投影后不在图像范围内的情况,对应features为0。
  1. refine(基于instance_feature和anchor,基于全连接层得到感知结果):

  2. 整体输入依赖instance_feature, anchor与anchor_embed,最终的输出结果包括:经过refine后的anchor[B, ,11],对应anchor的类别分类[B, , ],质量分析(quality)[B, ,2] (值范围在[0,1]区间内)

  3. refine模块流程三步走:

  • 基于已有instance_feature和对应的anchor位置编码信息相加, 得到instance_feature
  • instance_feature通过全连接层得到anchor的偏移量,相加后更新anchor。
  • quality, cls全连接层得到对应的质量结果和分类结果。
  1. temp_interaction(基于当前帧特征和历史特征,进行交叉注意力学习):输入包括instance_feature(当前帧特征[B, ,256]), temp_instance_feature(历史帧特征[B, ,256]), 对应的位置编码信息anchor_embed&temp_anchor_embed。

  2. interatcion(基于当前帧特征,进行自注意力学习):输入包括instance_feature(当前帧特征[B, ,256])。对应位置编码信息anchor_embed

  • 历史特征(temp_instance_feature),历史anchor(temp_anchor)及当前帧anchor、当前帧特征的 获取 (get),是从instance_bank内获取,在Det_head 每一轮forward的起始 去做,获取的过程中,会基于历史特征和当前帧特征的时间间隔,进行mask判断;历史帧的anchor会基于ego2global信息进行基础的运动补偿,统一至当前帧下。
  • 基于历史特征,历史anchor和当前帧的anchor,当前帧的特征及对应confidence对当前帧特征和anchor的更新,是在模型经过单帧decoder forward后进行的,是通过concat当前帧的top






请到「今天看啥」查看全文