YOLOv5网络模型的结构原理讲解(全)

news/2024/4/27 14:49:07/文章来源:https://blog.csdn.net/weixin_47872288/article/details/130368368

目录

  • 前言
  • 1. 基本概念
  • 2. 输入端
    • 2.1 Mosaic 图像增强
    • 2.2 自适应锚框计算
    • 2.3 自适应图片缩放
  • 3. Backbone层
    • 3.1 Focus结构
    • 3.2 CSP结构
  • 3. Neck网络
    • 3.1 SPP结构
    • 3.2 PAN结构
  • 4. 输出端
    • 4.1 Bounding box损失函数
    • 4.2 NMS非极大值抑制

前言

YOLOv5有几种不同的架构,各网络模型算法性能分别如下:
在这里插入图片描述

1. 基本概念

YOLOv5是一种目标检测算法,其模型结构主要包括以下组成部分:

  • 输入端:YOLOv5的Head网络由3个不同的输出层组成,分别负责检测大中小尺度的目标。

  • Backbone网络:YOLOv5使用CSPDarknet53作为其主干网络,其具有较强的特征提取能力和计算效率。

  • Neck网络:YOLOv5使用的是FPN(FPN网络能够在不同的特征图层次上进行检测,可以提高目标检测的性能)网络,可以融合来自不同特征图层次的信息。

  • 输出端:损失函数,YOLOv5使用的是Focal Loss损失函数,该函数可以缓解目标检测中类别不平衡的问题,提高模型的性能。非极大值抑制(NMS),YOLOv5在输出结果后,会对重叠的目标框进行NMS处理,以得到最终的检测结果。

  • 激活函数,YOLOv5使用的是Mish激活函数,该函数是一种替代ReLU的激活函数,可以提高模型的性能。

总体来说,YOLOv5的模型结构相对简单,但其使用了多种技术和策略,如CSP结构、FPN网络、Mish激活函数和Focal Loss损失函数等,以提高模型的性能和鲁棒性。

配合代码可看我这篇文章:Yolov5 代码从入门到畅通(v6.2) 附代码注释

2. 输入端

输入端 主要由Mosaic 图像增强、自适应锚框计算 以及 自适应图片缩放 组成

2.1 Mosaic 图像增强

补充:
YOLOv5图像增强支持多种模式,包括以下几种:- Mosaic模式:将四张不同的图像拼接成一张图像,用于增加数据集的多样性。- Random模式:包含多种图像增强方式,如随机缩放、随机裁剪、随机旋转、随机亮度调整、随机对比度调整等,可以随机地选择其中一种或多种方式进行图像增强。- MixUp模式:将两张不同的图像进行混合,用于增加数据集的多样性和防止过拟合。- CutMix模式:将两张不同的图像进行裁剪混合,用于增加数据集的多样性和防止过拟合。- GridMask模式:通过在图像中加入遮罩,可以增加数据集的多样性和防止过拟合。- AutoAugment模式:通过搜索最优的数据增强策略来提高模型的性能。
  • 基本概念:Mosaic图像增强是一种目标检测中常用的数据增强方法,它可以通过组合多个不同的图像来生成新的训练图像。

  • 主要作用:Mosaic图像增强可以增加训练集的多样性和难度,有助于提高目标检测模型的鲁棒性和泛化能力。同时,Mosaic图像增强还可以降低过拟合风险,提高模型的训练效果。

  • 主要步骤:随机选择四张不同的图像,将这四张图像随机拼接成一张大图像,其中每个小图像的位置和大小都是随机的。(对于大图像中的每个目标,重新计算其在大图像中的位置和大小。在大图像中标注每个目标的新位置和大小,并生成新的标注信息。)

实战代码模块的YOLOv5s的项目代码中,设置了两种类型,分别是Mosaic4 load和Mosaic9 load,这是两种不同的数据增强方式,它们的区别在于使用的图像数量不同。

  • Mosaic4 load会随机选择4张不同的图像,并将它们拼接在一起,形成一张包含4个不同图像的大图像。然后,将大图像作为训练集中的一张图像,对其进行数据增强操作,如随机裁剪、大小变换等。这样可以增加训练集的多样性和难度,提高目标检测模型的鲁棒性和泛化能力。

  • Mosaic9 load则会随机选择9张不同的图像,并将它们拼接在一起,形成一张包含9个不同图像的大图像。然后,对大图像进行数据增强操作,如随机裁剪、大小变换等。这样可以进一步增加训练集的多样性和难度,提高模型的鲁棒性和泛化能力。

总之,Mosaic4 load和Mosaic9 load都是用于数据增强的方法,它们的区别在于使用的图像数量不同,Mosaic9 load使用的图像数量更多,相应地增加了训练集的多样性和难度,但也增加了计算量和训练时间。

2.2 自适应锚框计算

在目标检测算法中,锚框是指在输入图像上定义的一些预先设定好的矩形框,用于检测不同尺度和宽高比的目标。

传统的目标检测算法中,通常需要手动设置锚框的大小和宽高比等参数。然而,这些参数的选择往往需要经验和调试,容易出现不稳定和不准确的情况。

为了解决这个问题,自适应锚框的方法应运而生。自适应锚框的思想是通过学习的方式自动计算出最适合输入图像的锚框参数,而不需要手动设置。这种方法可以提高目标检测的精度和鲁棒性。

自适应锚框计算的方法主要有两种:

  • Anchor-free方法:该方法直接回归目标的位置和尺寸,不需要使用锚框。典型的Anchor-free方法包括CenterNet和CornerNet等。

  • Anchor-based方法:该方法使用锚框来检测目标,但是锚框的大小和宽高比等参数是根据输入图像自适应计算的。典型的Anchor-based方法包括RetinaNet和FSAF等。

总之,自适应锚框的方法可以避免手动设置锚框参数的问题,提高目标检测的精度和鲁棒性。同时,自适应锚框的方法也是目标检测领域的一个研究热点。

而 YOLOv5使用的是一种名为ATSS(Adaptive Training Sample Selection)的自适应锚框计算方法。

  • ATSS是一种基于Anchor-based的目标检测算法,它通过学习的方式自动计算出最适合输入图像的锚框参数,而不需要手动设置。ATSS算法的核心思想是,在训练过程中,根据样本与锚框的匹配度(即交并比IoU),自适应地选择正负样本,从而有效地降低了难样本的影响,并提高了检测精度。ATSS算法在YOLOv5中的应用,使得YOLOv5在目标检测任务中取得了较为出色的性能表现。

2.3 自适应图片缩放

在YOLOv5中,自适应图片缩放(Adaptive Image Scaling)是一种基于目标尺度的图像缩放方式,它可以自适应地缩放输入图像的尺寸,以适应不同尺度目标的检测。

以YOLOv5s为例,详细介绍一下自适应图片缩放的原理和步骤:

阶段过程
预处理阶段首先,输入图像将被缩放到一个基准尺寸,即YOLOv5s中的默认基准尺寸是640x640像素

如果输入图像尺寸小于基准尺寸,则会通过插值算法将其缩放到基准尺寸;如果输入图像尺寸大于基准尺寸,则会将其缩放到一个较小的尺寸,并在后续的缩放过程中进行适当调整。
网络输入阶段在图像输入到网络之前,YOLOv5会根据图像中最大目标的尺度,动态地调整输入图像的尺寸。具体来说,YOLOv5会计算出图像中最大目标的尺寸,然后根据一定的缩放规则将图像缩放到一个适当的尺寸,以确保最大目标的尺寸可以被检测到。

例如,在YOLOv5s中,如果最大目标的尺寸小于80x80像素,则将图像缩放到640x640像素;如果最大目标的尺寸大于80x80像素但小于160x160像素,则将图像缩放到1280x1280像素;如果最大目标的尺寸大于160x160像素,则将图像缩放到1920x1920像素。
网络输出阶段在网络输出时,YOLOv5会根据预测框的位置和尺寸,将检测结果映射回原始图像坐标系。由于输入图像的尺寸可能被缩放过,因此需要进行相应的反缩放操作,以便将检测结果映射回原始图像坐标系中。

总之,YOLOv5中的自适应图片缩放是一种基于目标尺度的图像缩放方式,它可以自适应地缩放输入图像的尺寸,以适应不同尺度目标的检测。这种方法可以有效地解决目标检测中存在的尺度不一致问题,提高检测精度和鲁棒性。

3. Backbone层

Backbone层主要由Focus结构 以及 CSP结构 组成

3.1 Focus结构

YOLOv5中的Focus结构是一种用于特征提取的卷积神经网络层,用于将输入特征图中的信息进行压缩和组合,从而提取出更高层次的特征表示。

Focus结构是YOLOv5中的一种特殊卷积操作,它被用作网络中的第一个卷积层,用于对输入特征图进行下采样,以减少计算量和参数量。
在这里插入图片描述

具体来说,Focus结构可以将输入特征图划分成四个子图,并将这四个子图进行通道拼接,从而得到一个更小的特征图。假设输入特征图的大小为N×N×C,其中N为特征图的尺寸,C为通道数,则Focus结构的计算过程可以分为以下几个步骤:

  1. 将输入特征图进行通道分离,得到两个大小为N×N×C/4的特征图,记为x和y。

  2. 对x和y分别进行横向和纵向的步长为2的卷积操作,得到两个大小为N/2×N/2×C/4的特征图,记为x’和y’。

  3. 将x’和y’进行通道拼接,得到一个大小为N/2×N/2×C/2的特征图,记为z。

  4. 对z进行横向和纵向的步长为2的卷积操作,得到一个大小为N/4×N/4×C/2的特征图,即为Focus结构的输出。

由于Focus结构对输入特征图进行了下采样,因此可以有效地减少计算量和参数量,同时保留了输入特征图中的重要信息,有助于提高模型的特征提取能力。在YOLOv5中,Focus结构被广泛用于各个卷积块的第一个卷积层,以实现对输入特征图的下采样和特征压缩。

特别注意的是:
YOLOv5的代码中有时会将Focus结构替换为卷积层。

这是因为Focus结构在实现上比较复杂,需要进行通道分离、卷积、通道拼接等操作,导致计算量较大,不利于模型的训练和推理。

为了简化网络结构并提高运行效率,YOLOv5的作者采用了一种策略,即将Focus结构替换为标准的卷积层,从而减少计算量和参数量。

具体来说,YOLOv5中的卷积层是以步长为2的方式进行下采样的,与Focus结构类似,它可以实现对输入特征图的压缩和下采样。因此,将Focus结构替换为卷积层可以在一定程度上提高模型的训练和推理效率,同时减少代码的复杂度和开发难度。

需要注意的是,由于卷积层只能进行简单的特征压缩和下采样操作,可能会损失一些输入特征图中的细节信息。因此,在某些需要较高特征提取能力的任务中,采用Focus结构可能会更加合适。

3.2 CSP结构

CSP(Cross Stage Partial)结构是YOLOv5中的一个重要组成部分,用于构建骨干网络(backbone)。CSP结构最初在CVPR 2020中提出,可以有效地减少网络参数和计算量,同时提高特征提取的效率。

CSP结构的核心思想是将输入特征图分成两部分,一部分经过一个小的卷积网络(称为子网络)进行处理,另一部分则直接进行下一层的处理。然后将两部分特征图拼接起来,作为下一层的输入。

具体来说,CSP结构包括以下几个步骤:

  1. 将输入特征图分成两部分,一部分进行子网络的处理,另一部分直接进行下一层的处理。

  2. 在子网络中,先使用一个卷积层将输入特征图进行压缩,然后进行一系列卷积操作,最后再使用一个卷积层进行扩张。这样可以提取出相对较少的高层次特征。

  3. 在下一层中,将经过子网络处理的特征图与直接处理的特征图进行拼接,然后再进行一系列卷积操作。这样可以将低层次的细节特征和高层次的抽象特征结合起来,提高特征提取的效率。

CSP结构在YOLOv5中被广泛应用,包括骨干网络中的多个阶段以及头部网络(head)中的一些模块。它可以显著地减少网络的参数和计算量,同时提高特征提取的效率,从而加快模型的训练和推理速度。

补充:

在CSP结构中,有两种不同的实现方式:CSPDarknet53和CSPResNet50。总的来说,CSPDarknet53和CSPResNet50都采用了CSP结构进行特征提取,但具体的实现方式略有不同。它们在YOLO系列目标检测模型中都取得了很好的效果。

  • CSPDarknet53是YOLOv4中提出的一种骨干网络,CSPDarknet53的结构类似于Darknet53
  • CSPResNet50是YOLOv5中提出的一种骨干网络,CSPResNet50的结构类似于ResNet50

两者 主要是 加入了CSP模块,用于提高特征提取的效率和减少模型的参数量。包括多个CSP模块,每个模块将输入特征图分成两部分,一部分进行子网络的处理,另一部分直接进行下一层的处理。然后将两部分特征图拼接起来,作为下一层的输入。这样可以将低层次的细节特征和高层次的抽象特征结合起来,提高特征提取的效率。

3. Neck网络

YOLOv5中的Neck网络是指在骨干网络的基础上加入的中间特征提取网络,主要用于增强模型的特征表达能力和感受野,进一步提升模型的检测性能。

YOLOv5中采用了两种不同的Neck网络结构:SPP和PAN。

Neck网络结构具体说明
SPP(Spatial Pyramid Pooling)结构一种金字塔池化结构,可以对不同大小的特征图进行池化,从而增强模型对不同尺度目标的感知能力。具体地,SPP结构将输入特征图分别进行1x1、2x2和3x3的池化操作,并将不同尺度的池化结果拼接起来,作为SPP结构的输出。
PAN(Path Aggregation Network)结构一种多尺度特征融合结构,它可以将不同层次的特征进行有效融合,并且避免信息丢失。具体地,PAN结构首先通过上采样将较高层次的特征图尺度与较低层次的特征图尺度对齐,然后通过特征融合模块将它们进行融合,并最终输出融合后的特征图。

在YOLOv5中,SPP和PAN结构可以相互配合使用,以提高模型的检测性能。SPP结构可以增强模型的感知能力和尺度不变性,而PAN结构可以增强多尺度特征的融合能力。

3.1 SPP结构

  • SPP(Spatial Pyramid Pooling)结构是一种金字塔池化结构,可以对不同大小的特征图进行池化,从而增强模型对不同尺度目标的感知能力。
    SPP结构的主要思想是通过对输入特征图进行不同大小的池化操作,将不同尺度的信息进行融合。
    常见的SPP结构有SPP1x1、SPP3x3和SPP5x5等,其中SPP1x1相当于全局平均池化,SPP3x3和SPP5x5则分别对特征图进行3x3和5x5的池化操作。

  • SPPF(Spatial Pyramid Pooling Fusion)结构则是在SPP结构的基础上进一步引入了特征融合模块,以进一步提升模型的感知能力和检测性能。具体地,SPPF结构首先对输入特征图进行不同大小的池化操作,然后通过卷积操作将不同尺度的池化结果进行融合,并最终输出融合后的特征图。SPPF结构的特点是可以自适应地融合不同尺度的特征信息,从而增强模型的特征表达能力和感知能力。

3.2 PAN结构

PAN(Path Aggregation Network)是一种用于目标检测的特征金字塔网络结构,旨在通过多层级的特征融合,提升模型对不同尺度目标的感知能力。

PAN结构主要由两个模块组成:特征金字塔模块和特征融合模块。

  • 特征金字塔模块通常由多个不同大小的卷积层和池化层组成,用于生成不同尺度的特征图。不同尺度的特征图可以提供不同粒度的目标信息,同时也可以克服特征图上的位置偏差。

  • 特征融合模块用于将不同尺度的特征图进行融合,以提升模型的特征表达能力和感知能力。
    常见的特征融合方法有横向特征融合和纵向特征融合。
    1.横向特征融合主要是将不同尺度的特征图进行级联,形成多尺度特征图。
    2.纵向特征融合主要是将不同尺度的特征图进行聚合,通过加权平均等方式进行融合。
    PAN结构中的特征融合模块使用了自上而下的特征聚合方式,即从上往下通过特征融合模块逐层融合特征,从而形成更为强大的特征表示。

总之,PAN结构通过特征金字塔和特征融合两个模块的组合,能够有效地提升目标检测的性能。

4. 输出端

YOLOv5的输出端主要是预测框,每个预测框由以下信息组成:

  • 置信度(confidence score):表示该框内是否存在目标的概率,取值范围为0到1。

  • 类别概率(class probabilities):表示该框内目标属于各个类别的概率,一般是预先定义好的类别数量。

  • 边界框位置(bounding box coordinates):表示目标的位置和大小,一般用矩形框来表示。

YOLOv5中的输出层一般包括三个不同尺度的特征图,每个特征图对应不同尺度的预测框,每个预测框包含的信息如上述所述。具体地,YOLOv5在输出层通过使用anchor box来预测目标的边界框位置和大小,同时对每个anchor box对应的预测结果使用softmax函数来计算类别概率。

总之,YOLOv5的输出端可以输出图像中目标的位置、大小和类别等信息,以便后续的目标识别和跟踪等任务进行处理。

4.1 Bounding box损失函数

YOLOv5中的Bounding box损失函数采用IoU loss函数,主要用于衡量预测的边界框与真实边界框之间的差异。

IoU loss是Intersection over Union(IoU)的一种变形,它是一种用于测量预测边界框与真实边界框之间重叠程度的指标。在目标检测中,IoU通常被用来评估预测框和真实框的重叠情况,以确定预测框是否正确。

具体而言,对于每个预测边界框,我们计算其与所有真实边界框的IoU值,然后选择IoU最大的那个真实边界框作为其对应的匹配目标,从而计算出其IoU loss。

其具体使用DIOU损失函数,公式如下:
在这里插入图片描述
在这里插入图片描述

补充如下:

DIOU、GIOU和CIOU都是目标检测中用于计算边界框距离的指标,它们都是对传统的IoU(Intersection over Union)指标的改进和扩展。

  • DIOU(Distance IoU)是在IoU的基础上引入了中心点距离,它可以有效地缓解定位误差对目标检测性能的影响。具体而言,DIOU的计算公式如下:
    在这里插入图片描述
    其中, I o U ( A , B ) IoU(A,B) IoU(A,B)表示边界框 A A A B B B之间的IoU值, d c ( A , B ) d_c(A,B) dc(A,B)表示边界框 A A A B B B之间的中心点距离, ω \omega ω表示图像对角线长度。

  • GIOU(Generalized IoU)在DIOU的基础上进一步引入了边界框面积的比率,可以有效地缓解尺度变化对目标检测性能的影响。具体而言,GIOU的计算公式如下:
    在这里插入图片描述
    其中, c ( A , B ) c(A,B) c(A,B)表示边界框 A A A B B B之间的最小包含框的面积, α \alpha α是一个可调的参数,用于平衡中心点距离和尺度比率对目标检测性能的影响。

  • CIOU(Complete IoU)在GIOU的基础上进一步引入了角点距离的概念,可以有效地缓解旋转和倾斜对目标检测性能的影响。具体而言,CIOU的计算公式如下:
    在这里插入图片描述
    其中, s ( A , B ) s(A,B) s(A,B)表示边界框 A A A B B B之间的角点距离, α \alpha α是一个可调的参数,用于平衡中心点距离、尺度比率和角点距离对目标检测性能的影响。

总体来说,DIOU、GIOU和CIOU都是一种更加综合、更加准确的边界框距离度量方式,可以有效地提升目标检测性能。

4.2 NMS非极大值抑制

在目标检测任务中,一个物体可能被多个预测框检测出来,为了避免对同一个物体进行多次检测,需要对重复的预测框进行过滤,这个过程就是非极大值抑制(Non-maximum suppression,简称NMS)。

在YOLOv5中,NMS主要是通过以下几个步骤实现的:

  1. 首先,对所有预测框按照置信度从高到低进行排序。

  2. 然后,从置信度最高的预测框开始,依次遍历每个预测框,判断该预测框与后面所有预测框之间的IOU值是否大于一定的阈值(一般为0.5或0.6)。

  3. 如果IOU值大于阈值,则将该预测框从候选框列表中剔除,否则保留该预测框。

  4. 继续遍历下一个预测框,重复上述步骤,直到所有预测框都被遍历一遍。

  5. 最终,保留下来的预测框就是经过NMS处理后的结果,即每个物体只对应一个预测框。

NMS算法的核心是通过比较重复预测框之间的IOU值,去除冗余的预测框,保留最优的结果。在YOLOv5中,NMS可以避免同一个物体被重复检测的问题,提高了检测的精度和效率。

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

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

相关文章

Qt信号槽原理

Qt之信号槽原理 一.概述 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这…

Openswan安装和简单配置

Openswan安装和简单配置 安装环境: 操作系统:Ubuntu20.0.4TLS 用户权限:root下载Openswan: wget https://github.com/xelerance/Openswan/archive/refs/tags/v3.0.0.zip安装Openswan: 解压Openswan:(PS&#xff1a…

银行数字化转型导师坚鹏:商业银行数字化风控(2天)

商业银行数字化风控 课程背景: 数字化背景下,很多银行存在以下问题: 不清楚商业银行数字化风控发展现状? 不清楚对公业务数字化风控工作如何开展? 不知道零售业务数字化风控工作如何开展? 课程特色…

海光信息业绩高歌猛进,但其作为国产CPU龙头的“地基”并不牢固

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在“芯片寒冬”的大背景下,2022年全球头部芯片半导体公司纷纷下调业绩预期,英特尔、英伟达、美光等无一幸免。但是随着AIGC异军突起,仿佛寒冬中的一股暖流,催生着半导体市场行…

C. Trailing Loves (or L‘oeufs?)(求某个质因子在n的阶乘中的个数 + 思维)

Problem - C - Codeforces Aki喜欢数字,尤其是那些带有尾随零的数字。例如,数字9200有两个尾随零。Aki认为数字拥有的尾随零越多,它就越漂亮。 然而,Aki认为,一个数字拥有的尾随零的数量并不是固定的,而是…

idea中导入spring源码;在spring源码中添加注释

标题:idea中导入spring源码;在spring源码中添加注释 我是跟着他操作的,下文是一些补充说明: 这个也可以借鉴 gradle下载链接【使用网盘下载】,不过有的没有, gradel下载链接:这个比较全 1.Spring源码编译环境 spr…

Karl Guttag:现有Micro LED/LCoS+光波导AR眼镜对比解析

轻量化是未来AR眼镜的发展趋势,为了缩减尺寸,AR眼镜厂商尝试了多种方案,长期来看Micro LED光机在小型化上更有优势,但现阶段LCoS光机的图像表现更好。在CES 2023期间,DigiLens、Lumus、Vuzix、OPPO、Avegant也展出了不…

linux编译安装python的全过程,pip python不与linux系统环境混乱

因为使用要求,使得我需要在linux环境下安装一个独立的python环境,不干扰其他环境。 预安装 在安装python之前,请在linux系统下安装下面这些包: sudo apt-get install namelibssl-dev libcurl4 libcurl4-openssl-dev zlib-devel…

27-Servlet执行原理

目录 1.Tomcat详解 ①接收请求: ②根据请求计算响应: ③返回响应: 2.Tomcat执行流程 2.1.Tomcat 初始化流程 2.2.Tomcat 处理请求流程 2.3.Servlet 的 service 方法的实现 在 Servlet 的代码中并没有写 main ⽅法,那么对应…

【C++关联容器】map的成员函数

目录 map 1. 构造、析构和赋值运算符重载 1.1 构造函数 1.2 析构函数 1.3 赋值运算符重载 2. 迭代器 3. 容量 4. 元素访问 5. 修改器 6. 观察者 7. 操作 8. 分配器 map map是关联容器,它按照特定的顺序存储由关键字值和映射值的组合形成的元素。 在一…

【Springboot系列】项目启动时怎么给mongo表加自动过期索引

1、前言 在之前操作mongo的过程中,都是自动创建,几乎没有手动创建过表。 这次开发中有张表数据量大,并且不是特别重要,数据表维护一个常见的问题是过期数据没有被及时清理,导致数据量过大,查询变得缓慢。…

LeetCode-242. 有效的字母异位词

题目链接 LeetCode-242. 有效的字母异位词 题目描述 题解 题解一(Java) 作者:仲景 首先,满足条件的情况下,两个字符串的长度一定是相等的,不相等一定不满足条件 使用Hash表来存储字符串s中各个字符出现的…

Spring Security实战(九)—— 使用Spring Security OAuth实现OAuth对接

一、OAuth2.0介绍 OAuth2.0是一种授权协议,允许用户授权第三方应用程序代表他们获取受保护的资源,如个人信息或照片等。它允许用户授权访问他们存储在另一个服务提供商上的资源,而无需将其凭据共享给第三方应用程序。OAuth2.0协议建立在OAuth…

【具体到每一步】从0制作一个uniapp的新闻类页面(界面篇)

目录 项目初始化 / 基础配置 项目创建 配置路由/页面/tabbar pages.json配置tabbar 配置图标/静态资源 导航栏和字体颜色 scroll-view实现横向滚动条样式 公共模块定义components组件 新建组件 使用组件 组件里的结构 布局个人中心页面 组件差异化处理 数据传递 导航…

DevExpress:报表在winform窗体上显示(使用documentViewer控件)

一:控件认识 documentViewer(版本DX22.2),老版本中的可能是printControl(工具箱面板中可能找不到),通过官网搜索发现,这个控件现在继承于documentViewer这个控件。因此,使用documen…

Unity入门(一)

Unity Unity是一套完善体系与编辑器的跨平台游戏开发工具,也可以称之为游戏引擎。游戏引擎是指一些编写好的可以重复利用的代码与开发游戏所用的各功能编辑器。 基于C#编程,易上手,高安全性独特的面向组件游戏开发思想让游戏开发更加简单易…

【神经网络】tensorflow实验7--回归问题

1. 实验目的 ①掌握一元线性回归模型的实现方法 ②掌握多元线性回归模型的实现方法 ③掌握三维数据可视化方法 2. 实验内容 ①使用TensorFlow建立一元线性回归模型,使用商品房销售数据训练模型,并使用训练好的模型预测房价 ②使用TensorFlow建立多元线…

十、ElasticSearch 实战 - 源码运行

一、概述 想深入理解 Elasticsearch,了解其报错机制,并有针对性的调整参数,阅读其源码是很有必要的。此外,了解优秀开源项目的代码架构,能够提高个人的代码架构能力 阅读 Elasticsearch 源码的第一步是搭建调试环境&…

思维导图从入门到大神

思维导图怎么做?思维导图是一种发散性思维的图。在我们生活的方方面面都有运用。无论是工作、学习、还是生活,我们都可以用到它。那思维导图是怎么绘制的呢?其实非常简单,只要这简单的几步 1、首先在绘制思维导图前,我…

【网络】-- UDP协议

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) 两个问题 netstat pidof UDP协议 UDP的特点 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 负责数据能够从发送端传输接收端。 再谈端口号 端…