【超全】目标检测模型分类对比与综述:单阶段、双阶段、有无锚点、DETR、旋转框

news2024/11/28 19:19:51

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 引言
  • 目标检测模型分类
    • 1.单阶段与双阶段检测:
    • 2.基于锚点或无锚点检测器:
    • 3.基于CNN与基于Transformer的检测器:
    • 4.轴对齐与旋转边界框:
  • 1.单阶段与双阶段检测:
  • 2. 基于锚点与无锚点检测
    • 1.基于锚点的物体检测器
      • 模型特点:
      • 优点:
      • 缺点:
      • 示例如下:
    • 2.无锚式物体检测器
      • 产品特点:
      • 优点:
      • 缺点:
      • 示例如下:
  • 3. 基于CNN与基于Transformer的检测器
    • DETR系列
      • 概览:
      • DETR变体:
    • 主要特点:
      • 优点:
      • 缺点:
  • 基于transformer主干的对象检测模型
    • 概述:
    • 关键示例:
    • 主要特点:
    • 优点:
    • 缺点:
  • 5.轴对齐(水平)与旋转边界框:
    • 轴对齐的边界框
      • 定义:
      • 产品特点:
      • 优点:
      • 缺点:
    • 旋转边界框
      • 定义:
      • 产品特点:
      • 优点:
      • 缺点:
      • 使用案例:

引言

目标检测是计算机视觉的基本任务之一。文章将深入比较关键的目标检测模型,探索它们在各种检测任务中的独特方法、优势和挑战。

img

目标检测模型分类

1.单阶段与双阶段检测:

  • 单阶段检测(例如,YOLO、SSD)在单次通过中执行对象检测,优先考虑速度和效率,使其成为实时应用的理想选择。
  • 双阶段检测(例如,更快的R-CNN)使用两步过程进行区域建议,然后进行分类,专注于准确性,这对复杂或密集的场景特别有益。

2.基于锚点或无锚点检测器:

  • 基于锚点的检测器(例如,SSD、YOLOv8)依赖于不同比例和长宽比的预定义边界框(锚点),这些边界框提供了强大的性能,但需要调整。
  • 无锚检测器(例如,FCOS、CenterNet、YOLOX)直接预测对象位置,无需使用预定义的锚点,简化了架构,提高了跨不同数据集的适应性。

3.基于CNN与基于Transformer的检测器:

  • 基于CNN的检测器利用卷积层有效地捕获局部空间模式。
  • 基于Transformer的检测器(例如,DETR)利用自注意机制来捕捉图像中远处对象之间的全局上下文和关系。它们可以很好地扩展大型数据集,但计算成本更高。

4.轴对齐与旋转边界框:

  • 轴对齐框与图像轴对齐,提供计算简单性,但难以处理旋转对象和密集场景。
  • 旋转的边界框旋转以适应对象的方向,从而提高了有角度对象的精度,但代价是增加了计算复杂性。

1.单阶段与双阶段检测:

img

单阶段与双阶段检测的主要区别
img

单阶段检测,也称为单次检测,在网络的单个前向传递中执行定位和分类。这些模型旨在通过消除区域建议阶段来平衡速度和准确性。单级检测器将图像分割成更小的图像。图像被分割成尺寸为S×S的正方形网格。例如,下图显示了YOLO的模型设计

img

两阶段检测器分为两个不同的步骤:生成区域建议,然后对这些建议区域进行分类和细化。这些方法的重点是通过在分类之前细化潜在的对象区域来产生高度准确的结果。

img

2. 基于锚点与无锚点检测

基于锚点与无锚点检测的主要区别:
img

1.基于锚点的物体检测器

这些方法使用预定义的框,称为,在不同的尺度和长宽比,以提出潜在的对象区域。然后,网络在训练过程中调整锚点,以更好地适应地面实况对象。

模型特点:

  • 预定义锚点: 锚点是基于数据集中对象大小和纵横比的先验知识设计的。
  • 边界框回归: 模型在训练过程中调整锚点的位置和大小,以匹配地面实况框。
  • 复杂性: 需要调整锚尺寸和纵横比,这可能使设计更加复杂。
  • 性能: 通常可以很好地处理不同的对象比例和长宽比,但对于大型或非常小的对象可能会遇到困难。

优点:

  • 由于使用了锚点,更好地检测不同大小和形状的物体。
  • 由于预先定义的锚点,通常收敛速度更快,更稳定。

缺点:

  • 需要调整锚框,这可能是特定于锚的,并且很耗时。
  • 由于大量锚点,内存使用率更高

示例如下:

  • Faster R-CNN
  • YOLO(You Only Look Once)
  • SSD(单次发射多盒探测器)

2.无锚式物体检测器

这些模型消除了对预定义的锚框的需要,并直接预测对象的中心或角。

产品特点:

  • 直接定位: 预测关键点(例如,对象中心、角),而不依赖于预定义的锚。
  • 更简单的设计: 无需设计或调整锚大小,使模型更简单,并可能在数据集之间更灵活。
  • 边界框预测: 通常预测对象的中心及其高度和宽度,或对象角的位置。

优点:

  • 更简单的架构,超参数更少(无锚调优)。
  • 由于减少了计算开销(需要处理的框更少),可能更快地进行推理。
  • 更适合检测不同大小和尺度的物体,而无需预定义的假设。

缺点:

  • 有时对于小对象或极端长宽比不太准确,因为该方法需要从较少的线索中推断这些特征。
  • 可能需要更多的数据增强或复杂的损失函数,以匹配基于锚点的方法的性能。

示例如下:

  • CenterNet
  • FCOS(全卷积一级目标检测)
  • CornerNet

下面是一个比较表,总结了FCOSCornerNetCenterNet之间的差异:

img

3. 基于CNN与基于Transformer的检测器

基于CNN与基于Transformer的检测器的主要区别:
img

DETR系列

概览:

作用:DETR模型系列代表了一个完整的对象检测框架,其中整个检测过程(包括特征提取,对象检测和边界框预测)都是使用transformers完成的。DETR消除了对区域建议网络、锚框或非最大抑制的需要。

体系结构

  • DETR模型使用Transformer编码器-解码器结构。编码器处理图像特征,解码器预测一组固定的边界框和对象类。
  • DETR将特征提取、对象分类和边界框预测集成到一个端到端的Transformer模型中。

DETR变体:

  1. DETR(DetectionTransformer)
  • 最初的DETR引入了使用变压器端到端进行对象检测的概念,从而消除了对传统锚盒和NMS的需求。

2.可变形DETR

  • 通过使用可变形注意力提高DETR的效率,使模型能够专注于图像的相关部分并降低计算成本。

主要特点:

  • 端到端对象检测:DETR模型执行对象检测,而不需要区域建议,锚框或非最大抑制(NMS)等后处理步骤。输出由模型直接预测为一组对象。
  • 二分匹配损失:DETR使用独特的匹配过程,使用匈牙利算法将预测的边界框分配给地面实况对象,确保每个对象只被检测一次。
  • 检测的自我注意力:DETR模型利用自我注意力机制来建模不同对象和图像部分之间的关系,从而在复杂场景中实现更准确的检测。

优点:

  • 简化的检测管道:DETR消除了对锚框、区域建议和NMS等组件的需求,使检测过程更加简化。
  • 用于对象检测的全局上下文:与Transformer主干类似,DETR模型捕获全局依赖性,这对于在杂乱或复杂场景中检测对象是有益的。
  • 直接预测:边界框直接预测,而不依赖于区域建议或固定锚点。

缺点:

  • 收敛速度慢:由于Transformer架构的复杂性,与传统的对象检测模型相比,DETR模型需要更长的训练时间。
  • 更高的计算成本:在整个检测管道中使用transformer增加了计算开销,使得DETR模型比基于CNN的检测器更加资源密集。

基于transformer主干的对象检测模型

概述:

角色:基于transformer的主干用作对象检测模型中的特征提取器。这些模型不依赖于像ResNet或EfficientNet这样的卷积网络(CNN),而是使用transformers来提取图像特征,这些特征稍后将用于对象检测任务。

体系结构

  • 这些骨干通过使用transformers来捕获图像中的长距离依赖关系来取代CNN。Transformer层通常应用于图像补丁或token,这允许它们对图像中不同区域之间的关系进行建模。
  • 常见的模型包括ViT(Vision Transformer)Swin Transformer

关键示例:

Vision Transformer(ViT)

  • 将图像视为一系列面片,并使用Transformer对全局关系进行建模。

Swin Transformer

  • 一个分层的Transformer,在非重叠窗口上运行,使其计算效率更高,更适合下游对象检测任务。

主要特点:

  • 特征提取:主要作用是提供图像表示,这些图像表示可以馈送到下游对象检测头,如Faster R-CNN,Mask R-CNN或YOLO。
  • 全局上下文:通过利用自注意机制,基于transformer的主干捕获图像不同部分之间的全局依赖关系,允许比传统CNN更多的上下文特征提取。
  • 分层设计:一些主干,如Swin Transformer,提供多尺度特征提取,类似于CNN中的特征金字塔,这有利于检测各种尺度的对象。

优点:

  • 更好的全局上下文:变形金刚天生适合捕捉图像中的全局关系,使其成为具有复杂对象交互的场景的理想选择。
  • 可扩展性:基于transformer的主干可以很好地扩展更大的数据集和更高的计算资源,并且它们往往在更大的模型和更多的数据中表现得更好。

缺点:

  • 更高的计算成本:基于transformer的主干在计算上是昂贵的,特别是对于高分辨率图像。
  • 训练数据要求:这些模型需要大量的标记数据才能表现良好,因为它们缺乏CNN的归纳偏差。

img

5.轴对齐(水平)与旋转边界框:

img

轴对齐(水平)与旋转边界框模型对比:
img

轴对齐的边界框

定义:

轴对齐边界框(AABB)是边界框的传统形式,其中框的边缘平行于图像的坐标轴(即,水平和垂直)。每个框由其左上角和右下角定义。

产品特点:

  • 与图像轴对齐:边界框始终与图像的水平轴和垂直轴对齐,而与内部对象的方向无关。
  • 更简单的表示:由四个值表示:左上角的坐标,宽度和高度(或者左上角和右下角)。

优点:

  • 简单性:易于计算和快速处理,使其广泛用于YOLO和SSD等实时系统。
  • 效率:与旋转边界框相比,计算复杂度更低,因为模型不需要考虑方向。
  • 适用于一般对象:适用于对象大致直立或没有显著旋转的情况。

缺点:

  • 对旋转对象的拟合差:如果对象旋转,则轴对齐的框将具有大量空白空间,导致定位不准确(例如,斜向停放的汽车将导致比所需大的盒子)。
  • 密集场景不精确:在多个对象靠近或处于不同角度的场景中,轴对齐的框可能会明显重叠,从而难以区分对象。

旋转边界框

定义:

旋转边界框(也称为定向或旋转框)允许边界框的任意方向以更好地适应对象。这些框可以旋转以与图像中对象的方向对齐。

产品特点:

  • 与对象对齐:边界框与对象的方向对齐,最大限度地减少空白空间并更好地封装对象。
  • 更复杂的表示:通常由五个值表示:框的中心坐标、宽度、高度和旋转角度(相对于水平轴)。

优点:

  • 更好地适合旋转对象:旋转边界框为处于某个角度的对象提供更紧密的适合,减少了空白空间的数量并提高了定位的精度。
  • 在密集场景中改进检测:通过将盒子与对象的方向对齐,旋转的盒子减少了附近对象之间的重叠,并有助于更清楚地区分它们。

缺点:

  • 更高的计算复杂度:计算和处理旋转的边界框需要更多的计算(例如,计算旋转角度和执行交并(IoU)计算变得更加复杂)。
  • 训练更复杂:训练模型来预测边界框和旋转角度比预测轴对齐的框更具挑战性。
  • 边缘情况:如果未经适当训练,处理小角度或边缘情况的对象可能会引入噪音或错误。

使用案例:

  • 地理空间应用:在卫星图像或航空摄影中,建筑物、船舶或道路等物体通常以任意角度出现,因此旋转框对于准确定位至关重要。
  • 文本检测:在文本旋转的情况下(例如,街道标志、带有倾斜文本的文档),旋转的边界框对于准确检测和分割文本区域至关重要。

在选择轴对齐旋转边界框时,决定在很大程度上取决于对象的性质和它们所在的场景。轴对齐框更简单,计算效率更高,并且在对象直立并始终与图像轴对齐的情况下工作良好。然而,对于以任意角度旋转或放置的对象,例如在航拍图像、密集的零售车或杂乱的环境中,旋转的边界框提供了更紧密的配合,减少了不必要的背景空间,并最大限度地减少了与其他对象的重叠。虽然旋转的边界框为有角度的对象提供了更好的准确性和定位,但由于额外的旋转角度参数,它们具有更高的计算成本和复杂性。 因此,决策应基于增加的精度是否证明额外的计算开销是合理的。


在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

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

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

相关文章

c#:winform引入bartender

1、vs新建项目 ①选择Windows窗体应用(.NET Framework) 2、将bartender引入vs中 ①找到bartender的安装目录,复制Seagull.BarTender.Print.dll文件 ②粘贴到项目->bin->Debug文件,并可创建Model文件夹:为了存放…

vue 实现关键字高亮效果

vue 实现关键字高亮效果 这是啥子意思呢,就是类似于百度搜索,根据关键词搜索结果,搜索结果中,与关键词相同的字显示红色,仅此而已,没有什么大的功能。简单写一下demo。 环境 我使用的是 vue3 ts 的语法来…

初始Python篇(7)—— 正则表达式

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 正则表达式的概念 正则表达式的组成 元字符 限定符 其他字符 正则表达式的使用 正则表达式的常见操作方法 match方法的…

[DL]深度学习_扩散模型正弦时间编码

1 扩散模型时间步嵌入 1.1 时间步正弦编码 在扩散模型按时间步 t 进行加噪去噪过程时,需要包括反映噪声水平的时间步长 t 作为噪声预测器的额外输入。但是最初与图像配套的时间步 t 是数字,需要将代表时间步 t 的数字编码为向量嵌入。嵌入时间向量的宽…

【Linux】网络基本配置命令

一、使用网络配置命令 1.常用网络配置文件 1.1. /etc/hosts “/etc/hosts”文件保存着IP地址和主机名或域名的静态映射关系。当用户使用一个主机名或域名时,系统会在该文件中查找与它对应的IP地址。 [rootlocalhost ~]# cat /etc/hosts 127.0.0.1 localhost l…

如何搭建一个小程序:从零开始的详细指南

在当今数字化时代,小程序以其轻便、无需下载安装即可使用的特点,成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业,小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序,本文将为你提供一个从零开始的详细…

学习threejs,使用设置lightMap光照贴图创建阴影效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshLambertMaterial…

【前端】JavaScript中的柯里化(Currying)详解及实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是柯里化?💯柯里化的特点💯柯里化的简单示例💯通用的柯里化实现💯柯里化让代码更易读的原因&#x1f4af…

springboot 整合 rabbitMQ (延迟队列)

前言: 延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那…

Java代码操作Zookeeper(使用 Apache Curator 库)

1. Zookeeper原生客户端库存在的缺点 复杂性高:原生客户端库提供了底层的 API,需要开发者手动处理很多细节,如连接管理、会话管理、异常处理等。这增加了开发的复杂性,容易出错。连接管理繁琐:使用原生客户端库时&…

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…

【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输

前言: 本项目实现ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输。本项目包含有ESP32源码(arduino)、Android手机APP源码以及C#上位机源码,本文对其工程项目的配置使用进行讲解。实战开发,亲测无误。 AP模式,就是ESP32发出一个WIFI/热点提供给电…

从〇开始深度学习(0)——背景知识与环境配置

从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…

mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复

cd /Users/自己的用户名/Library/Application\ Support/ 目录下有 GPT\ Chrome/ Google/ GptBrowser/ GPT\ Chrome 为原来的chrome浏览器的文件存储目录. GptBrowser 为升级后chrome浏览器存储目录 书签所在的文件 Bookmarks 登录账号Login 相关的文件 拷贝到GptBrow…

圆域函数的傅里叶变换和傅里叶逆变换

空域圆域函数的傅里叶变换 空域圆域函数(也称为空间中的圆形区域函数)通常指的是在二维空间中,以原点为中心、半径为 a a a的圆内取值为1,圆外取值为0的函数。这种函数可以表示为: f ( x , y ) { 1 if x 2 y 2 ≤ …

Java基础——类型转化(强制转化)

目录 1.数字间的类型转换 (1) 隐式类型转换 (2)显式类型转换(强制类型转换) 2.类对象间的强制转换 (1) 向上转型 (2) 向下转型 将一个类型强制转换成另…

数据结构C语言描述5(图文结合)--广义表讲解与实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

23种设计模式-装饰器(Decorator)设计模式

文章目录 一.什么是装饰器设计模式?二.装饰器模式的特点三.装饰器模式的结构四.装饰器模式的优缺点五.装饰器模式的 C 实现六.装饰器模式的 Java 实现七.代码解析八.总结 类图: 装饰器设计模式类图 一.什么是装饰器设计模式? 装饰器模式&…

构建英语知识网站:Spring Boot框架解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

数据结构之数组与链表的差异

一、数组 数组(Array)是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。最简单的数据结构类型是一维数组…