脉冲目标检测网络模型SpikeYOLO——基于整值训练和脉冲驱动推理的高性能节能目标检测神经网络

news2024/11/21 14:37:32

最近看到目标检测领域又出新作,ECCV2024 满分Oral论文——《Integer-Valued Training and Spike-Driven Inference Spiking Neural Network for High-performance and Energy-efficient Object Detection》论文地址在这里,如下所示:

感兴趣的话可以移步阅读原文,这里趁着中午午休的时间我对论文简要阅读记录了一下,仅供参考。

摘要

受脑启发的脉冲神经网络 (SNNs) 具有生物合理性和低功耗优势,优于人工神经网络 (ANNs)。由于性能较差,SNNs 的应用目前仅限于简单的分类任务。本研究专注于缩小目标检测任务中 ANNs 和 SNNs 之间的性能差距。我们的设计围绕着网络架构和脉冲神经元展开。

首先,过复杂的模块设计导致 YOLO 系列转换为相应脉冲版本时出现脉冲降级。我们设计了 SpikeYOLO 架构,通过简化原始 YOLO 并整合元 SNN 模块来解决这个问题。

其次,目标检测对脉冲神经元将膜电位转换为二进制脉冲过程中的量化误差更加敏感。为了应对这一挑战,我们设计了一种新型脉冲神经元,它在训练期间激活整数值,同时通过扩展虚拟时间步长在推断过程中保持脉冲驱动。

我们对静态和神经形态目标检测数据集验证了该方法。在静态 COCO 数据集上,我们获得了 66.2% mAP@50 和 48.9% mAP@50:95,分别比之前最先进的 SNN 高出 15.0% 和 18.7%。在神经形态 Gen1 数据集上,我们实现了 67.2% mAP@50,比具有相同架构的 ANN 高出 2.5%,能量效率提高了 5.7 倍。

1. 概述

受脑启发的脉冲神经网络 (SNNs) 以其低功耗而闻名 [46, 48]。脉冲神经元整合时空信息,并在膜电位超过阈值时发射脉冲 [36]。因此,脉冲神经元仅在接收到脉冲时才会触发稀疏的加法操作,而在其他时间处于闲置状态。这种脉冲驱动机制使 SNNs 在部署到神经形态芯片上时比 ANNs 具有明显的低功耗优势 [7, 37, 41, 61]。然而,复杂的 neuronal 动力学和脉冲驱动性质的负面影响是,SNNs 难以训练,并且任务性能和应用场景有限 [13]。例如,大多数计算机视觉领域中 SNN 算法的应用局限于简单的图像分类任务 [9, 14, 20, 25, 27, 31, 33, 42, 54, 60]。另一个更常用的、更具挑战性的计算机视觉任务——目标检测,在 SNNs 中很少被探索。2020 年,Spiking-YOLO [29] 提出了首个深度 SNN 中的目标检测模型,利用了将 ANN 转换为 SNN 的方法,并使用了数千个时间步长。2023 年,EMS-YOLO [50] 成为了第一个使用直接训练 SNN 来处理目标检测的工作。最近,直接训练的 Meta-SpikeFormer [58] 首次能够以预训练和微调的方式处理目标检测。然而,这些工作与 ANNs 之间的性能差距依然显著。

在本研究中,我们旨在缩小这一差距,并展示 SNNs 的低功耗及其在神经形态应用中的独特优势。我们通过两项努力来实现这一目标:

**第一,我们设计了一个新的架构,SpikeYOLO,它将 YOLO 的宏观设计与 SNN 模块的微观设计相结合。**简单地将 YOLO 系列 [1, 43, 52] 中的人工神经元替换为脉冲神经元通常行不通。现有的解决方案包括建立 ANN 激活和脉冲发射率之间的等效性 [29],或改进残差设计 [50]。我们认为,另一个潜在原因是 YOLO 系列中的模块设计过于复杂,这对 ANNs 来说很有效,但并不适合 SNNs。我们观察到,将复杂的 YOLO 模块转换为相应的脉冲版本后,会出现脉冲降级现象,即深层几乎不再发射脉冲。因此,我们倾向于简化 SpikeYOLO 中的设计。我们只保留 YOLOv8 的宏观架构,同时使用 Meta-SpikeFormer [58] 中简单的元 SNN 模块作为基本模块,进行微观设计。

**第二,我们设计了一种新型脉冲神经元,整数泄漏积分和发射 (I-LIF),以减少 SNNs 的量化误差。**脉冲驱动是低功耗的关键,但仅利用二进制信号会导致性能下降,特别是在具有挑战性的目标检测任务中。许多研究试图减轻这个问题,例如基于注意力的膜优化 [63]、三元脉冲 [18]、信息最大化 [19]、转换量化的 ANNs [26]、最佳 ANN2SNN [2]。然而,基于优化策略的直接训练只能减轻误差;最佳 ANN2SNN 近似需要大量时间步长,并且难以利用时间信息。相比之下,提出的 I-LIF 的想法是使用整数值激活来降低量化误差,并在推理期间通过扩展虚拟时间步长将它们转换为脉冲。I-LIF 的特点是:1) 整数值训练提高了性能,易于训练;2) 训练期间的整数激活在推理过程中可以等效于脉冲驱动,因为只有稀疏加法操作;3) 保留了 LIF 的时间动力学,能够处理神经形态目标检测。

我们对静态 COCO [35] 和神经形态 Gen1 [8] 目标检测数据集验证了该方法。我们在两个数据集上报告的性能远远超过了现有的 SNN 中的最佳模型。此外,我们探索了使用相同架构的 ANN 和 SNN 互相转换后的性能变化。这项工作的主要贡献在于:

– **SpikeYOLO。**我们探索了 SNNs 中处理目标检测任务的合适架构,并提出了 SpikeYOLO,它简化了 YOLOv8 并整合了元 SNN 模块。这启发了我们,ANN 中的复杂模块可能不适合 SNN 架构设计。

– **I-LIF 脉冲神经元。**我们提出了一种 I-LIF 脉冲神经元,它将整数值训练与脉冲驱动推理相结合。前者用于减少脉冲神经元中的量化误差,后者是 SNNs 低功耗特性的基础。

– **性能。**该方法在目标检测数据集上实现了出色的精度和低功耗,展示了 SNNs 在复杂视觉任务中的潜力。在 COCO 数据集上,我们获得了 66.2% mAP@50 和 48.9% mAP@50:95,分别比之前最先进的 SNN 高出 15.0% 和 18.7%。在 Gen1 数据集上,SpikeYOLO 比具有相同架构的 ANN 模型高出 2.5%,能量效率提高了 5.7 倍。

2. 相关工作

SNN 训练方法

长期以来,训练方法一直限制着 SNN 的发展。为了使 SNNs 更深,已经开发出两种训练方法。ANN2SNN 将 ReLU 函数替换为脉冲神经元,旨在通过控制脉冲神经元的放电率来模拟连续激活 [3, 10, 49]。它可以实现高性能,但通常需要较长的时步,并且难以处理利用 SNNs 时空动态特性的序列任务。相比之下,另一种直接训练 SNN 的方法利用梯度代理来规避二进制脉冲的不可微性 [39, 55]。直接训练更加灵活,需要的时步更少,但其性能通常比具有相同架构的 ANNs 差。在本研究中,我们专注于利用直接训练的 SNNs 来处理目标检测,因为这在架构设计方面更加灵活。

SNN 架构设计

SNNs 的架构可以粗略地分为两类:基于 CNN 的 SNNs 和基于 Transformer 的 SNNs。由于残差学习 [22] 可以解决 SNNs 在加深时出现的性能下降问题,因此脉冲 ResNet 长期以来在 SNN 领域占据主导地位。典型的脉冲 ResNet 包括 vanilla 脉冲 ResNet [68]、SEW-ResNet [14] 和 MSResNet [27]。它们之间的主要区别在于捷径的位置以及实现恒等映射 [23] 的能力。最近,Transformer [12, 51] 架构在 SNN 领域变得流行 [21, 38, 58, 60, 66, 67, 67, 69],并刷新了性能上限。我们设计的 SpikeYOLO 借鉴了 Meta-SpikeFormer [58] 中元 SNN 模块的想法,并将它与 YOLOv8 架构相结合。

SNNs 中的量化误差

脉冲神经元将具有复杂时空动力学的连续膜电位量化为二进制脉冲。显然,量化误差会限制 SNNs 的性能。在 ANN2SNN 中,量化误差的减少相对简单,可以通过增加时步来实现 [2]。在直接训练中,调整膜电位分布和阈值之间的关系是主要的解决方案,例如注意力机制 [63] 优化膜电位分布以减少噪声脉冲;信息最大化 [19] 是从信息熵角度推导出来的,用于优化脉冲发射。然而,优化并不能改变二进制脉冲固有的量化误差特性。本研究的解决方案是在训练期间使用整数值来减少量化误差,并将它们转换为二进制脉冲以确保脉冲驱动推理。

目标检测

目标检测是一项具有挑战性但至关重要的任务。现有的目标检测框架可以简单地分为:两阶段框架(RCNN 系列 [16, 17, 45])和单阶段框架(YOLO [1, 43, 52]、Detr [4, 70] 系列)。前者在确定精确目标位置和分类之前生成区域建议,而后者直接确定这些元素,提供更快速、更简化的解决方案。目标检测任务一直以来都对 SNNs 来说很困难,相关的研究也很少。目前的工作包括基于 ANN2SNN 的 YOLO [29, 65] 和直接训练的脉冲 YOLO [50, 58]。它们的性能很差,难以满足实际场景的需求。

3. 方法

模型结构如下:

3.1 网络输入(Network Input)

论文首先介绍了 SNN 模型的输入形式,即一个四维张量 X∈RT×C×H×W,其中:

  • T 代表时间步长 (timestep)
  • C 代表通道数 (channel)
  • H×W 代表空间分辨率 (spatial resolution)

论文接着介绍了两种类型的输入:

  • 静态图像(Static Image): SNN(脉冲神经网络)可以利用静态图像的时空信息,因此常见的做法是将静态图像在每个时间步(timestep)上重复输入,这被称为直接输入编码(direct input encoding)。脉冲神经元的第一层会将输入的连续值编码为脉冲信号。

  • 神经形态事件流(Neuromorphic Event Stream): 神经形态数据通过动态视觉传感器(Dynamic Vision Sensor, DVS)生成。该传感器在像素的光强发生变化时产生脉冲事件,每个事件记录了空间坐标(x, y)、时间戳 t 和极性 p(表示光强增加或减少)。研究中遵循了常用的预处理方式,即将事件流在固定时间窗口内聚合成帧的格式,以便输入网络。

3.2 SpikeYOLO架构

这一部分详细介绍了SpikeYOLO的整体架构及其设计思路,结合了YOLOv8的宏观设计和Meta-SpikeFormer的微观设计。

架构概览(Overview)

  • SpikeYOLO 的设计灵感来自YOLOv8和Meta-SpikeFormer。研究发现,YOLO中的复杂计算模块在直接转换为脉冲神经网络版本时,会导致脉冲退化现象。为了解决这个问题,SpikeYOLO保留了YOLO的宏观设计原则,同时在微观设计方面引入了Meta-SpikeFormer中的反向残差结构和重参数化卷积。

网络输出(Network Output)

  • 在目标检测任务中,网络的输出基于输入图像序列(X),输出每个目标的类别和位置信息。输出的预测框包括置信度、类别标签、中心坐标和目标尺寸。

宏观设计(Macro Design)

  • SpikeYOLO 继承了YOLOv8的经典架构,分为Backbone(主干网络)、Neck(特征金字塔网络)和Head(检测头)。然而,YOLO中的一些模块,如C2F模块,虽然能增强卷积神经网络中的特征提取效果,但在脉冲神经网络中表现不佳。因此,研究将YOLO中的这些复杂模块简化为更适合SNN的设计。

微观设计(Micro Design)

  • SpikeYOLO的微观设计借鉴了Meta-SpikeFormer中的Meta SNN模块。该模块由token mixer(令牌混合器)和channel mixer(通道混合器)组成,主要变化在于通道混合器的设计:

    • SNN-Block-1:用于低层特征提取,使用标准卷积进行通道混合。
    • SNN-Block-2:用于高层特征提取,使用重参数化卷积(RepConv)来减少参数数量。

元 SNN 模块

论文重新设计了通道混合模块,提出了两种 SNN 模块:SNN-Block-1 和 SNN-Block-2,分别用于提取低级特征和高级特征。

  • SNN-Block-1:使用标准卷积 (standard convolution) 作为通道混合模块,即:
ChannelConv1 ( U′) = Conv ( SN(Conv ( SN(U′))))

SNN-Block-2:使用重参数化卷积 (re-parameterization convolution) 作为通道混合模块,以减少参数数量,即:

ChannelConv2 ( U′) = RepConv ( SN(RepConv ( SN(U′))))
RepConv ( U′) = Conv pw2(Conv dw1(Conv pw1(U′)))

3.3 I-LIF 脉冲神经元

这一部分详细介绍了研究中提出的**I-LIF(Integer Leaky Integrate-and-Fire)**神经元,用于减少量化误差。

LIF(Leaky Integrate-and-Fire)神经元回顾

  • LIF神经元是构建SNN的最常用神经元之一,因其在生物合理性与计算复杂性之间有较好的平衡。LIF的动态方程描述了膜电位如何在时间步中进行累积,当膜电位超过设定的阈值时,发放脉冲信号(spike)。

论文首先介绍了传统的 Leaky Integrate-and-Fire (LIF) 脉冲神经元模型,其动态方程为:

U[t] =H[t−1] +X[t]
S[t] =Θ(U[t]−Vth)
H[t] =β(U[t]−S[t])

其中,U[t] 表示膜电位,S[t] 表示脉冲信号,H[t] 表示膜电位的衰减,Vth 表示阈值,β 表示衰减系数。

I-LIF的提出

  • I-LIF神经元的核心思想是使用整数值代替传统的二进制脉冲来进行训练,从而减少量化误差。在推理阶段,整数值将被转换为二进制脉冲,以确保推理阶段的稀疏加法操作。

    • 训练阶段:I-LIF 神经元会根据膜电位生成整数值,而不是传统的二进制脉冲。这可以显著减少量化误差。
    • 推理阶段:整数值通过扩展虚拟时间步(virtual timesteps),转换为二进制脉冲。这样可以确保在推理时只执行稀疏的累加操作,进一步降低功耗。

I-LIF的具体实现

  • 在I-LIF中,整数激活值的范围通过修剪函数(Clip)限制在[0, D],其中 D 是一个超参数,表示I-LIF可以发放的最大整数值。通过将整数值转换为多个虚拟时间步中的二进制脉冲,模型在推理过程中仍然可以保持脉冲驱动的优势。

量化误差的减少

  • 传统LIF神经元在训练和推理时都发放二进制脉冲,容易产生量化误差。而I-LIF通过在训练时发放整数值,并在推理时转换为二进制脉冲,极大地减少了这种误差。这种设计不仅提高了模型的性能,还确保了推理阶段的低功耗。

论文提出的 I-LIF 神经元将 LIF 模型中的 S[t] 修改为:

S[t] =Clip (round (U[t]),0, D)

其中,round(·) 表示四舍五入函数,Clip(x, min, max) 表示将 x 裁剪到 [min, max] 之间,D 表示 I-LIF 神经元所能发出的最大整数值。

  • 训练阶段:I-LIF 神经元在训练阶段使用整数值激活,能够减少量化误差,但由于 S[t] 是一个不连续函数,其导数是一个阶跃函数,会导致训练不稳定,因此论文采用矩形窗口作为代理梯度函数。
  • 推理阶段:为了保持 SNN 的低功耗优势,需要将整数值转换为二进制脉冲。论文通过扩展虚拟时间步长将整数值转换为二进制脉冲序列,并将输入重写为:
Xl[t] =WlDX
d=1Sl[t, d]

由于矩阵乘法是线性操作,可以将上述公式进一步改写为:

Xl[t] =DX
d=1(WlSl[t, d])

由于 Sl[t, d] 只包含 0 和 1,因此所有的 MAC (乘累加操作) 可以转换为稀疏 AC (累加操作),从而确保推理阶段的脉冲驱动机制。

论文 Methods 部分介绍了 SpikeYOLO 的架构设计和 I-LIF 脉冲神经元原理,这两个设计共同提升了目标检测的性能和能效。SpikeYOLO 通过简化 YOLOv8 的模块设计,并采用元 SNN 模块,实现了更适合 SNN 的特征提取方案。I-LIF 神经元则通过整数值训练和脉冲驱动推理,减少了量化误差,提高了模型精度。

4、实验分析

其中,O 是特征输出的尺寸,Cin 和 Cout 分别表示输入通道数和输出通道数,k 是卷积核大小,fr 表示平均脉冲发放率,T 是时间步长,D 是训练过程中整数激活的上限。在SNN领域,我们遵循最常用的能耗评估方法 [40,63,64]。所有操作均假定在45nm技术上的32位浮点实现,其中 EMAC = 4.6pJ 和 EAC = 0.9pJ [24]。从公式16和17可以看出,SNN的低功耗来源于其稀疏加法操作。脉冲越少,计算越稀疏。

4.1 COCO 2017 验证集

实验设置

作为主要的静态目标检测数据集,COCO 2017 验证集 [35] 包含80个类别,分为118K张训练图像和5K张验证图像。在所有实验中,我们设定衰减因子β=0.25β=0.25,学习率为0.01,并采用SGD优化器。模型在4块NVIDIA V100 GPU上训练300个epoch,批量大小为40。我们采用了Mosaic数据增强技术 [1]。网络结构的详细信息在补充材料中给出。请注意,在我们的方法中,推理时间步长被表示为T×DT×D,例如,1×41×4表示T=1T=1,D=4D=4。

主要结果

主要结果如表1所示。提出的SpikeYOLO显著提升了SNN在COCO数据集上的性能上限。我们取得了66.2%的mAP@50和48.9%的mAP@50:95,分别比之前最先进的SNN [58] 高出15.0%和18.7%。在参数和能耗方面,SpikeYOLO相较于现有的SNN也具有显著优势:SpikeYOLO与EMS-YOLO [50]的对比结果为:参数,23.1M vs. 26.9M;mAP@50,62.3% vs. 50.1%;mAP@50:95,45.5% vs. 30.1%;能耗,33.2mJ vs. 29.0mJ。此外,SNN和ANN之间的性能差距显著缩小。例如,在相似参数下,SpikeYOLO和YOLO v5的性能是可比较的,能效提升了3.3倍。

架构设计的消融研究

我们对YOLOv8进行了简化,以适应SNN,并整合了元SNN模块。如表1所示,这一架构改进使得SpikeYOLO在T=1T=1和D=1D=1时的准确率达到了52.7%,优于之前的最先进SNN。我们还对“在SNN和ANN中,架构是否可以直接互换使用?”这一问题感兴趣。我们在表2中进行了实验。我们观察到,直接将ANN架构转换为相应的SNN会导致性能显著下降。SNN的特殊架构设计可以提高其表征能力。

量化误差的消融研究

整数值训练旨在减少SNN中的量化误差。D的值越大,量化误差越小。在表1中,我们将参数固定为23.1M。当T=1T=1和T=4T=4时,我们将D=1D=1扩展到D=4D=4,对应的mAP@50的准确率分别提高了9.6%和7.6%。相比之下,如果我们固定D=1D=1并将T=1T=1增加到T=4T=4,mAP@50的性能提升仅为3%。这些结果表明,量化误差对性能的影响大于时间步长的设置。而且,在功耗方面,增加D要比增加T更具成本效益。例如,当1×11×1变为1×41×4时,功耗增加了88%;而当1×11×1变为4×14×1时,功耗提高了267%。

4.2 Gen1汽车检测数据集

实验设置

作为一个大型的神经形态目标检测数据集,Gen1 [8] 包括39小时的开放道路和各种驾驶场景,使用分辨率为304×240像素的ATIS传感器捕获。该数据集被组织为训练、验证和测试子集。对行人和汽车的边界框标注(超过255,000个)进行了手动标注。对于每个标注,我们处理事件流,时间为发生前2.5秒,将其划分为T个切片以供模型输入。我们训练模型50个epoch,并保持与COCO 2017数据集相同的其他超参数。

在Gen1数据集上的主要结果

表3展示了在Gen1数据集上的主要结果。所提出的SpikeYOLO显著提升了SNN在Gen1数据集上的性能基准。我们实现了67.2%的mAP@50,并且参数为23.1M,这比之前最先进的SNN模型提高了8.2%。例如,当T=5T=5时,SpikeYOLO与EMS-YOLO [50]的比较结果为:参数,13.2M vs. 14.4M;mAP@50,66.0% vs. 59.0%;mAP@50:95,38.5% vs. 31.0%。与COCO数据集相比,Gen1包含了更适合SNN处理的时间信息。

我们进行了相同架构下SNN与ANN性能的实验。我们观察到,SpikeYOLO的mAP@50准确率比相应的ANN高出2.5%,并展现出5.7倍的能效。这表明,SNN在处理神经形态数据方面具有令人瞩目的潜力。

量化误差的消融研究

在处理神经形态数据集时,T和D都会显著影响结果。表4提供了关于具有23.1M参数的SpikeYOLO的全面消融研究,评估了不同T和D的影响。我们观察到一些有趣的实验结果。首先,增加时间步长T将带来准确性和功率的提升。例如,在设定为D = 1时,将T=1T=1延长到T=4T=4会使mAP@50增加6.7%,而功率将增加3.7倍。但进一步将T=4T=4扩展至T=8T=8仅带来0.7%的边际增加,并显著增加能耗。

其次,我们惊讶地发现,在固定T的情况下,扩大D会提高性能,同时降低功率。例如,2 × 1与2 × 2与2 × 4的比较结果为:mAP@50,63.6% vs. 66.1% vs. 67.0%;功率,8.1mJ vs. 7.8mJ vs. 7.1mJ。这个趋势与SpikeYOLO在COCO数据集中的表现截然不同,后者中D的增加会带来更多的能耗。我们认为,这一现象是因为SNN对密集/稀疏数据表现出不同的脉冲发射特性。

4.3 架构消融实验

重新参数化设计

如表5所示,如果我们通过在逆向可分离卷积中增加神经元来移除重新参数化,则mAP@50和mAP@50:95分别减少1.7%和1.8%。

SNN模块设计

在卷积块的初始阶段包含一个3 × 3的标准卷积是至关重要的。如表5所示,将SNN-Block-1替换为SNN-Block-2会导致性能下降约1%。此外,我们还尝试将高层的SNN-Block-2替换为基于元变换器的SNN块,类似于Meta-SpikeFormer [58]。我们发现这样做几乎没有性能提升,并且参数数量增加。因此,我们在SpikeYOLO中仅使用脉冲CNN块。

检测头

YOLO中的检测机制可分为基于锚框的头(例如,YOLOv5)和无锚框的头(例如,YOLOv8)。前者直接预测每个边界框的尺寸,而后者则估计每个边界框的概率分布。之前的EMS-YOLO [50]和Meta-SpikeFormer [58]采用的是基于锚框的头。SpikeYOLO则使用无锚框的头,因为它具有更高的准确性(见表5)。

5 结论

本研究显著缩小了SNN和ANN在目标检测任务上的性能差距。我们通过网络架构和脉冲神经元设计实现了这一目标。所提出的SpikeYOLO架构放弃了原始YOLO系列中的复杂模块设计,利用简单的元脉冲模块构建模型。然后,提出了能够执行整数值训练和脉冲驱动推理的I-LIF脉冲神经元,以减少量化误差。我们在COCO数据集上将SNN领域的性能上限分别提高了15.0%(mAP@50)和18.7%(mAP@50:95)。在神经形态Gen1数据集中,SpikeYOLO的性能优于同架构的ANN,并具有更低的功耗。此外,我们研究了在不同数据集上等效架构的ANN和SNN的性能,结果表明重新设计的SNN架构表现更好。这项工作使得SNN能够处理复杂的目标检测,并可以激励SNN在更多视觉场景中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浪潮信息领航边缘计算,推动AI与各行业深度融合

在9月20日于安徽盛大召开的浪潮信息边缘计算合作伙伴大会上,浪潮信息指出,未来的计算领域将全面融入AI技术,特别是在企业边缘侧,智能应用特别是生成式人工智能应用正在迅速普及,这一趋势正引领边缘计算向边缘智算的方向…

R语言机器学习算法实战系列(三)lightGBM算法(Light Gradient Boosting Machine)

文章目录 介绍原理:应用方向:教程下载数据加载R包导入数据数据预处理数据描述数据切割设置数据对象调节参数训练模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性模型SHAP值解释保存模型总结系统信息介绍 LightGBM(Light Gradient B…

QEMU与KVM架构

完整架构图,来自QEMU官网 QEMU与KVM架构总体上分为3部分。 VMX root模式的应用层(左上) VMX root模式的内核层(左下) 虚拟机的运行(右上) VMX root相对于VMX non-root模式,CPU引入了…

基于Arduino的自动浇灌系统

基于Arduino的自动浇灌系统 一、项目说明二、项目材料三、电路设计四、怎样工作五、怎样设置 一、项目说明 嘿,伙计们,在这篇教程中,我将向你们展示如何使用Arduino制作一个植物浇水系统,以一种简单的方式帮助你始终保持植物的水…

【MySQL】mysql导出数据WPS科学计数法解决方法

导出的长串数字 id 会导致科学计数法,修改 WPS 单元格格式可以解决 数字太长还是有问题,最后有个数字会变成 0 可以 直接用 python脚本转换一下 vim convert_txt_xlsx.py #!/usr/bin/env python3# 使用方法# 安装库 # pip3 install pandas openpyxl…

见微知著:OpenEuler系统启动流程

OpenEuler是一个开源的Linux发行版,它的启动流程涉及到多个阶段,包括固件初始化、引导加载程序、内核启动、初始化系统和服务管理器等。下面将详细介绍OpenEuler的启动流程。 一、启动流程 1. 固件初始化(BIOS/UEFI) 启动过程首…

跟踪用户状态,http协议无状态 Cookie HttpSession,Session和Cookie的关系

1.概念分析 跟踪用户状态指的是web应用能够分辨请求属于哪个用户,进而记录用户的状态,从而为用户提供连续的针对性的服务。比如有多个客户在同一个购物网站上购物,每一个用户都会有一个虚拟的购物车。当某个客户发送请求将商品添加到购物车时…

部署 Docker harbor (httphttps)及使用

部署 Docker harbor (http/https)及使用 官网下载docker harbor 和docker-compose 下载最新版本即可 https://github.com/goharbor/harbor https://github.com/docker/compose/releases 一.Docker harbor 配置http使用 1.解压harbor.tar # 解压至指定目录 [rootdocker ~]…

线程池 jvm web

线程池 分类 newCachedThreadPool 可进行缓存重复利用的线程池 newFxiedThreadPool 可重复利用的固定数目的线程池 newSingelThreadPool 单个work线程 newSingelThreadScheduledExecutor 单线程定时执行程序 newWorkStealingPool 带并行级别的线程池 核心参数 …

【OpenCV】(二)—— 图片读取展示和保存

上一小节中我们成功安装了opencv,我们这次学习使用opencv最基础的功能,读取和展示图片,首先准备一张用于实验的样例图片【cat.jpg】如下: 然后就是创建一个python项目并导入相关依赖 import cv2读取图片 读取图片使用imread方法…

Flythings学习(二)控件相关

文章目录 1 前言2 通用属性2.1 控件ID值2.2 控件位置2.3 背景色2.4 背景图2.5 显示与隐藏2.6 控件状态2.7 蜂鸣器控制 3 文本类TextView4 按键类 Button4.1 系统按键4.2 处理按钮长按事件4.3 处理按键触摸事件 5 复选框CheckBox6 单选组 RadioGroup7 进度条,滑块7.1…

vscode如何通过ssh远程链接其它电脑

客户端(本机)linux系统中vscode通过ssh插件远程连接服务器,其操作步骤如下: 配置服务器的配置文件 首先在~/.ssh/config文件中输入服务器的配置信息,如果没有这个文件就新建一个,其内容如下: …

线性系统性能分析方法2——根轨迹法

反馈控制系统的性质取决于闭环传递函数,只要求解出闭环系统的特征根,便能得到系统响应的变化规律。但对于3阶以上的系统求根比较困难。如果系统中有一个可变参数时,求根就更困难了。 1948年,伊凡思提出了一种确定系统闭环特征根的…

ENSP搭建基础网络拓扑图

一、ENSP的基本操作 1、配置网关 进入系统视图与退出 <Huawei>system-view [Huawei]quit 进入G0/0/0接口后配置ip [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24查询所有接口的ip配置 [R1]display ip interface brief…

02 django管理系统 - base.html模板的搭建

下面&#xff0c;我们正式开始XX市第X医院员工信息管理系统的开发 首先&#xff0c;我们项目的目录结构如下&#xff1a; 然后&#xff0c;先把模板【base.html】界面的框架搭起来 {% load static %}<!DOCTYPE html> <html lang"en"><head><m…

使用最小二乘法画噪声数据的近似曲线

文章目录 问题MATLAB代码验证数据1验证数据2 问题 已知有系列含有噪声的数据&#xff08;x , y&#xff09;用最小二乘法计算m和b。(ymxb) MATLAB代码 disp(This promgram perform a leastsquares fit of an); disp(input data set to a straight line.); n_points input(E…

minio储存应用部署

一、minio简介 MinIO 是一个高性能的对象存储系统&#xff0c;设计用于存储大量的非结构化数据&#xff0c;如图片、视频、日志文件等。它完全兼容 Amazon S3 API&#xff0c;这意味着你可以使用与 S3 相同的工具和接口来管理和访问 MinIO 中的数据。 二、主要特性 1. S3 兼…

Vue3实现面板分割

Vue3实现面板分割 下面是将你提供的 Vue 组件使用 SCSS&#xff0c;并以 Vue 3 的组合式 API 形式的面板分割代码。 1、建立组件相关的文件夹 2、将下面代码拷贝到index.vue中 <template><div class"g-split" ref"gSplit"><!-- 水平方向…

数学建模算法与应用 第15章 预测方法

目录 15.1 微分方程模型 Matlab代码示例&#xff1a;求解简单的微分方程 15.2 灰色预测模型&#xff08;GM&#xff09; Matlab代码示例&#xff1a;灰色预测模型 15.3 自回归模型&#xff08;AR&#xff09; Matlab代码示例&#xff1a;AR模型的预测 15.4 指数平滑法 M…

easyocr 本地部署模型 识别图像 ocr - python 实现

使用 easyocr 本地部署识别图像 ocr ,可以满足简单图像场景的ocr识别。 可以进行 中文、英文 ocr 识别。 安装 python 库 pip install easyocr 识别本地模型下载地址&#xff1a;easyocr本地部署模型识别图像ocr-python实现资源-CSDN文库 也可通过程序直接下载官方链接 识…