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

DriveLM 论文学习

论文链接:https://arxiv.org/pdf/2312.14150
代码链接:https://github.com/OpenDriveLab/DriveLM

解决了什么问题?

当前,自动驾驶方案的性能仍然不足。一个必要条件就是泛化能力,需要模型能处理未经训练的场景或不熟悉的传感器配置。其次时这些模型要能和人类用户做交互,例如欧盟法规要求部署模型具有可解释性。此外,人类司机驾驶并不是基于几何结构准确的 BEV 表示,这和今天的自动驾驶模型不同。人类司机会隐式地进行目标感知、预测和规划(称作 P 1 − 3 P_{1-3} P13):粗略地识别和定位到关键目标,然后是推理它们可能的运动,再将这些信息聚合为驾驶动作。

同时,视觉语言模型最近取得了显著成效,它们具有多项优势。首先,VLMs 基于大规模互联网数据训练,具有理解世界的基本能力,可能提升自动驾驶规划的泛化能力。事实上,VLMs 的泛化能力已经在简单的机器人任务上得到了验证。其次,将语言表示作为输入和输出,模型能更好地和人类用户做交互,这与当前方案所使用的轨迹或者边框不同。最后,VLMs 能够凭借逻辑推理以多步骤的方式做决策。尽管VLMs 以多个步骤做推理,但它是端到端可微的架构,这是目前自动驾驶所希望得到的。

最近的一些工作尝试将 VLMs 应用到自动驾驶,主要分为两类:场景级 VQA、单个目标级的 VQA。场景级的 VQA 是通过一个或两个支持理由来描述驾驶行为,比如 “车辆在向右变道,因为这样做是安全的。” 单个目标级的 VQA 通过一系列形式为“什么-哪个-哪里-如何-为什么”的问答,构建自车对单个目标响应的理解。例如,“自车停下来是因为有一个穿白色衬衫的行人正在自车前方的十字路口过马路,而自车不想撞到行人”。这两种范式都没有提供合适的代理任务来模仿人类 P 1 − 3 P_{1-3} P13 的推理过程,人类在推理时会考虑多个目标,并针对每个目标做多步骤的推理。因此如下图所示,作者提出了一个新的任务,以及相应的数据集和基线模型架构,以更好地模拟人类的推理过程。这个新任务旨在通过考虑多个对象和多步骤推理来更全面地理解和模拟自动驾驶中的决策过程。

任务:GVQA

图视觉问答任务以有向图的形式,将 P 1 − 3 P_{1-3} P13 推理表示为一系列的问答对。它和之前提到的 VQA 任务的关键差异就是,它能利用问答对之间的逻辑关系来指导回答的过程。GVQA 也包括动作和运动规划的问题,并有相关的评价指标。

数据集

DriveLM-nuScenes 和 DriveLM-CARLA 包括标注好的问答对,以图的形式组织,通过逻辑推理将图像和驾驶行为联系起来。与当前的基准相比,它们在每一帧都提供了更丰富的文本标注,如下图所示。此外,作为DriveLM-CARLA的一个组成部分,作者构建了PDM-Lite,这是第一个用于CARLA Leaderboard 2.0的基于规则的专家算法。作者将这些训练数据和具有挑战性的测试数据配对,用于评测模型在零样本泛化方面的表现。

基线

DriveLM-Agent 使用了一个轨迹分词器(可以用于任意一个通用的 VLM),它与图提示机制耦合(该机制对逻辑关系建模),该机制通过将逻辑依赖关系建模为上下文输入来为视觉语言模型提供信息。这意味着模型不仅考虑单个对象,还考虑对象之间的关系和交互。结合轨迹分词器和图提示机制,DriveLM-Agent提出了一种简单的方法论,使得通用的视觉语言模型能够有效地被改造用于端到端的自动驾驶系统。

提出了什么方法?

本文研究了如何将互联网数据集上训练的视觉语言模型结合到端到端自动驾驶系统去使用,提升泛化能力,并能和人类用户做交互。尽管最近的一些方法通过单轮的视觉问答,将 VLMs 应用到驾驶场景,但人类司机会在做决策时经历多个步骤。人类司机首先会定位关键物体,然后估计物体之间的交互,最后采取行动。作者提出了一个名为 Graph VQA 的任务,通过感知、预测和规划问答对来模拟图结构的推理,从而获得一个适合模仿人类推理过程的代理任务。本文基于 nuScenes 和 CARLA 数据集,构建了 DriveLM-Data 数据集,提出了一个基于 VLM 的基线方法 DriveLM-Agent,用于同时执行 Graph VQA 和端到端驾驶。实验表明,Graph VQA 提供了一个用于推理驾驶场景的简单的框架,DriveLM-Data 为这项任务提供了一个具有挑战性的基准。DriveLM-Agent 在端到端自动驾驶方面的表现能和最先进的驾驶方案相媲美,特别时在未经训练的传感器配置上进行零样本评测时,其优势尤为明显。

实验结果显示,DriveLM上的GVQA任务具有挑战性,当前的方法只能获得中等分数。这表明要实现强大的问答性能,可能需要更好地建模逻辑依赖关系。尽管DriveLM-Agent的架构不是针对特定任务开发的,但在开放循环规划设置下测试时,其性能与最先进的驾驶特定模型相媲美。使用图结构可以改善零样本泛化能力,使得DriveLM-Agent在仅在nuScenes数据上训练后,能够正确处理Waymo数据上的未见部署。这意味着模型能够在没有见过的新数据上进行有效的推理。最后,通过逐个问题分析,作者发现预测和规划阶段的问答对最终驾驶决策帮助最大。从这些结果出发,作者认为改进GVQA任务对于构建具有强大泛化能力的自动驾驶代理具有很大的潜力。

DriveLM: 任务、数据、评价指标

人类司机通常将决策过程拆分为不同的步骤,这些步骤是逻辑递进的,包括关键物体的识别和定位,它们未来可能的动作和影响,以及基于这些信息自车的规划轨迹。这就促使作者提出了 DriveLM 的核心组成:GVQA,该代理任务适合于模拟人类推理的过程。

DriveLM-Task: GVQA

作者以图的形式组织每张图像的全部问答对。作者使用“图-结构”来表示有向无环图,比如当前问题能从(多个)父和祖父节点获得上下文信息。图 G = ( V , E ) G=(V,E) G=(V,E) 包括一组顶点 V V V,每个顶点表示一个问答对 v = ( q , a ) v=(q,a) v=(q,a),关联着这个场景中的一个或多个关键目标。GVQA 和 VQA 的核心差异就是 GVQA 的问答对有逻辑依赖关系,这些关系用顶点之间的边表示。 E ⊆ V × V E\subseteq V\times V EV×V 是一组有向的边,每条边 e = ( v p , v c ) e=(v_p, v_c) e=(vp,vc) 连接父节点 QA 和子节点 QA。用两个维度(目标级和任务级的边)来表示边的集合。在目标级,作者构建了逻辑边 e ∈ E e\in E eE 来表示不同物体之间的影响。例如,一辆轿车的规划 QA 节点受到行人的感知 QA 节点影响,如图1 中。在任务级,作者构建了逻辑边 e ∈ E e\in E eE 来获取不同推理步骤的逻辑链:

  • 感知 P 1 P_1 P1:当前场景中关键目标的识别、描述和定位。
  • 预测 P 2 P_2 P2:基于感知结果,预测关键目标的可能动作和影响。
  • 规划 P 3 P_3 P3:自车的可能的安全动作。
  • 动作 B B B:驾驶决策的分类。
  • 运动 M M M:自车未来轨迹的路径点。

感知、预测和规划 P 1 − 3 P_{1-3} P13 与端到端自动驾驶方案的概念类似,根据自车未来的轨迹点做出运动和动作。不同之处是,作者将自车的轨迹点定义为运动 M M M,它包括 N N N 个 BEV 视角下坐标为 ( x , y ) (x, y) (x,y) 的点,记作 M = { ( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . , ( x N , y N ) } M=\{(x_0, y_0), (x_1, y_1),..., (x_N, y_N)\} M={(x0,y0),(x1,y1),...,(xN,yN)}。每个点是当前位置和未来固定时间间隔位置的偏移量。那么,每个时间间隔的距离就可计算做:

{ x , y } d i s t = { ( δ x , 1 , δ y , 1 ) , . . . , ( δ x , N , δ y , N ) } \{x,y\}_{dist} = \{(\delta_{x,1}, \delta_{y,1}),...,(\delta_{x,N}, \delta_{y,N})\} {x,y}dist={(δx,1,δy,1),...,(δx,N,δy,N)}

其中 δ x , i = x i − x i − 1 \delta_{x,i}=x_i - x_{i-1} δx,i=xixi1 δ y , i = y i − y i − 1 , i = 1 , . . . , N \delta_{y,i}=y_i - y_{i-1}, i=1,...,N δy,i=yiyi1,i=1,...,N。从 P 1 − 3 P_{1-3} P13 M M M,动作表示会作为一个接口使用。为了获得动作表示,作者将 x d i s t x_{dist} xdist y d i s t y_{dist} ydist 的均值映射到一个预先定义好的 bins 里面,每个 bin 都对应一个类别(速度或转向),分别记作 B s p B_{sp} Bsp B s t B_{st} Bst。本文中,作者设置了五个 bins:

B s p ∈ { fast 2 , fast 1 , moderate , slow 1 , slow 2 } B_{sp}\in \{\text{fast}_2, \text{fast}_1, \text{moderate}, \text{slow}_1, \text{slow}_2\} Bsp{fast2,fast1,moderate,slow1,slow2}
B s t ∈ { left 2 , left 1 , straight , right 1 , right 2 } B_{st}\in \{\text{left}_2, \text{left}_1, \text{straight}, \text{right}_1, \text{right}_2\} Bst{left2,left1,straight,right1,right2}

下标的数字表示幅度。将一条轨迹的速度和转向类别组合起来,就得到了它的动作类别 B = ( B s p , B s t ) B=(B_{sp}, B_{st}) B=(Bsp,Bst)。这里,作者只使用了简单的动作表示定义来研究 VLMs,作者也认为可以融入更加抽象的动作类别,如车道变化和超车。

DriveLM-Data

为了提供全面而准确的 QA,并带有图结构,作者提出了 DriveLM-nuScenes 和 DriveLM-CARLA。nuScenes 和 CARLA 有着巨大差异,数据采集方式和分布也不同。

DriveLM-nuScenes

作者将标注过程分为三个步骤:选择视频关键帧,选择关键帧里的关键目标,对这些关键目标标注帧级的 P 1 − 3 P_{1-3} P13 QAs。一部分的感知 QA 来自于 nuScenes 和 OpenLane-V2 数据集,其余的 QAs 则是人工标注的。人工标注的问题模板是由五个专家设计的,考虑了人类司机如何做驾驶决策的。对于每一帧,都会用全部的问题来提示标注员,请他们回答所有的问题。由于DriveLM-nuScenes的大部分数据是手动标注的,因此这部分数据的质量尤为重要。在标注过程中,进行了多轮严格的质量检查。在每一轮中,数据被分批处理,每批数据的10%会被检查。如果这10%的手动标注数据的合格率不符合预期,会要求标注者重新标注整批数据。图2 展示了问答标注流程的一个例子,其中所有问题都按照标准进行了质量检查。因此,DriveLM-nuScenes在规模、全面性和复杂性方面都超越了之前提出的数据集,见表1。这些问答涵盖了驾驶过程的各个方面,从感知和预测到规划,提供了对自动驾驶场景的全面理解。

DriveLM-CARLA Expert

作者使用 CARLA 0.9.14版本在Leaderboard 2.0框架中收集数据。Leaderboard 2.0相比其前身Leaderboard 1.0包含了大量新的驾驶场景。目前还没有现有方法能够在Leaderboard 2.0中大规模收集训练数据。例如,TransFuser++(一个在Leaderboard 1.0中表现出色的方法)使用的特权规则专家在Leaderboard 2.0官方8公里以上的验证路线上只能获得2%的驾驶分数(DS)。为了应对Leaderboard 2.0中的新挑战,开发了一个新的专家算法PDM-Lite。PDM-Lite的方法与PDM-Closed类似,PDM-Closed是一个为nuPlan设计的规则基规划器。PDM-Lite使用智能驾驶模型(IDM)来根据前车、行人、停车标志或交通灯获得目标速度。与PDM-Closed通过复杂成本函数从16个候选轨迹中选择一个不同,PDM-Lite只使用两个候选轨迹和一个基于TransFuser++专家的更简单成本函数,从而得到一个适合于大规模QA生成的轻量级规划器。

DriveLM-CARLA QA 生成

为了采集 DriveLM-CARLA 数据集,作者在城市、住宅和农村区域,设置了一系列路线,并在这些路线上执行PDM-Lite算法。在执行PDM-Lite的过程中,收集必要的传感器数据。根据专家决策的变化(例如,当专家从加速变为制动时)来采样关键帧。基于关于对象和场景的特权信息生成相关的问答,并组织这些问答之间的逻辑关系,将它们连接成一个图。以每秒4帧(FPS)的速率生成数据和标签,并提取关键帧。从模拟器中提取静态和动态对象的状态信息以及专家触发的规则信息。除了某些特定场景外,使用所有38个场景来创建问题和答案,这些问题和答案是基于从模拟器中提取的信息手工制作的。注释过程具有直接的可扩展性优势,因为只需要在CARLA中定义路线和场景设置,后续步骤可以自动执行。DriveLM-CARLA 包括160万个问答(QAs),是现有基准测试中文本内容最多的驾驶语言基准。

DriveLM-Metrics

为了评测 GVQA,DriveLM-Metrics 包括三个组成部分来评测运动 M M M、动作 B B B P 1 − 3 P_{1-3} P13。为了评价运动阶段,作者使用标准的运动评估指标,包括平均位移误差(ADE)和最终位移误差(FDE),以及在预测轨迹上的碰撞率。这些指标来自nuScenes和Waymo基准测试,遵循UniAD的方法。

通过分类准确率来评估行为预测,同时将整体准确率分解为转向和速度两个组成部分。

使用两个指标来衡量 P 1 − 3 P_{1-3} P13阶段的性能。
- SPICE是一个在VQA和图像描述中广泛使用的指标,它计算预测文本与真实文本的结构相似性,同时忽略语义含义。
- 使用GPT Score来衡量答案的语义对齐度,以补充SPICE指标。具体来说,将问题、真实答案、预测答案以及请求对答案进行数值评分的提示发送给ChatGPT-3.5。然后解析返回的文本以获得分数,分数越高表示语义准确性越好。

DriveLM-Agent: A GVQA Baseline

针对上面介绍的 GVQA 任务,DriveLM-Agent 是本文提出的一个基线方法。DriveLM-Agent 是一个通用的视觉语言模型,能够挖掘预训练时获得的潜在知识。整体目标是通过 VQA 的不同阶段 ( P 1 , P 2 , P 3 , B ) (P_1, P_2, P_3, B) (P1,P2,P3,B),将图像表示为自车的运动 M M M。作者选取了 BLIP-2 作为 VLM 模型,因为它的架构简洁,微调起来比较灵活。

如下图所示,DriveLM-Agent 可以分为多个步骤:

  • P 1 − 3 P_{1-3} P13 如感知、预测和规划,作为基础层来理解场景,并推理出其结构。
  • 动作步骤聚合 P 1 − 3 P_{1-3} P13 的关键信息,得到语言空间的驾驶动作描述。
  • 运动步骤将动作翻译为可执行的驾驶轨迹。

为了得到每个 QA 之间的逻辑依赖关系,作者认为可以使用 GVQA 图中连接节点之间的上下文。

Prompting with Context

直接将图像翻译成运动是非常有难度的。受到人类司机的习惯启发,作者提出使用多步骤推理的过程来实现基于 VLM 的驾驶方案。作者从 LLM 中提取知识,提升可解释性。

更具体地说,模型将上一步骤的回答作为当前问题的上下文信息使用。对于每条边 e = ( v p , v c ) ∈ E e=(v_p, v_c)\in E e=(vp,vc)E,我们将父节点 v p v_p vp 的 QA 添加到当前节点 v c v_c vc 的问题后面,并带有一个前缀 "Context: "。上下文也可能包含多个前序节点的 QAs,我们将所有的 QAs 都拼接到一个上下文序列中。注意,上下文只是表述 GVQA 逻辑依赖的一个可能的方法,作者这么做只是因为它实现起来简洁。然后,我们基于图中的逻辑关系,传递相关的信息。

注意在推理时,图的大小和结构是一个算法的设计项,可以根据算力和任务来调整。作者用全部的 QAs 来训练,但推理时只对部分子图做推理,通过启发式的方法选择问题。

Context Aggregation through Behavior

驾驶涉及多种潜在的情况,这些情况需要适当的响应。尽管这些情况多种多样,但几乎所有事件都涉及可以离散化为一组行为的决策。例如,刹车可以应对多种情况,如红灯、停车标志、车辆前方出现障碍物。行为阶段的重点时生成这样的一个行为描述:用自然语言表述车辆的预期运动。这种行为描述有效地作为一个思考步骤,在这一步,模型从图中总结所有的重要信息。所以,作者提出使用所有可能的上下文信息来预测行为,即 P 1 − 3 P_{1-3} P13 的所有 QAs。通过实验观察,作者发现这种设计对于使用 VLMs 进行驾驶至关重要。

Trajectory Tokenization for Motion

由于使用 VLMs 输出精细的数值结果并非易事,RT-2 基于一个专门的轨迹分词模块来处理机器人动作。作者使用这种方法使 DriveLM-Agent 能够接受图像和行为描述作为输入,并输出轨迹。具体来说,作者将路径点的坐标划分为 256 个 bins,这是基于训练轨迹的统计数据经验性地划分的。作者重新定义了 BLIP-2 语言分词器里的 tokens,为每个 bin 都构建 tokens,并重新微调了 VLM。为了简化,作者使用相同的 VLM 架构来进行这项任务,但使用了独立的 LoRA 圈中,并仅在包含此运动阶段问答的数据集上进行训练。因此,可以使用轻量级的LLM(大型语言模型)或接受命令作为输入的特定驾驶架构来执行此功能。

DriveLM-nuScenes

数据集构成

DriveLM-nuScenes 训练集包括 4072 帧,验证集包括 799 帧,数据集由场景级描述和帧级问答(QA)组成,这些内容伴随着 nuScenes 数据集中的多视图图像中的2D边界框。场景级描述概述了整个视频 clip 中自车(ego vehicle)的行为。帧级 QA 包括了三个不同的类别:感知、预测和规划。

  • 感知阶段涉及对整个帧进行彻底检查的查询。这意味着需要对帧中的所有视觉信息进行分析,以便理解场景中发生了什么。在这组问题中,除了一些是手动标注的之外,还设计了一些提示(prompts),用于生成关于场景中对象观察方面的自动问题,利用了 nuScenes 和 OpenLane-V2 数据集中的 ground-truth 信息。
  • 预测包括一系列的关于当前帧中关键对象和自车(ego vehicle)未来状态的预测,以及预测背后的推理过程的查询。这些预测是复杂的,并且具有挑战性,因为它们需要对场景中的对象和车辆的未来行为进行准确的预测。由于预测的复杂性,作者选择手动标注答案。
  • 规划包含了一些关于当前帧的自车随后规划动作的问题,因为规划和预测一样具有挑战性,作者为推理过程设计了提示词,人工标注了这些问题的答案。

对于 QA 中的关键目标,作者将它们编码为 < c , C A M , x , y > <c, CAM, x, y> <c,CAM,x,y> 中的 c c c 标签, c c c 是目标的标识符, C A M CAM CAM 是目标中心点所在的相机视图, x , y x, y x,y 分别表示 2D 边框在相应相机坐标系的水平和垂直坐标。在每个关键帧中,还提供了一个字典,记录了关于关键对象的更多基本信息,如边界框的大小、类别、运动状态和视觉描述,整体数据结构如上图所示。

采集方法

在标注过程中,作者雇佣了具有驾驶经验的人来标注数据。提供给标注人员的源数据是nuScenes的六个摄像头拼接后的结果。如下图左所示,作者将标注过程分为三个步骤:选取视频中的关键帧、选择关键帧中的关键目标、在关键帧中对帧级QA进行标注。在标注完成后,进行多轮质量检查以确保数据的可靠性。如下图右所示,对通过质量检查的数据执行后处理程序。

关键帧选取

在这一步,作者要求标注人员检查整个视频 clip,定位出富含场景信息的关键帧和可能表明未来状态发生变化的帧。同时,标注人员会贯穿整个视频 clip 标注自车的动作。这些信息提供了基本的场景级描述。

关键目标选取

在这个标注步骤,指导标注人员识别关键帧中与自车驾驶相关的对象,这些对象被称作关键对象。为了确保标注的准确性,提供了基于nuScenes数据集中 ground truth 类别的预标注边界框。标注人员也可以指定那些没有出现在 ground-truth 中的物体作为关键目标,如果它们确实非常重要。

QA Labeling

在问答(QA)标注过程中有两种问题类型:事实性问题和开放式问题。对于事实性问题,这些问题通常是有明确答案的,可以使用基于规则的方法自动生成答案。对于开放式问题,这些问题的答案不是固定的,需要标注人员根据每个具体场景手动标注。对于大多数需要手动标注的问题,提供了选项供标注人员选择。这有助于标准化答案并减少标注的主观性。为了确保标注过程的灵活性,对于那些有预设选项的问题,还包括了一个“其他 - 填空”选项。这样标注人员可以在预设选项无法覆盖所有可能答案时,提供额外的信息。此外,还允许标注人员提出自己的问题,即自由形式问题。这种方式鼓励标注人员根据自己的理解和对当前帧的观察,生成他们认为重要的问题。

质量检查

数据的质量被放在首位,为了确保数据质量,建立了清晰的标注标准,并在每个标注步骤中实施自动化检查策略。除了自动化检查外,还进行了严格的手动质量检查,以确保数据的准确性。最终的数据被组织成 batches,每个 batch 包括8个视频 clips、这些clips的场景级描述、从这些clips中选择的关键帧以及关键对象,还有每个关键帧对应的问答对。为质量检查人员提供了明确的标准,指导他们根据这些标准评估数据的合格性。对于手动标注的数据,如果某个批次的准确性未达到预期,会收集遇到的问题反馈,并要求标注人员重新标注整个批次。对于从 ground-truth 信息自动生成的数据,质量检查人员被指示手动调整不一致或不合理的问答对。

后处理

由于标注人员是说中文的,所以他们最初标注的数据是中文的。为了将这些中文标注数据用于可能需要英文数据的项目或系统,需要将数据从中文翻译成英文。首先,通过建立一个词汇表来创建中文和英文之间的映射关系。这个词汇表可能包含了常见的术语和短语,以及它们在两种语言之间的对应关系。对于那些没有在词汇表中找到对应英文映射的中文文本,使用GPT-3.5(一个先进的自然语言处理模型)来进行翻译。在GPT-3.5自动翻译之后,进行手动检查和校正,以确保翻译的准确性和质量,如下表所示。

Statistics and Facts

在这一部分,作者对DriveLM-nuScenes数据集中的QA类别进行了分布分析。分析是在两个层面进行的:任务级别和对象级别。对于任务级别的每个分类标准,作者提供了所有QA的模板。这些模板是用于生成或标注问答的标准化问题和答案。分析结果显示了QA类别的丰富性,意味着数据集覆盖了自动驾驶的多个方面,包括不同的驾驶场景和决策过程。此外,分析还表明数据集中的逻辑关系足够丰富,可以构建一个图结构化的QA。

任务级

DriveLM-nuScenes创建了一个基准测试,该测试囊括了自动驾驶的各个方面,涵盖了从感知、预测到规划等多个阶段的人类驾驶逻辑。为了更深入地了解这一点,作者在下图中展示了任务级别上详细的问答(QA)类型分布。为了更好地理解这些QA类型,作者还在下表中提供了所有 P3 阶段的QA模板示例。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目标级

作者也对目标级做了统计,因为 DriveLM-nuScenes 中的 QA 都是围绕着关键目标进行的。下图左展示了关键目标的类别分布。考虑到交通元素和其它类别之间的显著差异,作者对交通元素和其它类别区分开来,对它们的 QA 类型做了统计,如下图右。

相关文章:

DriveLM 论文学习

论文链接&#xff1a;https://arxiv.org/pdf/2312.14150 代码链接&#xff1a;https://github.com/OpenDriveLab/DriveLM 解决了什么问题&#xff1f; 当前&#xff0c;自动驾驶方案的性能仍然不足。一个必要条件就是泛化能力&#xff0c;需要模型能处理未经训练的场景或不熟…...

YoloV10改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码

论文介绍 CARAFE模块概述&#xff1a;本文介绍了一种名为CARAFE&#xff08;Content-Aware ReAssembly of FEatures&#xff09;的模块&#xff0c;它是一种用于特征上采样的新方法。应用场景&#xff1a;CARAFE模块旨在改进图像处理和计算机视觉任务中的上采样过程&#xff0…...

光模块基础知识

1. 光模块的封装 光模块是光收发模块的简称&#xff0c;主要根据不同的外型来区分&#xff0c;而在同一外型中&#xff0c;又有着多种规格&#xff1b;在数据通信领域&#xff0c;最常见的光模块&#xff08;根据外型区分&#xff09;分别是SFF、GBIC、SFP、和XFP、QSFP 、XEN…...

【go从零单排】Closing Channels通道关闭、Range over Channels

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;通道&#xff08;channel&#xff09;的关闭是一个重要…...

初始JavaEE篇 —— 文件操作与IO

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 文件介绍 Java标准库中提供操作文件的类 文件系统操作 File类的介绍 File类的使用 文件内容操作 二进制文件的读写操作…...

GitLab实现 HTTP 访问和 SMTP 邮件发送

GitLab实现 HTTP 访问和 SMTP 邮件发送 本教程详细记录了如何配置 SMTP 邮件通知、实现外网 HTTP 访问&#xff0c;并分享在配置过程中遇到的问题及解决方法。 一、准备工作 安装 Docker&#xff1a;确保在 Synology NAS 上安装 Docker 应用。下载 GitLab 镜像&#xff1a;在…...

HarmonyOS ArkTS 下拉列表组件

Entry Component struct Index {defaultValue: string 下拉列表;// 定义选项数组&#xff0c;包含 value 和可选的 labeloptions: Array<SelectOption> [{ value: aaa },{ value: bbb },{ value: ccc },{ value: ddd },{ value: eee },{ value: fff },{ value: ggg },{…...

zabbix监控Linux系统

1. zabbix agent安装 #sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm #sudo dnf clean all #yum install zabbix-agent -y Running transaction test Transaction test succeeded. Running transactionPreparing …...

线性表-数组描述补充 迭代器(C++)

补充线性表数组实现的迭代器部分 知识点&#xff1a; typedef是C语言中的一个关键字&#xff0c;它的主要作用是为一种数据类型定义一个新的名字&#xff08;别名&#xff09;。 在 C 的 STL&#xff08;Standard Template Library&#xff09;中&#xff0c;迭代器是连接容…...

vue3 + element-plus 的 upload + axios + django 文件上传并保存

之前在网上搜了好多教程&#xff0c;一直没有找到合适自己的&#xff0c;要么只有前端部分没有后端&#xff0c;要么就是写的不是很明白。所以还得靠自己摸索出来后&#xff0c;来此记录一下整个过程。 其实就是不要用默认的 action&#xff0c;要手动实现上传方式 http-reque…...

dm 创建数据库实例【window】

参考链接&#xff1a;配置实例 1&#xff09;打开 DM 数据库配置助手 2&#xff09;按照默认的进行 字符串大小写敏感&#xff1a;譬如 mysql 默认是大小写不敏感&#xff0c;如果在迁移中还选择了 保持对象大小写&#xff0c;那么就会出现一种情况就是每次查询等带有表名的都…...

Docker实践与应用举例:从入门到进阶

Docker实践与应用举例&#xff1a;从入门到进阶 在云计算和微服务架构日益盛行的今天&#xff0c;Docker作为一种轻量级的容器化技术&#xff0c;凭借其高效、灵活、可移植的特点&#xff0c;迅速成为了开发和运维团队的首选工具。本文将通过深入浅出的方式&#xff0c;探讨Do…...

【LeetCode】【算法】560. 和为 K 的子数组

LeetCode 560. 和为 K 的子数组 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 思路 思路&#xff1a;前缀和 定义数组preSum[nums.length1]&#xff0c;在里面计算nums…...

Webots控制器编程

本文主要内容是如何编写Webots控制器&#xff0c;使用语言为Python。 文章目录 1. 新增控制器2. Hello World Example3. 读取传感器4. 使用执行器5. 理解step和robot.step函数6. 同时使用传感器和执行器7. 控制器参数 1. 新增控制器 对机器人Robot新增控制器的方式&#xff1…...

舷外机,高效动力的选择,可靠性能的保障_鼎跃安全

舷外机是现代船只动力系统中的核心设备&#xff0c;广泛应用于娱乐船、渔船、巡逻船、救援船等多种场景。它不仅提供船只的动力支持&#xff0c;还因其结构简便、操作灵活和维护方便&#xff0c;成为水上作业的重要组成部分。 一、舷外机的功能作用 1. 强劲动力源 舷外机是船…...

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…...

echarts-gl 3D柱状图配置

1. 源码 此demo可以直接在echarts的编辑器中运行 option {title: {text: 产量图,textStyle: {color: rgba(255, 255, 255, 1),fontSize: 17},left: center},tooltip: {},legend: {show: false,orient: vertical,x: left,top: 0,right: 20,textStyle: {fontSize: 12}},visualM…...

设计模式之模版方法模式(Template)

一、模版方法模式介绍 1、模版方法模式定义&#xff1a; 模板方法模式(template method pattern)原始定义是&#xff1a;在操作中定义算法的框架&#xff0c;将一些 步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法中的算法可以理…...

背包九讲——背包问题求具体方案

目录 背包问题求具体方案 1. 01 背包问题 题目&#xff1a;12. 背包问题求具体方案 - AcWing题库 算法思路&#xff1a; 代码实现&#xff1a; 2. 多重背包问题 算法思路&#xff1a; 3. 完全背包问题 算法思路&#xff1a; 代码实现&#xff1a; 背包问题第九讲—…...

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…...

Python 解释器安装全攻略(适用于 Linux / Windows / macOS)

目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…...

leetcode 386. 字典序排数 中等

给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a;[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2&#xff1a; 输入&#xff1a;n 2…...

动态生成element-plus的scss变量;SCSS中实现动态颜色变体生成

文章目录 一、动态css变量1.生成内容2.动态生成css变量2.1新增_color-utils.scss&#xff08;不推荐&#xff09;2.2新增_color-utils.scss&#xff08;推荐&#xff09;2.3theme.scss引入使用 一、动态css变量 1.生成内容 在我们修改element-plus主题色时候&#xff0c;会自…...

奈飞工厂官网,国内Netflix影视在线看|中文网页电脑版入口

奈飞工厂是一个专注于提供免费Netflix影视资源的在线播放平台&#xff0c;致力于为国内用户提供的Netflix热门影视内容。该平台的资源与Netflix官网基本同步&#xff0c;涵盖电影、电视剧、动漫和综艺等多个领域。奈飞工厂的界面简洁流畅&#xff0c;资源分类清晰&#xff0c;方…...

学习英语。

1. 先自己翻译一遍&#xff08;葫芦背书法&#xff09; 结构 补充修饰 最核心的记忆 然后再修饰 2.意群之间翻译&#xff1a; 1.意群 对于两个意群合起来翻译 方法1就是着重某一 6.或者意群之间 核心词一个介词 于 对于 介词化修饰 3.句子之间关系 主句1 after句子2 那么句…...

数据库、数据仓库、数据中台、数据湖相关概念

文章目录 序言1数据库&#xff0c;数据仓库&#xff0c;数据中台&#xff0c;数据湖-概念对比释义1.1概念产生的时间顺序1.2在使用功能方面对比1.3在使用工具方面对比 2数据仓库2.1数据仓库的发展阶段2.2 数据仓库的设计2.3数据仓库常用工具&#xff0c;方法2.3.1分析型数据库和…...

(四)Linux性能优化-CPU-软中断

软中断 中断其实是一种异步的事件处理机制&#xff0c;可以提高系统的并发处理能力 由于中断处理程序会打断其他进程的运行&#xff0c;所以&#xff0c;为了减少对正常进程运行调度的影响&#xff0c;中断处理程序就需要尽可能快地运行 Linux 将中断处理过程分成了两个阶段&a…...

数据库(sqlite)基本操作

数据库&#xff08;sqlite&#xff09; 一&#xff1a;简介&#xff1a; 为什么需要单独的数据库来进行管理数据&#xff1f; 数据的各种查询功能数据的备份和恢复花大量时间在文件数据的结构设计和维护上要考虑多线程对数据的操作会涉及到同步问题&#xff0c;会增加很多额…...

[论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景

当AI成为编程搭档&#xff1a;结对编程中的知识转移新图景 论文信息 论文标题&#xff1a;From Developer Pairs to AI Copilots: A Comparative Study on Knowledge Transfer&#xff08;从开发者结对到AI副驾驶&#xff1a;知识转移的对比研究&#xff09; 作者及机构&#…...

知识拓展卡————————关于Access、Trunk、Hybrid端口

目录 什么是Trunk List、VLAN ID、PVID&#xff1a; VLAN ID&#xff08;Virtual Local Area Network Identifier&#xff09;&#xff1a; Trunk List&#xff08;Trunk列表&#xff09;&#xff1a; PVID&#xff08;Prot VLAN ID&#xff09;: 关于Native VLAN &#x…...