写给初学者的YOLO目标检测 概述

news2024/11/23 12:19:24

文章目录

  • 什么是目标检测
  • What is YOLO?
  • 为什么YOLO在目标检测领域如此流行?
    • 1. 速度快
    • 2. 高检测精度
    • 3. 更好的泛化性
    • 4. 开源
  • YOLO架构
  • YOLO目标检测是如何工作的?
    • 残差块(Residual blocks)
    • 边界框回归(Bounding box regression)
    • 交并比 IoU (Intersection over Union)
    • 非极大值抑制(Non-Maximum Suppression)
  • YOLO的应用场景
    • 1- 应用于工业领域
      • 医疗
      • 农业
    • 安全监控
  • YOLO, YOLOv2, YOLO9000, YOLOv3, YOLOv4, YOLOR, YOLOX, YOLOv5, YOLOv6, YOLOv7比较
    • YOLO/YOLOv1,起点
    • YOLOv2或YOLO9000
      • 1- 批量归一化(批标准化)
      • 2- 更高的输入分辨率
      • 3- 使用锚框的卷积层
      • 4- 维度聚类
      • 5- 细粒度特征
    • YOLOv3 - 渐进式改进
      • 1- 更好的边界框预测
      • 2- 更准确的类别预测
      • 3- 在不同尺度上更准确的预测
    • YOLOv4 - 目标检测的最佳速度和准确性
    • YOLOR — You Only Look One Representation
      • 1- 预测对齐
      • 2- 目标检测的预测细化
      • 3- 多任务学习的规范表示
    • YOLOX - 2021年超越YOLO系列
      • 1- 高效分离的头部
      • 2- 强大的数据增强
      • 3- 无锚点系统
      • 4- SimOTA标签分配
    • YOLOv5
    • YOLOv6 - 一种面向工业应用的单阶段物体检测框架
    • YOLOv7 - 可训练的免费工具包为实时目标检测器设定了新的技术水平
      • 1- 架构层面
      • 2- 可训练的免费工具包
    • YOLOv8
      • 结果:
  • 结论

本文主要介绍; YOLO(You Only Look Once) 目标检测的 优势、它在过去几年中的发展情况以及一些现实生活中的应用。

什么是目标检测

目标检测(Object detection)是计算机视觉中使用的一种技术,用于识别和定位图像或视频中的对象。

图像定位是指使用边界框(bounding boxes)来识别一个或多个对象的正确位置的过程,这些边界框对应于围绕对象的矩形形状。

这个过程有时会与图像分类或图像识别混淆,后者旨在将图像或图像中的对象预测为类别或类别之一。

下面的插图对应于上述解释的计算机视觉技术。在图像中检测到的对象是“人”。

img

在本文中,将首先了解目标检测的优势,然后介绍最先进的目标检测算法YOLO

在第二部分中,我们将更加关注YOLO算法及其工作原理。之后,我们将提供一些使用YOLO的实际应用。

最后一节将解释YOLO从2015年到2020年的演变,然后总结下一步的步骤。

What is YOLO?

You Only Look Once (YOLO) 是一种最先进的实时目标检测算法,由Joseph RedmonSantosh DivvalaRoss GirshickAli Farhadi于2015年在他们著名的研究论文“You Only Look Once: Unified, Real-Time Object Detection”中引入。

YOLO 的核心思想就是把目标检测转变成一个回归问题,而不是分类任务。利用整张图作为网络的输入,仅仅经过单个卷积神经网络 (CNN),得到bounding box(边界框) 的位置及其所属的类别。

为什么YOLO在目标检测领域如此流行?

YOLO之所以领先竞争对手,原因包括:

  • 速度快
  • 检测精度高
  • 良好的泛化能力
  • 开源

1. 速度快

YOLO之所以非常快,是因为它不涉及复杂的流程。它可以以每秒45帧的速度处理图像。此外,与其他实时系统相比,YOLO的平均精度(mAP)超过了两倍,使其成为实时处理的绝佳选择。从下面的图表中,我们可以看到YOLO的速度远远超过其他目标检测器,达到了91 FPS。YOLO Speed compared to other state-of-the-art object detectors

2. 高检测精度

YOLO的准确性远远超过其他最先进的模型,几乎没有背景误差。

3. 更好的泛化性

特别是对于新版本的YOLO,本文稍后会讨论。通过这些改进,YOLO在新领域提供了更好的泛化性能,使其非常适合依赖快速和强大的目标检测应用程序。例如,《使用YOLO深度卷积神经网络自动检测黑色素瘤》的研究表明,YOLOv1版本的平均精度最低,而YOLOv2和YOLOv3版本的平均精度更高。

4. 开源

将YOLO开源使得社区可以不断改进模型。这是YOLO在有限的时间内取得如此多改进的原因之一。

YOLO架构

YOLO架构类似于GoogleNet。如下图所示,它总共有24个卷积层,四个最大池化层两个全连接层

YOLO Architecture from the original paper

该架构的工作方式如下:

  • 将输入图像调整为448x448,然后通过卷积网络处理。
  • 首先应用1x1卷积来减少通道数,然后是3x3卷积来生成一个立方体输出。
  • 在内部使用的激活函数是ReLU,除了最后一层使用线性激活函数。
  • 一些额外的技术,如批量归一化和dropout,分别对模型进行正则化并防止过拟合。

YOLO目标检测是如何工作的?

上一节已经了解了YOLO的架构,让我们简单介绍一下YOLO算法如何使用一个简单的用例来执行目标检测。

想象一下,你构建了一个YOLO应用程序,可以从给定的图像中检测出球员和足球。但是如何向某个人,特别是非专业人士解释这个过程呢?

YOLO Object Detection Image by Jeffrey F Lin on Unsplash

该算法基于以下四种方法进行操作:

  • 残差块(Residual blocks)
  • 边界框回归(Bounding box regression)
  • 交并比 IoU (Intersection over Union)
  • 非极大值抑制(Non-Maximum Suppression)

让我们更详细地了解每一种方法。

残差块(Residual blocks)

这一步首先将原始图像(A)划分为NxN个具有相等形状的网格单元,其中N在我们的案例中为4,如右侧的图像所示。网格中的每个单元负责定位和预测其覆盖的对象的类别,以及概率(probability)/置信度值(confidence value.)。

Application of grid cells to the original image

边界框回归(Bounding box regression)

下一步是确定与图像中的所有对象相对应的边界框,可以有与给定图像中的对象数量相同的边界框。YOLO使用以下格式的单个回归模块确定这些边界框的属性,其中Y是每个边界框的最终向量表示。

Y = [pc,bx,by,bh,bw,c1,c2]

这在模型的训练阶段尤为重要。

  • pc对应于包含对象的网格的概率分数。例如,所有红色网格的概率分数都将大于零。右侧的图像是简化版本,因为每个黄色单元格的概率为零(insignificant)。

Identification of significant and insignificant grids

  • bx和by是边界框的中心坐标,相对于包围它的网格单元。

  • bh和bw是边界框的高度和宽度,相对于包围它的网格单元。

  • c1和c2对应于两个类别Player和Ball。你可以根据你的应用需求拥有任意数量的类别。

为了更好地理解,让我们更仔细地观察右下角的球员。

Bounding box regression identification

交并比 IoU (Intersection over Union)

通常情况下,一张图像中的单个物体可能有多个网格框作为预测结果,但并非所有网格框都是相关的。IOU(介于0和1之间的值)的目标是舍弃这些无关的网格框,只保留相关的网格框。其逻辑如下:

  • 用户定义其IOU选择阈值,例如0.5。

  • 然后,YOLO计算每个网格单元的IOU,即交集面积除以并集面积。

  • 最后,它忽略IOU ≤ 阈值的网格单元的预测结果,并考虑IOU>阈值的网格单元。

下面是将网格选择过程应用于左下角物体的示例。我们可以观察到,该物体最初有两个网格框候选,最终只选择了“Grid 2”。

Process of selecting the best grids for prediction

非极大值抑制(Non-Maximum Suppression)

设置IOU的阈值并不总是足够的,因为一个物体可能有多个框与阈值的IOU值相同,如果保留所有这些框,可能会包含噪声。这就是我们可以使用NMS来仅保留具有最高检测概率分数的框的原因。

YOLO的应用场景

YOLO目标检测在我们日常生活中有不同的应用。在这一部分中,我们将涵盖以下领域的一些应用:医疗保健、农业、安全监控和自动驾驶汽车。

1- 应用于工业领域

目标检测已经被引入到许多实际的工业领域,如医疗保健和农业。让我们通过具体的例子来了解每一个领域。

医疗

在医疗领域,特别是在手术中,由于患者之间的生物多样性,实时定位器官可能具有挑战性。Kidney Recognition in CT使用YOLOv3来帮助在计算机断层扫描(CT)中定位二维和三维肾脏。

农业

人工智能和机器人在现代农业中扮演着重要角色。收割机器人是基于视觉的机器人,用于代替手工采摘水果和蔬菜。在这个领域中最好的模型之一使用了YOLO。在《基于修改后的YOLOv3框架的番茄检测》中,作者描述了他们如何使用YOLO来识别不同类型的水果和蔬菜,以实现高效收获。

Comparison of YOLO-tomato models

安全监控

在安全监控领域,虽然物体检测技术被广泛应用,但这并不是唯一的应用。在 COVID-19 疫情期间,YOLOv3 被用来估计人们之间的社交距离违规情况。你可以从《基于深度学习的 COVID-19 社交距离监测框架》进一步了解这个话题。

YOLO, YOLOv2, YOLO9000, YOLOv3, YOLOv4, YOLOR, YOLOX, YOLOv5, YOLOv6, YOLOv7比较

自从2015年YOLO首次发布以来,它已经通过不同版本不断发展。在本节中,我们将了解每个版本之间的区别。

YOLO Timeframe 2015 to 2022

YOLO/YOLOv1,起点

YOLO的第一个版本由于快速高效地识别物体的能力而成为目标检测的改变者。

然而,像许多其他解决方案一样,YOLO的第一个版本也有其自身的局限性:

  • 它难以检测图像组中的较小图像,例如体育场中的一组人。这是因为YOLO架构中的每个网格都设计用于单个对象检测。
  • 然后,YOLO无法成功检测新的或不寻常的形状。
  • 最后,用于近似检测性能的损失函数对小型和大型边界框的误差进行相同处理,从而创建错误的定位。

YOLOv2或YOLO9000

YOLOv2是在2016年创建的,旨在使YOLO模型更好、更快、更强。

改进包括但不限于使用Darknet-19作为新的架构、批量归一化、更高的输入分辨率、具有锚点的卷积层、维度聚类和细粒度特征。

1-批量归一化,添加批量归一化层将性能提高

1- 批量归一化(批标准化)

添加批量归一化层可以提高2%的mAP性能。这种批量归一化包括正则化效果,防止过拟合。

2- 更高的输入分辨率

YOLOv2直接使用更高分辨率的448×448输入,而不是224×224,这使得模型调整其滤波器以在更高分辨率的图像上表现更好。在ImageNet数据上训练10个时期后,这种方法将准确性提高了4%的mAP。

3- 使用锚框的卷积层

YOLOv2简化了问题,用锚框替换完全连接层,而不是像YOLOv1那样预测物体边界框的精确坐标。这种方法略微降低了准确性,但将模型召回率提高了7%,为改进提供了更大的空间。

4- 维度聚类

上述提到的锚框是由YOLOv2使用k = 5的k-means维度聚类自动发现的,而不是手动选择。这种新颖的方法在模型的召回率和精度之间提供了良好的折衷。

为了更好地理解k-means维度聚类,请查看我们的Python中使用scikit-learn的K-Means聚类和R中的K-Means聚类教程。它们深入探讨了使用Python和R进行k-means聚类的概念。

5- 细粒度特征

YOLOv2预测生成13x13的特征图,这对于大型物体检测当然足够了。但是,对于更细的物体检测,可以通过将26×26×512特征图转换为13×13×2048特征图并与原始特征串联来修改架构。这种方法将模型性能提高了1%。

YOLOv3 - 渐进式改进

在YOLOv2的基础上进行了渐进式改进,创建了YOLOv3。

主要的变化包括一个新的网络架构:Darknet-53。这是一个106层的神经网络,具有上采样网络和残差块。与YOLOv2的骨干网络Darknet-19相比,它更大、更快、更准确。这种新的架构在许多方面都有益处:

1- 更好的边界框预测

YOLOv3使用逻辑回归模型为每个边界框预测物体得分。

2- 更准确的类别预测

与YOLOv2中使用的softmax不同,引入了独立的逻辑分类器来准确预测边界框的类别。这在面对具有重叠标签的更复杂领域时非常有用(例如,人→足球运动员)。使用softmax会限制每个框只有一个类别,这并不总是正确的。

3- 在不同尺度上更准确的预测

YOLOv3对每个位置在输入图像中进行三次不同尺度的预测,以帮助从前一层进行上采样。这种策略允许获得细粒度和更有意义的语义信息,以获得更高质量的输出图像。

YOLOv4 - 目标检测的最佳速度和准确性

与所有先前版本和其他最先进的目标检测器相比,这个版本的YOLO具有最佳的目标检测速度和准确性。

下面的图像显示,与YOLOv3相比,YOLOv4的速度提高了10%,与FPS相比提高了12%。

YOLOv4 Speed compared to YOLOv3

YOLOv4是专门为生产系统设计的,并针对并行计算进行了优化。

YOLOv4架构的主干是CSPDarknet53,这是一个包含29个卷积层的网络,具有3 x 3滤波器和大约2760万个参数。

与YOLOv3相比,该架构增加了以下信息以实现更好的物体检测:

  • 空间金字塔池化(SPP)块显着增加了感受野,分离了最相关的上下文特征,并不影响网络速度。
  • YOLOv4使用PANet而不是YOLOv3中使用的特征金字塔网络(FPN)来进行来自不同检测级别的参数聚合。
  • 数据增强使用拼贴技术,将四个训练图像组合在一起,并采用自适应对抗性训练方法。
  • 使用遗传算法执行最佳超参数选择。

感受野: 卷积神经网络每一层输出的特征图(feature map)上的像素点映射回输入图像上的区域大小。通俗点的解释是,特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域

YOLOR — You Only Look One Representation

YOLOR是一个多任务统一网络,它基于显式和隐式知识方法的组合统一网络。

YOLOR unified network architecture

显性知识和隐性知识

显性知识是指正常或有意识的学习。而隐性学习则是指通过经验在潜意识中进行的学习。

将这两种技术结合起来,YOLOR能够基于三个过程创建更强大的架构:(1)特征对齐,(2)目标检测的预测对齐,以及(3)多任务学习的规范表示。

1- 预测对齐

这种方法在每个特征金字塔网络(FPN)的特征图中引入了隐式表示,可以将精度提高约0.5%。

2- 目标检测的预测细化

通过向网络的输出层添加隐式表示,可以对模型预测进行细化。

3- 多任务学习的规范表示

执行多任务训练需要在所有任务共享的损失函数上执行联合优化。这个过程可能会降低模型的整体性能,而在模型训练期间集成规范表示可以缓解这个问题。

从下面的图表中,我们可以看到YOLOR在MS COCO数据上实现了与其他模型相比的最先进的推理速度。

YOLOR vs YOLOv4

YOLOX - 2021年超越YOLO系列

本文使用YOLOv3的修改版作为基线,并以Darknet-53作为其骨干网络。

《YOLOX: Exceeding YOLO Series in 2021》一文中,YOLOX提供了以下四个关键特性,以创建比旧版本更好的模型。

1- 高效分离的头部

在之前的YOLO版本中使用的联合头部被证明会降低模型的性能。YOLOX使用了分离的头部,可以将分类和定位任务分开,从而提高了模型的性能。

2- 强大的数据增强

将Mosaic和MixUp集成到数据增强方法中,显著提高了YOLOX的性能。

3- 无锚点系统

基于锚点的算法在内部执行聚类,这会增加推理时间。在YOLOX中去除了锚点机制,减少了每个图像的预测数量,并显著提高了推理时间。

4- SimOTA标签分配

作者引入了SimOTA,一种更强大的标签分配策略,而不是使用交并比(IoU)方法。SimOTA不仅减少了训练时间,还避免了额外的超参数问题,从而实现了最先进的结果。此外,它将检测mAP提高了3%。

YOLOv5

相较于其他版本,YOLOv5没有发表研究论文,是第一个在Pytorch中实现而非Darknet的YOLO版本。

由Glenn Jocher于2020年6月发布,YOLOv5与YOLOv4类似,使用CSPDarknet53作为其架构的主干。发布包括五种不同的模型大小:YOLOv5s(最小)、YOLOv5m、YOLOv5l和YOLOv5x(最大)。

YOLOv5架构中的一个主要改进是集成了Focus层,由单个层表示,通过替换YOLOv3的前三层来创建。该集成减少了层数和参数数量,并且在不对mAP产生重大影响的情况下增加了前向和后向速度。

以下插图比较了YOLOv4和YOLOv5s之间的训练时间。

YOLOv4 vs YOLOv5 Training Time

YOLOv6 - 一种面向工业应用的单阶段物体检测框架

由中国电商公司美团推出的 YOLOv6 (MT-YOLOv6) 框架专门针对工业应用进行了硬件友好的高效设计和高性能的优化。

该框架是用 Pytorch 编写的,虽然不是官方 YOLO 的一部分,但其主干受到了原始单阶段 YOLO 架构的启发而被命名为 YOLOv6。

相对于先前的 YOLOv5,YOLOv6 在硬件友好的主干和颈部设计、高效的解耦头部和更有效的训练策略方面引入了三项重大改进。

如下所示,YOLOv6 在 COCO 数据集上的准确性和速度方面相对于先前的 YOLO 版本都有了显著提高。

YOLO Model Comparison

  • YOLOv6-N在NVIDIA Tesla T4 GPU上的吞吐量为1234 FPS,达到了35.9%的AP。

  • YOLOv6-S在869 FPS的速度下,达到了43.3%的AP,创造了新的最优结果。

  • YOLOv6-M和YOLOv6-L在相同的推理速度下分别达到了更好的准确性表现,分别为49.5%和52.3%。

YOLOv7 - 可训练的免费工具包为实时目标检测器设定了新的技术水平

YOLOv7于2022年7月发布,文章名为“训练免费工具包为实时目标检测器设定了新的技术水平”。这个版本在目标检测领域取得了重大进展,其在准确性和速度方面均超过了以前的所有模型。

YOLOV7 VS Competitors

YOLOv7在其(1)架构和(2)可训练免费工具包层面上进行了重大改变:

1- 架构层面

YOLOv7通过集成扩展高效层聚合网络(E-ELAN)来改进其架构,从而使模型学习更多样化的特征,以便更好地进行学习。

此外,YOLOv7通过连接其派生模型的架构,如YOLOv4、Scaled YOLOv4和YOLO-R,来扩展其架构,从而使模型满足不同推理速度的需求。

YOLO Compound Scaling Depth

2- 可训练的免费工具包

“免费工具包”一词指的是提高模型准确性而不增加训练成本的方法,这就是为什么YOLOv7不仅提高了推理速度,还提高了检测准确性的原因。

YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成功的 YOLO 版本的基础上,并引入了新功能和改进以进一步提高性能和灵活性。

与其他 YOLO 的比较 [来源:Ultralytics ]
它使用无锚检测和新的卷积层来使预测更加准确。

V8 不同版本对比【来源:Roboflow】
结果:
YOLO 8 在 RF100 上得到的结果比其他版本有所改进。

YOLOv8

YOLOv8是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成功的 YOLO 版本的基础上,并引入了新功能和改进以进一步提高性能和灵活性。

img

它使用无锚检测和新的卷积层来使预测更加准确。

img

结果:

YOLO 8 在 RF100 上得到的结果比其他版本有所改进。

img

结论

本文介绍了YOLO与其他最先进的目标检测算法相比的优势,以及其从2015年到2020年的演变,并突出了其优点。

考虑到YOLO的快速发展,毫无疑问它将在很长一段时间内保持目标检测领域的领导地位。

下一步将是将YOLO算法应用于实际案例。

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

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

相关文章

项目中的统一异常处理

目录 1:异常处理 1.1:异常问题分析 1.2:统一异常处理实现 1.2.1:全局异常处理器 1.2.2:自定义异常类 1.2.3:统一响应前端异常信息封装类 1.2.4:通用的异常信息枚举类 1.2.5:…

Android Studio小白安装教程,以及第一个Android项目案例的调试运行

小白友好型教学: 本文从小白角度出发,手把手教你一步一步成功安装“Android Studio”,并结合案例,编写你的第一个手机APP到手机上运行。由于安装过程较长,建议大家跟着截图,注意细节,不然容易出…

改进YOLOv8 | Neck篇 | YOLOv8 应用轻量级通用上采样算子CARAFE | 《特征的内容感知重组》

特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…

Visual Studio 2019 C# 上位机入门(1):如何创建工程编写一个简单应用

Visual Studio 2019下载安装步骤可以看:https://blog.csdn.net/weixin_44788542/article/details/114271126 这里不赘述,默认电脑上已经安装好了。 1、打开安装好的Visual Studio后,选择创建新项目。 2、找到选择C#下面的Windows 窗体应用&…

【源码】Spring Cloud Gateway 是在哪里调用后端真实服务的?

前言 我们知道 Spring Cloud Gateway 最终一定会将请求路由到后端的真实服务上,那么你知道 Spring Cloud Gateway 是在哪里调用的后端服务吗? 源码之下无秘密,让我们一起从源码中寻找答案。 源码分析 上图是来自Spring Cloud Gateway 官网…

Apache Druid RCE漏洞复现(QVD-2023-9629)

0x01 产品简介 Apache Druid是一个高性能的实时大数据分析引擎,支持快速数据摄取、实时查询和数据可视化。它主要用于OLAP(在线分析处理)场景,能处理PB级别的数据。Druid具有高度可扩展、低延迟和高吞吐量的特点,广泛应…

快手智能处理与编码算法产品化之路

视频转码过程中涉及方方面面的视频图像算法,如何将算法有机地结合起来,打造成为行业领先的视频转码算法产品?通过多年的业务场景打磨和积累,快手音视频走出了一条自己的产品化之路。LiveVideoStackCon 2022北京站邀请到了快手视频…

生成式AI火爆全球,你是否已经做好了准备?

2023年,随着ChatGPT的火爆全球,生成式AI也引发了各界人士的广泛关注。一时间,从国际科技巨头到国内人工智能企业,几乎所有我们耳熟能详的科技公司,都纷纷杀入了生成式AI市场。 作为全球云计算技术的开创者和领导者&…

【python中的对象存储:堆?栈?】

堆空间和栈空间 堆空间和栈空间是计算机内存中的两个存储区域,主要的区别有以下几点: 分配方式:栈空间中的内存由编译器或解释器自动分配和释放,无需手动干预。堆空间中的内存则需要由程序员手动申请和释放。内存大小&#xff1…

招商基金数字化转型下的研发管理|发布会精彩回顾

在 4 月 20 日举行的《中国企业软件研发管理白皮书》发布会上,招商基金信息技术部副总监、研发中心主管刘志昆作了《招商基金数字化转型下的研发管理》主题演讲,从数字化转型背景、研发管理所遇到的挑战出发,讲述招商基金如何摸索出适合自身环…

Java多线程与锁

前文中,我们已经了解了什么是线程,线程间常用通信方式,线程池以及其相关特性,可以看出锁在多线程环境中充当着重要作用,不管是线程间的数据通信,还是线程间的等待和唤醒,都依赖于锁,…

《编码——隐匿在计算机软硬件背后的语言》精炼——第13-14章(二进制减法器——1位存储器)

“成功不是最终的,失败不是致命的,勇气才是最关键的。” - 温斯顿丘吉尔 文章目录 如何实现减法计算机进行减法运算的逻辑借位的代替机制二进制下的替代机制 减法的电路实现 反馈与触发器电铃触发器R-S触发器 电平触发的D型触发器 如何实现减法 计算机进…

Haproxy搭建Web群集

Haproxy 支持四层和七层反向代理 LVS 支持四层反向代理 目前常见的Web集群调度器分为软件和硬件软件通常使用开源的LVS、Haproxy、Nginx硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等;云 SLB CLB Haproxy应用分析…

配置Docker镜像加速器-Docker命令-Docker 容器的数据卷

Docker架构 docker进程(daemon) 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件…

OpenJudge - 39:多项式输出

目录 一、题目描述 二、代码实现 一、题目描述 一元 n 次多项式可用如下的表达式表示: ​ 其中,​ 称为 i 次项,​ 称为 i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式&#xff…

如何在本地搭建Maven环境并整合进IDEA中?【2023最新版】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 目录 一. 为什么要使用Maven?1.1 获取jar包1.2 添加jar包1.3 使用Maven便于解决jar包冲突及依赖问题 二. 什么是Maven?三. 如何…

排序算法 - 选择排序(Selection sort)

文章目录 选择排序介绍选择排序实现选择排序的时间复杂度和稳定性选择排序时间复杂度选择排序稳定性 代码实现核心&总结 每日一道算法,提高脑力。第四天,选择排序。 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素&#…

Three.js--》理解光源对物体产生影响的重要性

上篇文章 前端开发者掌握3d技术不再是梦,初识threejs 作为three.js入门篇讲解了许多内容但是没有深入了解其原理以及实现方法,仅仅只是展示了实现的内容及代码,本篇文章将深入讲解实现效果其背后用到的知识与原理。 目录 使用相机控件轨道控…

博途PID编程应用(状态机)

博途工艺PID的详细解读可以查看下面的博客文章,这里不再赘述 博途PLC 1200/1500PLC 工艺对象PID PID_Compact详细解读_RXXW_Dor的博客-CSDN博客这篇博文我们详细解读博途PLC自带的PID功能块PID_Compact,大部分工业闭环调节过程,我们采用系统自带的PID功能块基本都能胜任,一…

接收来自客户端的参数使用【JSR303校验框架】进行校验参数是否合法

目录 1:JSR303校验 1.1:统一校验的需求 1.2:统一校验实现 1.3:分组校验 1.4:校验规则不满足? 1:JSR303校验 1.1:统一校验的需求 前端请求后端接口传输参数,是在co…