M2BEV

news2024/11/13 9:35:11

Part 1: 2D 图像编码器

给定 NNN 张大小为 H×W×3的图像,我们对所有图像使用共享的 CNN 主干网络进行前向传播,例如使用 ResNet,并通过特征金字塔网络(FPN)创建四级特征 F1,F2,F3,F4。

然后,将这些特征全部上采样,并将它们连接起来,随后添加一个 1×1 的卷积层来融合它们,形成一个特征张量 F。

这个最终的特征张量 F 就是多视角特征的集合(例如 nuScenes 数据集中的 6 个视角)。接下来,这些多视角特征将从 2D 图像坐标系投影到 3D 自车坐标系中。

Part 2: 2D→3D 投影

2D→3D 投影是我们工作中实现多任务训练的关键模块。该模块的作用是将多视角特征 结合起来并投影到 3D 空间,从而获得体素

3D空间中体素的坐标可以使用投影公式映射到2D图像坐标:

如上图所示。

本文采用的方法为假设沿着相机射线的深度分布是均匀的,这意味着在2D图像空间中,与单个像素 P 相对应的所有沿着相机射线的体素(voxels)都填充相同的特征。

简单来说,利用相机成像原理,在相机射线上每隔一定距离生成多个点,代表不同物体的深度。求物体的位置的深度变成了每个点的概率。

与 LSS 的对比

M2BEV 和 LSS(Lift-Splat-Shoot)是两个都处理多视角图像到鸟瞰图(BEV)表示的方法,但它们有一些关键的不同。

  1. 深度估计方式

  2. 内存使用

    • LSS:由于其深度估计方法,LSS的GPU内存使用非常高。据评估,LSS的GPU内存使用量是M2BEV的3倍。因此,LSS在处理复杂场景或使用更复杂的模型时有较大的限制。
    • M2BEV:通过更加高效的特征投影和编码策略,M2BEV在内存使用上更加节省,可以处理更大的网络和更高分辨率的输入图像。
  3. 输入图像和模型主干

    • LSS:使用EfficientNet-B0作为主干网络,输入图像的分辨率仅为128 × 384,这在流行的自动驾驶数据集(如nuScenes,图像大小为1600 × 900)上显得相对较低。
    • M2BEV:能够使用更大、更强的主干网络(如ResNet-101)和高分辨率输入(1600 × 900),这有助于在复杂场景下实现更高的检测和分Efficient BEV Encoder

Efficient BEV Encoder(高效的鸟瞰图编码器) 是 M2BEV 框架中的关键组件之一,它负责将 4D 体素张量转换为 3D 特征张量,并最终生成鸟瞰视图(BEV)特征。以下是该编码器的工作原理和优势:

1. “Spatial to Channel (S2C)” 操作

给定一个 4D 体素张量,我们首先使用“空间到通道(S2C)”操作来转换该张量。具体步骤如下:

  • S2C 操作:通过使用 torch.reshape 函数,将 4D 张量 V 从 转换为 3D 张量
    • 这种操作将 ZZZ 维度的空间信息转换为通道信息,从而使得后续的计算可以在 2D 平面上进行,而不必在 3D 空间中操作。
2. 使用 2D 卷积进行特征提取
  • 在完成 S2C 转换之后,使用多个 2D 卷积层对生成的 3D 张量进行处理,以减少通道维度,提取有用的 BEV 特征。
与 3D 卷积的对比
  • 计算与内存效率:与在 Z 维度上具有步幅 2 的 3D 卷积相比,S2C 操作加上 2D 卷积具有显著的效率优势。3D 卷积不仅计算量大且占用更多的内存资源,这使得构建一个重量级的 BEV 编码器变得几乎不可能。
  • 灵活性:使用 S2C 操作后,我们可以轻松地使用并堆叠更多的 2D 卷积层,这使得网络更灵活,更容易在不显著增加计算负担的情况下提升模型的特征提取能力。

Dynamic Box Assignment(平衡正负样本)

Dynamic Box Assignment 是 M2BEV 框架中的一个重要设计,用于优化 3D 目标检测任务中的锚框分配。以下是该方法的详细解释:

1. 传统的 3D 锚框分配方法
  • LiDAR-based 方法:许多基于 LiDAR 的方法(如 PointPillars)通常使用固定的交并比(IoU)阈值来为真实框(ground-truth boxes)分配 3D 锚框。这种方法通过比较锚框和真实框的重叠区域来进行分配,通常能够有效地捕捉到物体的几何信息。
  • 问题:然而,这种基于固定 IoU 阈值的手工分配策略对于我们的任务来说并不是最优的。由于 BEV 特征表示不包含 LiDAR 深度信息,这种表示方式可能会编码不够准确的几何信息。
2. 学习分配策略的必要性
  • 挑战:在没有深度信息的情况下,直接使用固定的 IoU 阈值分配锚框可能会导致 suboptimal(次优)结果,因为 BEV 表示可能会失去部分精细的空间几何信息
  • 解决方案:受 FreeAnchor 中使用的学习匹配(learning-to-match)分配策略的启发,我们将这种分配策略扩展到 3D 目标检测任务中。
3. 学习匹配(Learning-to-Match)策略
  • FreeAnchor 的思路:在 FreeAnchor 中,2D 检测任务的锚框和真实框在图像坐标系下进行分配,通过学习来自动调整分配策略,使其更适应数据特性和任务需求。
  • 我们的扩展:我们将 FreeAnchor 的思想扩展到了 BEV 坐标系中的 3D 锚框分配。在这种扩展中,锚框和真实框不再是简单的 2D 投影,而是根据 3D 坐标进行匹配和分配。
4. 优势
  • 适应性强Dynamic Box Assignment 能够更好地适应 BEV 表示中的几何信息不准确问题,通过学习自动调整分配规则,使得分配过程更加灵活和数据驱动。
  • 优化检测性能:由于学习分配策略能够根据数据的特性动态调整,最终可以显著提升 3D 检测任务的性能,尤其是在使用摄像头而非 LiDAR 的情况下。

在训练过程中,Dynamic Box Assignment 的具体操作步骤如下:

 BEV Centerness

为了提高模型对远处的目标的关注度,作者将中心度”概念从 2D 图像坐标扩展到BEV

BEV 中心度(Centerness)被定义如下:

该公式的计算结果范围从 1 到 2,并在损失函数中用作损失权重。因此,对于远离中心的样本,其预测错误会受到更大的惩罚。

2D Auxiliary Supervision

网络在训练过程中,在特征图的不同尺度添加2D检测头,利用从 ego-car 坐标系中的 3D 边界框生成 2D GT 边界框。使用相机的内参将 3D 边界框反投影到 2D 图像空间中,从而获得 2D GT 边界框。通过计算 2D 检测头的损失来提供额外的监督信号,这有助于增强图像特征对物体的感知能力,从而提升 3D 检测的准确性。

损失函数

M2BEV 框架的最终损失函数 Ltotal\mathcal{L}_{total}Ltotal​ 结合了三部分关键损失:3D 检测损失、BEV 分割损失和 2D 辅助检测损失。以下是详细说明:

总损失

3D 检测损失

该损失函数来源于 PointPillars [1],定义为:

BEV 分割损失

使用以下组合损失:

2D 辅助检测损失 (Ldet2d\mathcal{L}_{det_{2d}}Ldet2d​​)

损失函数与 FCOS [17] 相同:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Quartus网盘资源下载与安装 附图文安装教程

如大家所了解的,Quartus是一种FPGA设计软件(相信理工科的小伙伴,很多都接触或学习过FPGA),旨在为数字电路设计师提供一个高效、便捷的开发环境。它可以帮助用户完成数字逻辑电路的设计、仿真、综合和布局,以…

webpack4手动搭建Vue项目

小满视频 很多解释使用通义灵码搜的,通义灵码的搜索结果也是有错误的全程使用pnpm包管理工具,和npm的用法基本一样 学习总结 1. 多看看webpack官网 2. webpack的作用:配置一堆东西,达到运行程序的目的 3. 无论什么东西都转成js,…

什么是CSRF跨站请求伪造

CSRF(跨站请求伪造,Cross-Site Request Forgery)是一种网络攻击,攻击者通过伪造用户的身份,诱使用户在已认证的 Web 应用上执行非预期的操作。CSRF 攻击的风险在于它能够利用用户的身份认证状态,从而执行恶…

app逆向1-实战里常见东西

幕布链接:app逆向1-实战里常见东西 - 幕布

JVM性能监控实用工具jconsole与jvisualvm

jdk小工具jconsole与jvisualvm,jvisualvm为升级版的jconsole;通过命令行启动,可监控本地和远程应用。 推荐使用:jvisualvm jconsole使用 1.直接命令 jcondole 打开窗口,选择我们要查看的进行 连接后可看到面板 jvisu…

4岁患儿玩耍误伤眼内起迷“障”,耽误多年成都爱尔公益救助手术焕清晰

近日,成都爱尔眼科医院收治了一名来自西藏的7岁小患者小多。小多是由父亲带到医院的,可惜两人都不会汉语,医护人员与他们的交流依靠着孩子父亲拨打的亲戚电话,在电话中一句一句的翻译终于厘清病情原委。 据说,3年前小多…

固态硬盘损坏,有什么方法可以恢复数据?

我认为值得推荐的固态硬盘数据恢复,必须满足2个硬条件: 恢复成功率高 不损害原文件,保证数据的绝对安全 推荐2个超好用的U盘数据恢复神器,帮你快速找回重要文件! 1、转转数据恢复大师 点击直达链接>>www.huifuz…

简单工作流-节点增加输入内容

之前已经做完了前端的流程图像绘制,后端对流程图像的CURD,现在主要做流程节点的必要属性做完善,之前只做了节点上权限用户的绑定没有对用户输入内容做管理,现在加上了输入内容管理,具体代码在github上: 前端…

css-50 Projects in 50 Days(1)

改变背景图 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>改变背景</title><link …

【ceph学习】rgw网关进程如何启动

rgw 网关进程启动 主要在rgw_main.cc的main函数中&#xff0c;主要涉及一些关键线程启动、前端服务器&#xff08;beast等&#xff09;启动、后端存储模块启动&#xff08;rados&#xff09;、perf和log启动等。 流程图关键节点如下&#xff1a; 1、beast的启动 2、rados的启…

对标GPT4o,智谱推出新一代基座大模型 GLM-4-Plus

最新基座大模型 GLM-4-Plus发布并上线开放平台 在 KDD 国际数据挖掘与知识发现大会上&#xff0c;智谱 GLM 团队介绍了新一代基座大模型GLM-4-Plus。GLM-4-Plus 是智谱全自研 GLM 大模型的最新版本&#xff0c;它标志着智谱继续瞄准通用人工智能&#xff0c;持续推进大模型技术…

Django框架安全

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介…

阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源

导读 ChatGPT是OpenAI开发的基于大型语言模型(LLM)的聊天机器人&#xff0c;以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式&#xff1a;RLHF (Reinforcement Learning from Human Feedback)&#xff0c;即以强化学习…

代码随想录第十天——LeetCode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

150. 逆波兰表达式求值 力扣题目链接(opens new window) 根据 逆波兰表示法&#xff0c;求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。 给定逆波兰表达式总是…

weditor使用问题总结

1.Pixel连接weditor提示Local server not started 产生原因1&#xff1a;开发者模式关闭后重开部分选项没勾选 解决方案&#xff1a;打开如下设置即可 产生原因2&#xff1a;安装了uiautodev导致uiautomator2版本升级到了3.x版本 解决方案&#xff1a;重新安装uiautomator2的…

Nginx: 缓存, 不缓存特定内容和缓存失效降低上游压力策略及其配置示例

概述 在负载均衡的过程中&#xff0c;有一个比较重要的概念&#xff0c;就是缓存利用缓存可以很好协调Nginx在客户端和上游服务器之间的速度不匹配的矛盾从而很好的解决整体系统的响应速度 如果用户需要通过Nginx获取某一些内容的时候&#xff0c;发起一个request请求这个请求…

我在高职教STM32——ADC电压采集与光敏电阻(4)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件…

linux每个memory cgroup的lru链表是什么创建的

1.概述 对Linux memory子系统有基本了解的都知道&#xff0c;linux内核通过LRU管理物理内存&#xff0c;不知道是否有思考过如下问题&#xff1a;LRU是全局一套&#xff0c;还是说每个memory cgroup拥有单独的一套LRU链表&#xff1f;直接揭晓答案&#xff1a;每个memory cgro…

Typora + PicGo + Gitee 实现图片自动上传

Typora PicGo Gitee 实现图片自动上传 1.配置Gitee1.创建Gitee仓库2.设置私人令牌2. PicGo 的安装配置2.1 下载 PicGo2.2 安装 PicGo2.3 安装 PicGo 的自动上传插件2.4 Gitee 图床设置 3. Typora 安装配置3.1 安装**版本3.2 配置 PicGo 4. 上传验证 1.配置Gitee 1.创建Gitee…

字节AI辅助编程工具MarsCode,开启高效编程之旅

点击链接即可注册和使用&#xff1a;豆包MarsCode 一、巨头较量&#xff0c;MarsCode 崭露头角 在当今的编程世界中&#xff0c;代码补全工具层出不穷。阿里的通义灵码凭借阿里强大的技术实力&#xff0c;在代码补全方面表现出色&#xff0c;能够快速理解程序员的意图&#x…