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

大语言加持的闭环端到端自动驾驶模型 学习笔记纯干货

LMDrive:大语言模型辅助闭环端到端

LMDrive:大语言模型辅助闭环端到端

  • 背景
  • 框架
    • 输入部分:
      • 导航指令:
      • 视觉数据:
      • 提示指令(可选):
      • 处理部分:
      • 输出部分:
    • 视觉编码器(vision encoder):
    • 大语言模型及其相关组件:
    • 输入部分:
    • 视觉编码器处理:
      • 2D 处理路径:
      • 3D 处理路径:
    • 视觉标记
      • 生成过程:
      • 作用:
    • 预测模块:
      • BEV 地图预测:
      • 交通信号灯状态预测:
      • 未来路径点预测:
      • 预训练阶段:
      • 指令微调阶段和推理阶段:
    • 测试路线类型
  • Awesome-DriveLM

在这里插入图片描述

背景

自动驾驶行驶过程中要从起点到终点,避免碰撞,防止违反交通法规
端到端与模块化设计之分——端到端已成主流
闭环与开环——在线数据与
在这里插入图片描述
驾驶模拟器——使用了carla
在这里插入图片描述
交通场景
设计了两种工况,有一些特殊交互场景,来检验模型对特殊情况的处理。
在这里插入图片描述
之前的工作
在这里插入图片描述
现有问题:
1现代自动驾驶方法在遇到长尾的、难以预见的事件以及复杂的城市场景时,表现不佳,容易引发严重事故。
2并且以往的自动驾驶方法倾向于依赖有限格式的输入,比如传感器数据和导航航点,这限制了车辆对语言信息的理解能力以及与人类的交互能力。
新的尝试:大语言模型(LLM)展现出接近 “通用人工智能(AGI)” 的强大推理能力,有望改善自动驾驶面临的问题。图中还展示了结合大语言模型的自动驾驶系统架构,通过指令输入,利用传感器数据等,形成数据和梯度流动的闭环控制。
这里是闭环的系统,完整的跑完这个过程,而不是用一个数据集(使用数据集来跑一个开环是不一样的)
通过instruction作为输入,同时有环境的数据,由LLM输出control给Environment
在这里插入图片描述
贡献情况
提出新框架:提出了一种新颖的端到端、闭环、基于语言的自动驾驶框架 LMDrive,它通过多模态多视角传感器数据以及自然语言指令,与动态环境进行交互。
提供数据集:提供了一个包含约 6.4 万个数据片段的数据集,每个片段包含一条导航指令、若干提示指令、一系列多模态多视角传感器数据以及控制信号,数据片段时长在 2 到 20 秒之间。
建立评估基准:提出了 LangAuto 基准,用于评估将语言指令作为导航输入的自动驾驶智能体,该基准涵盖了具有误导性或冗长的指令,以及具有挑战性的对抗性驾驶场景 。
实验验证:进行了大量的闭环实验,验证了所提出框架的有效性,并分析了 LMDrive 的特点,为该方向的后续研究提供了参考。
在这里插入图片描述
数据集格式
在这里插入图片描述
navigation instruction
notice instruction
在这里插入图片描述
示例:
包含的一些关于场景的语言的等等
在这里插入图片描述
多种表述、误导性、多个指令等
指令多样化:借助 ChatGPT API 为每种类型的指令生成八个不同的变体。比如对于 “右转” 指令,就有 “行驶 [x] 米后右转” 等多种不同表述方式,以丰富指令形式。
加入误导性指令:为了提升模型应对误导性指令的能力,模拟了这类场景并将其添加到数据集中,增强模型在面对错误或干扰信息时的鲁棒性。
连接多个指令:构建了一些连续的复杂指令数据,用于模拟真实的基于导航的驾驶场景,使数据集更贴合实际应用中的复杂情况。
在这里插入图片描述
复杂的指令
在这里插入图片描述
两个连续指令场景:给出了两组示例,像 “准备前方右转。沿此路线继续行驶。” 以及 “沿此路线保持当前方向。向左,准备驶入。” ,模拟了较为基础的连续导航指令情境。
三个连续指令场景:列举了三组示例,比如 “在即将到达的 T 字路口右转。驶向左侧车道。沿此路线保持行驶。” 这些示例更为复杂,模拟了在实际驾驶中可能遇到的一系列连贯的导航指令情况,有助于训练和评估自动驾驶模型处理复杂指令序列的能力 。
在这里插入图片描述
2T左右的数据
在这里插入图片描述

框架

输入部分:

导航指令:

例如 “在下个路口左转”,通过 Tokenizer(分词器)处理后输入到大语言模型(LLM)中。

视觉数据:

多视角的 RGB 图像和激光雷达(LiDAR)数据,先由 Vision Encoder(视觉编码器)编码,再经过 Q-Former 和 Adapter(适配器)处理,输入到大语言模型。

提示指令(可选):

比如 “注意前方行人”,同样经过 Tokenizer、Q-Former 和 Adapter 处理后进入大语言模型。

处理部分:

大语言模型接收上述多种输入信息,进行综合处理和推理,判断当前指令是否完成。

输出部分:

如果指令未完成,模型会继续处理输入信息;若指令完成,模型通过 Adapter 输出控制信号(如方向盘、油门、刹车等控制指令),实现自动驾驶操作 。 整个框架体现了多模态数据与大语言模型的结合,用于实现基于语言指令的自动驾驶控制 。
在这里插入图片描述

视觉编码器(vision encoder):

负责处理来自摄像头和激光雷达等多视角、多模态的传感器数据。通过对这些数据的分析理解周围场景,并生成视觉标记(visual tokens),为后续模型提供关于外部环境的视觉信息。

大语言模型及其相关组件:

包括分词器(tokenizer)、Q-Former 和适配器(adapters)。该部分处理所有历史视觉标记以及语言指令(导航指令和可选的提示指令),通过对这些信息的整合和推理,来预测车辆的控制信号,比如方向盘转向、加减速等操作,同时判断当前的指令是否已经完成。
在这里插入图片描述

输入部分:

有两种输入,多视角的图像作为 2D 输入,激光雷达(LiDAR)数据作为 3D 输入。

视觉编码器处理:

2D 处理路径:

多视角输入先经过 2D Backbone(骨干网络)提取特征,再通过 Transformer Encoder(Transformer 编码器),输出 key 和 value 值,用于后续处理。

3D 处理路径:

LiDAR 输入进入 3D Backbone(骨干网络),同时还有交通信号灯查询(Traffic Light query)和路径点查询(Waypoint queries)作为额外输入,接着经过 Decoder(解码器),与 2D 路径的输出结合,生成鸟瞰图(BEV)形式的视觉标记(Visual Tokens)。

视觉标记

生成过程:

由视觉编码器生成。多视角图像和激光雷达数据分别经过 2D Backbone、Transformer Encoder 以及 3D Backbone、Decoder 等模块处理后,融合生成鸟瞰图(BEV)形式的 visual tokens ,它综合了车辆周围环境的 2D 和 3D 信息。

作用:

是连接视觉感知与后续预测及决策模块的桥梁。一方面,作为输入提供给预测头(Prediction Headers),用于生成 BEV 地图、预测交通信号灯状态和未来路径点;另一方面,在 LMDrive 模型整体流程中,会被输入到大语言模型,让大语言模型结合语言指令进行处理,从而输出控制信号,实现自动驾驶 。简单来说,visual tokens 承载了环境感知信息,便于模型后续完成各类任务。

预测模块:

BEV 地图预测:

视觉标记进入 CenterPoint 模块,生成 BEV Map,用于展示车辆周围环境的鸟瞰图。

交通信号灯状态预测:

通过多层感知器(MLP),根据视觉标记预测交通信号灯状态。

未来路径点预测:

利用门控循环单元(GRU),根据路径点相关的视觉标记,预测未来的路径点(Future waypoints)。
在这里插入图片描述

预训练阶段:

视觉编码器会连接预测头(prediction headers)。此时,它利用多视角多模态传感器数据作为输入,执行目标检测、交通信号灯状态分类和未来路径点预测等预训练任务。通过这些任务,视觉编码器能够学习到如何从输入数据中提取与自动驾驶相关的关键信息,例如识别周围物体、判断信号灯状态和规划未来行驶路径等。

指令微调阶段和推理阶段:

预测头会被舍弃,并且视觉编码器被冻结(参数不再更新)。在这个阶段,视觉编码器的主要作用是生成视觉标记(visual tokens),这些标记会被输入到大语言模型(LLM)中。这样做的目的是将视觉信息转化为大语言模型能够理解和处理的形式,以便大语言模型结合语言指令对自动驾驶行为进行决策和控制。
在这里插入图片描述
视觉编码器预训练阶段:视觉编码器以单帧传感器数据作为输入。由于指令标注过程会丢弃一些帧,所以使用指令标注前的原始数据集进行预训练,该原始数据集包含约 300 万帧数据。在此阶段,仅对视觉编码器进行预训练,任务集中在场景理解相关的感知任务上,如目标检测、交通信号灯状态识别等,让视觉编码器学会从传感器数据中提取有用的视觉信息。
指令微调阶段:整个系统在指令的引导下进行端到端的自动驾驶训练。此时,Q-Former 和适配器(Adapters)是可训练的,而其他组件被冻结。LMDrive 模型以一系列帧作为输入,在训练时会设置一个固定的序列长度来构建批量数据,目的是让模型学会将视觉信息、语言指令和控制信号进行对齐,使模型能够根据语言指令和视觉输入输出合适的控制信号,实现自动驾驶。
在这里插入图片描述
基准benchmark
在这里插入图片描述
独特性:LangAuto 基准测试是首个在 CARLA(一个自动驾驶模拟环境)中评估基于语言指令的闭环驾驶的基准。与之前的 Town05 和 Longest6 等基准不同,它使用自然语言指令,而非离散命令或路点来指导自动驾驶。
特征:
自然语言引导:用自然语言引导车辆到达目的地,还会加入适当的提示以增强安全性,更贴近现实中的人类指令交互。
场景丰富:覆盖 CARLA 中的全部 8 个城镇,包含高速公路、十字路口、环形交叉路口等多种场景,以及 16 种环境条件,包括 7 种天气和 3 种光照条件,能全面测试自动驾驶系统在不同环境下的表现。
多样挑战:支持不同的行驶路线,提供多样化的驾驶挑战和场景,增加了测试的复杂性和全面性。
误导性指令:约 5% 的指令是故意设置的误导性指令,持续 1 - 2 秒,自动驾驶智能体必须识别并忽略这些指令以安全导航,以此测试系统应对干扰信息的能力。
在这里插入图片描述
度量metics:
路线完成率(Route completion):指已完成的路线长度占总路线长度的百分比,用于衡量自动驾驶系统在给定路线上的行驶进展情况,体现其能否按照指令规划的路线前进并抵达目的地。
违规分数(Infraction score) :当自动驾驶车辆发生碰撞或违反交通规则时,违规分数会根据相应的折扣因子降低。这个指标主要用于评估自动驾驶系统在行驶过程中的安全性和遵守交通规则的程度。
驾驶分数(Driving score) :由路线完成率和违规分数相乘得出,综合描述了驾驶进展和安全性两个方面,是一个被广泛认可的用于对自动驾驶系统进行排名的指标。通过这个分数,可以更全面地评估不同自动驾驶系统在复杂场景下的综合性能。
在这里插入图片描述

测试路线类型

LangAuto Track:导航指令会根据自动驾驶智能体的位置实时更新。它包含三个子路线(Tiny/Short/Long),分别对应不同的路线长度,用于在不同行程距离下测试自动驾驶系统对导航指令的响应和执行能力。
LangAuto - Notice Track:在 LangAuto Track 的基础上,增加了提示指令,用于模拟在复杂场景下为自动驾驶系统提供实时帮助的情景,测试系统处理额外提示信息并做出正确反应的能力。
LangAuto - Sequential Track:将连续的指令合并为一个长指令,模仿现实世界中导航软件的指令形式,考验自动驾驶系统理解和执行复杂长指令的能力。
不同路线的对比分析
表格对 LangAuto Track 中的三个子路线(LangAuto、LangAuto - Short、LangAuto - Tiny)进行了对比:
平均行驶距离(Avg. Driving Distance):LangAuto 平均为 635.8 米,LangAuto - Short 为 305.9 米,LangAuto - Tiny 为 122.4 米,体现了各子路线的长度差异。
平均导航指令数量(Avg. Navigation Instructions):LangAuto 为 20.3 条,LangAuto - Short 为 10.8 条,LangAuto - Tiny 为 5.1 条 ,反映出随着路线长度缩短,导航指令数量相应减少。
平均提示指令数量(Avg. Notice Instructions):LangAuto 为 5.8 条,LangAuto - Short 为 3.3 条,LangAuto - Tiny 为 1.7 条,说明不同长度的路线在运行过程中所需的提示指令数量也有所不同。 这些数据有助于评估自动驾驶系统在不同路线复杂度下的性能表现。
在这里插入图片描述
性能指标
这张表格展示了在 LangAuto 基准测试中,6 种不同大语言模型(LLM)作为骨干网络时的性能对比以及消融研究结果,涉及的指标和解读如下:
指标说明:
DS(Driving score):驾驶分数,是路线完成率(RC)和违规分数(IS)的乘积,综合衡量自动驾驶系统的行驶进展和安全性,分数越高表示性能越好。
RC(Route completion):路线完成率,指已完成的路线长度占总路线长度的百分比,数值越高意味着系统在规划路线上行驶得越远。
IS(Infraction score):违规分数,反映自动驾驶系统遵守交通规则的程度,数值越高表示违规越少。
模型对比:
Random Init.(随机初始化):作为对比基线,其各项指标数值相对较低,说明未经训练或预训练的模型在自动驾驶任务中表现较差。
LLaMA、LLaMA2:是不同版本的大语言模型。在不同的 LangAuto 子路线(LangAuto、LangAuto - Short、LangAuto - Tiny)测试中,它们在各项指标上均明显优于随机初始化模型,且 LLaMA2 在部分指标上比 LLaMA 有一定提升。
Vicuna、Vicuna-v1.5:Vicuna 模型及其 v1.5 版本在不同路线测试中的表现也优于随机初始化,且 Vicuna - v1.5 在一些指标上略高于 Vicuna。
LLaVA-v1.5:在所有对比的模型中,LLaVA - v1.5 在多数指标上取得了最高的数值,表明该模型在基于语言指令的自动驾驶任务中综合性能相对更优。
在这里插入图片描述
关于 LMDrive 模型中不同模块设计的消融研究,对比分析了各模块对模型性能的影响:
在这里插入图片描述
上半部分
对比 LLaVA-v1.5 和 Vicuna-v1.5 在 LangAuto 和 LangAuto - Notice 基准测试中的表现,指标如下:
违规分数(Infraction Score):分数越高表示遵守交通规则越好。在 LangAuto - Notice 基准测试中,两款模型的违规分数均高于 LangAuto 基准测试,说明额外的提示指令有助于减少违规。
车辆碰撞(Vehicle Collisions)、行人碰撞(Pedestrian Collisions)、布局碰撞(Layout Collisions):数值越低表明碰撞情况越少。可以看到,在 LangAuto - Notice 基准测试中,这几项碰撞指标均有所降低,意味着提示指令提升了安全性。
闯红灯违规(Red light Violations)、驶离道路违规(Offroad Infractions)、道路堵塞违规(Blocked Infractions):数值越低代表违规情况越少。从数据可以看出,不同模型在不同基准测试中的违规情况有差异 ,但总体上 LangAuto - Notice 基准测试中的部分违规情况相对较少。
下半部分
对比 LLaVA-v1.5 和 Vicuna-v1.5 在 LangAuto 和 LangAuto - Sequential 基准测试中的表现,涉及驾驶分数(DS)、路线完成率(RC)和违规分数(IS):
LLaVA-v1.5:在 LangAuto 基准测试中的 DS 为 36.2,RC 为 46.5,IS 为 0.81;在 LangAuto - Sequential 基准测试中,DS 降至 34.0,RC 降至 43.7,IS 保持 0.81 ,说明合并连续指令的 LangAuto - Sequential 基准测试对其驾驶和路线完成能力有一定挑战。
Vicuna-v1.5:在 LangAuto 基准测试中的 DS 为 34.0,RC 为 39.0,IS 为 0.85;在 LangAuto - Sequential 基准测试中,DS 降至 31.9,RC 降至 37.1,IS 降至 0.84 ,同样显示出在 LangAuto - Sequential 基准测试中性能有下降。
在这里插入图片描述
训练过程可视化示例
在这里插入图片描述
备注:DriveLM相关研究

Awesome-DriveLM

A collection of resources and papers on Large Language Models in autonomous driving

BEVGPT: Generative Pre-trained Large Model for Autonomous Driving Prediction, Decision-Making, and Planning
Pengqin Wang, Meixin Zhu, Hongliang Lu, Hui Zhong, Xianda Chen, Shaojie Shen, Xuesong Wang, Yinhai Wang
AAAI 2024 [Paper]

ADAPT: Action-aware Driving Caption Transformer
Bu Jin, Xinyu Liu, Yupeng Zheng, Pengfei Li, Hao Zhao, Tong Zhang, Yuhang Zheng, Guyue Zhou, Jingjing Liu
ICRA 2023. [Paper] [Code]

DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
Zhenhua Xu, Yujia Zhang, Enze Xie, Zhen Zhao, Yong Guo, Kwan-Yee. K. Wong, Zhenguo Li, Hengshuang Zhao
arXiv Oct. 2023. [Paper]

Driving with LLMs: Fusing Object-Level Vector Modality for Explainable Autonomous Driving
Long Chen, Oleg Sinavski, Jan Hünermann, Alice Karnsund, Andrew James Willmott, Danny Birch, Daniel Maund, Jamie Shotton
arXiv Oct. 2023. [Paper][Code]

GPT-Driver: Learning to Drive with GPT
Jiageng Mao, Yuxi Qian, Hang Zhao, Yue Wang
arXiv Oct. 2023. [Paper] [Code]

Drive Anywhere: Generalizable End-to-end Autonomous Driving with Multi-modal Foundation Models
Tsun-Hsuan Wang, Alaa Maalouf, Wei Xiao, Yutong Ban, Alexander Amini, Guy Rosman, Sertac Karaman, Daniela Rus
arXiv Oct. 2023. [Paper]

LanguageMPC: Large Language Models as Decision Makers for Autonomous Driving
Hao Sha, Yao Mu, Yuxuan Jiang, Li Chen, Chenfeng Xu, Ping Luo, Shengbo Eben Li, Masayoshi Tomizuka, Wei Zhan, Mingyu Ding
arXiv Oct. 2023. [Paper]

Drive Like a Human: Rethinking Autonomous Driving with Large Language Models
Daocheng Fu, Xin Li, Licheng Wen, Min Dou, Pinlong Cai, Botian Shi, Yu Qiao
arXiv July 2023. [Paper] [Code]

LINGO-1: Exploring Natural Language for Autonomous Driving
Wayve
[Website]

相关文章:

大语言加持的闭环端到端自动驾驶模型 学习笔记纯干货

LMDrive:大语言模型辅助闭环端到端 LMDrive:大语言模型辅助闭环端到端 背景框架输入部分:导航指令:视觉数据:提示指令(可选):处理部分:输出部分: 视觉编码器…...

初阶数据结构(C语言实现)——2算法的时间复杂度和空间复杂度

目录 本节目标1. 算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 2.时间复杂度2.1 时间复杂度的概念2.1.1 入门习题2.1.2 进阶习题 2.2 常见时间复杂度 3. 空间复杂度3.1 常见空间复杂度 本节目标 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度oj练习 1. 算法…...

MySQL知识

1.Navicat客户端连接 打开navicat,点击连接,点击MySQL 输入连接名与密码,如果连接的mysql是windows下的mysql主机号就填写localhost 填写好后点击测试连接 点击确定,mysql连接navicat成功 2.MySQL数据定义语言(DDL) DDL用于数据库…...

【前端定位线上问题的多种方案(不依赖 Sentry)】

前端定位线上问题的多种方案(不依赖 Sentry) 🛠️ 一、构建时注入调试信息 🔧 1. 注入版本信息与 Git 提交哈希 Webpack 配置: // webpack.config.js const webpack require(webpack); const gitRevision require(…...

怎么修改node_modules里的文件,怎么使用patch-package修改node_modules的文件,怎么修改第三方库原文件。

在开发中会遇到需要node_modules里第三方库有bug,然后需要修改node_modules文件的情况 使用patch-package包可以修改node_modules里的文件 patch-package npm 官网:patch-package - npm 安装 npm i patch-package 修改文件后 npx patch-package s…...

muduo网络库2

Muduo网络库:底层实质上为Linux的epoll pthread线程池,且依赖boost库。 muduo的网络设计核心为一个线程一个事件循环,有一个main Reactor负载accept连接,然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor)&…...

什么是DrawCall?DrawCall为什么会影响游戏运行效率?如何减少DrawCall?

目录 1 什么是DrawCall? 2 DrawCall为什么会影响游戏运行效率? 3 如何减少 DrawCall?(结合性能分析工具) 1 什么是DrawCall? DrawCall(绘制调用) 是 GPU 的一个指令&#xff0c…...

LabVIEW电能质量分析软件

随着电力系统的复杂性增加,电能质量问题日益突出,传统的电能质量检测装置多采用DSP技术,不仅开发周期长、功能单一,而且在多功能集成方面存在局限性。基于LabVIEW虚拟仪器开发平台的电能质量分析软件利用FFT、STFT、WT、HHT等多种…...

【十二】Golang 映射

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 映射映射的定义映射初始化make 函数使用字面量 源…...

PHP商协会管理系统小程序源码

📊 商协会管理系统 💻 这是一款基于ThinkPHPUniapp框架,经过深度定制与匠心打造的商协会系统,被誉为商协会领域数字化运营管理的新锐之星。它以“智慧化会员体系、智敏化内容运营、智能化活动构建”为三大核心动力源,…...

React进阶之React核心源码解析(三)

React核心源码解析 diff多节点比较diff两轮遍历比较第一轮比较第二轮比较Update 状态更新Concurrent Modediff 多节点比较diff isArray方法比较 节点更新// 更新前 <ul><li key="0" className="before">0<li><li key=...

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性&#xff1b;消息完整性&#xff1b;可访问性与可用性&#xff1b;身份认证。 二、网络安全威胁 窃听&#xff1b;插入&#xff1b;假冒&#xff1b;劫持&#xff1b;拒绝服务Dos和分布式拒绝服务…...

mysql中的计算日期函数 理解、用法

三种计算日期的函数 函数用途示例DATEDIFF()计算两个日期的天数差DATEDIFF(2023-10-05, 2023-10-01) → 4TIMESTAMPDIFF()按指定单位&#xff08;年、月、小时等&#xff09;计算差TIMESTAMPDIFF(MONTH, 2023-01-01, 2023-03-01) → 2DATE_ADD()日期加法DATE_ADD(2023-10-01, …...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)

项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…...

wifi5和wifi6,WiFi 2.4G、5G,五类网线和六类网线,4G和5G的区别

wifi5和wifi6的区别 是Wi-Fi 5和Wi-Fi 6的选择与路由器密切相关。路由器是创建和管理无线网络的设备,它决定了网络的类型和性能。具体来说: 路由器的标准支持:路由器可以支持不同的Wi-Fi标准,如Wi-Fi 5(802.11ac)和Wi-Fi 6(802.11ax)。支持Wi-Fi 6的路由器能够提供更高…...

Docker基础-常见命令

docker images -查看所有的本地镜像。 docker pull -把远端镜像拉取到本地。 docker rmi -删除镜像。 docker push -推到镜像仓库。 docker run -创建并运行容器&#xff08;自动化&#xff0c;如果发现镜像不存在会先去拉取&#xff0c; 拉取完了以后再去自动创建容器&am…...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口

1.划分文件夹 在src目录下创建controllers middleware models routes controllers 放具体的方法 signup login middleware 里面是中间件 请求的验证 models 放对象实体 routes 处理访问路径像/signup /login 等等 2. 接口开发 系统的主要 有用户认证 和 消息 2种类型…...

Android NFC功能开发指南

在 Android 平台上开发 NFC&#xff08;近场通信&#xff09;功能&#xff0c;主要涉及以下几个步骤&#xff1a; 1. 权限声明 首先&#xff0c;在 AndroidManifest.xml 文件中声明 NFC 权限&#xff1a; <uses-permission android:name"android.permission.NFC&quo…...

基于Matlab实现汽车远近光灯识别的详细步骤及代码示例

以下是一个基于Matlab实现汽车远近光灯识别的详细步骤及代码示例&#xff0c;主要通过图像处理技术来区分远光灯和近光灯。 整体思路 图像预处理&#xff1a;包括读取图像、灰度化、去噪等操作&#xff0c;以提高后续处理的准确性。边缘检测&#xff1a;找出图像中的边缘信息…...

nginx反向代理以及负载均衡(常见案例)

一、nginx反向代理 1、什么是代理服务器&#xff1f; 代理服务器&#xff0c;客户机在发送请求时&#xff0c;不会直接发送给目的主机&#xff0c;而是先发送给代理服务器&#xff0c;代理服务接受客户机请求之后&#xff0c;再向主机发出&#xff0c;并接收目的主机返回的数据…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...