【论文阅读】【yolo系列】YOLO-Pose的论文阅读

Abstract

我们介绍YOLO-pose,一种无热图联合检测的新方法,基于流行的YOLO目标检测框架的图像二维多人姿态估计。
【现有方法的问题】现有的基于热图的两阶段方法是次优的,因为它们不是端到端可训练的,训练依赖于surrogate L1 loss,该损失不能直接优化评估指标–目标关键点相似度(OKS)。
【ours优势:端到端训练,并优化OKS指标本身,无复杂的后处理】该模型学习了在一次前向传递中 联合检测多个人的边界框及其相应的2D姿态,从而实现了自上而下和自下而上两种方法的最佳效果。
所提出的方法不需要对自下向上的方法进行后处理,以将检测到的关键点分组到一个骨架中,因为每个边界框都有一个相关的姿态,从而导致关键点的固有分组。与自上而下的方法不同,该方法在一次推理中定位所有人的姿态,无需多次前向传递。

YOLO-pose在COCO验证(90.2% AP50)和测试开发方面取得了新的最先进的结果
https://github.com/TexasInstruments/edgeai-yolov5
https://github.com/TexasInstruments/edgeai-yolox

1 Introduction

多人2D姿态估计是理解图像中的人的任务。给定一个输入图像,目标是检测每个人并定位他们的身体关节。由于图像中人数的变化、尺度的变化、身体部位的遮挡、人体的非刚性以及其他各种原因,因此推断图像中多个身体的姿势具有挑战性。
在这里插入图片描述
图1. COCO2017样本图像的检测结果。左图:从yolov5m6-pose的输出 显示了我们的方法的鲁棒性。一个人的关键点因为固有的分组而不会与另一个人误解。右图:来自HigherHRNetW32的输出,显示了即使在关键点位置基本正确,分组算法容易错误。自下向上的方法在拥挤的场景中容易出现这种分组错误。

【现有的姿态估计解决方案】分为自上而下和自下而上。

  • 自上而下的[30],[8],[12],[13],[19]或两阶段的方法是目前最先进的。他们首先使用一个人检测器,并对每个检测进行单人姿态估计。自上而下的方法的复杂性与图像中的人数呈线性上升。
    大多数需要持续运行时的实时应用程序不喜欢上顶方法,因为高复杂性和可变的运行时。
  • 自下而上的[4]、[5]、[14]、[23]、[25]方法提供恒定的运行时,因为它们依赖热图来检测单张图中的所有关键点,然后通过复杂的后处理将它们分组。在自下而上的方法中,后处理可以包括像素级NMS、线积分、细化、分组等步骤。坐标调整和细化 降低了下采样热图的量化误差,而NMS则用于寻找热图中的局部极大值。
    即使经过后处理,热图也可能不够尖锐,无法区分同一类型的两个非常接近的关节。同样,自下而上的方法不能被端到端训练,因为后处理步骤是不可微的,并在卷积网络之外进行。不同的方法,从线性规划到各种启发式[4],自下而上法的后处理方法有很大不同,但都很难使用CNN加速,因此速度相当慢。
  • one-shot法[34,35]虽然避免了分组任务,但其性能不如自下而上法。它们进一步依赖于额外的后处理来提高性能。

【将关键点检测与目标检测对齐统一的可行性】

  • 我们这项工作的动机是解决没有热图的姿态估计问题,与目标检测一致。目标检测具有类似于姿态估计的挑战,如尺度变化、遮挡、人体非刚性等。因此,如果单人的检测器网络能够解决这些挑战,它也就可以处理姿态估计。
    例如,最新的目标检测框架试图通过对多个尺度进行预测来减轻尺度变化的问题。在这里我们采用相同的策略,来预测对应的多个尺度上的人体姿态。同样,目标检测领域的所有主要进展,都无缝传递到姿态估计问题上。我们提出的姿态估计技术在不额外增加计算量的情况下,可以很容易地集成到任何计算机视觉系统。

【ours方案的操作】

  • 我们基于流行的YOLOv5 [1]框架,将我们的方法称为YOLO-Pose。这是第一次集中尝试解决没有热图的二维姿态估计的问题,重点是摆脱目前使用的各种非标准化的后处理。我们的方法使用了与目标检测中相同的后处理方法。
    我们在COCO关键点数据集[7]上验证了我们的模型,并证明了与具有类似复杂性的模型相比,在AP上的竞争性准确性,及在AP50方面的显著改进。
  • 在我们的方法中,与ground truth box匹配的一个anchor box或 anchor point,将存储其完整的2D姿态和边界框的位置。
  • 好处:恒定的运行时间和简单的后处理。
    • 与自下而上相比,来自不同的人的两个相似的关节可以在空间上彼此接近。
      热图的方式,很难区分不同的人的两个空间相近的关节;当这两个人与不同的锚点相匹配,就很容易区分空间上接近和相似的关键点。
    • 与自顶向下的方法不同,YOLO-Pose的复杂性与图像中的人数无关。

我们的贡献:

  • 1 向统一 目标检测和关键点检测 这两个领域迈出了第一步。
    我们建议根据目标检测来解决多人姿态估计,因为主要的挑战是相同的(如尺度变化、遮挡等)。我们的方法将直接受益于目标检测领域的任何进展。
  • 2 端到端、恒定的运行时间、简单的后处理。
    heatmap-free方法使用标准的目标检测后处理,而不是复杂的后处理(包括像素级NMS、调整、细化和线积分、各种分组算法)。该方法是鲁棒性的,因为端到端训练,无需独立的后处理。
  • 3 将IOU LOSS从 box detection扩展到关键点。
    对象关键点相似度(OKS)不仅用于评估,还用于训练的损失。OKS损失是尺度不变的,固有地给不同的关键点给予不同的权重。
  • 4 效果好、速度快、复杂度低:实现SOTA AP50,且减少了4倍的计算量。
    • 在cocotest-dev2017上,SOTA DEKR [30]在283.0 GMACS上达到89.4的AP50;Yolov5m6pose在66.3 GMACS达到89.8的AP50。
    • 将检测与姿态估计联合的框架,在目标检测框架上几乎不额外增加运算实现了姿态估计。
    • 提出了低复杂度的模型,明显超过了EfficientHRNet等实时的模型。

2 Related Work

多人2D姿态估计可以分为自上而下和自下向上的方法。

2.1.自顶向下的方法

自上而下的[8][12][13][19][20][21]或两阶段方法首先使用像快速RCNN [21]这样的较大的人检测器进行人体检测,然后估计每个被检测到的人的2d姿态。因此,计算复杂度随人数呈线性增加。现有的自上而下的方法主要侧重于网络架构的设计。如:Mask-RCNN [20]检测关键点作为分割掩码;Simple Baseline[8]提出了一个简单的架构:具有较深的主干和几个反卷积层,以扩大输出特性的分辨率。
这些方法是尺度不变的,因为它们在相同的尺度上处理所有的目标,在主流的基准测试上实现了最先进的性能。然而,它们在处理遮挡方面很差。

2.2.自下而上的方法

自下向上的方法是[4][5][14][23][25]在一个张图中找出图像中所有的人的关键点,然后将他们分组到个人实例中。自下而上的方法使用heatmap的概率映射,它估计了特定关键点在每个像素的概率。关键点的确切位置是通过NMS找到的热图的局部极大值。自下而上的方法通常的复杂性较低,并且具有恒定运行时的优势。
然而,与自上而下的方法相比,准确性有了大幅下降。还有各种其他的调整和细化步骤,以从热图中提取更好的关键点。不同方法中,不一致的部分是将关键点检测分到的身体部位进行分组的策略。

  • OpenPose [4]构建了一个模型,其中包含两个分支来预测关键点热图和关键点之间的亲和度,它们是建模关节之间关联的二维向量。在分组过程中使用了亲和度。
  • 在associative embedding[5]中,训练网络来预测每个关节的关键点热图和标签值。损失函数被定义为预测属于同一个人的关节的相似标签值,以及属于不同人的关节的不同标签值。
  • Chen等人提出了更高的HRNet [9],它利用更高的输出分辨率来大幅度提高预测精度。
  • Geng et.al. [30]最近提出了disentangled keypoint representation(DEKR),提出了一种使用偏移映射的直接回归方法。它提出一个可利用自适应卷积来回归相应关键点的偏移量的 具有k个分支的结构。这种方法需要关键点热图和后处理中的各种NMS操作的中心热图。尽管后处理没有任何分组,但它并不像我们的那样简单。

3 YOLO-Pose

yolo-pose不使用热图。它将一个人的所有关键点与anchor point 联系起来。它是基于YOLOv5的目标检测框架,也可以扩展到其他框架。我们已经在YOLOX [2]上也一定程度上对其进行了验证。图2说明了具有用于姿态估计的关键点头的总体架构。
在这里插入图片描述


3.1 Overview

yolov5的选择
为了展示我们的解决方案的全部潜力,我们必须选择一个能够良好地检测人类的架构。YOLOv5在精度和复杂性方面是一个领先的检测器。因此,我们选择它作为我们的基础,并在其之上构建。YOLOv5主要关注于80类COCO [7]目标检测,box_head 预测每个锚点85个元素。它们对应于80个类的边界框、目标分数和置信度。对应于每个网格位置,有三个不同形状的锚点。

关键点检测的添加

  • head 输出的设计:
    对于人类姿态估计,它归结为一个单类的人检测问题,每个人有17个相关的关键点,每个关键点再次识别一个位置和可信度: x,y,conf \text{x,y,conf} x,y,conf。因此,与一个锚点关联的17个关键点总共有51个元素。因此,对于每个锚点,关键点头预测51个元素,检测框预测6个元素。对于具有n个关键点的锚点,总体预测向量定义为: P v = C x , C y , W , H , b o x c o n f , c l a s s c o n f , K x 1 , K y 1 , K c o n f 1 , . . . , . . . , K x n , K y n , K c o n f n P_{v}={C_x,C_y,W,H,box_{conf},class_{conf},K^1_x,K^1_y,K^1_{conf},...,...,K^n_x,K^n_y,K^n_{conf}} Pv=Cx,Cy,W,H,boxconf,classconf,Kx1,Ky1,Kconf1,...,...,Kxn,Kyn,Kconfn关键点置信度是基于该关键点的可见性标志进行训练的。如果一个关键点是可见的或被遮挡的,那么标签的置信度为1;在视场之外则置信度设置为0。在推理过程中,我们保留了可信度大于0.5的关键点。所有其他预测的关键点都将被去除。预测的关键点置信度不用于评估。由于网络预测了每个检测的所有17个关键点,我们需要过滤掉视场之外的关键点。否则,就会有悬挂的关键点,导致骨骼变形。现有的基于热图的自下而上方法不需要这样做,因为视场之外首先没有检测到关键点。
  • 整体结构的设计:
    YOLO-Pose使用CSP-darknet53[27]作为主干,而PANet [6]来融合来自主干的不同尺度的特征。接下来是四个不同尺度的检测头。最后,有两个解耦的头用于预测检测框和关键点。
  • 模型复杂度:
    在这项工作中,我们将其复杂性限制在150 GMACS,在此范围内,我们能够实现具有竞争力的结果。随着复杂性的进一步增加,能够缩小与自上而下方法的差距。然而,我们并不追求这条道路,因为我们关注的是实时模型。

3.2 基于Anchor的多人姿势公式

对于一个给定的图像,与一个人匹配的anchor的位置内会存储人体的2D姿态和位置框。这样关键点和目标框都被预测到锚的中心。

  • box的中心会根据锚点进行转换,而框的宽高会被锚的宽高标准化。
  • 关键点位置会根据锚点进行转换,但不会与锚的高度和宽度进行标准化。由于这样的改进独立于锚的宽度和高度,它可以很容易地扩展到anchor-free的目标检测方法,如YOLOX [2],FCOS [28]。

3.3 基于IoU的边界框的损失函数

大多数目标检测器会使用 优化了IoU 损失的变体:GIoU、DIoU、CIoU(不是基于距离的框检测损失)。因为这些损失是尺度不变的,并能够直接优化了评估策略本身。
我们使用CIoU损失来进行边界框监督。对于一个标定的真实边界框,匹配上第k个anchor,位置 (i,j) 和比例s上的锚点,损失定义为 L b o x ( s , i , j , k ) = ( 1 − C I O U ( B o x g t x , i , j , k , B o x p r e d x , i , j , k ) ) L_{box}(s,i,j,k)=(1-CIOU(Box^{x,i,j,k}_{gt},Box^{x,i,j,k}_{pred})) Lbox(s,i,j,k)=(1CIOU(Boxgtx,i,j,k,Boxpredx,i,j,k)) B o x p r e d x , i , j , k Box^{x,i,j,k}_{pred} Boxpredx,i,j,k是第 k t h k^{th} kth的anchor在位置(i,j)和尺度为s的检测框。在本文的设计中,每个位置都有三个锚点,预测发生在四个尺度上。


3.4 人体姿态损失函数公式

OKS是评估关键点的最流行的指标。

  • L1损失的问题:
    传统上,基于热图的自下而上方法使用L1损失来检测关键点。然而,L1的损失并不一定适合获得最佳的OKS。同样,L1损失是简单的,并且没有考虑对象的比例或关键点的类型。由于热图是概率图,因此在基于纯热图的方法中不可能使用OKS作为损失。
  • OKS用作损失函数:
    仅当使用回归的方法获取关键点位置时。Geng et. al. [30]提出使用尺度归一化L1损失进行关键点回归,这是迈向OKS损失的一步。因此,我们在锚点直接回归的关键点,我们可以优化评估策略本身,而不是一个代理损失函数。
  • 我们扩展了边界框的IOU损失到关键点上。
    在出现关键点时,OKS被视为IOU。OKS损失本质上是尺度不变的,对某些关键点更重要。例如,一个人头部上的关键点(眼睛、鼻子、耳朵)比他身体上的关键点(肩膀、膝盖、臀部等)受到的惩罚更多。这些加权因子是由COCO的作者从冗余注释的验证集中根据经验选择的。原始的IOU损失会在非重叠时出现梯度消失,但OKS损失不会停滞。因此,OKS损失更类似于dIoU [37]损失。

工程中具体的公式

  • OKS损失
    针对每一个单独的关键点计算OKS,并累计到最终的OKS损失或关键点IOU,即:
    在这里插入图片描述
  • 置信参数损失
    对于每个关键点,我们学习一个置信参数,显示该人是否存在一个关键点。在这里,关键点是否可见作为真实标签。可得:
    在这里插入图片描述
  • 总的损失
    如果真实标注的边界框和第 K t h K^{th} Kth个anchor匹配了,那么在位置(i,j),尺度s 以及anchor的损失将会有效。最后,在所有尺度、anchors和位置上的损失表示为:
    在这里插入图片描述
    其中, λ c l s \lambda_{cls} λcls=0.5, λ b o x \lambda_{box} λbox=0.05, λ k p t s _ c o n f \lambda_{kpts\_conf} λkpts_conf=0.5

3.5.测试时间调整

所有的姿态估计的SOTA方法都依赖于测试时间增强(TTA)来提高性能。

  • 推理时间的增加
    翻转和多尺度是两种常用的技术。翻转增加了2倍;而多尺度在三个尺度{0.5X,1X,2X}上,增加了复杂性(0.25X + 1X+4X)= 5.25X。随着翻转测试和多尺度测试的进行,5.25*2x=10.5X的复杂性上升。在我们的比较表中,我们相应地调整了复杂性。
  • 准备增强的数据本身也可能很昂贵。
    在翻转时,翻转图像来增加系统的延迟。同样,多尺度测试也需要为每个尺度调整大小操作。这些操作可能相当昂贵,它们自身不会加速,不像CNN的操作。
  • 融合各种正向传播的输出会带来额外的成本。

对于一个嵌入式系统,如果我们能在没有任何TTA的情况下获得有竞争的结果,这是最有利的。我们所有的结果都没有任何TTA。


3.6 边界框外的关键点

自上而下的方法在遮挡条件下表现不佳。与自上而下的方法相比,YOLO-Pose方法的优点之一是对关键点在预测的边界框内没有约束。因此,如果关键点由于遮挡而位于边界框之外,那么它们仍然可以被正确识别。然而,在自上而下的方法中,如果人的检测不正确,姿态估计也会失败。在我们的方法中,遮挡和错误的边界框检测的这些挑战都在一定程度上得到了缓解,如图3所示。
在这里插入图片描述
图3. 解决自上而下的方法所面临的挑战。
顶部: YOLO-pose正确地预测了位于边界框外的被遮挡的关键点。底部:对于中间的人,框的检测并不准确。然而,这并没有限制右脚踝出错的关键点。自上而下的方法可能会完全错过右脚踝的关键点。


3.7.ONNX导出,以易于部署

ONNX将深度学习模型转换为ONNX,使其能够在各种平台上有效地部署。现有自下而上方法的后处理没有标准化,使用的操作不是标准深度学习库的一部分。例如,基于关联嵌入的自下而上方法使用 KuhnMunkres算法[29]进行分组,该算法不可微,不属于任何深度学习库的一部分。
在我们的模型中使用的所有操作符都是标准的深度学习库的一部分,并且也与ONNX兼容。因此,整个模型可以导出到ONNX中,使其易于跨平台部署。这个独立的ONNX模型可以使用ONNX Runtime来执行,它将一个图像作为输入,并推断出图像中每个人的边界框和姿势。

4. Experiments


4.1. COCO Keypoint Detectio

  • 数据集
    在COCO数据集上评估了我们的模型。它包含了超过20万张图片,有25万人的实例,有17个关键点。train2017 包含57K图像,而val2017 和 test-dev2017 分别由5K和20K图像组成。我们在train2017上训练该模型,并报告val2017和test-dev2017上的结果。
  • 评价指标
    我们遵循标准的评估指标,并使用基于OKS的COCO姿态指标评价。我们报告了不同阈值和不同对象大小下的平均精度和平均召回率评分: AP、AP50、AP75、APL、AR。
  • 训练
    我们采用了与YOLOv5 [1]类似的增强、锚定选择和损失加权策略。我们使用随机尺度([0.5,1.5])、随机翻译的数据增强[-10,10]、概率为0.5的随机翻转、概率为1的镶嵌增强以及各种颜色增强。我们使用带有余弦调度器的SGD优化器。基本学习率设置为1e-2。我们对这个模型训练了300轮。选择损失重量以平衡第3.4节中所述的各种损失。
  • 测试
    我们首先将输入图像的大边调整到所需的尺寸,以保持长径比。图像的下方被填充以生成一个正方形图像。这就确保了所有的输入图像都具有相同的大小。

4.2. Results on COCO val2017

YOLOpose取得了领先的性能,并且运算量比同期最领先的DEKR节省近一半的运算量。
在这里插入图片描述


4.3.消融研究: OKS损失与L1损失。

OKS的损失是我们工作的主要贡献之一。由于这种损失比L1损失更受到限制,因此训练时更加稳定。当使用L1损失训练时 我们必须调整损失权重。在YOLv5- s6_960上的测试中,OKS损失明显优于L1损失。我们用[30]中的尺度归一化L1损失来训练我们的模型,以检查尺度不变性对我们的损失公式的影响。
在这里插入图片描述
表3. 各项损失函数的比较。在损失中添加比例信息可以提高准确性。然而,OKS损失是获得最优OKS度量的最佳选择


4.4.消融研究:跨分辨率。

我们已经通过不同的分辨率训练了我们的模型。我们选择了960作为我们的基本分辨率,因为我们能够在这个分辨率下获得具有竞争力的性能。除此之外,YOLOv5-s6模型的性能增益已经大大饱和,如下图所示:
在这里插入图片描述
在较低的分辨率下,YOLOv5s6姿态的表现明显优与现有的最先进的低复杂度模型,如COCO上的EfficientHRNet。


4.5.消融研究:量化

【激活的选择】
Renjie Liu等人[38]观察到的,像SiLU或hardSwish 的无界激活函数对量化不友好的,而具有ReLUX激活的模型对量化是鲁棒的,因为他们有界的本性。
YOLOv5模型是基于SiLU激活。我们这里使用ReLU激活 重新训练了我们的模型。我们观察到在从SiLU改变到ReLU的激活过程中下降了约1-2%。我们称这些模型为YOLOv5_relu。
【量化后的性能】
我们已经将这些模型量化,以进一步将它们定位为嵌入式友好型。这些模型可以被量化,其精度下降可以忽略不计(~1.2%),如下表以YOLOv5-s6_960_relu为例所示。
在这里插入图片描述
【量化时具体的操作】

  • 使用16位量化,AP的下降0.1%可以忽略不计,而AP50没有下降。
  • 在使用8位量化时,精度会显著下降。
  • 在混合精度中,只有一个选定的少数卷积层在16位,其余的层在8位,我们能够从浮动大大过渡到1.2%。在我们的混合精度设置中,我们设置所有层中的16位层占比约为30%。
    由于大多数CNN加速器都是针对整数操作进行优化的,因此通过8位量化或混合精度实现良好的精度对于在嵌入式系统中部署任何模型都是至关重要的。量化后的模型可以降低延迟和降低功耗。

以上结果是通过训练后量化(PTQ),而不是量化感知训练(QAT)。


4.6.COCOtest-dev2017上的指标

在test-dev dataset上的结果如表2所示。
在这里插入图片描述
对于mAP,与具有相似计算量的自下而上SOTA方法相比,我们的模型具有竞争力。YOLOPose显示了AP50的强大结果,超过了如图6所示的所有自下而上的方法。这归因于我们的方法是固有分组的、端到端的训练,该分组比其他自下而上的方法中的独立分组要健壮得多。
如图1所示。YOLO-Pose有联合学习的好处。由于我们的模型可以正确地定位每个人的实例,因此它能够以相当好的精度预测相关的关键点,从而显著改善AP50。图5和图6提供了AP50的简单比较。
YOLOv5m6-Pose达到了89.8的AP50。
DEKR(以HRNetW48为backbone)达到了89.4的AP50。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】计数器引用和可达性分析

📝个人主页:五敷有你 🔥系列专栏:JVM ⛺️稳中求进,晒太阳 C/C的内存管理 在C/C这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏…

常见消息中间件分享

文章目录 概念核心角色作用&使用场景应用解耦异步通信削峰填谷大数据流处理 使用模型点对点模型发布-订阅模型 常见消息中间件介绍一、kafka二、RabbitMQ三、RocketMQ 比较一、Kafka如何实现高吞吐量二、RocketMQ如何实现事务消息 概念 消息中间件是基于队列与消息传递技术…

猿辅导送给新时代家长的一份教育指南,让孩子“学会学习”

新课标发布以来,各学科综合素养内容占比逐渐提升,成为校内教学考察的新方向,素养教育也成为学校、家长讨论的新话题。论坛上,各领域教育创新者、教育实践者围绕素养教育,探讨了学习本质、学习兴趣、作业问题、厌学情绪…

JAVA并发编程之原子性、可见性与有序性

并发编程-原子性、可见性与有序性 一、CPU的可见性 1.1 缓存一致性问题的出现 CPU处理器在处理速度上,远胜于内存,主内存执行一次内存的读写操作,所需要的时间足够处理器去处理上百条指令。 为了弥补处理器与主内存处理能力之间的差距&am…

2023 re:Invent 用 PartyRock 10 分钟构建你的 AI 应用

前言 一年一度的亚马逊云科技的 re:Invent 可谓是全球云计算、科技圈的狂欢,每次都能带来一些最前沿的方向标,这次也不例外。在看完一些 keynote 和介绍之后,我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是 PartyRock 了。…

3 Nacos源码下载并集成达梦数据库驱动

1、Nacos源码下载 源码直接下载gitee上的nacos2.2.3,具体链接:Nacos: 概览 欢迎来到 Nacos 的世界! Nacos 致力于帮助您发现、配置和管理微服务 - Gitee.com,具体如下图

在编老师可以有副业吗

许多在编老师或许都会面临这样一个问题:除了教书育人,我是否还能有点别的追求?副业,对于很多人来说是一个增加收入、拓展兴趣的途径,但对于在编老师而言,这个问题却显得有些复杂。 老师这份工作本身就充满…

宋仕强介绍说,萨科微slkor

宋仕强介绍说,萨科微slkor(www.slkoric.com)研制了碳化硅SiC SBD二极管、碳化硅SiC MOSFET管、IGBT管、超快恢复功率二极管等高端产品,萨科微SLKOR还有肖特基二极管、ESD静电保护二极管、TVS瞬态抑制二极管、通用二极管和三极管&a…

0-前置知识

前言 SpringBoot框架在设计之初,为了有更好的兼容性,在不同的运行阶,段提供了非常多的扩展点,可以让程序员根据自己的需求,在整个Spring应用程序运行过程中执行程序员自定义的代码。 ApplicationContextInitializer …

springcloud-网关(gateway)

springcloud-网关(gateway) 概述 \Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为其提供跨领域的关注,如:安全、监控/指标和容错 常用术语 Route(路由): 网关的基本构件。它由一个ID、一个目的地…

软考 系统分析师系列知识点之企业信息化规划(1)

所属章节: 第7章. 企业信息化战略与实施 第2节. 企业信息化规划 企业信息化建设是一项长期而艰巨的任务,不可能在短时间内完成。因此,企业信息化建设必然会分解成各个相对独立的项目,在不同时期分别实施,从而建立多个…

1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK

1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 上面是涉及到的源代码,而这次需要分析的就是78、79行的两个中断。首先,需要确认NVIC_SYSPRI2寄存器的作用。 进一…

jquery写组件滑动人机验证组件

jquery组件,虽然 jquery 语法古老,但是写好了用起来真的很爽啊,本文用滑动人机验证给大家做个详细教程(直接复制代码就可以用噢o(* ̄▽ ̄*)ブ) 第一步 先看下组件本身 component.js (function() {…

QT中的多线程有什么作用?

概述 在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上…

Python urllib模块学习

HTTP协议 HTTP 协议:一般指HTTP(超文本传输)协议。 HTTP是为Web浏览器和Web服务器之间的通信而设计的,基于TCP/IP通信协议嘞传递数据。 HTTP消息结构 客户端请求消息 客户端发送一个HTTP请求到服务器的请求消息包括以下格式 请求行(request line)请求…

基于Java开发的个人视频网站的搭建与实现[附源码]

基于Java开发的个人视频网站的搭建与实现[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &am…

威来国际教育:留学服务的全新标杆,打造无忧留学体验

在当今全球化日益加深的背景下,留学已成为众多年轻人拓宽视野、提升个人能力的重要手段。随着留学市场的不断扩大和留学目的地的多样化,家庭和学生在选择留学服务时更加注重专业性和全面性。 在这一领域,威来国际教育凭借其深厚的背景和专业的…

mysql 2-20

TEXT类型 枚举类型 SET类型 二进制字符串类型 BLOB类型 注意事项 JSON类型 提取数据 空间类型 选择建议 约束

Spark 离线开发框架设计与实现

一、背景 随着 Spark 以及其社区的不断发展,Spark 本身技术也在不断成熟,Spark 在技术架构和性能上的优势越来越明显,目前大多数公司在大数据处理中都倾向使用 Spark。Spark 支持多种语言的开发,如 Scala、Java、Sql、Python 等。…

创业者看到这3000多箱磁吸春联滞销面临销毁一定要吸取教训!

2月18日,浙江金华一个工厂🏭3000多箱龙年磁吸春联, 因为滞销,加上春联中含有龙元素和日期而面临报废销毁, 造成了数十万的损失以及大量的资源浪费。 —————————— 而引起广泛的社会讨论🗣️&…