自动驾驶之DriveMM: All-in-One Large Multimodal Model for Autonomous Driving

1. 写在前面

工作之后,主要从事于偏工程比较多的内容, 很少有机会读论文了,但2025年,由于之前有些算法的背景, 后面可能会接触一些多模态大模型相关的工作,所以又调头有点往算法的方向偏移, 而算法呢,很重要的一点就是阅读论文。2025年,再拾起论文这块的工作。

今天分享的一篇论文,是24年12月中山大学深圳分校和美团的论文,算是自动驾驶界比较新的文章,叫DriveMM,介绍了一个通用的大型多模态模型, 该模型可以接收单张图片、多张图片、单个视频、多个视频以及lidar等多种格式的输入, 处理AD中的各种驾驶场景和任务(感知,预测,规控等), 还是非常powerful的。我们还是先把论文的每个模块介绍一遍,最后再教大家部署下这个模型, 本地跑下推理, 工作中读论文很重要的一个点是要考虑如何落地,所以读完论文掌握思路之后,我们还要看看代码落地。

  • 论文地址:https://arxiv.org/pdf/2412.07689
  • GitHub代码: https://github.com/zhijian11/DriveMM

在这里插入图片描述

Ok, let’s go!

大纲如下:

  • 1. 写在前面
  • 2. Abstract
  • 3. Introduction
  • 4. Releated Work
    • 4.1 Vison-Language Driving Datasets
    • 4.2 LMMs for Autonomous Driving
  • 5. Methodology
    • 5.1 Model Architecture
    • 5.2 Data
    • 5.3 Training
  • 6. Experiment
  • 7. Apply

2. Abstract

多模态模型(LMM)结合大语言模型(LMM), 在自动驾驶(Autonomous Driving, AD)领域展现出色的理解和解释能力。 但是当前数据驱动的AD方法往往集中在单个数据集和特定任务上, 忽视整体和泛化能力。为了弥补这些差距, 本文提出了提出了一体化LMM,DriveMM, 一个通用的大型多模态模型,该模型接收多样化的数据输入,例如图像和多视角视频,旨在有效处理AD中的各种驾驶场景和任务,比如感知、预测和规划等。

本文主要是3个卖点:
在这里插入图片描述

  1. 提出了一个新颖的通用多模态大模型, 该模型同时具备整体和泛化能力,可以处理多种AD任务,且对于zero-shot的数据集也非常ok
  2. 提出了一个在多模态数据上预训练+ 自动驾驶数据上微调DriveMM的范式(这个很重要)
  3. 介绍了非常全面的评估体系评测自动驾驶的LMMs, 主要包括6个公开数据集,4中输入类型,13中有挑战的任务等。

最后经过各个实验, 证明了自己模型在多个任务上实现了SOTA, 在zero-shot的任务上也达到了最强。

3. Introduction

引言里面首先指出了随着自动驾驶的发展, 最近几年也涌现除了非常多的AD数据集和多模态大模型(Large Multimodal Model, LMM), 旨在理解复杂的自动驾驶的场景任务。 这些LMM先经过预训练过程, 使其理解AD的基本视觉和语言信息,然后再用特定任务的数据进行微调,适应于不同的任务。 但之前的的这些模型和数据都是针对于特定的场景和任务这可能会丢失一些全局和泛化的能力

作者这里列了个图:
在这里插入图片描述
左边是6个AD数据集, 类型有的是单图片,多图片(包括视角),单视频,多视频(包括视角), 不同数据集适用于不同的场景任务,比如感知的场景理解,区域理解,Key理解,道路理解,风险探测, 预测里面的状态预测,Motion预测,规化里面的行为检测,驾驶推理,Motion预测等,这都是自动驾驶领域的经典任务。

有了上面的问题, 作者这里的动机就是 大一统, 搞一个通用的大模型,可以接收多种type的输入, 解决上面的所有任务, 这些数据一块训练, 能够有更强大的通用能力和更好的泛化能力。

在这里插入图片描述
这里的通用能力指的是复杂和多样的任务场景, 而泛化表现是指zero-shot的数据。

首先,是重构了LMM能接收多视角的视觉信号,这个是通过提供了一个带有视角信息和传感器类型的Instruction实现的, 这样能允许模型识别障碍物之间的空间关系,分析动态驾驶环境里面的全部上下文。 在训练阶段的时候, 提出了一个新的范式(4阶段), 完成了DriveMM的预训练和微调。主要包括3个阶段的预训练和最后一个阶段的微调,最后得到了一个很强大的模型。

训练这部分是本篇paper的关键, 后面的内容里面详细介绍吧。

4. Releated Work

相关工作这块,作者主要是介绍了一些数据集和现用的一些AD领域的多模态大模型,这对于像我这样的小白了解背景知识还是很重要的, 也简单整理下。

4.1 Vison-Language Driving Datasets

这里主要是介绍一些训练LMM用到的AD场景数据集, 这个其实就是上面图里面的那些数据集。

  • DRAMA, CODA-LM, DriveVLM, single-view data, 聚焦于风险object和corner cases learning
  • NuScenes-QA, multi-view data, 主要是3D obj的关系
  • MAPLM, multi-view data主要分析和识别道路条件等

在这篇paper里面,作者做的一个事情就是:

在这里插入图片描述
增强和标准化了自动驾驶数据集,这个思路也非常牛,后面会看下。

4.2 LMMs for Autonomous Driving

这块主要介绍LLMs在AD领域的一个应用。

早期, 有工作尝试用GPT3.5或者4 作为驾驶planners。后来DriveGpt4和RDA-Driver引进了端到端的LMMs产生控制信号和轨迹。 上面的工作主要是通过语言来处理驾驶行为。 LMDrive和DriveMLM是用了一个decoder直接从embedding预测控制信号。

为了提高感知和推理能力, 下面的几个方法是通过改进了模型的架构。 Reason2Drive 提出了一个先验的tokenizer来提出local image feature, BEV-InMLLM是把BEV的特征集成到了LMM里面。 OmniDrive用了一个Q-Former3D集成2D预训练的知识和3D的空间理解。 ELM组合了一个time-aware token模块来提高查询关于时序特征的准确率。

上面的这些方法可以大概了解, 算作背景知识的学习了。 这些方法还是受限于特定的场景和任务。

5. Methodology

终于到了paper的重点环节了, 这里面作者介绍DriveMM的相关方法。
在这里插入图片描述
这里先用数学语言简洁的表达了下模型, 接收的输入是 X v X_v Xv, 这个表示的多种多样的数据(各种格式的数据,图片,多视角图片,视频,多视角视频 或 lidar点云), X t X_t Xt是有来自于感知,预测,规划的一个提问。 F F F就是DriveMM,输出 Y t Y_t Yt就是模型针对提问作出的回答。

过整合多种数据和任务,DriveMM 能在一个场景广泛的VL数据上训练, 不同数据和任务之间能互补。

5.1 Model Architecture

目标是设计一个高效的模型架构, 同步处理S.I, M.I, S.V, M.V, 遵循LLaVA(Large Language and Vision Assistant)的主流LMM的设计。一个vision encoder, 一个projector 和一个LLM。

在这里插入图片描述
这里先宏观上解释下上面的图, 模型的输入格式是: < i m g s , q , a > <imgs, q, a> <imgs,q,a>, 也就是一张或者多张图片(可以是多视角), 再给定一个Q, 模型输出一个A, 当然这个Q和A要根据不同的任务去设计。感知任务, 预测任务和规划任务想要模型学习的东西不一样,自然就需要不同的Q和A。可以看看上图里面不同任务Q和A的内容。

那有了img, q之后呢, 就可以给到模型, 处理过程大概是这样子(上面图有点稍微简洁):

在这里插入图片描述
宏观上用这个图应该比较清洗了,下面介绍下每一部分。

  1. Vision Encoder: 本文用的是SigLip, 类似于clip的模型,目的是把一个输入为 n ∗ f ∗ c ∗ h ∗ w n*f*c*h*w nfc

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

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

相关文章

BGP分解实验·9——路由聚合与条件性通告(1)

路由聚合是有效控制缩减BGP路由表的方法之一&#xff0c;路由聚合的前提和IGP一样&#xff0c;需要有路由目标存在BGP表中&#xff0c;与IGP不同的是&#xff0c;BGP路由聚合可以定义按需抑制路由的能力。 实验拓扑如下所示&#xff1a; 现在开始把从R1的R5的基础配置先准备好…

Linux C\C++方式下的文件I/O编程

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 Lin…

C语言:位段

位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char &#xff08;属于整形家族&#xff09;类型 2. 位段的空间上是按照需要以4个字节&#xff08; 类型 int &#xff09;或者1个字节&#xff08; char &#xff09;的方式来开辟的。 3. 位段涉及…

SpringMVC 实战指南:文件上传

第一章&#xff1a;常用的注解&#xff1a; RequestParam 注解&#xff1a; 作用&#xff1a;把请求中的指定名称的参数传递给控制器中的形参赋值属性&#xff1a; value&#xff1a;请求参数中的名称required&#xff1a;请求参数中是否必须提供此参数&#xff0c;默认值是 tr…

【部署】将项目部署到云服务器

目录 1.获得服务器 2.连接到云服务器 3.配置环境 3.1.Java&#xff08;运行后端所需&#xff09; 3.2.MySQL数据库 3.3.Nginx&#xff08;运行前端所需&#xff09; 3.4. Node.js&#xff08;构建前端所需&#xff09; 4.打包项目 4.1.打包后端项目 4.2.打包前端项目…

C++实现矩阵Matrix类 实现基本运算

本系列文章致力于实现“手搓有限元&#xff0c;干翻Ansys的目标”&#xff0c;基本框架为前端显示使用QT实现交互&#xff0c;后端计算采用Visual Studio C。 目录 Matrix类 1、public function 1.1、构造函数与析构函数 1.2、获取矩阵数值 1.3、设置矩阵 1.4、矩阵转置…

HTML<form>标签

例子 具有两个输入字段和一个提交按钮的HTML表单&#xff1a; <form action"/action_page.php" method"get"> <label for"fname">First name:</label> <input type"text" id"fname" name"f…

《贪心算法:原理剖析与典型例题精解》

必刷的贪心算法典型例题&#xff01; 算法竞赛&#xff08;蓝桥杯&#xff09;贪心算法1——数塔问题-CSDN博客 算法竞赛&#xff08;蓝桥杯&#xff09;贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法&#xff08;蓝桥杯&#xff09;贪心算法3——二维数组排序与贪心算…

“Cultural diversity” 和 “multicultural”应用场景区别

“Cultural diversity” 和 “multicultural” 都涉及到不同文化的存在和互动&#xff0c;但它们在使用时有细微的差别&#xff0c;主要体现在侧重点和语境上。以下是它们各自的应用场景&#xff1a; 1. Cultural Diversity&#xff08;文化多样性&#xff09; 定义&#xff…

在 Linux 和 Windows 下查看文件 MD5 值的几种方法

MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常见的哈希算法&#xff0c;用于生成文件的唯一“指纹”。它在文件传输和验证过程中非常有用&#xff0c;能够确保文件未被篡改。本文将介绍在 Linux 和 Windows 下查看文件 MD5 值的几种方法&#xff0c;并分别列…

QT 占位符的用法

这段代码是 Qt 中常用的字符串格式化方法&#xff0c;用于动态生成带有变量值的字符串。以下是详细的拆解和解释&#xff1a; QString("Elapsed time: %1 seconds").arg(elapsed_seconds.count())1. QString 的构造 QString(“Elapsed time: %1 seconds”) 创建了一…

【2024 年度总结】从小白慢慢成长

【2024 年度总结】从小白慢慢成长 1. 加入 CSDN 的契机2. 学习过程2.1 万事开头难2.2 下定决心开始学习2.3 融入技术圈2.4 完成万粉的目标 3. 经验分享3.1 工具的选择3.2 如何提升文章质量3.3 学会善用 AI 工具 4. 保持初心&#xff0c;继续前行 1. 加入 CSDN 的契机 首次接触…

如何通过云计算优化网站性能?

随着互联网的迅猛发展&#xff0c;网站的性能已经成为用户体验的关键因素之一。响应速度慢、加载时间长&#xff0c;甚至服务器崩溃都会直接影响用户的满意度&#xff0c;进而影响企业的品牌形象和盈利能力。而云计算提供了一个高效、灵活、可扩展的解决方案&#xff0c;帮助企…

【C++篇】红黑树封装 实现map和set

目录 前言&#xff1a; 一&#xff0c;库中map和set的大致结构 二&#xff0c;模拟实现 2.1&#xff0c;大致框架 2.2&#xff0c;复用红黑树实现insert接口 2.3&#xff0c;迭代器iterator的实现 operator()的实现&#xff1a; operator--()的实现&#xff1a; 对inser…

面试-业务逻辑3

应用 小明随机拿一些带有编号的积木组成一排&#xff0c;数字编号可能相同。小明让小刚找到这排积木中数字相同且所处位置最远的2块积木&#xff0c;并计算他们的距离。 实现 N int(input("请输入积木总数&#xff1a;")) a_list list()for i in range(0, N):a …

写作利器:如何用 PicGo + GitHub 图床提高创作效率

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…

RabbitMQ 高级特性

目录 1.消息确认 1.1 消息确认机制 1.2 手动确认方法 1. 2.1肯定确认 1.2.2 否定确认 1.3 SpringBoot 代码示例 1.3.1 配置确认机制 1.3.2 配置队列,交换机,绑定关系 1.3.3 生产者(向 rabbitmq 发送消息) 1.3.4 消费者(消费队列中的信息) 2.持久性 2.1 交换机…

AIGC视频生成模型:Meta的Emu Video模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video&#xff0c;作为Meta发布的第二款视频生成模型&#xff0c;在视频生成领域发挥关键作用。 &#x1f33a;优质专栏回顾&am…

面向对象的程序设计:以对象的方式进行思考

1 理解接口与实现的区别 以上一篇文章的电视机需要插电使用的例子继续来讲解: 对电视而言,插电使用,只需要标准的插座即可,具体的电从哪里来,是火力发电厂,或是太阳能发电,亦或是畜电池逆变供电,电视机是不需要关心的。 发电厂或供电设备属于实现,220V交流电插座属于…

网络协议如何确保数据的安全传输?

网络协议作为计算机网络通信的基石&#xff0c;其设计不仅旨在实现数据的有效传输&#xff0c;更在于确保数据在传输过程中的安全性。对于网络协议如何保障数据安全传输&#xff0c;是很多企业和网络IT部门的重点&#xff0c;本文将从多方面概述相关方法。 加密与解密机制 1. …