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

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 类型做了统计,如下图右。


http://www.kler.cn/a/391178.html

相关文章:

  • 算法——二分查找(leetcode704)
  • Android 配置默认输入法
  • 金价大跌,特朗普胜选或成导火索
  • MySQ怎么使用语法介绍(详细)
  • 云原生-docker安装与基础操作
  • 43.第二阶段x86游戏实战2-提取游戏里面的lua
  • 前端Cypress自动化测试全网详解
  • 如何快速解决Windows系统中的emp.dll问题
  • Vue中优雅的使用Echarts的三种方式
  • Kubernetes的基本构建块和最小可调度单元pod-0
  • 单例模式全面解析
  • API架构解说
  • Linux(CentOS)项目总结(前后端分离)
  • js | 作用域
  • Day43 | 动态规划 :状态机DP 买卖股票的最佳时机买卖股票的最佳时机II
  • 020_Servlet_Mysql学生选课系统(新版)_lwplus87
  • 第 3 章 -GO语言 基本语法
  • 1Panel修改PostgreSQL时区
  • 高版本安装JAVA JDK没有JRE环境的解决办法
  • 恒创科技:什么是 RAID 3 ? RAID 3、4 和5之间有什么区别?
  • excel使用
  • 实习冲刺Day19
  • 【小程序】封装网络请求request模块
  • Pytorch如何将嵌套的dict类型数据加载到GPU
  • 【webrtc】RTX 重传包和NACK包
  • Secure Shell(SSH) 是一种网络协议