【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考
PP-YOLOE: An evolved version of YOLO
Abstract
- 在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResStage, ET-head和动态标签分配算法TAL。我们为不同的实践场景提供s/m/l/x模型。结果,pp - yoloe - 1在COCO测试开发上实现了51.4 mAP,在Tesla V100上实现了78.1 FPS,与之前的先进工业车型PP-YOLOv2和YOLOX相比,分别实现了(+1.9 AP, +13.35%提速)和(+1.3 AP, +24.96%提速)的显著提升。在TensorRT和fp16精度下,PP-YOLOE推理速度达到149.2 FPS。我们还进行了大量的实验来验证我们设计的有效性。源代码和预训练模型可在PaddleDetection PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection. (github.com)。
- 论文地址:[2203.16250] PP-YOLOE: An evolved version of YOLO (arxiv.org)
- 首先PP-YOLOE-l 在COCO数据集上达到了51.4mAP。相比较PP-YOLOv2提升1.9AP和13.35%的速度,相比较YOLOX提升1.3AP和24.96%的速度。PP-YOLOE中主要的改进点是:anchor-free,powerful backbone and neck,TAL动态label assign,ET-head。
- 该检测器的设计机制包括:Anchor free无锚盒机制,可扩展的backbone和neck,由CSPRepResStage(CSPNet+RMNet)构成,使用Varifocal Loss(VFL)和Distribution focal loss(DFL)的头部机制ET-head,动态标签分配算法Task Alignment Learning(TAL)
Introduction
-
单级目标检测器由于具有良好的速度和精度平衡,在实时应用中很受欢迎。单级探测器中最突出的结构是YOLO系列。自YOLOv1以来,YOLO系列目标检测器在网络结构、标签分配等方面发生了巨大的变化。目前,YOLOX在Tesla V100上以68.9 FPS的速度实现了50.1 mAP的速度和精度的最佳平衡。
-
YOLOX引入了先进的无锚方法,配备了动态标签分配,提高了探测器的性能,在精度上明显优于YOLOv5。受YOLOX的启发,我们进一步优化了之前的作品PP-YOLOv2。PP-YOLOv2是一款高性能一级探测器,在特斯拉V100上具有49.5 mAP, 68.9 FPS的速度。在PP-YOLOv2的基础上,提出了YOLO的演进版本,命名为PP-YOLOE。PP-YOLOE避免使用可变形卷积和矩阵NMS等算子,以便在各种硬件上得到很好的支持。此外,PPYOLOE可以轻松扩展到具有不同计算能力的各种硬件的一系列模型。这些特点进一步推动了PP-YOLOE在更广泛的实际场景中的应用。
-
如图所示,PP-YOLOE在速度和精度权衡方面优于YOLOv5和YOLOX。具体而言,pp - yoloe - 1以 78.1 FPS的速度在640 × 640分辨率的COCO上实现了51.4 mAP,比pp - yolo2 和yolox - 1分别高出1.9%和1.3% AP。此外,PP-YOLOE有一系列型号,可以像YOLOv5一样通过宽度乘倍器和深度乘倍器进行简单配置。我们的代码已经在PaddleDetection上发布,支持TensorRT和ONNX。
-
-
PP-YOLOE与其他先进型号的比较。pp - yoloe - l在COCO测试开发上实现了51.4 mAP,在Tesla V100上实现了78.1 FPS,比pp - yoloe - v2获得了1.9 AP和9.2 FPS的提升。
-
-
PP-YOLOv2的总体情况包括:(1)backbone:具有可变形卷积的ResNet50-vd;(2)neck:具有SPP层的PAN,DropBlock;(3)head:轻量级的IoU感知;(4)激活函数:在backbone中使用ReLU激活,neck中使用Mish激活;(5)标签分配:为每个ground truth目标分配一个anchor box;(6)损失:分类损失、回归损失、目标损失,IoU损失和IoU感知损失;
-
PP-YOLOE是基于PP-YOLOv2的卓越的单阶段Anchor-free模型,超越了多种流行的YOLO模型。PP-YOLOE有一系列的模型,即s/m/l/x,可以通过width multiplier和depth multiplier配置。PP-YOLOE避免了使用诸如Deformable Convolution或者Matrix NMS之类的特殊算子,以使其能轻松地部署在多种多样的硬件上。
-
PPYOLOE中的anchor free方法,主要就是将之前anchor base中预测相较于anchor的xywh,改进为预测ltrb(left,top,right,bottom),并将ltrb结果乘上当前特征图的stride。
Method
-
在本节中,我们将首先回顾我们的基线模型,然后从网络结构、标签分配策略、头部结构和损失函数等方面详细介绍PP-YOLOE的设计(下图)。
-
-
我们PP-YOLOE的模型架构。主干是CSPRepResNet,颈部是Path Aggregation Network (PAN),头部是Efficient Task-aligned head (ET-head)。
-
A Brief Review of PP-YOLOv2
- PP-YOLOv2的整体架构包括具有可变形卷积的ResNet50-vd 主干、具有SPP层和DropBlock的PAN主干和轻量级IoU感知头。在PPYOLOv2中,主干使用ReLU激活函数,颈部使用mish激活函数。继YOLOv3之后,PP-YOLOv2只为每个 GT 值对象分配一个锚框。除了分类损失、回归损失和对象损失外,PP-YOLOv2还使用IoU损失和IoU感知损失来提高性能。
Improvement of PP-YOLOE
-
Anchor-free。如上所述,PP-YOLOv2以基于锚点的方式分配基础真理。然而,锚定机制引入了许多超参数,并且依赖于手工设计,这可能不能很好地推广到其他数据集。基于以上原因,我们在PP-YOLOv2中引入无锚法。根据FCOS[26]在每个像素上贴合一个锚点,我们为三个检测头设置上下限,将ground truth分配给相应的feature map。然后,计算边界框的中心,选择最接近的像素作为正样本。根据YOLO序列,预测一个四维向量(x, y, w, h)进行回归。这个修改使模型更快了一点,损失了0.3 AP,如表2所示。虽然根据PPYOLOv2的锚点尺寸仔细设置了上界和下界,但基于锚点和无锚点的赋值结果仍然存在一些小的不一致,这可能导致精度下降不大。PPYOLOE解析1 Backbone - 飞桨AI Studio (baidu.com)
-
Backbone and Neck。残差连接和密集连接在现代卷积神经网络中得到了广泛的应用。残差连接引入了解决梯度消失问题的捷径,也可以看作是一种模型集成方法。密集连接集合了具有不同接收域的中间特征,在目标检测任务中表现出良好的性能。CSPNet利用跨级密集连接来降低计算负担而不损失精度,这种方法在YOLOv5、YOLOX等有效的目标检测器中很流行。VoVNet和随后的TreeNet在对象检测和实例分割方面也表现出优异的性能。受这些作品的启发,我们提出了一种结合残差连接和密集连接的新型RepResBlock,用于我们的Backbone and Neck。
-
源自TreeBlock,我们的RepResBlock在训练阶段如下图(b)所示,在推理阶段如下图©所示。首先,我们对原始TreeBlock进行简化(下图(a))。然后,我们用元素相加操作代替连接操作(下图(b)),因为RMNet在某种程度上显示了这两种操作的近似。因此,在推理阶段,我们可以将RepResBlock重新参数化为ResNet-34以RepVGG风格使用的基本残差块(下图©)。
-
-
我们的RepResBlock和CSPRepResStage的结构
-
-
我们使用所提出的RepResBlock来构建Backbone and Neck。与ResNet类似,我们的主干名为CSPRepResNet,包含一个由三个卷积层组成的主干,以及由我们的RepResBlock堆叠的四个后续阶段,如上图(d)所示。在每一步中,采用跨阶段部分连接,避免了大量 3 × 3 卷积层带来的大量参数和计算负担。ESE(有效挤压和提取)层也用于在构建主干时在每个CSPRepResStage中施加信道注意。我们在PP-YOLOv2之后使用所提出的RepResBlock和CSPRepResStage构建颈部。与主干不同的是,主干去掉了RepResBlock中的残差链接和CSPRepResStage中的ESE层。
-
我们使用宽度乘法器α和深度乘法器β像YOLOv5一样对基本 Backbone and Neck 进行联合缩放。因此,我们可以得到一系列具有不同参数和计算量的检测网络。基本骨干宽度设置为[64,128,256,512,1024]。除主干外,基本主干的深度设置为[3,6,6,3]。基本颈宽设置为[192,384,768],深度设置为3。下表给出了不同模型的宽度乘法器α和深度乘法器β的规格。
-
-
宽度乘法器α和深度乘法器β规范的一系列网络
-
-
这样的修改使AP性能提高了0.7%,即49.5%,如下表所示。
-
-
pp - yoloe - l在COCO val上的烧蚀研究。我们使用640×640分辨率作为输入,采用fp32精度,在特斯拉V100上进行测试,不进行后处理。
-
-
任务一致性学习(TAL)。为了进一步提高准确性,标签分配是另一个需要考虑的方面。YOLOX使用SimOTA作为标签分配策略来提高性能。然而,为了进一步克服分类和定位的错位,在 TOOD 中提出了任务对齐学习(task alignment learning, TAL),它由动态标签分配和任务对齐损失组成。动态标签分配意味着预测/损失意识。根据预测,为每个真值分配动态的正锚点个数。通过显式地对齐这两个任务,TAL可以同时获得最高的分类分数和最精确的边界框。在PP-YOLOE训练时,前5个epoch是使用ATSS中的分配方式,后续的epochs才使用TAL作为label assign方式。主要原因是TAL需要模型具有一定表现的基础上,才能具有比较好的分配效果。
-
比较值得注意的是,往常我们在计算class分支的loss时候,使用BCEloss时候,输入分别是pred_score和label_one_hot向量。而在PP-YOLOE中,将label_one_hot向量替换成了TAL分配时的alignment metric。alignment metric中分数越高,就意味着越是高质量样本,模型希望高质量样本拥有更高的class score。
-
对于与任务对齐的损失,TOOD使用一个归一化的 t,即 t ^ \hat{t} t^ 来代替损失中的目标。它采用每个实例中最大的IoU作为规范化。分类的二进制交叉熵(Binary Cross Entropy, BCE)可以重写为:
- L c l s − p o s = ∑ i = 1 N p o s B C E ( p i , t i ^ ) , ( 1 ) L_{cls-pos}=\sum_{i=1}^{N_{pos}}BCE(p_i,\hat{t_i}),(1) Lcls−pos=i=1∑NposBCE(pi,ti^),(1)
-
我们研究了使用不同标签分配策略的性能。本文以CSPRepResNet为骨干,在上述改进的模型上进行了实验。为了快速得到验证结果,我们只在COCO train2017上训练了36个epoch,并在COCO val上进行验证,如下表所示,TAL达到了最佳的45.2% AP性能。我们使用TAL替代标签分配,如FCOS样式,并实现0.9% AP改进- 50.4% AP,如上表所示。
-
-
不同的标签分配在基本模型上。我们使用CSPRepResStage作为主干和颈部,一个1×1 conv层作为头部,在COCO train2017上只训练了36个epoch。
-
-
高效任务对齐头(ET-head)。在目标检测中,分类与定位之间的任务冲突是一个众所周知的问题。许多文献都提出了相应的解决方案。YOLOX的解耦头吸取了大多数一级和二级检测器的经验,并成功应用于YOLO模型,提高了精度。但是,解耦的头部可能会使分类和定位任务分离和独立,缺乏针对任务的学习。在TOOD的基础上,我们改进了头,提出了以速度和精度为目标的ET-head。如图上所示,我们使用ESE取代了tod中的层关注,将分类分支的对齐简化为shortcut,将回归分支的对齐替换为分布焦损(distributed focal loss, DFL)层。通过上述变化,ET-head在V100上增加了0.9ms。
-
对于分类和定位任务的学习,我们分别选择了变焦损失(VFL)和分布焦损失(DFL)。PP-Picodet成功地将VFL和DFL应用于目标检测器,并获得了性能提升。对于VFL,与[Generalized focal loss]中的质量焦点损失(quality focal loss, QFL)不同,VFL使用目标分数来加权阳性样本的损失。这种实现使得高IoU的阳性样本对损失的贡献相对较大。这也使得模型在训练时更加关注高质量的样本,而不是那些低质量的样本。相同的是,两者都使用IACS作为预测的目标。这可以有效地学习分类分数和定位质量估计的联合表示,使训练和推理之间具有较高的一致性。对于DFL,为了解决边界框表示不灵活的问题,[Generalized focal loss]提出使用一般分布来预测边界框。我们的模型由损失函数监督:
-
L o s s = α ⋅ L o s s V F L + β ⋅ L o s s G I O U + γ ⋅ L o s s D F L ∑ i N p o s t ^ , ( 2 ) Loss=\frac{\alpha·Loss_{VFL}+\beta ·Loss_{GIOU}+\gamma ·Loss_{DFL}}{\sum^{N_{pos}}_i\hat t},(2) Loss=∑iNpost^α⋅LossVFL+β⋅LossGIOU+γ⋅LossDFL,(2)
-
其中, t ^ \hat t t^表示归一化目标得分,见式(1)。如上表所示,ET-head获得0.5% AP改善- 50.9% AP
-
-
分类分支:VFL提出了非对称的加权操作。正负样本有不平衡的问题,同样在正样本中也有不等权的问题,意思就是要更多的发现有价值的正样本。在为负样本的时候,不同的负样本的weight主要由当前pred_score决定,pred_score越大,weight越大,loss越大。而在为正样本的时候,weight为gt_score,而gt_score来源于TAL assign时。这也就达到了①正样本和负样本权重计算方式不同,②每个正负样本在计算loss时的权重都是不同的,达到了非对称的加权操作。
-
回归分支:目标检测任务中做回归一般是直接预测某个回归值,或者预测相较于anchor的比例,而distribution focal loss (DFL)作者认为之前的bbox regression 采用的表示不够灵活,没有办法建模复杂场景下的uncertainty。用直接回归一个任意分布来建模框的表示可以有更好的效果。在PP-YOLOE中,将回归看作是一个分布预测任务。
Experiment
- 在本节中,我们给出了实验的细节和结果。所有实验都在MS COCO-2017训练集上进行训练,该训练集有80个类,118k张图像。对于消融研究,我们在5000张图像的MS COCO-2017验证集上使用具有单一尺度的标准COCO AP度量。我们使用MS COCO-2017 test-dev报告最终结果。
Implementation details
- 我们使用随机梯度下降(SGD),动量= 0.9,权重衰减= 5e-4。我们使用余弦学习率计划,总epochs为300次,热身次数为5次,基本学习率为0.01。在8 × 32 G V100 GPU设备上,总批大小默认为64个,我们遵循线性缩放规则来调整学习率。在训练过程中也采用衰减= 0.9998的指数移动平均(EMA)策略。我们只使用一些基本的数据增强,包括随机裁剪、随机水平翻转、颜色失真和多尺度。特别地,输入大小均匀地从320绘制到768,步幅为32。
Comparsion with Other SOTA Detectors
-
下表显示了MS-COCO测试分裂与其他最先进的目标检测器的结果比较。我们使用官方代码库重新评估YOLOv5和YOLOX,因为它们有非预定的更新。我们比较了批处理大小= 1(没有数据预处理和非最大抑制)的模型推理速度。而PP-YOLOE系列采用桨叶推理引擎。此外,为了公平比较,我们还在相同的环境下测试了基于tensorRT 6.0的FP16精度速度。应该强调的是,PaddlePaddle2正式支持用于模型部署的tensorRT。因此,PPYOLOE可以直接使用带有tensorRT的桨叶推理,其他测试遵循官方指南。
-
-
不同目标检测器在COCO 2017测试开发中的速度和精度比较。标注“+”的结果为官方发布的更新结果。用“*”标记的结果在我们的环境中使用官方代码库和模型进行测试。在验证和速度测试中,YOLOv5的输入大小不是640 × 640的平方,所以我们在表中跳过它。默认精度的速度是FP32的无trt和FP16的有trt。此外,我们为YOLOX w/o trt场景提供了FP32和FP16, FP32的速度在分割线的左侧,FP16的速度在右侧。PP-YOLOE+使用在Objects365数据集上预训练的模型。
-
Conclusion
-
在本报告中,我们提出了PPYOLOv2的几个更新,包括可扩展的主干颈架构,高效的任务对齐头,先进的标签分配策略和改进的目标损失函数,形成了一系列高性能的目标检测器,称为PP-YOLOE。同时,我们提出了s/m/l/x模型,可以覆盖不同的实际场景。此外,在PaddlePaddle官方支持下,这些模型可以顺利过渡到部署。我们希望这些令人鼓舞的设计可以为开发人员和研究人员提供灵感。
-
Backbone 翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?翻译的很好,主干部分,哈哈哈哈,文字游戏了哈。这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnet VGG等,而不是我们自己设计的网络,因为这些网络已经证明了在分类等问题上的特征提取能力是很强的。在用这些网络作为backbone的时候,都是直接加载官方已经训练好的模型参数,后面接着我们自己的网络。让网络的这两个部分同时进行训练,因为加载的backbone模型已经具有提取特征的能力了,在我们的训练过程中,会对他进行微调,使得其更适合于我们自己的任务。(14 封私信 / 80 条消息) 深度学习网络中backbone是什么意思? - 知乎 (zhihu.com)
SAHI:超大图片中对小目标检测的切片辅助超推理库
-
目标检测和实例分割是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题。切片推理的概念基本上是;对原始图像的较小切片执行推理,然后合并原始图像上的切片预测。可以用下图表示:
-
为了提高你的模型在小目标上的性能,推荐以下技术:medium.com
- 提高图像采集的分辨率
- 增加模型的输入分辨率
- tile你的图像
- 通过增强生成更多数据
- 自动学习模型anchors
- 过滤掉无关的类别
-
检测小物体的另一个重要策略是将图像切割后形成batch,这个操作叫做tile,作为预处理步骤。tile可以有效地将检测器聚焦在小物体上,但允许你保持所需的小输入分辨率,以便能够运行快速推断。
相关文章:

【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考
PP-YOLOE: An evolved version of YOLO Abstract 在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResSt…...

微服务入门---SpringCloud(二)
微服务入门---SpringCloud(二) 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置…...
51单片机IO口控制
51单片机IO口控制 1.点亮LED灯 原理:根据电路图,指向IO口的引脚;拉低电平,灯亮、 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…...

ERROR 1064 - You have an error in your SQL syntax;
ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧,以前开始写SQL,特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…...
leetcode做题笔记46
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路一:回溯 void swap(int *nums,int index1,int index2) {int temp nums[index1];nums[index1] nums[index2];nums[index2] temp; }void prem(int* nu…...
快问快答JS面向对象面试题
1、说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用…...
googlenet论文理解
参考文章:https://www.cnblogs.com/czy4869/p/8977788.html 以及下面这篇的前几行让我弄懂了论文里说的稀疏性和计算性能兼顾:参考文章:https://blog.csdn.net/weixin_52121118/article/details/119740279...

OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测
1. 前言 之前把ORT的一套推理环境框架搭好了,在项目中也运行得非常愉快,实现了cpu/gpu,fp32/fp16的推理运算,同onnx通用模型在不同推理框架下的性能差异对比贴一下,记录一下自己对各种推理框架的学习状况 YoloV8模型大小 模型名称参数量NANO3.2M...... 2. CPU篇 CPU推理框架性…...

【QT 网络云盘客户端】——获取用户文件列表信息
目录 1.获取用户文件列表信息分析 2.设置图标属性 3.向服务器获取文件的数量 4.向服务器获取文件信息列表 4.显示图标 1.获取用户文件列表信息分析 1.将QListWidget设置为图标模式 2. 当我们点击"按下载量升序","按下载量降序",“更新” 菜单选项 都会…...

从0到1,无代码开发如何简化产品创新流程
在当今竞争激烈的市场环境中,产品创新已经成为企业成功的关键因素之一。为了在市场上保持竞争力,企业需要不断地推出新产品或改进现有产品。然而,传统的开发流程往往耗时费力,且成本高昂。因此,简化产品创新流程成为了…...

select、epoll 的快速核心理解
一、 select 最low的就是在用户代码中自旋实现所有阻塞socket的监听。但是每次判断socket是否产生数据,都涉及到用户态到内核态的切换。 于是select改进:将fd_set传入内核态,由内核判断是否有数据返回; 然后最low的只能使用自旋…...
HTTP和HTTPS的区别
一、两者概念 1.1 HTTP概念 HTTP 的全称是超文本传输协议(HyperText Transfer Protocol) 是一种用于分布式、协作式和超媒体信息系统的应用协议,简单来说就是一种分布和接收HTML页面的方法,被用于在Web浏览器和网站服务器之间传递…...
分布式异步任务处理组件(二)
一些关键点的设计脑暴记录----very important!!! 首先,任务存储交给kafka,由节点负责写入kafka,acks1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后…...

Jenkins 拉取 GitHub 私有仓库失败问题
添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里...
小程序 多层次对象数组的赋值、动态赋值
1、给对象赋值 data: {form: {Name: ,IDCard: ,Sex: ,}},对单个属性赋值 this.setData({form.Name:章三,[form.Sex]:女,}) 动态赋值 onChangeDate(e) {let field e.currentTarget.dataset.field;this.setData({[form.${field}]: e.detail.data})}, field 是wxml上通过dat…...
angular踩坑
1 新版路由守卫由于canActivate已被废弃,采用函数函数,但其参数中无法像类一样进行路由对象注入,如何实现路由首位中的页面跳转? import { CanActivateFn,Router,ActivatedRouteSnapshot, RouterStateSnapshot,} from angular/ro…...

C#时间轴曲线图形编辑器开发1-基本功能
目录 一、前言 1、简介 2、开发过程 3、工程下载链接 二、基本功能实现 1、绘图面板创建 (1)界面布置 (2)显示面板代码 (3) 面板水平方向、竖直方向移动功能实现 (4)面板放…...

elasticsearch查询操作(DSL语句方式)
说明:本文介绍在kibana,es的可视化界面上对文档的查询操作; 添加数据 先使用API,创建索引库,并且把数据从MySQL中查出来,传到ES上,参考(http://t.csdn.cn/NaTHg) 索引库…...

JavaScript详解
目录 一、JavaScript是什么? 1.1、JavaScript 和 HTML 和 CSS 之间的关系 1.2、JavaScript 运行过程 1.3、JavaScript 的组成 二、JavaScript 的书写形式 1. 行内式 2. 内嵌式 3、外部式 注释 三、输入输出 输入: prompt 输出: alert 输出: …...

电缆振荡波局部放电检测定位技术
电缆振荡波检测技术主要用于交联聚乙烯电力电缆检测,是属于离线检测的一种有效形式 。该技术基于LCR阻尼振荡原理,在完成电缆直流充电的基础上,通过内置的高压电抗器、高压实时固态开关与试品电缆形成阻尼振荡电压波,在试品电缆上…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...