DriveVLM 论文学习
论文链接:https://arxiv.org/abs/2402.12289
解决了什么问题?
自动驾驶对交通行业有着革命性的作用,实现 FSD 的一个主要障碍就是场景理解。场景理解涉及在复杂且不可预测的环境中进行导航,这些环境可能包括恶劣的天气条件、复杂的道路布局以及不可预测的人类行为。现有的自动驾驶方案,通常包括 3D 感知、运动预测和规划,处理这些极具挑战性的场景理解问题是比较困难的。3D 感知存在局限性,倾向于检测和跟踪熟悉的目标,可能会忽略不常见的目标及其属性;运动预测和规划则关注于轨迹层面的行为,通常会忽略目标和车辆之间的决策级交互,没有充分考虑道路使用者之间的复杂互动。
相关工作
视觉-语言模型 VLMs
最近,在 VLM 领域涌现了大量的优秀工作,如 MiniGPT-4、LLaVA 和 Qwen-VL 等。VLM 能够应用在不同的场景中,尤其在机器人领域,VLM 能输出相应的动作,这些动作可以是高层级指令或低层级的动作。DriveVLM 将 VLM 应用于自动驾驶领域。
Learning-based Planning
自从 Pomerleau 的开创性工作以来,将学习框架整合到运动规划一直是研究的活跃方向,这包括使用机器学习方法来改进自动驾驶车辆和机器人的运动规划能力。一条有前景的研究方法是结合强化学习和模仿学习,这些方法可以学习一个端到端的规划策略,直接将原始的传感器输入映射为控制动作,无需复杂的中间表示。有一些工作通过构建密集的代价图(cost maps)来提高可解释性,这些代价图是从学习模块派生出来的。代价图是一种表示不同路径或行为的地图,用于指导运动规划决策。最近的一个趋势是以端到端的方式训练多个模块,这些方法能增强整体表现,但是依赖于未来轨迹预测损失的反向传播,决策过程缺乏可解释性。
驾驶字幕数据集
Driving caption dataset 是一种专门用于自动驾驶研究的数据集,它包含了驾驶场景的视频以及对应的文本描述。这些文本描述通常包括对视频中车辆行为的叙述(action narration)和对行为原因的推理。自然语言描述是联系人类知识和驾驶目标的重要媒介,有助于了解自动驾驶系统的决策和行为。Refer-KITTI 数据集对 KITTI 数据集中的物体做了语言提示注释,有助于系统通过自然语言来识别和引用多个物体。Talk2Car、NuPrompt、nuScenes-QA 引入了自由形式的字幕和文本标注。BDD-X 和 BDD-OIA 提供了带有自车行为和交通场景语言解释的数据集,这些数据集通过语言描述来增加对自车行为的理解。虽然这些数据集提供了一些场景来应用自然语言,但是它们覆盖的深度和范围都不够,缺乏关键的安全场景的数据。
提出了什么方法?
作者提出了 DriveVLM,它利用了视觉-语言模型(VLMs)来强化场景理解和路径规划能力。DriveVLM 包含了一个由三个核心模块组成的思维链(CoT):场景描述、场景分析和层级规划。场景描述模块用自然语言描述驾驶环境,识别出场景内关键的目标(车辆、行人、交通标志、信号灯等);场景分析模块专注于关键目标的特性(速度、大小、方向和可能的行为)以及它们对自车的影响;分层规划模块负责制定计划,从元动作(meta-actions)和决策描述到具体的路径点,规划过程从高层次的抽象动作(如“变道”、“超车”)开始,逐步细化到具体的操作(如通过特定的路径点)。这些模块分别对应了传统智驾方案的感知、预测、规划流程,区别是这些模块处理的是目标感知、意图级预测和任务级规划。这表明这些模块不仅是执行基础的感知和规划任务,而是在更深的层次上工作,这在过去是很难做到的。
意图级预测,指的是系统不仅要预测其他道路使用者可能的行动轨迹,还要预测他们的意图和目的,这需要对人类行为有更深入的理解。
任务级规划,指的是系统在规划时不仅考虑简单的路径规划,还要考虑更复杂的任务,如在特定情况下需要执行的特定动作或决策。
尽管 VLM 在视觉理解方面很强,但在空间定位和推理方面存在局限性,并且它们需要消耗大量的计算资源,作者提出了 DriveVLM-Dual,该混合系统结合了 DriveVLM 和传统自动驾驶系统的优势。DriveVLM-Dual 整合了 3D 感知和规划模块,如 3D 目标检测器、占用网络和运动规划器,能更好地理解目标在三维空间的位置,并且通过高频的路径规划,适应快速变化的驾驶环境。双系统设计类似于人脑的快速和慢速思维过程,可以高效地适应不同复杂性的驾驶场景,灵活地处理简单和复杂的驾驶情况,提高自动驾驶的适应性和安全性。
作者定义了场景理解和规划(SUP)任务,该任务涉及理解和分析驾驶场景,并基于这些理解来规划车辆的行为。为了评估 DriveVLM 在场景分析和 meta-action 规划方面的能力,作者提出了新的评价指标。针对 SUP 任务,作者进行了全面的数据挖掘和标注工作,创建了一个 SUP-AD 数据集,包含了大量的驾驶场景样本,用于训练和测试自己的自动驾驶方案。作者在 nuScenes 数据集和 SUP-AD 数据集上做了实验,证明了 DriveVLM 和 DriveVLM-Dual 的性能,它能够处理复杂的、难以预测的驾驶场景。DriveVLM-Dual不仅在实验中表现出色,而且超越了现有的端到端运动规划方法(端到端运动规划是指直接从感知输入到驾驶决策的连续处理过程)。最终,作者在一个量产车型上部署了 DriveVLM-Dual 方案,验证它在真实场景中的效果。
概览
DriveVLM 的架构如下图所示。通过一个 VLM 来处理一组输入图像,进行特殊的 CoT 推理,推导出驾驶规划的结果。DriveVLM 包括一个视觉 transformer 编码器和一个大语言模型。视觉编码器产生图像 tokens,然后一个基于注意力的提取器通过 LLM 来对齐这些 tokens。推理过程可以分为三个模块:场景描述、场景分析和分层规划。
在真实场景的部署中,作者提出了一个混合系统 — DriveVLM-Dual。它结合了 DriveVLM 和传统自动驾驶方案的优点。
场景描述
场景描述模块负责描述驾驶环境,并识别出重要的目标。
环境描述
驾驶环境,如天气和道路条件,对驾驶难度有显著的影响。因此,需要对这些环境因素进行详细的描述和分析,以便更好地理解和预测它们对驾驶行为的影响。首先模型被提示输出驾驶环境的文本描述 E E E,这个描述包括几个条件: E = { E w e a t h e r , E t i m e , E r o a d , E l a n e } E=\{E_{weather}, E_{time}, E_{road}, E_{lane}\} E={Eweather,Etime,Eroad,Elane},每个都表示驾驶环境的一个关键方面。
-
天气组成 E w e a t h e r E_{weather} Eweather 包括从晴天到雪天的场景,影响能见度和车子的牵引力。
-
时间组成 E t i m e E_{time} Etime 区分白天和黑夜,由于能见度变化,也会影响驾驶策略。在夜间驾驶时,能见度降低,需要更多的注意力和不同的驾驶技巧。
-
E r o a d E_{road} Eroad 表示道路类型,如城市道路和高速公路,引入了不同的挑战。不同类型的道路有不同的交通规则、速度限制和驾驶环境,这都会影响驾驶决策。
-
E l a n e E_{lane} Elane 表示车道条件,关注当前的车道定位和可能的机动操作,这对于安全的驾驶决策至关重要,了解车辆在车道中的位置和即将进行的变道或转弯对于避免交通事故和遵守交规非常重要。
关键目标识别
除了环境条件,驾驶场景中的各类目标也极大地影响驾驶行为。传统的自动驾驶感知模块在一个特定的范围内检测物体,而本文作者受到人类司机在驾驶时的认知过程启发,只关注于重要目标的识别,而这些目标最有可能影响当前的场景。每个关键目标都标注为 O c O_c Oc,包括两个属性:目标类别 c c c 和它在图像上的边框坐标 b ( x 1 , y 1 , x 2 , y 2 ) b(x1,y1,x2,y2) b(x1,y1,x2,y2)。作者将类别和坐标映射到语言模态中对应的语言 t o k e n _ i d token\_id token_id,从而无缝地融合到后续的模块中。此外,DriveVLM 利用了预训练视觉编码器,能识别出长尾的重要目标,传统的 3D 目标检测器可能会检测不到,如道路杂物或小动物。
场景分析
在传统的自动驾驶方案中,预测模块通常关注在预测目标的未来轨迹上。VLM 的出现能提供我们更多的能力,更全面地分析当前的场景。场景级分析能汇总所有重要的目标和环境描述,提供关于场景的全面的理解,然后输入后续的规划模块使用。
重要目标分析
DriveVLM 从三个方面表示重要目标的特征:静态属性 C s C_s Cs、运动状态 C m C_m Cm 和特殊行为 C b C_b Cb。
- 静态属性 C s C_s Cs 描述物体的内在特性,如路边广告牌的视觉信息和卡车超尺寸的货物,这些属性对于预测和规避潜在危险非常重要。
- 运动状态 C m C_m Cm 表示物体在一段时间内的运动变化,包括位置、方向和行为,这些特征对于物体的未来轨迹和自车的潜在交互非常重要。
- 特殊行为 C b C_b Cb 是物体可能采取的特殊动作或手势,这些行为可能直接影响自车的下一个驾驶决策。
并不是所有的物体都需要分析这三个方面的特征,在实际应用中,通常只有一到两个特征适用于关键物体。基于这些特征的分析,DriveVLM 能预测每个关键物体对自车的潜在影响,有助于自动驾驶系统作出更加安全、更加合理的决策。
分层规划
然后将场景级描述与路线、自车姿态和速度相结合,形成一个规划用途的提示。最后,DriveVLM 在三个阶段逐步地产生驾驶规划:meta-actions、决策描述和轨迹路径点。
Meta-actions A A A
元动作 a i a_i ai,表示驾驶策略的短期决策。这些动作有 17 个类别,包括但不受限于加速、减速、左转、变道、小幅度位置调整和等待。为了规划自车在未来一定时间内的操作行为,本方法输出一序列的元动作。
决策描述 D D D
决策描述 D D D 详细说明了自车更细粒度的驾驶策略。包括三个元素:动作 A \mathcal{A} A、主体 S \mathcal{S} S和持续时间 D \mathcal{D} D。动作是关于元动作,如“转弯”、“等待”或“加速”。主体是指交互物体,如行人、交通信号、某一条车道。持续时间表明动作持续的时间范围,它什么时刻开始和进行多久。
轨迹路径点 W W W
有了决策描述 D D D 后,下一步就是生成相应的轨迹点。这些路径点记作 W = { w 1 , w 2 , . . . , w n } , w i = ( x i , y i ) W=\{w_1, w_2,...,w_n\}, w_i=(x_i, y_i) W={w1,w2,...,wn},wi=(xi,yi),代表自车在未来一段时间内的路径,时间间隔设定为 Δ t \Delta t Δt。为了做自回归生成,本文方法将这些数值路径点映射为自然语言 tokens。
DriveVLM-Dual
VLM 的推理速度比较慢,对空间和运动的理解不够准确。于是作者提出了 DriveVLM-Dual,将 DriveVLM 和传统的自动驾驶系统结合起来。这个方法包括两个核心策略:融合关键目标分析的 3D 感知、高频的轨迹修正。
融合 3D 感知
将 3D 检测器预测的物体记作 O 3 D = { c 3 D i , b 3 D i } O_{3D}=\{c_{3D}^i, b_{3D}^i\} O3D={c3Di,b3Di},其中 b 3 D i b_{3D}^i b3Di 表示第 i i i 个边框, c 3 D i c_{3D}^i c3Di 表示类别。3D 边框然后映射到 2D 图像上,得到对应的 2D 边框 b 2 D i b_{2D}^i b2Di。在 2D 框 b 2 D i b_{2D}^i b2Di 和 b c j b_{c}^j bcj 之间做 IoU 匹配。 b c j b_{c}^j bcj 是之前识别的重要目标 O c r i t i c a l = { c c j , b c j } O_{critical}=\{c_c^j, b_c^j\} Ocritical={ccj,bcj} 的 2D 边框。如果一个目标和某个重要目标之间的 IoU 大于设定的阈值 τ \tau τ,而且它们的类别相同,则将其分类为匹配上的重要目标 O c m a t c h e d O_c^{matched} Ocmatched,定义为:
O c m a t c h e d = { c c j , b c j } , if c c j = c 2 D i and aIoU ( b c j , b 2 D i ) > τ , where aIoU ( b c j , b 2 D i ) = S b c j ∩ b 2 D i S b 2 D i O_c^{matched}=\{c_c^j, b_c^j\},\ \ \text{if}\ c_c^j=c_{2D}^i\ \text{and}\ \text{aIoU}(b_c^j, b_{2D}^i)>\tau, \ \text{where aIoU}(b_c^j, b_{2D}^i)=\frac{S_{b_c^j \cap b_{2D}^i}}{S_{b_{2D}^i}} Ocmatched={ccj,bcj}, if ccj=c2Di and aIoU(bcj,b2Di)>τ, where aIoU(bcj,b2Di)=Sb2DiSbcj∩b2Di
3D 数据中,没有对应匹配的重要目标被标记为 O c u n m a t c h e d O_c^{unmatched} Ocunmatched。
-
在场景分析模块,对于 O c m a t c h e d O_c^{matched} Ocmatched,对应 3D 目标的中心坐标、朝向角、历史轨迹作为模型的语言提示使用,帮助目标的分析。
-
对于 O c u n m a t c h e d O_c^{unmatched} Ocunmatched,只使用由图像推导出的语言 tokens 来分析。该设计使 DriveVLM-Dual 能更准确地理解重要目标的位置和运动,增强整体性能。
高频轨迹优化
为了实现实时的高频推理能力,作者加入了一个传统的规划器,产生一个 slow-fast 的双系统,结合了 DriveVLM 的优异表现和传统规划方法的效率。以较低的频率从 DriveVLM 得到一段轨迹后,记作 W s l o w W_{slow} Wslow,将其作为经典的高频轨迹优化方法的参考轨迹。针对基于优化的规划器, W s l o w W_{slow} Wslow 作为优化方法的初始方案使用。针对基于神经网络的规划器, W s l o w W_{slow} Wslow 作为输入 query 使用,和额外的输入特征 f f f 结合,然后解码为新的规划轨迹 W f a s t W_{fast} Wfast。这个过程表述为:
W f a s t = Planner ( [ W s l o w , f ] ) W_{fast} = \text{Planner}([W_{slow}, f]) Wfast=Planner([Wslow,f])
这个优化步骤确保了 DriveVLM-Dual 产生的轨迹质量更高,并满足实时的要求。实际使用时,这两个分支以 slow-fast 的方式异步执行,传统自动驾驶分支的规划器分支能够将 VLM 分支的轨迹输出作为额外的输入使用。
任务和数据集
为了充分地挖掘 DriveVLM 和 DriveVLM-Dual 处理复杂长尾场景的潜力,作者定义了一个任务叫做规划意图的场景理解,和一组评价指标。此外,作者提出了一个数据挖掘和标注协议,创建了一个场景理解和规划数据集。
任务定义
规划意图的场景理解定义如下。输入包括环视相机的多视图视频 V \mathcal{V} V,以及可选的感知模块输出的 3D 感知结果 P \mathcal{P} P。输出包括下面几个部分:
- 场景感知 E E E:包括天气条件 E w e a t h e r E_{weather} Eweather、时间 E t i m e E_{time} Etime、道路条件 E r o a d E_{road} Eroad、车道条件 E l a n e E_{lane} Elane。
- 场景分析 S S S:包括目标级分析和场景级摘要。
- 决策描述 D D D:驾驶决策的详细描述。
- 轨迹路径点 W W W:描述自车规划轨迹的路径点。
评价指标
为了全面地评价模型的表现,我们关心驾驶场景和决策的可解释性。因此,评价有两个方面:场景描述/分析评价、元动作的评价。
场景描述/分析评价
在场景描述中,考虑到人类评估具有主观性,为了减少主观性的影响,作者采用了一种结构化的方法,使用预训练的大语言模型来评估。该方法比较生成场景描述和人类标注的 ground-truth 描述。Ground-truth 描述由结构化的数据组成,如环境条件、导航、车道信息和重要事件(包含特定的目标、谓语和产生的影响)。LLM 根据生成的描述和 ground-truth 之间的一致性,对其做评价和打分。
元动作评价
元动作是一组事先定义好的决策选项。作者将一个驾驶决策表述为一个元动作序列。该评价方法使用了动态规划算法来比较模型输出的序列和人工标注的 ground-truth 序列。在评价过程中,还需要考虑各种元动作的重要性,将某些动作指定为“保守动作”,这些动作对整体上下文的影响较小。为了增强鲁棒性,首先使用 LLM 生成与真实序列在语义上等价的替代序列,这样做可以提供多个有效的参考点,以应对真实世界中可能的多样性和变化。与这些替代序列相似度最高的序列将用来计算最终的驾驶决策得分,这意味着评价模型的性能不只是基于与单一的真实序列的匹配度,而是基于与一组可能的、语义上等价的序列的相似度。
数据集构建
作者提出了一个全面的数据挖掘、标注方案来构建规划意图的场景理解(SUP-AD)数据集,如下图所示。特别地,作者从一个大规模数据集里做长尾目标和困难场景的挖掘,搜集样本,然后选择每个样本的关键帧来进一步做场景标注。
长尾目标挖掘
根据真实世界道路目标的分布,作者首先定义了一组长尾目标的类别,如异形车辆、道路异物、穿越道路的小动物等。然后,作者使用一个基于 CLIP 的搜索引擎来挖掘这些长尾场景,使用自然语言 queries 来挖掘驾驶数据。随后,通过人工审核,过滤掉与特定类别不一致的场景。
困难场景挖掘
除了长尾目标,我们也要挖掘出困难的场景,需要根据驾驶条件来调整自车的驾驶策略。作者根据记录的驾驶行为的差异性来挖掘这些场景。
关键帧选取
每个场景其实就是一个视频 clip,我们要识别出其中的关键帧来标注。在大多数场景中,关键帧就是速度和方向发生明显变化的时刻。基于充分的测试,作者选取实际操作之前 0.5 秒到 1 秒的帧作为关键帧,确保决策有最佳的反应时间。对于驾驶行为没有变化的场景,作者选择与当前驾驶场景相关的帧作为关键帧。
场景标注
作者使用了多位标注人员来进行场景标注,包括场景描述、场景分析、规划。路径点是用车辆的 IMU 数据自动标注的。为了提高场景标注的效率,作者制作了一个视频标注工具,
- 标注员能够来回滑动进度条,回放视频的某一部分;
- 标注某一关键帧时,标注员能够在图像上标注边框和自然语言描述;
- 标注员能够从一组动作和决策的候选项中选择,标注驾驶规划。
每个标注都是由三名标注人员仔细地审核,保证准确率和效率,确保模型训练的数据足够可靠。图2 展示了一个带有详细标注的样本场景。
实验
设定
作者在 SUP-AD 数据集和 nuScenes 数据集上测试了 DriveVLM 和 DriveVLM-Dual。
SUP-AD 数据集
SUP-AD 数据集是用本文的数据挖掘和标注方案构建的。它按照 7.5:1:1.5 的比例被分为训练、验证和测试集。作者在训练集上训练模型,在测试集上使用作者提出的场景描述和元动作评价方案来测试模型。作者也使用额外的数据集来 co-tuning 模型,确保 LLM 的泛化性。
nuScenes 数据集
nuScenes 数据集是一个大规模的城市场景的驾驶数据集,有 1000 个场景,每个场景长度大约为 20 秒。作者使用了 Displacement Error 和 Collision Rate 作为模型表现的评测指标。
Co-tuning
为了保留 LLM 在微调过程的泛化能力,作者使用多个数据集做 co-tuning。这些数据集包括 Talk2Car、BDDX、Drama、SUTD、LLAVA。对于每个数据集,作者根据 SUP-AD 和 nuScenes 数据集的体量,按照 1:1 的比例随机选择样本。然后,作者发现,在场景描述和元动作的评测方法下,SUP-AD 数据集的分数没有变,同时保留了 LLM 原来的能力和泛化性。
基线模型
作者使用 Qwen-VL 作为默认的视觉-语言模型,它在问答、视觉定位和文本识别方面具有很强的能力。它包括 96 亿个参数,包括视觉编码器(19亿)、视觉-语言适配器(8000万)、大语言模型(Qwen, 77亿)。将图像缩放为 448 × 448 448\times 448 448×448 的分辨率,然后输入视觉编码器。训练时,随机选择一组图像(当前时刻 T T T、 T − 1 T-1 T−1、 T − 2 T-2 T−2、 T − 3 T-3 T−3)作为输入。确保了选取的图像包含了当前的时间,以递增的时间序列排列。
结果
SUP-AD
在表1中,作者展示了 DriveVLM 和其他几个 VLM 的性能。DriveVLM 使用了 Qwen-VL 作为主干,取得了最佳的表现,因为它在问答任务有着很强的表现。尽管 GPT-4V 在视觉和语言处理上有着鲁棒的性能,但它不能微调,只能通过上下文学习来获取新知识,在场景描述任务上,GPT-4V 可能会生成一些无关的额外信息。在本文的评价标准下,额外的信息通常会被归类为“幻觉”,使其在评价指标上的分数比较低。
上下文学习是指模型通过观察给定任务的示例来学习如何执行该任务,而不是通过传统的模型参数微调方式。
nuScenes
如下表所示,DriveVLM-Dual 在 nuScenes 规划任务上取得了 SOTA 的表现。证明本文的方法在常见的场景也能表现优异。
消融实验
模型设计
为了更好地理解 DriveVLM 各模块的作用,作者进行了不同组合的消融实验,如下表所示。重要目标分析使模型能够识别并优先处理驾驶场景中的重要元素,增强决策的准确率,使导航更加安全。融入 3D 感知结果后,模型能提升对周围环境的理解能力,预测得更加准确。
传统的 AD 流程
为了证明 DriveVLM-Dual 双系统设计的泛化性,作者在 nuScenes 验证集上测试了不同的传统的自动驾驶流程。如下表所示,DriveVLM-Dual 适应不同的 AD 流程。尽管单独的 MLP 方法与 VAD 有明显的差距,但 DriveVLM-Dual 变种方法都取得了几乎一致的性能,强调了双系统设计的效果和鲁棒性。
定性结果
下图展示了 DriveVLM 的定性结果。在左图中,DriveVLM 准确地预测了当前场景的条件,关于靠近的电动车,它做出了深思熟虑的规划决策。在右图中,DriveVLM 准确地理解了交警的手势,让自车向前行进,也考虑到了右边运动中的三轮车,因此做出了合理的决策。这些定性结果证明模型的优异性能,能理解复杂的场景、做出适合的驾驶规划。
上车部署和测试
作者在一辆部署了两块 OrinX 处理器的自动驾驶车辆上部署了 DriveVLM-Dual,将高频的端到端驾驶系统部署在 OrinX-1 上,将 DriveVLM 部署在 OrinX-2 上。这俩系统以异步的方式执行和协作。此外,作者优化了 DriveVLM,在 OrinX 上的推理速度达到了 410ms。视频验证效果可以在 https://www.youtube.com/watch?v=MMCO0TLMT74 观看。
作者进行了多项对比实验,为边端部署提供了一些思路。注意,所有的 VLMs 都是在常用的数据集和本文专门的自动驾驶数据集上预训练和微调的。
基线 LLM
由于车辆硬件的内存和带宽限制,作者无法使用过大的 LLM 来保持实时性。因此,作者选择了参数量低于 40 亿的模型。如下表所示,实验表明在 Orin 架构上,"层宽且层数少"的 Qwen 系列要比“层窄且层数多”的模型要推理得快。
视觉编码器
在自动驾驶领域,高分辨率图像对于细粒度视觉理解非常关键。如下表,与基础的 ViT 相比,作者研究了其他的视觉编码器,包括不同的 GridPatch 策略和位置编码插值方法。最终,为了实时推理,作者选择了更加简单的 SigLIP-L-384 模型和位置编码插值,能取得较高的分辨率输入。
视觉 Token 压缩
为了解决高分辨率图像带来的计算负担,作者使用 LDPNetV2 降低了 75 % 75\% 75% 的图像 tokens 个数,而没有牺牲表现,如下表所示。此外,作者将 LDPNetV2 的平均池化层替换为一个卷积层,增强表现。
视频输入
在自动驾驶场景,需要更多的时域上下文来准确地评价目标的运动变化。作者使用了一个短时间的 memory bank 策略,在一个特征队列中储存历史帧的视觉特征。只提取当前时刻的特征,和多个历史帧的特征融合,然后输入 LLM。除了时空池化,作者增加了 SE 模块来加权融合多个时域帧。
投机采样
使用投机采样来加速推理,抢先生成可能的输出。该方法显著提升了预测的速度,不会造成明显的准确率损失。如下表所示,作者测试了两种采样方法:Medusa 和 Eagle。Eagle 在解码延迟上取得了 2.7 × 2.7\times 2.7× 的加速,Medusa 取得了 2.17 × 2.17\times 2.17× 的加速,使实时的车载部署成为可能。
投机采样(Speculative Sampling)是一种用于加速大型语言模型(LLM)推理过程的方法。在自回归模型中,通常需要逐步串行地解码,每次生成一个Token,这个过程受限于内存访问带宽,成为推理速度的瓶颈。为了解决这个问题,投机采样采用了以下策略:
使用两个模型:一个小型的草稿模型(Draft Model)和一个大型的目标模型(Target Model)。草稿模型参数较少,可以快速生成一系列Token,而目标模型则参数较多,生成质量更高。
草稿模型生成Token:草稿模型首先生成一系列可能的Token序列。
目标模型验证:然后,目标模型并行验证这些Token,如果验证通过,则接受这些Token作为输出。
Medusa和Eagle是两种采用投机采样策略的方法:
Medusa:Medusa方法遵循投机采样框架,通过增加多个解码头(Decoding Heads)来并行预测多个Token,从而减少推理延迟。Medusa的关键组件包括Medusa头和树注意力机制,这些组件可以提高生成效率,同时保持高准确率。
EAGLE:EAGLE方法则是在特征层面上进行投机采样,使用一个轻量级的自回归头(Auto-regression Head)来预测原始LLM的特征,然后使用原始LLM的冻结分类头来预测下一个词。这种方法通过在特征层面上进行预测,而不是直接在Token层面上,从而提高了效率。
SUP-AD 数据集
元动作
元动作统计
使用元动作序列来表示驾驶策略,元动作可以分类为 17 个类别。作者在下图中展示了每个元动作类别在元动作序列中排列第一、第二和第三的分布情况。这表明在 SUP-AD 数据集中,元动作相当的多样化。在下图中,作者也展示了每个场景中,元动作的长度分布。大多数场景包括两个或三个元动作,少数复杂的场景中包含了四个甚至更多的元动作。
元动作标注
根据未来帧的驾驶策略,人工标注每个场景的元动作序列。这些元动作包括一个完整的驾驶策略,和自车的未来轨迹保持一致。它们可以分为三个主要类别:
- 速度-控制动作。通过分析自车的状态数据,特别是加速度和制动信号,可以识别出车辆正在进行的特定驾驶动作。这些动作包括:加速、减速、快速减速、缓慢直行、匀速直行、停止、等待、倒车。
- 转向动作。从转向信号可以推导出,这些动作包括左转、右转、调头。
- 车道控制动作。包括车道选择决策,这些动作是从方向盘信号和地图或感知数据的组合得到的。具体动作包括:向左变道、向右变道、轻微左移、轻微右移。
场景类别
SUP-AD 数据集包括 1000 个驾驶场景的视频 clips。如下图所示,它包括了各种驾驶场景,超过 40 个类别。下面是一些场景的解释:
- AEB 数据:自动紧急刹车数据。
- 道路施工:临时的施工区域,有警告标志、路障和施工设施。
- 近距离切入:其他车辆突然插入自车所在车道的行为。
- 环岛:一种交通路口,车辆在一个连续的环形道路上行驶。
- 动物横穿马路:动物在自动驾驶车辆前方横穿道路。
- 刹车:人类驾驶员操作自车时踩下刹车。
- 交警:交警在管理和指挥交通。
- 切入到其他车辆:自车插入到其他车辆的车道中。
- 匝道:连接高速公路主路和分支道路的弯曲道路。
- 道路上的异物:道路上的各种碎片或垃圾。
- 窄路:需要谨慎驾驶的狭窄道路。
- 行人突然出现:行人突然在自动驾驶车辆前方出现,可能需要减速或刹车。
- 公交车上的广告人物:公交车上的广告可能干扰感知系统,因为广告上的人物可能被误认为是真实的行人。
- 并入高速:指从低速道路驶入高速道路,通常需要加速以匹配高速路上的车辆速度。
- 障碍门:可以升起以阻挡道路的障碍物。
- 倒下的树木:指道路上的倒树,需要谨慎驾驶以避免潜在危险。
- 复杂环境:指需要谨慎驾驶的复杂驾驶环境。
- 混合交通:指车辆、行人和自行车等在同一或相邻道路上出现的拥堵情况。
- 过河:指通过桥梁过河。
- 屏幕:指道路一侧的屏幕,可能会干扰感知系统。
- 牛羊群:指乡村道路上的牛羊群,需要小心驾驶以避免惊扰这些动物。
- 弱势道路使用者:指更容易在道路上受伤的使用者,如行人、自行车手和摩托车手。
- 有碎石的道路:指布满碎石的尘土飞扬的道路。
- 摩托车和三轮车:指这些类型的车辆可能出现在道路上。
- 交叉路口:指多条道路相交的地方。
- 持伞行人:指下雨天持伞的行人。
- 载车车辆:指运输其他车辆的大型车辆。
- 载树枝的车辆:指运输树枝或其他长物体的车辆。
- 载管车辆:指运输管道的车辆。
- 婴儿车:指推婴儿车的人。
- 儿童:指在道路上可能出现的儿童。
- 隧道:指通过山体或地下的道路。
- 下行匝道:指从主路通往辅路的斜坡。
- 人行道摊贩:指在人行道上设置的摊位。
- 雨天:指下雨天气。
- 穿越铁路:指穿越铁路轨道。
- 无保护的U型转弯:指没有交通信号或标志的U型转弯。
- 降雪:指下雪天气。
- 大型车辆侵占:指大型车辆侵占道路。
- 落叶:指秋天落叶覆盖道路。
- 烟花:指节日或活动中燃放的烟花。
- 洒水器:指用于浇灌道路两旁植被的洒水器。
- 坑洼:指道路上的坑洞。
- 翻倒的摩托车:指发生事故翻倒的摩托车。
- 自燃和火灾:指车辆自燃或发生火灾。
- 风筝:指可能在道路上空飞行的风筝。
- 农业机械:指在农田或乡村道路上使用的农业机械设备。
标注示例
作者在下图中提供了一些示例。场景类别为翻倒的自行车和摩托车、牛群和羊群、倒下来的树、过河、障碍门和暴雪天气。
评测方法
自动驾驶方案能否准确地理解驾驶场景,做出合理恰当的决策非常重要。如本文所述,自动驾驶任务的 VLM 的评测主要关注在两个方面:场景描述/分析评测和元动作评测。
场景描述/分析评测
关于场景描述和分析评测,解释和表述驾驶场景具有固有的主观性,因为对于相似的场景,我们可以有多种有效的方法在文本上进行描述,使用一个固定的度量来评价场景描述就很困难。为了克服这一挑战,作者使用 GPT-4 来评价模型生成的场景描述和人工标注的描述之间的相似度。首先,通过提示 GPT-4 从每个场景描述中提取单独的信息片段。然后,将根据信息片段与人工标注的真实描述的匹配程度来打分,并汇总这些分数以得到整体的相似度评分。
场景描述的 ground-truth 标签包括环境描述和事件摘要两个部分。环境条件描述包括天气条件、时间条件、道路环境和车道条件。事件摘要则包括关键目标的特征和影响。作者利用 GPT-4 从环境描述和事件摘要中提取独特的关键信息。然后比较和量化提取的信息,以评估模型生成的描述和人工标注的描述之间的一致性。每个匹配的信息都会被分配一个分数,这个分数基于匹配的程度来估计:
- 完全匹配:信息完全一致。
- 部分匹配:信息部分一致。
- 不匹配:信息不一致或丢失。
如果模型产生了不真实的信息(幻觉信息),则会从总分中扣除一定的分数作为惩罚。所有匹配对的分数汇总起来,就是场景描述的最终得分。
Score = 1.0 × n m a t c h e d + 0.5 × n p a r t i a l n g t − 0.25 × n h a l l u c i n a t i o n n g t \text{Score} = \frac{1.0 \times n_{matched} + 0.5 \times n_{partial}}{n_{gt}} - \frac{0.25 \times n_{hallucination}}{n_{gt}} Score=ngt1.0×nmatched+0.5×npartial−ngt0.25×nhallucination
为 GPT-4 设计的评估场景描述的提示是精心设计的,如下表所示。首先,使用一个角色提示来建立 GPT-4 作为一个智能和逻辑的评估者的身份,它需要具备适当的驾驶风格的全面理解。接着,提示中会指定输入的格式,告知 GPT-4 它的任务是将输出的描述和 ground-truth 描述进行比较。这种比较是基于从两个描述中提取和分析关键信息。GPT-4 需要从场景描述中提取关键信息,进行分析,以确定描述的准确性。最后,提示中会概述评分的标准,包括如何根据信息的匹配程度打分;提示中也会规定评价输出的格式,确保评估过程是结构化和系统的。
元动作评价
在自动驾驶的场景理解任务中,元动作是指高层次的决策选项,如变道、加速或减速等。评估这些元动作序列时,不仅要考虑元动作的数量,还要考虑它们在序列中的顺序安排。为了比较模型生成的元动作序列和人工标注的基准序列,作者使用了动态规划的方法。该方法类似于识别两个序列的最长子序列的方法。但在评估元行动序列时,还需要考虑两个额外的因素。
第一个因素就是不同元动作的权重差异。某些元行动,如“减速”(Slow Down)、“等待”(Wait)和“缓慢直行”(Go Straight Slowly),更多地强调的是态度而不是具体的行动。这些元行动在序列中的出现或缺失并不会改变驾驶决策的基本语义本质,而是修改驾驶策略,使其更加积极或更加谨慎。例如,“减速 -> 停止 -> 等待”的元行动序列传达的驾驶决策与只包含“停止”的序列相似。因此,这些序列不应该像其他元行动(如“左转”(Turn Left)或“向右变道”(Change Lane to the Right))那样受到同等程度的处罚。这些其他元行动通常涉及更明确的、对驾驶路径有显著影响的动作。由于这些元行动(如“减速”、“等待”、“缓慢直行”)通常被视为“保守行动”,在序列评估中,如果保守行动不匹配,不会像其他关键行动那样对总体得分产生严重影响,从而确保评估过程更加合理和细致。
第二个因素就是不同的元动作序列可能表达相同或相似的驾驶意图。例如,两个序列“向左变道 -> 加速 -> 匀速直行 -> 向右变道”和“向左变道 -> 快速加速 -> 匀速直行 -> 向右变道”都可能代表超车行为的有效方法。为了处理这种语义平等的情况,研究者们首先使用GPT-4生成具有可比较语义意义的变体序列,以及唯一的人工标注的真实元行动序列。在评估的序列匹配阶段,所有这些变体序列以及人工标注的真实序列都被考虑在内。然后,从所有这些序列中选择最高得分的匹配作为最终决策评估的确定性得分。这种方法确保了评估过程不仅考虑了精确的序列匹配,还考虑了可能表达相同驾驶策略的不同序列,从而提高了评估的准确性和灵活性。
动态规划的状态被保存在一个二维矩阵中,矩阵的每一行对应着基准序列中的一个元动作,每一列对应模型输出序列中的一个元动作,记作 S r , c S^{r,c} Sr,c。动态规划从两个序列的第一个元动作开始递归计算。二维矩阵的每个元素包含了当前匹配位置的最优得分,以及产生最优匹配的前一个匹配状态。动态规划算法有三个转换方程来处理不同的情况:
- S m i s s i n g S_{missing} Smissing 表示缺失匹配,当基准序列中的元动作缺失时使用。
- S r e d u n d a n t S_{redundant} Sredundant 表示冗余匹配,当模型生成序列中的元动作多余时使用。
- S m a t c h i n g S_{matching} Smatching 表示成功匹配,当参考序列和模型生成序列在相应位置的元动作相同。
成功匹配是当参考序列的第 r r r 个位置和模型生成序列的第 c c c 个位置的元动作完全相同时,发生成功匹配。缺失匹配是参考序列的第 r r r 个位置的元动作没有匹配,提示比较参考序列的第 r − 1 r-1 r−1 个位置和模型生成序列的第 c c c 个位置的元动作。冗余匹配是模型生成序列的第 c c c 个位置的元动作没有匹配,那么会进一步检查参考序列的第 r r r 个位置与模型生成序列的第 c − 1 c-1 c−1 个位置。这些例子的转换等式如下所示:
其中, s m a t c h i n g = 1.0 s_{matching}=1.0 smatching=1.0 表示成功匹配的奖励得分。如果一个动作被认为是丢失或冗余,且被分类为保守动作,则惩罚项 p m i s s i n g p_{missing} pmissing 和 p r e d u n d a n t p_{redundant} predundant 的分数为 0.5 0.5 0.5。如果一个动作不是保守的,则惩罚项为 1.0 1.0 1.0。该方法基于一个前提,忽略了一个重要的元动作或引入了一个不存在的动作,对动作序列的有效性所带来的伤害是相同的。最终得分 S c o r e a c t i o n Score_{action} Scoreaction 可以除以参考元动作序列的长度,
S c o r e a c t i o n = S r , c N r Score_{action}=\frac{S^{r,c}}{N_r} Scoreaction=NrSr,c
定性分析
相关文章:
DriveVLM 论文学习
论文链接:https://arxiv.org/abs/2402.12289 解决了什么问题? 自动驾驶对交通行业有着革命性的作用,实现 FSD 的一个主要障碍就是场景理解。场景理解涉及在复杂且不可预测的环境中进行导航,这些环境可能包括恶劣的天气条件、复杂…...
Unity3D 客户端多开
Unity3D 实现客户端多开 客户端多开 最近在做好友聊天系统,为了方便测试,需要再开一个客户端。 简单的方法,就是直接拷贝一个新的项目,但是需要很多时间和占用空间。 查阅了网络资料,发现有一种软链接,…...
使用代理IP数据采集都需要注意那些?
“在当今大数据时代,数据采集成为了企业决策和个人研究的重要依据。然而频繁访问目标网站往往会引发IP被封锁的风险,这时使用代理IP就显得尤为重要。但代理IP的使用并非毫无风险,以下是使用代理IP进行数据采集时需要注意的几个关键事项。” 一…...
城市大脑:智慧城市的神经中枢——典型实践与经验启示
随着信息技术的飞速发展,智慧城市已成为全球城市转型升级的重要方向。“城市大脑”作为智慧城市的核心引擎,正以其强大的数据处理能力、智能决策支持和跨领域协同优势,引领着城市管理与服务的深刻变革。本文将深入探讨几个具有代表性的“城市…...
嵌入式中CW32多功能测试笔实现
前言 起心动念 在日常的硬件调试工作中,我们最常使用的仪器仪表可能就是万用表了,虽然万用表号称“万用”,但大部分时候,我们需要使用到的功能无非是电压测量和通断测量。 作为调试的“得力干将”,万用表有时候也会存在存在一些缺点和局限性,比如:体积较大不便于携带…...
Python 时间占位符:毫秒的使用
Python 时间占位符:毫秒的使用 在 Python 中,处理时间和日期是一个非常常见的任务。在进行时间格式化时,使用占位符来表示特定的时间单位是非常重要的。特别是毫秒(ms),它在许多应用中扮演着关键角色&…...
深度学习:(七)梯度下降法在神经网络中的应用
梯度下降法在神经网络中的应用 事先规定: 用 n n n 表示个数(维度): n [ 0 ] n x n^{[0]}n_x n[0]nx ,表示单个训练样本 x x x 的元素个数; n [ 1 ] n^{[1]} n[1] 表示隐藏层 1 1 1 的单元(节点&am…...
HarmonyOS---权限和http/Axios网络请求
网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用(建议)3.1 使用方式一3.2 使用方式二(建议) 一、应用权限管理 应用权限保护…...
信号量SEM
前提 1.信号量的本质是一把计数器 2.申请信号本质就是预订资源 3.PV操作是原子的! 将一个公共资源当做整体访问-->锁 如果公共资源不当做整体使用,多进程可以并发的访问公共资源,但不是同一个区域,为了将资源均分,所以有了…...
828华为云征文 | 基于华为云Flexus云服务器X搭建部署——AI知识库问答系统(使用1panel面板安装)
🚀对于企业来讲为什么需要华为云Flexus X来搭建自己的知识库问答系统??? 【重塑知识边界,华为云Flexus云服务器X引领开源问答新纪元!】 🌟 解锁知识新动力,华为云Flexus云服务器X携…...
从零预训练一个tiny-llama#Datawhale组队学习Task2
完整的教程请参考:datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe (github.com) 这是Task2的学习任务 目录 Qwen-blog Tokenizer(分词器) Embedding(嵌入) RMS …...
【Linux探索学习】第二弹——Linux的基础指令(中)——夯实基础第二篇
Linux基础指令(上):【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇-CSDN博客 前言: 在前面我们已经讲解了一些常用的Linux的基础指令,那些当然是远远不够的ÿ…...
Python和QT哪个更适合嵌入式方向的上位机开发?
最近因为工作需要,需要做一个上位机用来处理收集到的数据,然后进行分析,最好有图标输出,当然还要考虑开发便捷,毕竟平时主要是嵌入式方向开发,核心技术栈主要是Linux和C语言,对于开始上位机并不…...
Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化
前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(4)阵型功能-CSDN博客 本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享,并未无师自通&#x…...
Android compose 的基本环境搭建
1.创建项目 导入版本 1.gradle/libs.versions.toml [versions] accompanistPermissions "0.36.0" agp "8.5.0-beta01" coilCompose "2.7.0" constraintlayoutComposeVersion "1.0.1" hiltAndroid "2.51.1" hiltNavi…...
git | 合并 commit 的两种方法
比如你最近的 3 次提交分别为 A B C,你想将它们合并成 X。 方案一 使用 git rebase -i HEAD~3 进入编辑: pick 0148079 A pick 29cae72 B pick bf8572a C修改: r 0148079 A f 29cae72 B f bf8572a C:wq 保存进入 commit 编辑页面,输入 X …...
Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录
概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…...
后端Java-SpringBoot整合MyBatisPlus步骤(超详细)
1.新建项目。 2.点击完上一步的next之后,选择pom.xml文件中的依赖。 3.点击pom文件进行项目初始化。 按照下面的俩步骤刷新一下maven ,让文件生效 4.新建一个application.yml文件 5. 新建一个数据库mp,在数据库中新建一张user表 6.连接数据…...
8609 哈夫曼树
### 思路 1. **选择最小权值节点**:在哈夫曼树构建过程中,选择两个权值最小且父节点为0的节点。 2. **构建哈夫曼树**:根据权值构建哈夫曼树,确保左子树权值小于右子树权值。 3. **生成哈夫曼编码**:从叶子节点到根节点…...
docker的harbor仓库登录问题
目录 一、问题描述 二、证书信任问题 三、DNS解析问题 四、解决 参考链接:Docker login Harbor报错解决:Error response from daemon: Get https:..-阿里云开发者社区 一、问题描述 问题: 挂机或者挂机重启之后harbor登录不上 查看日…...
ENV | docker 安装使用(简单实操版)
1. 详细步骤 1.1 安装 sudo apt update sudo apt install docker.io1.2 验证(可跳过) docker -v1.3 使用 1.3.1 拉取镜像 # 镜像源,如使用腾讯云服务器,可使用 https://mirror.ccs.tencentyun.com docker pull xxx1.3.2 运行…...
【Golang】深入解读Go语言中的错误(error)与异常(panic)
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
DMDSC更换DCR和VOTE磁盘
DMDSC更换DCR和VOTE磁盘 为了提高DMDSC集群运行速度和节点之间通信协调的效率,需要将运行在机械盘上的dcr和vote磁盘替换到SSD高效磁盘上。将原来200M的dcr和vote机械磁盘,换成500M的SSD高效磁盘。 磁盘替换规划信息如下所示: 信息说明 替…...
国产化框架PaddleYOLO结合Swanlab进行作物检测
1. 项目介绍 粮食安全,作为人类生存与发展的基石,始终是全球关注的焦点。它不仅仅关乎粮食的充足供应,更涉及粮食的质量安全、营养健康以及可持续生产等多个维度。在全球化、气候变化和资源环境约束日益加剧的背景下,如何确保粮食…...
Linux编译部署PHP环境
1.准备工作 安装前我们需要设置防护墙,开放端口,更新yum源 # 1.防火墙 systemctl status firewalld 看到active(running)就意味着防火墙打开了 systemctl stop firewalld 看到inactive(dead)就意味着防火墙关闭了 systemctl start fire…...
Win11禁止搜索栏查找互联网内容
禁止任务栏和开始菜单的搜索栏查找互联网内容的方法如下: 使用组策略:WinR键,或菜单框,输入gpedit.msc回车,启动本地组策略编辑器。使用左侧的边栏导航到“计算机配置”>“管理模板”>“Windows组件”>“搜索…...
dig和nmap的区别
dig和nmap是两种在网络管理和安全领域广泛使用的工具,它们在功能、用途和原理上存在显著差异。 dig 定义与功能: dig(Domain Information Groper)是一个用于查询DNS(域名系统)信息的命令行工具。它允许用…...
无人机飞手入伍当兵技术优势分析
随着现代战争形态的不断演变,无人机技术在军事领域的应用日益广泛,成为提升军队作战能力的重要手段。对于无人机飞手而言,其专业技能和实战经验在入伍当兵后能够转化为显著的技术优势,为国防事业贡献重要力量。以下是从专业技能优…...
[Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)
快速搜索文件名及其所在路径 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压后得到文件 双击exe文件得到 选择简体中文,点击OK 点击“我接受” 更改安装目录,最好不要放在C盘,点击下一步 点击下一步 点…...
HIRI-ViT:使用高分辨率输入的视觉Transformer扩展
摘要 https://arxiv.org/pdf/2403.11999 视觉Transformer( V i T \mathrm{ViT} ViT)与卷积神经网络(CNN)的混合深度模型已成为视觉任务中一类强大的骨干网络。自然地,提高此类混合骨干网络的输入分辨率会增强模型容量…...
建设网站联系方式/seo工作流程图
QByteArray ba("Hello world");char *data = ba.data();while (*data) {cout << "[" << *data...
做网站的的价位/排名优化价格
《北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发》由会员分享,可在线阅读,更多相关《北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发(10页珍藏版)》请在人人文库网上搜索。1、实验报告实验名称 数据库应用系…...
wordpress logged in/seo诊断方案
前文回顾事务处理的四种分离水平(隔离级别)分离水平的设置注意事项 非提交读取(脏读)不可重复读取幻象读取总结: 前文回顾 在上篇博文史上最简单MySQL教程详解(进阶篇)之锁与事务处理分离水平&…...
出名的网站建设软件/苏州百度推广
点击上方蓝色字关注我们~十八载执着创新云计算一马当先自主可控心中念未来征途尤可期在云计算刚出现时,很多人认为中国厂商弯道超车的机会来了。以OpenStack、Ceph为例,他们在中国市场发展的强劲势头甚至超过国外。无论是云计算企业、创业公司࿰…...
印度做批发的网站有哪些/站长之家app下载
***********************************************声明************************************************ 原创作品,出自 “深蓝的blog” 博客, 欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong)&…...
上海高端室内设计事务所/seo排名查询软件
插件的安装如下:1.下载插件包https://github.com/vim-scripts/Pydiction可以直接下载,也可git下载[rootlocalhost]# git clone https://github.com/rkulla/pydiction.git#####################包括三个文件python_pydiction.vim #vim插件complete-di…...