当前位置: 首页 > news >正文

OmniDrive论文速读

《OmniDrive: A Holistic Vision-Language Dataset for Autonomous Driving with Counterfactual Reasoning》

研究背景

研究背景与现状
  1. 技术趋势:近年来,视觉语言模型(Vision-Language Models, VLM)因其强大的推理能力,在自动驾驶领域的应用受到了越来越多的关注。研究人员希望利用大语言模型(LLM)的理解和推理能力,打造出更智能、更像人类的端到端自动驾驶系统。
  2. 主流方法:目前,训练和评估这些自动驾驶大模型代理(LLM-agent)的主要方式是构建问答(Q&A)数据集。这些数据集通常基于真实世界的行驶日志(如nuScenes数据集),在一个“开环”(open-loop)的环境中,让模型根据场景信息进行推理或规划行驶轨迹。
发现的问题与挑战

论文指出了当前研究中存在的几个核心挑战:

  1. 从2D到3D的鸿沟:VLM在2D图像理解上取得了巨大成功,但如何将其强大的能力扩展到自动驾驶所必需的3D几何和空间理解,是一个关键且尚未解决的难题。
  2. 监督信号稀疏:现有的数据集主要依赖“专家轨迹”(即人类驾驶员的真实轨迹)作为监督信号。这种信号非常稀疏 ,它只展示了“怎么做”(一条安全的轨迹),但没有解释“为什么这么做”,更没有涵盖“不这么做的后果是什么”。这使得模型难以学习到深层次的决策逻辑。
  3. 开环评估的局限性:现有的开环评估方法存在明显缺陷,例如模型容易过度拟合车辆自身的运动状态(Ego Status)、测试场景过于简单、容易记住专家轨迹等,无法真实反映模型的泛化能力。
  4. 模型对3D场景理解的困难:直接将复杂的3D场景信息(如多视角图像、3D物体、车道线等)输入给GPT-4这样的大模型,效果并不理想。模型难以有效理解元素间的空间关系和车辆的驾驶状态。
  5. 模型架构设计的核心分歧:在构建自动驾驶VLM时,存在一个根本性的设计问题:是应该在现有成熟的2D VLM基础上进行扩展,使其适应3D空间(即优先保证视觉-语言对齐);还是应该将成熟的3D感知模型与LLM相结合(即优先保证3D感知能力)?这是一个悬而未决的问题。

核心研究动机与目标

核心动机

针对上述挑战,本文的核心动机是 创建更密集的监督信号,将车辆的行驶轨迹规划与语言形式的推理过程紧密联系起来。研究者认为,模仿人类驾驶员的“反事实推理”(Counterfactual Reasoning)能力 —— 即思考“如果我采取另一个行动会怎样?” —— 是解决监督稀疏问题的关键。

核心目标
  1. 构建一个全新的数据集(OmniDrive Dataset):利用反事实推理,创建一个大规模、高质量的3D驾驶问答数据集,为模型提供更丰富的学习信号。
  2. 探索并比较两种模型架构(Omni-L vs. Omni-Q):针对上述的架构设计分歧,提出并系统地比较两种分别代表“语言优先”和“感知优先”的设计范式,为社区提供有价值的设计见解。
  3. 提出一个整体框架(OmniDrive Framework):将创新的数据集和模型探索相结合,形成一个从数据到模型的自动驾驶整体解决方案。
实际意义与落地前景

这项研究具有很强的实际意义。通过反事实推理,模型不仅能学会安全驾驶,还能理解危险行为的后果,从而提升自动驾驶系统的安全冗余和可解释性。此外,关于 Omni-L 和 Omni-Q 的架构探索,其结论对于机器人、具身智能等其他需要3D场景理解的多模态AI应用也具有重要的借鉴价值。

研究内容、技术路线与创新点

本文的核心研究内容可以分为两个部分:OmniDrive数据集的构建OmniDrive-Agent模型架构的探索

研究内容一:基于反事实推理的OmniDrive数据集
  • 研究动机:解决专家轨迹监督信号稀疏的问题,通过模拟人类“思考不同可能性”的决策过程,生成更丰富的训练数据
  • 核心内容:设计并实现了一套可扩展、半自动化的数据生成流水线,用以构建包含感知、推理和规划等多种任务的高质量3D驾驶Q&A数据集。
  • 具体技术路线
    1. 关键帧选取:为了提高效率,首先从庞大的nuScenes数据集中筛选出有代表性的关键帧。这一步综合考虑了语义相似性(使用CLIP模型提取图像特征进行聚类)和轨迹相似性(对车辆未来轨迹进行K-means聚类),确保选出的帧能覆盖多样的交通场景和驾驶行为(如直行、转弯、加减速等)。
    2. 反事实轨迹模拟:在选定的关键帧场景中,除了专家(真实)轨迹外,系统会自动模拟多种其他的可能性轨迹,例如“在需要直行的路口强行左转”。
    3. 规则清单检查与GPT-4生成
      • 使用一个基于规则的清单(Checklist) 来自动评估每条模拟轨迹的后果,例如是否会与其他车辆碰撞、是否会驶出可行驶区域、是否违反交通信号灯等。
      • 将场景的图像、结构化的场景信息(如专家轨迹、模拟轨迹及其后果)作为提示(Prompt) 输入给GPT-4。
      • 引导GPT-4生成高质量的Q&A对,涵盖场景描述、注意力对象、反事实推理(“如果…会怎样?”)、决策规划(“最佳选择是什么,为什么?”) 等多种类型。
    4. 人机结合的质量保证:在自动生成后,引入**“人在环路中”(Human-in-the-loop)** 的审核环节,确保生成数据的质量和可靠性,然后进行大规模的数据迭代。
  • 创新点
    • 核心创新是反事实推理:这是首次将反事实推理系统性地应用于自动驾驶数据集的构建。它不再局限于单一的正确答案,而是通过探索“what-if”场景,为模型提供了关于“为什么某些行为是危险的”宝贵知识,从而创造了更密集的监督信号。
    • 可扩展的数据生成流水线:建立了一套从筛选、模拟、评估到生成和审核的完整流程 ,使得大规模、高质量的数据生产成为可能。
研究内容二:OmniDrive-Agent模型架构探索 (Omni-L vs. Omni-Q)
  • 研究动机:直面自动驾驶VLM设计的核心难题——应该优先对齐语言和视觉,还是优先构建强大的3D感知能力?
  • 核心内容:提出了两种分别代表这两种设计理念的先进模型架构 —— Omni-L 和 Omni-Q,并对它们进行全面比较。
  • 具体技术路线:两种架构都使用共享的视觉编码器(EVA-02-L)来提取多视角的图像特征。它们的主要区别在于如何将这些视觉特征与LLM连接起来的投影器(Projector) 设计上。
    • Omni-L (Language-centric, 语言为中心)
      • 设计理念:继承自LLaVA等成功的2D VLM,优先保证视觉-语言对齐。
      • 实现方式:采用一个简单的多层感知机(MLP)作为投影器。它将多视角图像的特征“拍平”(flatten)后,通过MLP直接映射到LLM的语言嵌入空间。为了区分不同视角的图像,它还引入了3D位置编码
    • Omni-Q (Query-centric, 感知为中心)
      • 设计理念:借鉴自Q-Former和StreamPETR等先进的3D感知模型,优先保证3D感知能力。
      • 实现方式:设计了一个更复杂的投影器。它引入两种可学习的查询(Query):感知查询(Perception Queries) 用于预测3D物体的类别和坐标,并接受3D感知任务的监督;载体查询(Carrier Queries) 则负责与图像特征进行深度交互(Cross-Attention),聚合场景信息,然后被送到LLM中。这种设计使得模型能更好地利用3D几何先验知识。
  • 创新点
    • 系统的架构对比研究:首次在自动驾驶领域,对这两种对立但都很有前景的设计范式进行了系统性的、公平的实验比较。
    • 提出两种先进的框架:Omni-L和Omni-Q本身就是两种精心设计的、能够代表各自设计理念的强大模型。

你的目标是让一位只会说语言、但看不见东西的“超级大脑”(也就是大语言模型LLM),来理解一个复杂的交叉路口的实时交通状况。路口周围安装了6个摄像头,实时画面就是我们的输入。

Omni-L (语言为中心):“拼图式”信息输入法

Omni-L 的策略是简单、直接,优先让“大脑”能看懂原始画面

  • 核心理念:我们相信这位“大脑”本身就很聪明,只要我们把所有视觉信息都喂给它,并告诉它这些信息来自哪里,它自己就能理解。关键在于视觉和语言的对齐,即让“大脑”能看懂图像。

  • 实现方式,分三步走

    1. “拍平”与“拼接”:模型首先将6个摄像头拍到的画面特征,像摊开扑克牌一样,在数字世界里把它们“拍平”,然后拼接成一幅长长的“全景图” 。这就像制作一幅画卷,把路口前后左右的所有景象都拼在了一起。
    2. 贴上“方位标签”:一个问题来了,拼接后,“大脑”怎么知道哪部分是来自左前方的摄像头,哪部分是来自正后方的?为了解决这个问题,Omni-L 在拼接时给每一块来自于不同摄像头的视觉信息都贴上一个 “3D位置编码” 的标签 。这个标签就明确告诉“大脑”:“这块画面来自你的左前方,距离你5米远”。
    3. “翻译”成大脑能懂的语言:这幅贴好标签的“全景画卷”是一种视觉语言,“大脑”听不懂。因此,需要一个非常简单的 “翻译器”(MLP投影器),把这幅画卷快速地翻译成“大脑”所熟悉的语言格式 。
  • 总结:Omni-L 的方法就像是把6张现场照片冲洗出来,在每张照片背面写上“左前方拍摄”、“正后方拍摄”,然后把这6张照片直接递给“超级大脑”,让它自己看图理解。它的优点是保留了最原始、最丰富的信息,相信大脑自身的强大理解能力

Omni-Q (感知为中心):“报告式”信息输入法

Omni-Q 的策略是专业、分工明确,优先对场景进行结构化理解

  • 核心理念:我们不直接给“大脑”看原始画面,因为信息太杂乱了。我们先派出一队专业的“现场勘查员”,让他们先把现场情况摸清楚,写成一份结构化的报告,然后我们再把这份精准的报告交给“大脑”去推理。关键在于3D感知,即先把物理世界看准。

  • 实现方式,也是三步走

    1. 派出两组“勘查员”(Queries):模型不直接看图,而是主动派出两种可学习的“勘查员”(即Queries)去图像中搜集信息 。
      • 第一组:物体定位专家(Perception Queries):这组勘查员的任务非常专一,就是去现场找到所有关键物体,比如车辆、行人、交通灯,并精确测量出它们在三维空间中的坐标 。他们最终会产出一份清单,上面写着:“在坐标(x,y,z)处发现一辆红色小车”,“在坐标(a,b,c)处发现一个行人” 。
      • 第二组:全局分析师(Carrier Queries):这组勘查员不关心单个物体,他们的任务是理解整个场景的宏观信息,比如“这是一个拥堵的十字路口”、“天气晴朗”、“整体车流在向东行驶” 。他们也会参考“物体定位专家”的发现来丰富自己的分析 。
    2. 汇总成一份“勘查报告”:最终,只有“全局分析师”的宏观分析和场景概要,会被汇总成一份简明扼要的“勘查报告” 。这份报告已经包含了场景的核心信息。
    3. “翻译”报告给大脑:同样,这份报告也需要一个“翻译器”,把它翻译成“大脑”能懂的语言。
  • 总结:Omni-Q 的方法就像是,不让“大脑”直接看照片,而是先派一个交通事故勘查小组去现场。小组里有的人负责测量车辆位置,有的人负责画现场草图和写总体描述。最后,小组长把这份图文并茂、条理清晰的 事故报告 交给“超级大脑”,让它基于这份报告做决策。它的优点是信息经过了提纯和结构化,理论上能让大脑更容易理解

  • Omni-L 是“授之以鱼,不如授之以渔”的思路。它把最原始、最完整的视觉信息(鱼塘)给LLM,相信LLM自己有能力去“捕鱼”(理解场景)。

  • Omni-Q 是“专业的人做专业的事”的思路。它先让一个专业的感知模块去“捕鱼”(识别3D物体),然后把捕好的、分门别类的鱼(结构化信息)直接交给LLM。

这篇论文的实验结果出人意料地发现,目前看来,“拼图式”的Omni-L效果更好 。这或许说明,对于当前的大语言模型来说,经过“专家提纯”的报告反而可能丢失了一些原始画面中的微妙细节,不如让它直接“看全景图”所能获取的信息多,推理效果好。

Omni-L (Language-centric): 本质是“展平+注入+对齐”

Omni-L 的设计本质上是一种直接且高效的特征对齐策略。它的核心在于将多视图的视觉信息尽可能无损地转换成一种大语言模型(LLM)能够处理的序列格式。

  • 设计理念:将LLM强大的序列处理和上下文理解能力,直接应用于融合了空间信息的视觉特征序列。模型成功的关键在于LLM自身的自注意力机制(Self-Attention)能否从这个长序列中自主学习到视觉元素间的复杂关系。

  • 技术实现细节

    1. 输入NNN个摄像头的视觉特征图,数据形态为 Fm∈RN×C×H×WF_m \in \mathbb{R}^{N \times C \times H \times W}FmRN×C×H×W
    2. 特征处理 (Flatten):模型将每个视图的 H×WH \times WH×W 特征图(通常会先通过Patch Embedding转换)视为一个token序列。然后,它将这 NNN 个token序列**直接拼接(Concatenate)**起来,形成一个非常长的、一维的视觉token序列。这个操作会导致原始图像的空间邻接关系和视图间的几何关系在结构上丢失。
    3. 空间信息补偿 (3D Positional Encoding):为了弥补“Flatten”操作丢失的几何信息,模型为每一个视觉token**加上(add)**一个对应的“3D位置编码”向量 (PmP_mPm) 。这个编码向量包含了该token来源于哪个摄像头、以及该摄像头在自车坐标系下的精确位置和朝向等三维空间信息。这样一来,即使所有token被排成了一队,LLM依然可以通过读取每个token的位置编码来重构出场景的3D空间布局。
    4. 投影器 (MLP Projector):这个模块的功能非常纯粹——维度映射。它由几个线性层和一个激活函数(如GELU)组成 。视觉编码器输出的token特征维度(例如1024)与LLM期望的词嵌入维度(例如LLaMA2的4096 )不同,MLP负责将前者变换为后者,扮演一个轻量级的“适配器”角色。
    5. 最终输入LLM:经过维度映射后,这个包含了成百上千个视觉token的长序列,与文本指令的token序列合并,一同输入到LLM中。LLM的自注意力机制需要同时处理文本和所有视觉token,计算它们之间任意两个token的相互关系。
  • 本质总结:Omni-L是一种**“蛮力”但有效**的方法。它将所有视觉信息平铺展开,通过附加编码来注入3D几何约束,然后用一个简单的线性变换将视觉空间“硬”对齐到语言空间。后续的理解任务完全交给LLM强大的自注意力机制去处理。

Omni-Q (Query-centric): 本质是“提炼+解耦+对齐”

Omni-Q 的设计本质是一种信息压缩和结构化提取的策略。它不把全部视觉信息都丢给LLM,而是通过一个中间模块(Q-Former)先对场景进行主动的“查询”和“概括”,然后才将提炼后的精华信息交给LLM。

  • 设计理念:在将视觉信息传递给LLM之前,先通过一个受3D感知任务显式监督的模块,将场景分解为结构化的3D表征和全局上下文描述。这是一种任务解耦的思想,让专门的模块做专门的事。

  • 技术实现细节

    1. 输入:同样是NNN个摄像头的视觉特征图 FmF_mFm
    2. 可学习查询 (Learnable Queries):模型初始化一小组(例如几百个)固定的、可学习的向量,这些就是“查询”(Queries)。它们分为两类:
      • 感知查询 (Perception Queries, QdQ_dQd):其目标是学习成为特定3D感知任务的“专家”,如物体检测 。
      • 载体查询 (Carrier Queries, QcQ_cQc):其目标是学习捕捉整个场景的全局上下文信息,作为传递给LLM的“信使” 。
    3. 信息提取 (Attention Mechanisms)
      • 第一步 - 自注意力:所有的查询向量(QcQ_cQcQdQ_dQd)首先进行一次内部的自注意力计算 。这允许它们互相通信,例如,让负责概括场景的QcQ_cQc知道QdQ_dQd发现了哪些重要物体。
      • 第二步 - 交叉注意力:这是最关键的一步。所有查询向量作为Attention机制中的Query,而全部的图像特征(同样添加了3D位置编码)作为KeyValue 。通过这个过程,每个查询向量会主动地从海量的图像特征中“拉取”与自己任务最相关的信息。计算完成后,查询向量就从初始状态变成了“载入了”场景信息的“激活”状态。
    4. 任务解耦与监督
      • “激活”后的感知查询 QdQ_dQd 被送入专门的预测头(比如用于回归3D边界框的MLP),并由3D物体检测的损失函数进行监督 。这个过程强迫QdQ_dQd必须学会理解场景的几何结构。
      • “激活”后的载体查询 QcQ_cQc 则被认为是场景的浓缩摘要,它将被送往LLM 。
    5. 投影器:只有载体查询 QcQ_cQc 的特征向量(数量少且固定)会被送入一个MLP进行维度映射,最终对齐到LLM的嵌入空间 。
  • 本质总结:Omni-Q构建了一个信息瓶颈(Information Bottleneck)。它用一小组固定的查询向量作为“探针”,通过交叉注意力机制去“蒸馏”海量的视觉信息,输出一个长度固定、高度概括、并被3D几何任务校准过的紧凑表征。这是一种先感知理解、后语言生成的流水线模式。

特性Omni-L (展平+注入+对齐)Omni-Q (提炼+解耦+对齐)
视觉处理方式拼接(Concatenation):将所有视觉token平铺成一个长序列。查询(Querying):用少量可学习向量通过注意力机制主动提取信息。
输入LLM的视觉信息量多且可变:所有视图的所有视觉token,数量庞大。少且固定:仅有固定数量的载体查询(Carrier Queries)token。
3D信息的作用后验补偿:作为附加编码,帮助LLM理解被“拍平”的序列。先验引导:在交叉注意力阶段就指导查询向量提取具有几何一致性的特征。
训练监督方式投影器仅由最终的文本生成Loss隐式监督。投影器由文本生成Loss(来自QcQ_cQc)和3D感知Loss(来自QdQ_dQd)共同显式监督。

4. 实验设计与验证

实验设置
  • 训练策略:采用两阶段训练。第一阶段在2D图像任务上进行预训练,以初始化投影器;第二阶段使用新构建的OmniDrive数据集在3D驾驶任务上进行微调。
  • 数据集
    • 训练/微调:OmniDrive数据集。
    • 评估:在三个不同的任务上进行评估:
      1. 开环规划:使用nuScenes数据集的标准基准。
      2. 问答能力:使用DriveLM数据集,这是一个综合性的驾驶问答基准。
      3. 反事实推理:在OmniDrive的测试集上进行评估。
  • 评价指标
    • 开环规划:L2距离误差、碰撞率(Collision Rate)、驶出边界率(Intersection Rate)。
    • 问答能力 (DriveLM):语言生成指标(CIDEr等)、多选题准确率、ChatGPT评分等综合分数。
    • 反事实推理:通过GPT-3.5提取答案中的关键词(如“碰撞”、“安全”、“闯红灯”等),并与真实标签比较,计算精确率(Precision)和召回率(Recall)。
核心想法验证
  1. 验证OmniDrive数据集的有效性
    • 通过在DriveLM基准上进行测试,结果表明,使用了OmniDrive进行预训练的模型,其性能得分显著优于未使用该数据集的模型(分数从53%提升到56%)。
    • 在开环规划任务中,经过OmniDrive Q&A数据训练的模型,其碰撞率和驶出边界率也显著降低(例如,Omni-L的碰撞率从3.22%降至1.90%)。这证明了数据集的有效性。
  2. 验证Omni-L与Omni-Q的性能差异
    • 通过在上述所有任务中直接比较两者的性能。实验结果一致表明:
      • 开环规划反事实推理任务中,Omni-L的综合表现优于Omni-Q。
      • 语言能力(CIDEr分数)上,Omni-L也显著高于Omni-Q。
    • 这有力地证明了,在当前技术水平下,从强大的2D VLM出发、优先保证视觉-语言对齐的Omni-L路线是更直接、更有效的。
消融实验设计
  • 3D感知监督对Omni-Q的影响:在训练Omni-Q时,分别移除了3D物体检测和车道线检测的监督任务。结果显示,移除这些监督后,Omni-Q在碰撞检测等相关任务上的性能明显下降 ,证明了其感知优先设计的有效性。
  • Ego Status的影响:在规划任务的对比表中,所有模型都报告了使用和不使用车辆自身运动状态(Ego Status)的结果。结果显示,Ego Status对性能提升巨大,但论文也指出大模型尤其容易对此产生过拟合。

总结与评价

论文核心贡献

本文的核心工作是提出了一个名为OmniDrive的、用于自动驾驶的整体视觉-语言框架。

  1. 技术贡献:它通过引入反事实推理,创造性地解决了自动驾驶训练数据中监督信号稀疏的核心问题。为此,它设计并实现了一套可扩展的、基于GPT-4的数据生成流水线。
  2. 数据集贡献:产出了OmniDrive数据集,实验证明该数据集能有效提升模型在多种下游任务(规划、问答)中的性能。
  3. 认知贡献:通过设计和全面比较Omni-LOmni-Q两种架构,系统地探索了自动驾驶VLM的一个根本性设计难题,并给出了一个清晰的结论:当前阶段,优先保证视觉-语言对齐(Omni-L的思路)比优先集成3D感知模块(Omni-Q的思路)是更有效的设计路径
评价
  • 优点

    • 切入点精准:论文准确地抓住了当前领域的核心痛点——数据监督稀疏和模型可解释性差,并提出了一个非常直观且有效的解决方案——反事实推理,这非常符合人类的驾驶思维模式。
    • 研究完整且扎实:工作非常完整,不仅提出了新的数据集构建方法,还产出了数据集,并进一步探索了模型架构,形成了一个从数据到模型的闭环研究。实验设计充分,对比和消融实验有力地支持了其核心观点。
    • 结论具有指导意义:关于Omni-L优于Omni-Q的发现,为后续的研究者提供了非常宝贵的实践指导,避免了在复杂的模型设计中走弯路。
  • 局限性与未来展望

    • 论文也坦诚地指出了其局限性,即当前的反事实模拟还停留在**“开环”** 阶段,没有考虑场景中其他交通参与者(如其他车辆、行人)对模拟行为的动态反应。例如,“如果我突然变道,后方的车辆会减速还是会撞上来?”这是一个更复杂的 “闭环” 模拟问题。
    • 这为未来的工作指明了方向:随着闭环仿真技术的发展,可以将其与反事实推理相结合,生成更加真实和动态的训练数据,从而进一步提升自动驾驶智能体的决策水平。
http://www.dtcms.com/a/335553.html

相关文章:

  • 在云服务器上部署springBoot+vue前后端分离项目
  • 数据结构代码分享-1 顺序表
  • 数字人视频互动技术对比
  • 云计算-k8s实战指南:从 ServiceMesh 服务网格、流量管理、limitrange管理、亲和性、环境变量到RBAC管理全流程
  • Day07 缓存商品 购物车
  • 【远程桌面】从RustDesk服务器看UDP对比WebRTC
  • es下载、安装、部署以及集成和mysql数据同步
  • 给纯小白的Python操作Word笔记
  • gin结合minio来做文件存储
  • The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
  • css: word pacing属性
  • 哈希表与unorder_set,unorder_map的学习
  • Spring 源码学习(十一)—— webmvc 配置
  • 【JavaEE】多线程初阶3:死锁 + 线程安全 + volatile 关键字
  • 已开源:Highcharts.NET,Highcharts Android,与Highcharts iOS集成
  • VS Code配置MinGW64编译Apache Arrow C++库
  • 2025年服装工厂生产管理系统软件推荐
  • 远程桌面管理工具 - 交互式版本
  • 达梦数据库常见的重要巡检语句
  • Qt5 的基础知识
  • 【UEFI系列】ACPI
  • 51单片机-驱动独立按键模块教程
  • 类的静态成员的定义、调用及继承详解【C++每日一学】
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月17日第163弹
  • 深度学习-计算机视觉-数据增广/图像增广
  • 《MATLAB绘图进阶教程》主要内容与专栏目录(持续更新中。。。)
  • GitHub 热榜项目 - 日榜(2025-08-17)
  • 智能体与MCP的核心流程和差异点(适合初学者)
  • IDEA飞算插件测评:重塑AI编码价值的实战体验
  • 【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)