稀疏3D检测-Sparse4Dv1v2v3

0. Multi-view 3D detection

LSS(Lift-Splat-Shoot)利用深度估计将图像特征提升到3D空间,并将特征拍到BEV平面。后续工作将lift-splats操作应用于3D检测领域。
Bevformer将时序信息以BEV特征cat一起引入时序信息。
DETR3D中通过预测的3D点投影到图像平面后获取图像特征,并且将deformable attention(Deformable DETR)应用于多视觉检测中。
PETR系列方法中,2D图像特征转换成3D的感知特征。对于每个instance feature,采用global cross attention来实现多视角的特征融合。由于融合模块计算复杂度仍与特征图尺寸相关,因此其仍然属于dense算法的范畴,对高分辨率的图像特征输入不够友好。
Sparse4D系列在3D空间中设置显式anchor,将它们投影到图像视图中以聚合局部特征,并通过迭代方式细化anchor。
在这里插入图片描述

Sparse 系列

资源:
SparseDrive:https://arxiv.org/abs/2405.19620
git: https://github.com/swc-17/SparseDrive/
Sparse4D: https://arxiv.org/abs/2211.10581
Sparse4Dv2: https://arxiv.org/abs/2305.14018
Sparese4Dv3: https://arxiv.org/abs/2311.11722
git: https://github.com/linxuewu/Sparse4D
Sparse4D

1 sparse4D v1 & v2

在这里插入图片描述

1.1 v1 Deformable 4D Aggregation
  • 4D 关键点生成:基于每个instance 的3D anchor信息, 可以生成一系列3D关键点,分为固定关键点和可学习关键点。我们将固定关键点设置为anchor box的各面中心点及其立体中心点,可学习关键点坐标通过instance feature接一层全连接网络得到。在Sparse4D 中,采用了7个固定关键点 + 6个可学习关键点的配置fix_scare和learned scale(FC)。然后,结合instance 自身的速度信息以及自车的速度信息,对这些3D关键点进行运动补偿,获得其在历史时刻中的位置。结合当前帧和历史帧的3D关键点,获得了每个instance 的4D 关键点。默认base anchor使用了nuscenes_kmeans900.npy,其中聚类了x,y,z,其余whlyaw都是默认1,其余0.
  • 4D 特征采样:在获得每个instance在当前帧和历史帧的3D关键点后,根据相机的内外参将其投影到对应的多视角多尺度特征图上进行双线性插值采样。从而得到Multi-Keypoint,Multi-Timestamp, Multi-Scale, Multi-View 的特征表示;[points_2d, attention weights, feature]进入deformable_aggregation_function,融合有两个function{add,cat}。
  • 层级化特征融合:在采样得到多层级的特征表示后,需要进行层级化的特征融合,分为了三层:
    • Fuse Multi-Scale/View:对于一个关键点在不同特征尺度和视角上的投影,采用了加权求和的方式,权重系数通过将instance feature和anchor embed输入至全连接网络中得到;
    • Fuse Multi-Timestamp:对于时序特征,采用了简单的recurrent策略(concat + linear)来融合;LinearFusionModule
    • Fuse Multi-Keypoint:最后,采用求和的方式融合同一个instance不同keypoint的特征;
      实例由三部分表示,分别是anchor、实例特征和anchor embedding(anchor, instance feature and anchor embedding)。
  • anchor是结构化信息,表示实例的状态,具有实际的物理意义。两部分组成。默认使用
  • instance feature是从图像中提取的高阶语义特征,主要来自图像编码器。
  • anchor embedding就是anchor的特征编码,用一个小的anchor编码器Ψ将anchor的结构化信息映射到高维空间。
    [Image]

1.2 v2 Instance Temporal Propagation:

anchor中加入了时序动态补偿,在Sparse4D-V2中,将decoder分为单帧层和时序层。单帧层以新初始化的instance作为输入,输出一部分高置信度cls得分的instance至时序层;时序层的instance除了来自于单帧层的输出以外,还来自于历史帧(上一帧)。我们将历史帧的instance投影至当前帧,其中,instance feature保持不变,anchor box通过自车运动和目标速度投影至当前帧,anchor embed通过对投影后的anchor进行编码得到。StreamPETR 中,采用了隐式的query时序转换方式,即把velocity、ego pose、timestamp都编码成特征,然后再和query feature做一些乘加操作;

1.3 v2 Efficient Deformable Aggregation

对Deformable Aggregation运算速率进行优化。对deformable aggregation模块进行了底层的分析和优化,让其并行计算效率显著提升,显存占用大幅降低。

1.4 v2 Camera Parameter Encoding

将相机参数进行编码,将相机投影矩阵通过全连接网络映射到高维特征空间得到camera embed。在计算deformable aggregation中的attention weights 𝑊 时,我们不仅考虑instance feature和anchor embed,还加上了camera embed。DeformableFeatureAggregation中进行添加。

1.5 v2Dense Depth Supervision

加入depth辅助监督,在实验中,发现基于稀疏的方法在早期训练阶段缺乏足够的收敛能力和速度。为了缓解这一问题,我们还引入了以点云为监督的多尺度密集深度估计方法作为辅助训练任务。而在推理过程中,这个分支网络将不会被激活,不影响推理效率。

2 Sparse4D-v3(2023.11):

在V3中针对sparse快速收敛:改善denosing,增加quality模块。对于特征混肴:提出了Decopled Attention

2.1 Temporal Instance Denoising

训练的instance包括learnable,noisy。其中noisy的包含temporal,nontemporal elements。时序增加了denosing, 在传统denosing上正负样本分配机制有可能存在歧义,使用bipartite graph进行分配,时序上,会在单帧选择M′ group进入下一帧的训练。每组实例的相互独立性,噪声实例和正常实例之间没有特征交互,这与 DN-DETR 不同。
Mask制作,左边DN-DETR,PETR系列的mask,右边是sparse4D的mask生成方式:
[Image]

正负样本的制作DN-DETR

reference_points += noise (if noise ratio > 0.5 positive else negtive)

reference_points += noise (if noise ratio > 0.5 positive else negtive)

生成了2倍的dn reference_points
作者认为上述的随机干扰存在歧义,这些样本不够负样本,制作noise_neg这部分的noise的干扰会更大

reference_points  = [reference_points, box_target + noise_neg]

并且即使是Denosing也使用box_cost和匈牙利算法制作了正样本

2.2 增加quality训练分支

[Image]

现有的基于稀疏方法的主要估计cls置信度来衡量正样本和负样本与真实值的对齐情况。优化目标是最大化所有正样本的分类置信度。然而,不同正样本之间的匹配质量差异显著,因此,论文分类置信度并不是评估预测边界框质量的理想指标。为了帮助网络理解正样本的质量,一方面加速收敛,另一方面合理化预测排名,我们引入了预测质量估计任务。对于3D检测任务,我们定义了两个质量指标:中心点(centerness)和偏航度(yawness)
第0维度 位置的质量 CELOSS

    cns_target = torch.norm(
                    box_target[..., [X, Y, Z]] - box[..., [X, Y, Z]], p=2, dim=-1
                )
    cns_target = torch.exp(-cns_target)

第1维度 角度质量 GassianFocalLoss

    yns_target = (
                torch.nn.functional.cosine_similarity(
                    box_target[..., [SIN_YAW, COS_YAW]],
                    box[..., [SIN_YAW, COS_YAW]],
                    dim=-1,
                )
                > 0
            )

在这里插入图片描述

2.3 Decoupled Attention

[Image]

Sparse4D中有两个instance attention模块,1)instance self-attention和2)temporal instance cross-attention。在这两个attention模块中,将instance feature和anchor embed相加作为query与key,在计算attention weights时一定程度上会存在特征混淆的问题。解耦注意力机制的提出。
[Image]

    if self.decouple_attn:
        self.fc_before = nn.Linear(
            self.embed_dims, self.embed_dims * 2, bias=False
        )
        self.fc_after = nn.Linear(
            self.embed_dims * 2, self.embed_dims, bias=False
        )
        
        
    if self.decouple_attn:
        query = torch.cat([query, query_pos], dim=-1)
        if key is not None:
            key = torch.cat([key, key_pos], dim=-1)
        query_pos, key_pos = None, None
    if value is not None:
        value = self.fc_before(value)
    return self.fc_after(
        self.layers[index](
            query,
            key,
            value,
            query_pos=query_pos,
            key_pos=key_pos,
            **kwargs,
        )
    )

2.4 Validation

[Image]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/801826.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述: 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…

vue仿甘特图开发工程施工进度表

前言 本文是根据项目实际开发中一个需求开发的demo,仅用了elementUI,可当作独立组件使用,C V即用。 当然没考虑其他的扩展性和一些数据的校验,主要是提供一个处理思路,有需要的小伙伴可以直接复制;本demo的…

厂家置换电费如何达到最大化收益

新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 文章目录 一、电能电费二、同时刻不同厂家置换,不会影响最终电能电费结果三、风险防范补偿和回收机制四、我们的数据如何考虑补偿和回收五、如何利用补偿和…

K8S私有云裸金属服务器负载均衡器OpenELB——筑梦之路

OpenELB介绍 OpenELB 是一个专为裸机 Kubernetes 集群设计的开源负载均衡器实现。 在云服务环境中的 Kubernetes 集群里,通常可以用云服务提供商提供的负载均衡服务来暴露 Service,但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘…

二叉树问题,两种解决方法(1遍历 2直接定义名字功能递归

1第一种方法就是另写一个traverse方法,2第二种方法就是把函数名当成已经实现的功能,直接写 1、翻转二叉树 class Solution {public TreeNode invertTree(TreeNode root) {if(rootnull) return null;TreeNode leftinvertTree(root.left);TreeNode righti…

Facebook:数字时代的社交瑰宝

在当今数字化飞速发展的时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的领军者,不仅连接了全球数十亿的用户,更深刻地改变了人们的社交方式和生活方式。本文将探讨Facebook如何成为数字时代的社交瑰宝…

【排序算法】1.冒泡排序-C语言实现

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直…

SimMIM:一个类BERT的计算机视觉的预训练框架

1、前言 呃…好久没有写博客了,主要是最近时间比较少。今天来做一期视频博客的内容。本文主要讲SimMIM,它是一个将计算机视觉(图像)进行自监督训练的框架。 原论文:SimMIM:用于掩码图像建模的简单框架 (a…

支持大量边缘盒子集中管理调度的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…

NodeJS技巧:在循环中管理异步函数的执行次数

背景介绍 在现代Web开发中,NodeJS因其高效的异步处理能力而备受青睐。尤其在数据抓取、网络爬虫等应用场景中,NodeJS的非阻塞I/O特性使其成为不二之选。然而,在实际编程过程中,我们经常会遇到一个棘手的问题——如何在循环中控制…

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…

python实现九九乘法表

1.self i 1 while i<9:j 1while j< i:print("j * i ",end)print(j * i ,end)print(" ",end)j 1i 1print() 实现结果&#xff1a; 2.改进 i 1 while i<9:j 1while j< i:# print("j * i ",end)# print(j * i ,end)# print(&…

CSA笔记1-基础知识和目录管理命令

[litonglocalhost ~]$ 是终端提示符&#xff0c;类似于Windows下的cmd的命令行 litong 当前系统登录的用户名 分隔符 localhost 当前机器名称&#xff0c;本地主机 ~ 当前用户的家目录 $ 表示当前用户为普通用户若为#则表示当前用户为超级管理员 su root 切换root权限…

详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链

​​发表时间&#xff1a;2024年5月24日 BSV曼达拉升级是对BSV基础设施的战略性重塑&#xff0c;意在显著增强其性能&#xff0c;运行效率和可扩容。该概念于2018年提出&#xff0c;其战略落地将使BSV区块链顺利过渡&#xff0c;从现有的基于单一集成功能组件的网络拓扑结构&am…

java面向对象进阶篇--static

一、前言 java进阶篇已经开始了&#xff0c;先从面向对象开始&#xff0c;由于时间原因今天就只更新了static部分&#xff0c;内容上特别详细&#xff0c;一些特别的注意事项也在反复的提醒大家。 温馨提示一下&#xff0c;往后的java篇会越来越难&#xff0c;希望大家能够坚…

Logistic回归(Logistic Regression)

机器学习的分类问题&#xff0c;使用logistics回归&#xff08;虽然叫回归&#xff0c;但是是做分类任务的&#xff09; 一&#xff1a;简介 MINIST Dataset 一个手写数字的数据集 其中有10分类&#xff0c;0&#xff0c;1&#xff0c;2&#xff0c;....&#xff0c;9 未来y…

002uboot Makefile分析

1.分析配置过程 我们把补丁文件打到uboot源码中&#xff0c;&#xff08;补丁文件时根据自己的板子所修改的代码&#xff09;&#xff0c;然后看一下Makefile。 make 100ask24x0_config #这个指令用来配置uboot打入补丁文件后 Makefile中会自动的生成这样的代码&#xff0c;我…

mybatis动态传入参数 pgsql 日期 Interval ,day,minute

mybatis动态传入参数 pgsql 日期 Interval 在navicat中&#xff0c;标准写法 SELECT * FROM test WHERE time > (NOW() - INTERVAL 5 day)在mybatis中&#xff0c;错误写法 SELECT * FROM test WHERE time > (NOW() - INTERVAL#{numbers,jdbcTypeINTEGER} day)报错内…

王道计算机考研数据结构思维导图笔记(持续更新)

第1章 绪论 1.1 数据结构的基本概念 1.1.1 基本概念和术语 1.1.1 数据结构三要素 1.2 算法和算法评价 1.2.1算法的基本概念 1.2.2 算法效率的度量 第2章 线性表 2.1 线性表的定义和基本操作 2.1.1 线性表的定义 2.1.2 线性表的基本操作 2.2.1 顺序表上的定义 2.2.2 顺序…