大语言模型遇上自动驾驶:AsyncDriver如何巧妙解决推理瓶颈?
导读
这篇论文提出了AsyncDriver框架,致力于解决大语言模型在自动驾驶领域应用中的关键挑战。论文的主要创新点在于提出了大语言模型和实时规划器的异步推理机制,实现了在保持性能的同时显著降低计算开销。通过设计场景关联指令特征提取模块和自适应注入模块,该框架能够有效融合多模态信息并无缝集成到现有规划器中。在nuPlan具有挑战性的场景评测中,AsyncDriver展现出优异的闭环性能,实验结果表明即使在较大的推理间隔下仍能保持稳定表现。对于关注自动驾驶与大模型结合的研究者来说,这篇论文提供了一个实用的解决方案,展示了如何在实际应用中平衡性能和计算效率。
©️【深蓝AI】编译
论文标题:Asynchronous Large Language Model Enhanced Planner for Autonomous Driving
论文作者:Yuan Chen, Zi-han Ding, Ziqin Wang, Yan Wang, Lijun Zhang , Si Liu
论文地址:Asynchronous Large Language Model Enhanced Planner for Autonomous Driving | SpringerLink
1 研究背景
运动规划在自动驾驶领域扮演着关键角色,因其直接影响车辆的导航和安全性而备受关注。在评估自动驾驶规划器性能时,闭环仿真是一种特别重要的方法。在闭环仿真中,驾驶场景会根据规划器预测的轨迹动态发展,这就要求模型具备更强的预测准确性和偏差修正能力。
目前的实时学习型运动规划框架通常使用矢量化地图信息作为输入,并通过解码器预测轨迹。但作为纯数据驱动的方法,这类规划器在罕见或未见过的场景中表现容易显著下降。虽然也存在一些基于规则的策略,但手工制定规则往往无法完全覆盖复杂场景下的所有可能情况,导致驾驶策略要么过于保守,要么过于激进。此外,无论是学习型还是规则型规划框架,都面临着可控性较低的问题,这给动态环境下系统的安全性和可靠性带来了隐患。
近期,大型语言模型(如GPT-4和Llama2)在自动驾驶领域展现出巨大潜力。这些模型通过在大规模数据集上预训练,建立了理解交通规则和场景的坚实基础。因此,基于大语言模型的规划器在场景分析、推理和人机交互方面表现出优异性能,为提高运动规划的可解释性和可控性开辟了新途径。
然而,这些模型仍然面临几个具体挑战:首先,场景信息是通过语言描述的,可能会受到输入token长度的限制,难以全面准确地描述复杂场景细节;其次,通过语言输出进行预测时,要么需要将高层指令转换为控制信号(可能导致不准确),要么需要通过语言输出浮点数形式的轨迹点(这并不是大语言模型所擅长的);第三,现有框架主要将大语言模型作为核心决策实体,虽然这种策略在性能上有优势,但大语言模型固有的庞大参数量导致推理速度相比实时规划器明显降低,这给实际部署带来了实质性障碍。
如何克服这些挑战,使大语言模型能够更好地服务于自动驾驶运动规划,是本文要解决的核心问题。
2 相关研究工作
在自动驾驶运动规划方面,经典的模块化流程包含感知、预测和规划三个环节。在这个框架中,规划模块基于感知的输出预测未来轨迹,然后由控制系统执行。这种架构被Apollo等工业界框架广泛采用,与端到端方法相比,其优势在于可以通过模块间明确定义的数据接口,针对性地研究各个任务。
自动驾驶规划器主要可以分为基于规则和基于学习两类。基于规则的规划器依赖预定义的规则来确定车辆轨迹,比如维持安全跟车距离和遵守交通信号等。典型的如IDM(智能驾驶模型),它通过计算制动和停车距离来确保与前车保持安全距离。PDM(概率驾驶模型)在IDM基础上,通过选择得分最高的IDM方案作为最终轨迹,在2023年nuPlan挑战赛中取得了最佳成绩。但基于规则的规划器往往难以应对超出预定规则范围的复杂驾驶场景。
▲图1| 自动驾驶规划器对比综述©️【深蓝AI】编译
基于学习的规划器则试图通过模仿学习或离线强化学习从大规模数据集中复现人类专家的驾驶轨迹。但它们也受限于数据集的覆盖范围和模型复杂度,在路径信息理解和环境感知等方面仍有很大提升空间。
在大语言模型与自动驾驶结合方面,GPT-4和Llama2等模型展现出卓越的泛化和推理能力。目前研究主要集中在几个方向:一些工作探索了将场景信息(包括自车状态、障碍物、行人和其他车辆信息)通过语言模态整合到大语言模型中用于决策和解释。但这类方法受限于有限的上下文长度,难以编码精确信息进行有效的决策推理。
为克服这些限制,一些多模态方法如DrivingWithLLM、DriveGPT4和RAGDriver被提出。这些方法将矢量化或图像/视频模态与语言指令对齐,以更全面地解释驾驶场景。但用语言表达控制信号存在局限性:DrivingWithLLM输出高层语言指令,提升了问答交互但降低了将复杂推理转化为精确车辆控制的保真度;DriveGPT4通过语言表达航路点,展现出良好的开环性能但缺乏闭环仿真评估。
此外,一些工作如LMDrive和LanguageMPC聚焦于闭环评估,通过在大语言模型后连接低层控制器或回归器实现精确的车辆控制。但这些方法需要在每个规划步骤进行完整的语言解码或大语言模型推理,这给实时响应和实际部署带来挑战。
相比之下,本文提出的方法从直接使用大语言模型进行语言输出转向增强实时学习型规划器。这种策略不仅提升了环境理解能力,还允许大语言模型和实时规划器以不同的推理频率独立运行。这种解耦机制显著降低了大语言模型推理延迟,有利于实际部署。
3 数据生成
作者基于nuPlan数据集构建训练数据。nuPlan是首个大规模自动驾驶规划基准数据集,包含来自波士顿、匹兹堡、拉斯维加斯和新加坡共1200小时的真实人类驾驶数据。研究团队从nuPlan的训练集和验证集中开发了预训练和微调数据集,重点关注14种官方定义的具有挑战性的场景类型。
在预训练数据生成方面,为了增强大语言模型对自动驾驶指令的理解,研究团队创建了基于语言的问答数据集,包括Planning-QA和Reasoning1K两部分。这种设计与大语言模型的原生模态相匹配,有助于更好地理解指令语义。
其中,Planning-QA采用基于规则的方法以实现可扩展性,旨在增强大语言模型对航路点、高层指令和控制之间关系的理解。在这个数据集中,航路点是由一系列点组成的数组,高层指令包括速度指令(停止、加速、减速、保持速度)和路由指令(左转、右转、直行),控制则涉及速度和加速度值。Planning-QA包含六种类型的问题,每种都聚焦于航路点、高层指令和控制之间的转换关系。
Reasoning1K包含1000条由GPT-4生成的数据。这部分数据不仅提供答案,还基于场景描述补充了推理和解释,用于与Planning-QA混合训练。
在微调数据生成方面,研究团队基于10000个场景构建了微调数据集,每8秒采样一帧,最终得到了180000帧训练集和20000帧验证集。每一帧都包含矢量化地图数据和语言提示。重要的是,训练集和验证集中的场景类型分布与整个nuPlan训练验证集的分布相匹配。
对于提取的矢量化场景信息,研究采用了与GameFormer类似的方法,包含了自车信息和20个周围智能体在20个历史帧上的信息,以及以自车为中心的全局地图数据。
大语言模型的提示由两部分组成:系统提示和一系列路由指令。关于路由指令,研究团队采用基于规则的方法将路径转换为带有距离信息的指令序列。在训练数据集准备阶段,使用自车在接下来8秒的真实轨迹作为生成路由指令的路径。在仿真过程中,基于当前场景观察,通过手工设计的方法找到一条符合指定最大长度的路径作为生成指令的参考路径。
4 研究方法
如图2所示,本文提出的异步大语言模型增强闭环框架AsyncDriver主要包含两个核心组件:1)场景关联指令特征提取模块; 2)自适应注入模块。此外,得益于框架的设计,大语言模型和实时规划器之间的推理频率可以解耦,并通过异步间隔进行调节,显著提升了推理效率。
▲图2| AsyncDriver框架©️【深蓝AI】编译
4.1 场景关联指令特征提取模块
多模态输入:在每个规划迭代中,系统从仿真环境中获取矢量化场景信息。类似于GameFormer的方法,提取了自车和其他智能体在20个历史帧上的轨迹和状态信息,以及全局地图数据。实时规划器的矢量化场景信息以相同方式提供。所有矢量数据都是相对于自车位置的。随后,通过矢量地图编码器和地图适配器的处理,得到地图嵌入。这些地图嵌入与语言嵌入一起输入Llama2-13B主干网络。
对齐辅助模块: 为了把握路由指令的本质同时保持对矢量化场景信息的细粒度理解,从而更好地提取场景关联的高层指令特征,研究采用了对齐辅助模块来促进多模态输入的对齐。具体来说,研究团队识别了自动驾驶过程中五个关键的场景要素用于多任务预测,通过五个独立的双层MLP预测头来实现。对于自车当前状态,模型在X轴和Y轴上回归估计车辆的速度和加速度。对于地图信息,进行分类任务以识别左右两侧是否存在相邻车道,并评估当前车道相关的交通信号状态。此外,考虑到未来的导航策略,模型还对未来轨迹中的换道需求和未来速度决策(包括加速、减速和保持当前速度)进行分类。值得注意的是,对齐辅助模块仅用于训练阶段辅助多模态对齐,不参与推理阶段。
4.2 自适应注入模块
研究团队采用了GameFormer的解码器结构作为基础解码器层,通过将传统的基于Transformer的解码器层演化为自适应注入模块,实现了场景关联指令特征的自适应集成。具体来说,首先通过特征适配器对最后一个token的隐藏特征进行投影,随后输入到自适应注入模块中。
在自适应解码器模块中,研究团队优雅地扩展了实时规划器的基础解码器架构,确保每一层中的查询不仅保持对原始场景信息的注意力操作,还能与场景关联指令特征进行交叉注意力计算,从而将指令引导融入预测过程。之后,更新后的指令增强查询特征通过可学习的自适应门进行调制,该门的初始值为零,并被重新整合到解码器层的原始注意力输出中。
作者提出的自适应注入方法不仅维持了实时规划器中原始解码器层处理完整场景信息的能力,还增强了规划器对一系列灵活语言指令的理解和遵循能力。这种改进使得系统能够产生更精细和可控的预测结果。值得注意的是,由于自适应注入模块设计简单而有效,它可以无缝集成到任何基于Transformer的架构中,这使得方法具有适配其他实时规划器框架的灵活性。
4.3 异步推理
研究团队的设计利用大语言模型来引导实时规划器,通过一系列灵活组合的语言指令显著提升其性能,同时不损害其结构完整性。这种方法实现了可控的异步推理,有效解耦了大语言模型和实时规划器的推理频率,因此大语言模型不需要处理每一帧。在异步间隔期间,先前推导出的高层指令特征继续指导实时规划器的预测过程,这显著提升了推理效率,降低了大语言模型引入的计算成本。值得注意的是,我们的框架能够适应一系列灵活组合的路由指令,能够提供长期的高层路由洞察。因此,即使在异步间隔期间,之前的高层特征仍然能够提供有效指导,增强了整个LLM推理间隔内的性能稳定性。
实验结果表明,当扩大大语言模型的异步推理间隔时,我们的架构仍保持接近稳定的性能。通过控制大语言模型每3帧执行一次推理,可以实现推理时间减少近40%,而精度仅损失约1%,这证明了我们的方法在精度和推理速度之间达到了最优平衡。关于实验结果和分析的更全面探讨,请参见5.2节。
4.4 训练细节
在预训练阶段,使用全部的Reasoning1K,并从Planning-QA中随机选取1,500个样本来训练LoRA。这个过程使大语言模型从通用大语言模型演变为专门针对自动驾驶优化的模型。作为这种聚焦适应的直接结果,大语言模型在运动规划情境下理解指令的准确性得到显著提升。
在微调阶段,由于保留了矢量地图编码器和解码器的架构,我们加载了在相同数据集上预训练的实时规划器权重以增强训练稳定性。微调阶段的总损失由对齐辅助损失和规划损失组成。前者分为五个部分:1) 自车速度和加速度预测的l1损失,2) 速度决策预测的交叉熵损失,3) 交通信号灯状态预测的交叉熵损失,4) 相邻车道存在预测的二元交叉熵损失,以及5) 换道预测的二元交叉熵损失。
5 实验
5.1 实验设置
在评估设置方面,研究团队遵循nuPlan挑战赛2023的设定,选择了14种官方定义的具有挑战性的场景类型进行训练和评估。尽管nuPlan数据集包含757,844个场景,但大多数简单场景对于关键规划器性能评估而言并不充分,且庞大的数据量会延长评估时间。因此,研究团队从测试集中每种类型随机选择100个场景,然后使用PDM规划器(nuPlan 2023冠军)保留每种类型得分最低的20个场景,最终构建了一个包含279个场景的测试集Hard20。
在实现细节方面,所有实验都在闭环反应式设置下进行。在这种设置中,场景中的智能体可以配备IDM规划器,使它们能够对自车的行为做出反应。仿真频率为10Hz,在每次迭代中,预测轨迹的时间范围为8秒。评估遵循nuPlan挑战赛提出的闭环指标,具体细节在补充材料中详细说明。在模型设置方面,AsyncDriver基于Llama2-13B构建,LoRA配置为R=8和α=32,使用AdamW优化器和带衰减的预热调度器,学习率设为0.0001。
5.2 实验结果
在Hard20评估方面,如表1所示,AsyncDriver相比现有规划器取得了最高性能,相比GameFormer提升了4.6%(约2.95分),甚至超过了当前最先进的基于规则的规划器。为了公平比较,考虑到轨迹细化和对齐在闭环评估中的重要影响,研究团队将PDM评分器适配到AsyncDriver(记为AsyncDriver*),这使得性能相比PDM-Hybrid和PDM-Closed分别提升了5.3%和5.1%(约3.43和3.30分),相比学习型规划器GameFormer提升了8.7%(约5.43分)。从另一个角度看,表2展示了Hard20数据集中每种场景类型的得分以及与现有规划器的比较,结果表明该方案在大多数场景类型中都取得了卓越的表现。
▲表1| Hard20定量评估©️【深蓝AI】编译
▲表2| Hard20数据集中每种场景类型的得分以及与现有规划器的比较©️【深蓝AI】编译
定量结果显示,Scene-Associated Instruction Feature Extraction Module提取的高层特征显著提升了实时规划器在闭环评估中的性能。详细指标显示,相比GameFormer,该方法在可行驶区域性能上提升了3.23分,这表明由于场景上下文理解能力的提升,系统在识别和导航可行驾驶空间方面表现出色。此外,AsyncDriver*在碰撞时间(TTC)指标上超过PDM 4.39%(约3.23分),这表明预测精度得到提升,通过有效预测和减少潜在碰撞场景来确保更安全的驾驶。
在异步推理方面,研究团队认为,特别是对于一般化的高层指令,在短时间间隔内的帧之间存在显著的相似性。因此,考虑到大语言模型在提取这些高层特征方面的作用,它不需要参与每一帧的推理过程,这可以显著提升推理速度。为探索这一点,实验设计区分了大语言模型和实时规划器的推理频率,在每个大语言模型推理间隔期间,使用先前的指令特征来引导实时规划器的预测过程。如图3所示,随着大语言模型规划间隔的增加,该方法的性能表现出显著的稳健性,这表明大语言模型能够提供长期的高层指令。实验观察到,即使在149帧的间隔下(意味着在一个场景中只进行一次推理),性能仍然超过GameFormer 1.0分以上,而推理时间接近实时水平。随着推理间隔的增加,所需的推理时间急剧下降,而准确性几乎保持稳定。因此,通过采用密集训练与异步推理相结合的策略,该方法在准确性和推理速度之间取得了最佳平衡。
▲图3| 异步性能©️【深蓝AI】编译
5.3 指令遵循
图4展示了该方法对不同路由指令的反应,展示了其在指令遵循方面的能力。图4a展示了场景采用常规路由指令时的预测结果。我们注意到自车略微减速,这反映了在弯道处降低速度的常识性判断。然而,考虑到道路畅通的情况,自车保持了相对较高的速度。相比之下,图4b描述了以"停止"作为路由指令的场景。值得注意的是,即使在没有外部障碍物的情况下,自车也迅速对命令做出刹车响应,在短短6秒内将速度从10.65m/s降低到1.06m/s。因此,很明显AsyncDriver可以作为语言交互接口,具备精确理解和遵循人类指令以规避异常情况的能力。
▲图4| 可视化指令遵循结果©️【深蓝AI】编译
5.4 消融研究
在这部分中,研究团队探究了大语言模型的必要性,并调查了AsyncDriver中各个组件的有效性。
首先,在大语言模型必要性方面,研究团队进行了实验,用不同维度(256和5120)的transformer块替代大语言模型,同时引入可学习的路由指令嵌入。同时保持对齐辅助模块和自适应注入模块不变。如表3所示,结果表明,尽管transformer参数量增加了20倍,性能仅从63.27小幅提升到63.59。相比之下,AsyncDriver达到了65.00的性能,凸显了预训练知识对大语言模型的重要影响。
▲表3| 用非预训练的交叉注意力替代大语言模型©️【深蓝AI】编译
在组件消融方面,将简单的MLP作为大语言模型后的预测头用于规划显著降低了性能,这表明简单的轨迹回归无法有效对齐多模态信息,因此无法利用大语言模型对场景的推理能力。研究团队用实时规划器替代MLP,并逐步添加了四个结构:(i)自适应注入模块,(ii)对齐辅助模块,(iii)LoRA,以及(iv)预训练的LoRA。如表4所示,每个模块都提升了性能,其中对齐辅助模块和预训练的LoRA权重贡献最大,分别带来0.94和0.97的分数提升。
▲表4| 消融研究实验©️【深蓝AI】编译
6 结论
本文提出了AsyncDriver,这是一种新型的异步大语言模型增强闭环框架,用于自动驾驶。通过将矢量化场景信息与一系列路由指令对齐形成多模态特征,充分利用了大语言模型在场景推理方面的能力,提取场景相关的指令特征作为引导。通过提出的自适应注入模块,将一系列路由信息整合到任何基于transformer的实时规划器中,增强了其理解和遵循语言指令的能力,在nuPlan具有挑战性的场景中取得了优异的闭环性能。值得注意的是,得益于方法的结构设计,它支持大语言模型和实时规划器之间的异步推理。实验表明,该方法显著提升了推理速度,同时保持了极小的精度损失,有效降低了大语言模型引入的计算成本。
在更广泛影响和局限性方面,如果该方法证明成功,所提出的异步推理方案可能显著提升大语言模型在自动驾驶领域实际应用的前景。然而,尽管本研究使用了大语言模型,但尚未充分验证它们在规划任务中的泛化特性。未来的工作将致力于严格评估大语言模型在矢量化场景中的泛化和迁移潜力。
相关文章:
大语言模型遇上自动驾驶:AsyncDriver如何巧妙解决推理瓶颈?
导读 这篇论文提出了AsyncDriver框架,致力于解决大语言模型在自动驾驶领域应用中的关键挑战。论文的主要创新点在于提出了大语言模型和实时规划器的异步推理机制,实现了在保持性能的同时显著降低计算开销。通过设计场景关联指令特征提取模块和自适应注入…...
第17章 读写锁分离设计模式(Java高并发编程详解:多线程与系统设计)
1.场景描述 对资源的访问一般包括两种类型的动作——读和写(更新、删除、增加等资源会发生变化的动作),如果多个线程在某个时刻都在进行资源的读操作,虽然有资源的竞争,但是这种竞争不足以引起数据不一致的情况发生,那么这个时候…...
硬盘修复后,文件隐身之谜
在数字时代,硬盘作为数据存储的重要载体,承载着无数珍贵的信息与回忆。然而,当硬盘遭遇故障并经过修复后,有时我们会遇到这样一个棘手问题:硬盘修复后,文件却神秘地“隐身”,无法正常显示。这一…...
Ollama+ page Assist或Ollama+AnythingLLM 搭建本地知识库
参考:【AI】10分钟学会如何用RAG投喂数据给你的deepseek本地模型?_哔哩哔哩_bilibili 方法一:Ollama page Assist 本地知识库 ***下方操作比较精简,详情参考:Ollama 部署本地大语言模型-CSDN博客 1.下载Ollama 2.O…...
树莓派5添加摄像头 在C++下调用opencv
由于树莓派5 os系统升级,正常libcamera创建对象每次失败。 改如下方法成功。 1 创建管道 rpicam-vid -t 0 --codec mjpeg -o udp://127.0.0.1:8554 > /dev/null 2>&1 2 opencv从管道里读取 #include <opencv2/opencv.hpp> #include <iostream>int mai…...
redis之RDB持久化过程
redis的rdb持久化过程 流程图就想表达两点: 1.主进程会fork一个子进程,子进程共享主进程内存数据(fork其实是复制页表),子进程读取数据并写到新的rdb文件,最后替换旧的rdb文件。 2.在持久化过程中主进程接收到用户写操作&#x…...
Linux后台运行进程
linux 后台运行进程:& , nohup-腾讯云开发者社区-腾讯云 进程 &,后台运行,结束终端退出时结束进程。 nohup 进程 &,后台运行,结束终端后依然保持运行。...
webpack配置方式
1. 基本配置文件 (webpack.config.js)(导出一个对象) 最常见的方式是通过 webpack.config.js 文件来配置 Webpack,导出一个对象。你可以在这个文件中导出一个配置对象,指定入口、输出、加载器、插件等。 // webpack.config.js m…...
123,【7】 buuctf web [极客大挑战 2019]Secret File
进入靶场 太熟悉了,有种回家的感觉 查看源代码,发现一个紫色文件 点下看看 点secret 信息被隐藏了 要么源代码,要么抓包 源代码没有,抓包 自己点击时只能看到1和3处的文件,点击1后直接跳转3,根本不出…...
OSPF基础(2):数据包详解
OSPF数据包(可抓包) OSPF报文直接封装在IP报文中,协议号89 头部数据包内容: 版本(Version):对于OSPFv2,该字段值恒为2(使用在IPV4中);对于OSPFv3,该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…...
Vue 入门到实战 八
第8章 组合API与响应性 目录 8.1 响应性 8.1.1 什么是响应性 8.1.2 响应性原理 8.2 为什么使用组合API 8.3 setup组件选项 8.3.1 setup函数的参数 8.3.2 setup函数的返回值 8.3.3 使用ref创建响应式引用 8.3.4 setup内部调用生命周期钩子函数 8.4 提供/注入 8.4.1 …...
【学习总结|DAY036】Vue工程化+ElementPlus
引言 在前端开发领域,Vue 作为一款流行的 JavaScript 框架,结合 ElementPlus 组件库,为开发者提供了强大的构建用户界面的能力。本文将结合学习内容,详细介绍 Vue 工程化开发流程以及 ElementPlus 的使用,助力开发者快…...
HTML之CSS三大选择器
HTML之CSS三大选择器 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><st…...
理解链接:加载二进制动态库
理解链接:加载二进制动态库 文章目录 理解链接:加载二进制动态库前情提要基本方式1 - 显式连接 dlopen基本方式 2 - 隐式链接 compile link ld衍生方式 3 - 弱链接 weak linking衍生方式 4 - dlmopen 加载到独立命名空间调试所有符号 补充知识1. 动态库…...
ASP.NET Core中Filter与Middleware的区别
中间件是ASP.NET Core这个基础提供的功能,而Filter是ASP.NET Core MVC中提供的功能。ASP.NET Core MVC是由MVC中间件提供的框架,而Filter属于MVC中间件提供的功能。 区别 中间件可以处理所有的请求,而Filter只能处理对控制器的请求&#x…...
《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》
首先讲在前面,介绍一些背景 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索与语言生成模型的技术,通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型ÿ…...
大规模多准则决策模型构建详细方案
第二阶段:大规模多准则决策模型构建详细方案 目标 基于消费者群体偏好和个体交互数据,构建动态、可扩展的多准则决策模型,实现实时个性化产品排序。 一、技术架构设计 1. 系统架构图 [用户交互层] → (React前端) ↓ [API服务层] → (…...
Rust 语言:变革关键任务软件的新力量
软件无处不在,从手表、烤箱、汽车,甚至可能是牙刷中都有它的身影。更重要的是,软件控制着关乎生死的系统,如飞机、医疗设备、电网系统和银行基础设施等。如果软件工程师稍有疏忽,软件缺陷和漏洞可能导致数十亿美元的损…...
Linux特权组全解析:识别GID带来的权限提升风险
组ID(Group ID,简称 GID)是Linux系统中用来标识不同用户组的唯一数字标识符。每个用户组都有一个对应的 GID,通过 GID,系统能够区分并管理不同的用户组。 在Linux系统中,系统用户和组的配置文件通常包括以…...
安卓/ios脚本开发按键精灵经验小分享
1. 程序的切换 我们经常碰到这样的需求:打开最近的应用列表,选取我们想要的程序。但是每个手机为了自己的风格,样式都有区别,甚至连列表的滑动方向都不一样,我们很难通过模拟操作来识别点击,那么我们做的只…...
机器学习在癌症分子亚型分类中的应用
学习笔记:机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题:Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊:Cancer Cell发表时间:20…...
DeepSeek本地部署保姆级教程
由于DeepSeek近期遭受攻击,又加上用户访问量较大,导致总是服务不可用,让人十分窝火。有没有好的解决办法呢?答案是自己在电脑端部署一套,这样就不用和别人抢着用了。另外本地部署的好处还有保护隐私与减少延迟。 如果…...
无惧户外复杂环境,安科瑞 AKH-0.66/K-HW 开口式互感器准确测流
安科瑞 吕梦怡 18706162527 1.产品特点 AKH-0.66/K-HW 系列互感器具有防水功能,可在户外使用,切面端口采用橡胶垫环绕可有效阻止雨水进入。互感器采用注塑技术,将互感器线圈直接在模具中进行注塑,同时二次侧引线采用防水端子…...
玩转Docker | 使用Docker部署httpd服务
玩转Docker | 使用Docker部署httpd服务 前言一、准备工作环境确认检查操作系统准备网站目录和配置文件二、拉取httpd镜像三、运行httpd容器运行容器命令检查容器状态四、验证httpd服务浏览器访问测试错误排查五、容器管理与维护查看容器状态停止和启动容器更新网站内容和配置六…...
MacOS 安装NVM
MacOS 安装NVM 方法一:使用Homebrew安装nvm 打开终端(Terminal),输入以下命令安装Homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装nvm…...
Qt 数据库SQLite 使用【01】基本功能
1.开发背景 Qt 开发过程中难免需要存储数据,可以选择保存到本地文件,但是查找比较麻烦,所以就有了数据库,主要是方便查找数据,增删改查等操作,而 SqLite 属于数据库中轻量级的存在,适合本地数据…...
http状态码:请说说 503 Service Unavailable(服务不可用)的原因以及排查问题的思路
503 Service Unavailable(服务不可用) 是一种HTTP状态码,表示服务器当前无法处理请求,通常是由于临时性原因导致服务中断。以下是它的常见原因和排查思路: 一、503错误的常见原因 1. 服务器过载 场景:服务…...
58页PPT学习华为面向业务价值的数据治理实践
目录 1. 正文解读... 1 2. 华为数据质量管控的质量度量框架是怎样的?... 2 3. 如何在企业中实施类似华为的数据质量管控...
电脑开机提示按f1原因分析及终极解决方法来了
经常有网友问到一个问题,我电脑开机后提示按f1怎么解决?不管理是台式电脑,还是笔记本,都有可能会遇到开机需要按F1,才能进入系统的问题,引起这个问题的原因比较多,今天小编在这里给大家列举了比…...
DeepSeek模型构建与训练
在完成数据预处理之后,下一步就是构建和训练深度学习模型。DeepSeek提供了简洁而强大的API,使得模型构建和训练变得非常直观。无论是简单的全连接网络,还是复杂的卷积神经网络(CNN)或循环神经网络(RNN),DeepSeek都能轻松应对。本文将带你一步步构建一个深度学习模型,并…...
ProxySQL实现mysql8主从同步读写分离
一、ProxySQL基本介绍 ProxySQL是 MySQL 的高性能、高可用性、协议感知代理。 简单介绍下ProxySQL及其功能和配置,主要包括: 最基本的读/写分离,且方式有多种;可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由&…...
Day38-【13003】短文,树的基本概念,用广义表表示树
文章目录 第五章 树与二叉树第一节 树的基本概念用广义表,也就是集合表示发,来表示树 第五章 树与二叉树 第一节 树的基本概念 因为树是一种层次结构,所以它是一种非线性结构,在实际应用中具有广泛的用途。 日常生活中ÿ…...
LabVIEW与PLC交互
一、写法 写命令立即读出 写命令后立即读出,在同一时间不能有多个地方写入,因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI,轮询PLC指令 在锁内耗时,就是TCP读写的实际耗时为5-8ms,在主VI六个…...
MySQL第四次作业
新建数据库 新建表 student表 2.course表 3.sc表 修改Student 表中年龄(sage)字段属性,数据类型由int 改变为smallint alter table student modify sage smallint; 为Course表中Cno 课程号字段设置索引,并查看索引 create index index_cno on cou…...
栈和队列的实现(C语言)
1:栈 1:概念和结构 栈:一种特殊的线性表,其只运行在固定的一段进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。 压栈:在栈里面插入…...
(四)QT——QMainWindow——界面菜单设计
目录 前言 QMainWindow 结构 菜单栏 工具栏 状态栏 停靠部件 核心部件 UI 文件创建窗口 总结 前言 QMainWindow 是 Qt 框架中的一个类,主要用于创建桌面应用程序的主窗口。它提供了一个标准的窗口布局,包含菜单、工具栏、状态栏和中心小部件等功…...
MySQL InnoDB引擎 脏读、不可重复读和幻读
在 MySQL 的 InnoDB 存储引擎中,脏读、不可重复读和幻读是并发事务操作时可能出现的数据不一致问题,不同的事务隔离级别对这些问题有不同的处理方式。 1、脏读(Dirty Read) 定义:一个尚未提交的数据变更的事务&#…...
初阶数据结构:树---堆
目录 一、树的概念 二、树的构成 (一)、树的基本组成成分 (二)、树的实现方法 三、树的特殊结构------二叉树 (一)、二叉树的概念 (二)、二叉树的性质 (三&#…...
判断192.168.1.0/24网络中,当前在线的ip有哪些
需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 [rootopenEuler ~]# cat 1.sh #!/bin/bash for ip in $(seq 1 254); do ping -c 1 -W 1 "192.168.1.$ip" > /dev/null 2>&1 if [ $? …...
初始JavaEE篇 —— Spring Web MVC入门(上)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 RequestMappingg 注解介绍 Postman的介绍与使用 PostMapping 与 GetMapping 注解 构造并接收请求 接收简单参数 接收对象…...
STM32的HAL库开发-通用定时器输入捕获实验
一、通用定时器输入捕获部分框图介绍 1、捕获/比较通道的输入部分(通道1) 首先设置 TIM_CCMR1的CC1S[1:0]位,设置成01,那么IC1来自于TI1,也就是说连接到TI1FP1上边。设置成10,那个IC1来自于TI2,连接到TI2FP1上。设置成…...
nodejs:express + js-mdict 网页查询英汉词典,能播放.spx 声音
向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict , 实现在线查询英语单词,并能播放.spx 声音文件 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ …...
【蓝桥杯嵌入式】5_PWM
全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、PWM占空比可调 以往届的赛题举例 将PA6、PA7分别设置为TIM16_CH1和TIM17_CH1 打开TIM16和TIM17,并设置PWM输出模式及其频率 设置占空比初…...
ESM-IF1:从AF2的预测结构中学习逆折叠
作者研究了从蛋白质骨干原子坐标预测蛋白质序列的问题。迄今为止,机器学习解决此问题的方法一直受限于可用的实验测定蛋白质结构的数量。作者使用AlphaFold2为1200万个蛋白质序列预测的结构,从而将训练数据扩充了近三个数量级。相比现有方法,…...
kafka服务端之控制器
文章目录 概述控制器的选举与故障恢复控制器的选举故障恢复 优雅关闭分区leader的选举 概述 在Kafka集群中会有一个或多个broker,其中有一个broker会被选举为控制器(Kafka Controler),它负责管理整个集群中所有分区和副本的状态。…...
Redis双写一致性(数据库与redis数据一致性)
一 什么是双写一致性? 当修改了数据库(MySQL)中的数据,也要同时更新缓存(redis)中的数据,缓存中的数据要和数据库中的数据保持一致 双写一致性,根据业务对时间上的要求,…...
feign Api接口中注解问题:not annotated with HTTP method type (ex. GET, POST)
Bug Description 在调用Feign api时,出现如下异常: java.lang.IllegalStateException: Method PayFeignSentinelApi#getPayByOrderNo(String) not annotated with HTTPReproduciton Steps 1.启动nacos-pay-provider服务,并启动nacos-pay-c…...
开源2+1链动模式AI智能名片S2B2C商城小程序:突破流量与创意困境的新路径
摘要:本文深入剖析当前互联网行业中流量集中于巨头以及创意边际效应递减的困境,并探讨开源21链动模式AI智能名片S2B2C商城小程序在应对这些困境时所展现的独特优势与应用策略。通过对行业现状的分析以及该小程序功能特点的研究,旨在为企业在艰…...
python编程-内置函数compile(),exec(),complex(),eval()详解
1. compile() 函数 用途:将一个字符串源代码编译为字节码对象,这样可以直接被Python解释器执行,或者通过exec()或eval()函数来执行。 参数: source:一个字符串或AST(抽象语法树)对象&am…...
websocket自动重连封装
websocket自动重连封装 前端代码封装 import { ref, onUnmounted } from vue;interface WebSocketOptions {url: string;protocols?: string | string[];reconnectTimeout?: number; }class WebSocketService {private ws: WebSocket | null null;private callbacks: { [k…...