YOLOv5目标检测学习(4):YOLOV5源码的文件结构解析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • ①py、cpp、java后缀的文件
    • ②md、txt、yml后缀的文件
    • ③yaml后缀的文件
  • 一、.github文件夹
    • 1.1 workflows文件夹:该文件夹通常包含GitHub Actions 的工作流程配置文件。
    • 1.2 ISSUE_TEMPLATE文件夹:该文件用于定义GitHub 仓库的 Issue 模板,可以规范化用户提交的 Issue 内容,提高 Issue 的质量和可读性。
  • 二、classify文件夹
  • 三、data文件夹
    • 3.1 hyps文件:模型训练时存放yaml格式的超参数配置文件
      • ①. hyps.scratch-high.yaml #数据增强高,适用于大型型号,即v3、v3-spp、v5l、v5x. hyps.scratch-low.yaml #数据增强低,适用于较小型号,即v5n、v5s. hyps.scratch-med.yaml #数据增强中,适用于中型型号。即v5m
    • 3.2. images文件:存放着官方给的两张测试图片
    • 3.3 . scripts #存放数据集和权重下载shell脚本
      • 这些数据集的yaml文件有什么用?
  • 四、models文件夹:神经网络构建的配置文件和一些函数
    • 4.1 hub文件夹
    • ①anchors.yaml # cOCo数据的默认锚点
    • ②yolov5m6.yaml #yolov5的版本6的神经网络配置
    • 4.2 segment文件夹
    • 4.3 同级的几个py文件
  • 五、runs文件夹:运行后输出一个模型的相关结果
  • 六、utils文件夹
  • 七、其他一级目录的文件
  • 八、总结一下


前言

先看一下

在这里插入图片描述
这里我想先介绍一些关于yolo源码中不同.后缀文件的区别:

①py、cpp、java后缀的文件

.py、.cpp 和 .java 是常见的文件后缀名,分别代表Python、C++ 和 Java 编程语言的源代码文件。

.py 文件:是Python编程语言的源代码文件后缀名。Python源代码文件通常以 .py 结尾,可以使用Python解释器来执行这些文件中的代码。

.cpp 文件:是C++编程语言的源代码文件后缀名。C++源代码文件通常以 .cpp 结尾,可以使用C++编译器将这些文件编译成可执行程序。

.java 文件:是Java编程语言的源代码文件后缀名。Java源代码文件通常以 .java 结尾,可以使用Java编译器将这些文件编译成字节码文件,然后在Java虚拟机上运行。

②md、txt、yml后缀的文件

.md、.txt 和 .yml 是常见的文件后缀名,分别代表Markdown、文本文件和YAML文件。这些文件后缀名通常用于标识不同类型的文本文件,让计算机系统和应用程序能够识别并正确处理这些文件。

.md 文件:是Markdown文件的后缀名。Markdown是一种轻量级标记语言,用于简单而直观地排版文本,常用于编写文档、博客文章、README 文件等。Markdown文件通常以 .md 结尾,可以使用各种Markdown编辑器或在线编辑器来编辑和预览这些文件。

.txt 文件:是文本文件的后缀名。文本文件是一种纯文本格式的文件,通常包含人类可读的文本内容,不包含格式化样式或特殊的编码。文本文件可以使用任何文本编辑器打开和编辑,是最简单的文件格式之一。

.yml 文件:是YAML文件的后缀名。YAML是一种人类可读的数据序列化格式,常用于配置文件、数据传输等场景。YAML文件通常以 .yml 或 .yaml 结尾,可以使用各种编程语言的YAML解析库来读取和处理这些文件。

③yaml后缀的文件

.yaml 文件是一种常见的文件格式后缀名,代表 YAML(YAML Ain’t Markup Language)文件。YAML是一种人类可读的数据序列化格式,旨在成为一种简洁、直观的数据表示方式,适用于配置文件、数据传输、文档等多种应用场景。

YAML 文件通常以 .yaml 或 .yml 结尾,使用一种类似于缩进的方式来表示数据结构,包括标量值、列表、字典等。YAML 文件常用于配置文件、数据传输、API 接口定义等场景,被广泛应用于软件开发和系统管理中。许多编程语言都提供了对 YAML 文件的解析和生成库,方便开发人员读取和处理 YAML 格式的数据。

一、.github文件夹

在一个GitHub仓库中,.github文件夹通常用于存放与GitHub仓库管理和GitHub Actions 相关的配置文件和设置。
在这里插入图片描述
具体来说,.github文件夹中可能包含以下内容:

1.1 workflows文件夹:该文件夹通常包含GitHub Actions 的工作流程配置文件。

1.2 ISSUE_TEMPLATE文件夹:该文件用于定义GitHub 仓库的 Issue 模板,可以规范化用户提交的 Issue 内容,提高 Issue 的质量和可读性。

总的来说,.github文件夹中的内容主要用于规范化GitHub 仓库的管理流程,提高团队协作效率,以及利用GitHub Actions 实现自动化构建和部署。这些配置文件和设置有助于提升项目的质量和可维护性。

所以这个文件夹一般来说不重要,可以不看。

二、classify文件夹

三、data文件夹

在这里插入图片描述
data文件夹主要是存放一些超参数的配置文件(如.yaml文件),是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称;还有一些官方提供测试的图片。

YOLOv5有大约30个超参数用于各种训练设置。更好的初始猜测会产生更好的最终结果,因此在演化之前正确初始化这些值很重要。
如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。不过要注意,自己的数据集不建议放在这个路径下面,建议把数据集放到YOLOv5项目的同级目录下面。

详解:

3.1 hyps文件:模型训练时存放yaml格式的超参数配置文件

①. hyps.scratch-high.yaml #数据增强高,适用于大型型号,即v3、v3-spp、v5l、v5x. hyps.scratch-low.yaml #数据增强低,适用于较小型号,即v5n、v5s. hyps.scratch-med.yaml #数据增强中,适用于中型型号。即v5m

比如med文件:
在这里插入图片描述
lr0:初始学习率,控制模型参数的更新速度。在这个示例中,初始学习率为0.01。
lrf:OneCycleLR学习率的最终值,通常是初始学习率乘以一个系数。在这里,最终学习率为初始学习率的10倍。
momentum:SGD动量或Adam优化器的beta1参数,用于加速优化过程。
weight_decay:优化器的权重衰减参数,用于控制模型的复杂度。
warmup_epochs:预热训练的轮数,用于在训练初期逐渐增加学习率。
box、cls、obj:损失函数中不同部分的权重,用于平衡不同损失项的重要性。
iou_t:IoU训练阈值,用于目标检测中的真实框和预测框匹配。
mosaic、mixup、flipud等:数据增强技术的概率,用于增加训练数据的多样性。

这些超参数是干嘛的呢?

这些超参数通常用于训练深度学习模型时进行调优和优化,以影响模型的训练过程和性能。以下是这些超参数在训练过程中的作用和含义:
学习率(learning rate):控制模型参数更新的速度,过大的学习率可能导致模型不稳定,而过小的学习率可能导致训练过慢或陷入局部最优解
动量(momentum):对于优化算法(如SGD、Adam)来说,动量可以帮助加速收敛过程,避免陷入局部最优解。
权重衰减(weight decay):用于控制模型的复杂度,防止过拟合。通过惩罚较大的权重值,可以使模型更加简单且泛化能力更强。
损失函数中不同部分的权重:在多任务学习或复杂损失函数中,不同部分的权重可以调整损失函数中各项的重要性,以平衡不同损失项的影响。
数据增强技术的概率:数据增强可以增加训练数据的多样性,提高模型的泛化能力。通过调整数据增强的概率,可以控制不同的数据增强技术在训练中的应用程度。
预热训练轮数(warmup epochs):在训练初期逐渐增加学习率,有助于稳定训练过程,避免模型在初始阶段出现不稳定的情况。

3.2. images文件:存放着官方给的两张测试图片

在这里插入图片描述
在这里插入图片描述

公交车和齐达内

3.3 . scripts #存放数据集和权重下载shell脚本

在这里插入图片描述
①. Argoverse.yaml #Argoverse数据集的配置文件
②. coco.yaml # cOCO数据集配置文件
③. coco128.yaml# cOCo128数据集配置文件
④GlobalWheat2020.yaml 数据集
⑤imageNet.yaml 数据集
⑥object365.yaml
⑦SKU-110K
⑧VisDrone.yaml
⑨VOC.yaml
⑩Xview.yaml

这些基本就是一些数据集的配置文件,下面介绍一下这些数据集:

Argoverse:Argoverse数据集是专为自动驾驶领域设计的数据集,包含了大规模的自动驾驶场景数据,如高清地图、传感器数据、车辆轨迹等。这些数据可用于自动驾驶系统的训练、测试和评估。

COCO:COCO数据集是一个用于目标检测、图像分割和关键点检测的大规模数据集,包含了超过33万张图像和80个不同类别的物体实例标注。

COCO128:COCO128是COCO数据集的一个子集,包含了128个类别的物体实例标注,适用于小规模目标检测和分类任务。

GlobalWheat2020:Global Wheat Detection 2020数据集是专为小麦检测任务设计的数据集,包含了各种小麦植株的图像和标注信息,用于推动农业领域的图像识别技术。

ImageNet:ImageNet是一个用于图像分类任务的大规模数据集,包含了超过1400万张图像和1000个类别,是深度学习领域中常用的基准数据集之一。

Object365:Object365数据集包含365个类别的目标检测数据,用于更广泛的目标检测任务和多类别物体识别。

SKU-110K:SKU-110K数据集是一个用于商品识别和检测的数据集,包含了11万个SKU(库存单位)的商品图像和标注信息。

VisDrone:VisDrone数据集是专为无人机视觉任务设计的数据集,包含了各种场景下的无人机图像和标注信息,用于目标检测、跟踪和行为分析。

VOC:VOC数据集是一个常用的目标检测和图像分割数据集,包含了20个类别的物体标注信息,用于评估目标检测和分割算法的性能。

xView:xView数据集是一个用于灾害响应和地理信息分析的数据集,包含了各种自然灾害场景的高分辨率图像和标注信息,用于灾害监测和应急响应。

这些数据集的yaml文件有什么用?

这些数据集的 YAML 文件通常用于存储数据集的配置信息,包括数据集的路径、类别标签、数据预处理方式等。具体来说,YAML 文件在计算机视觉领域的数据集中扮演着以下几个重要的作用:

数据集配置信息:YAML 文件可以包含数据集的元数据信息,如数据路径、类别标签、数据划分方式等。这些信息对于加载和处理数据集非常重要。

数据预处理参数:YAML 文件可以定义数据预处理的参数,如图像大小、归一化方式、数据增强方式等。这些参数在训练和评估模型时需要用到。

训练参数设置:有时候,YAML 文件还可以包含训练过程中的超参数设置,如学习率、优化器类型、批量大小等。这些参数可以帮助用户灵活地调整训练过程。

数据集统计信息:YAML 文件中可能还包含数据集的统计信息,如数据样本数量、类别分布情况等。这些信息有助于用户了解数据集的特点。

四、models文件夹:神经网络构建的配置文件和一些函数

4.1 hub文件夹

在这里插入图片描述
models是模型文件夹。里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x.
从名字就可以看出,这几个版本的大小。他们的检测速度分别都是从快到慢,但是精确度分别是从低到高。如果训练自己的数据集的话就需要修改这里面相对应的yaml文件来训练自己模型。

详解:

. hub#存放yolov5各版本目标检测网络模型配置文件
. anchors.yaml # cOCo数据的默认锚点
. yolov3-spp.yaml # 带spp的yolov3. yolov3-tiny.yaml #精简版yolov3. yolov3.yaml # yolov3
. yolov5-bifpn.yaml#带二值fpn的yolov5l. yolov5-fpn.yaml # 带fpn的yolov5
. yolov5-p2.yaml # (P2,P3,P4,P5)都输出,宽深与large版本相同,相当于比large版本能检测更小物体. yolov5-p34.yaml #只输出(P3,P4),宽深与small版本相同,相当于比small版本更专注于检测中小物体. yolov5-p6.yaml #(P3,P4,P5, P6)都输出,宽深与large版本相同,相当于比large版本能检测更大物体
. yolov5-p7.yaml #(P3,P4,P5,P6,P7)都输出,宽深与large版本相同,相当于比large版本能检测更更大物体. 
yolov5-panet.yaml # 带PANet的yolov5l
. yolov5n6.yaml #(P3,P4,P5,P6)都输出,宽深与nano版本相同,相当于比nano版本能检测更大物体,anchor已预定义。 yolov5s6.yaml #(P3, P4,P5,P6)都输出,宽深与small版本相同,相当于比small版本能检测更大物体,anchor已预定义. yolov5m6.yaml#(P3, P4,P5,P6)都输出,宽深与middle版本相同,相当于比middle版本能检测更大物体,anchor已预定义.
yolov5l6.yaml #(P3,P4,P5,P6)都输出,宽深与large版本相同,相当于比large版本能检测更大物体,anchor已预定义
推测是作者做实验的产物
yolov5x6.yaml#(P3,P4,P5,P6)都输出,宽深与Xlarge版本相同,相当于比Xlarge版本能检测更大物体,anchor已预定义. yolov5s-ghost.yaml # backbone的卷积换成了GhostNet形式的yolov5s,anchor已预定义
.yolov5s-transformer.yaml # backbone最后的C3卷积添加了Transformer模块的yolov5s,anchor已预定义

①anchors.yaml # cOCo数据的默认锚点

anchors.yaml文件通常用于目标检测任务中的目标检测器(如YOLO、Faster R-CNN等)中,用于定义目标检测器的anchor boxes(锚框)的大小和比例。锚框是一种预定义的边界框,用于在图像中生成候选目标区域,以便目标检测器可以预测目标的位置和类别。

在anchors.yaml文件中,通常会包含以下信息:
Anchor Box的数量:定义了目标检测器使用的anchor boxes的数量。
Anchor Box的尺寸和比例:指定每个anchor box的宽度、高度以及宽高比,通常以像素为单位。
Anchor Box的缩放因子:有时候还会包含anchor box的缩放因子,用于在不同尺度的特征图上生成不同大小的anchor boxes。

②yolov5m6.yaml #yolov5的版本6的神经网络配置

# Parameters
nc: 80 # number of classes
depth_multiple: 0.67 # model depth multiple
width_multiple: 0.75 # layer channel multiple
anchors:- [19, 27, 44, 40, 38, 94] # P3/8- [96, 68, 86, 152, 180, 137] # P4/16- [140, 301, 303, 264, 238, 542] # P5/32- [436, 615, 739, 380, 925, 792] # P6/64# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2[-1, 1, Conv, [128, 3, 2]], # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]], # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [768, 3, 2]], # 7-P5/32[-1, 3, C3, [768]],[-1, 1, Conv, [1024, 3, 2]], # 9-P6/64[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]], # 11]# YOLOv5 v6.0 head
head: [[-1, 1, Conv, [768, 1, 1]],[-1, 1, nn.Upsample, [None, 2, "nearest"]],[[-1, 8], 1, Concat, [1]], # cat backbone P5[-1, 3, C3, [768, False]], # 15[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, "nearest"]],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 3, C3, [512, False]], # 19[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, "nearest"]],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 3, C3, [256, False]], # 23 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 20], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 26 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 16], 1, Concat, [1]], # cat head P5[-1, 3, C3, [768, False]], # 29 (P5/32-large)[-1, 1, Conv, [768, 3, 2]],[[-1, 12], 1, Concat, [1]], # cat head P6[-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge)[[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6)]

Parameters:这部分包含了模型的一些参数设置,如类别数量(nc: 80)、模型深度倍数(depth_multiple: 0.67)、层通道倍数(width_multiple: 0.75)以及每个输出层对应的锚框信息。在这里,每个输出层都有自己的一组锚框,用于目标检测。

YOLOv5 v6.0 backbone:这部分描述了模型的主干网络(backbone),包括了一系列卷积层(Conv)、C3块(C3)和SPPF块(SPPF),用于提取图像特征

YOLOv5 v6.0 head:这部分描述了模型的头部结构(head),包括了一系列卷积层(Conv)、上采样层(nn.Upsample)、拼接层(Concat)和C3块(C3),用于生成目标检测的输出

Detect:最后一部分是Detect层,用于在不同尺度的特征图上进行目标检测,生成最终的检测结果。这里的锚框信息会被传递给Detect层,用于目标检测。

整个代码段描述了一个完整的目标检测模型的结构,包括了主干网络、头部结构和检测层的设置。

4.2 segment文件夹

在这里插入图片描述

4.3 同级的几个py文件

在这里插入图片描述
. int.py#空的,里面什么都没有

. common.py #放的是一些网络结构的定义通用模块,包括autopad、Conv、DWConv、TransformerLayer等,这个文件比较复杂,总共一千多行,后面再慢慢分析。

. experimental.py#实验性质的代码,包括MixConv2d、跨层权重Sum等

. tf.py # tensorflow版的yolov5代码

. yolo.py # yolo的特定模块,包括BaseModel,DetectionModel,ClassificationModel,parse_model等

这几个py文件其实都很有深意,后面专门写一篇来进行分析。

五、runs文件夹:运行后输出一个模型的相关结果

在这里插入图片描述
这里由于我还没有开始训练一个自己的模型,因此就暂时不写这部分的内容,等后续再补充吧

六、utils文件夹

在这里插入图片描述
utils存放的是工具类的函数,里面有loss函数, metrics函数, plots函数等等。
详解:
●aws #恢复中断训练, 和aws平台使用相关的工具
●flask_ rest api #和flask相关的工具
●google
app engine #和谷歌app引擎相关的工具
●loggers #日志打印.
● init_ .py # notebook的初始化, 检查系统软件和硬件
●activations.py #激活函数
●augmentations #存放各种图像增强技术
●autoanchor.py # 自动生成锚框
●autobatch.py #自动生成批量大小
●benchmarks.py #对模型进行性能评估(推理速度和内存占用上的评估)
●callbacks.py #回调函数,主要为logger服务
●datasets # dateset和dateloader定义代码
,downloads.py #谷歌云盘内容下载
●general.py #全项目通用代码,相关实用函数实现
●loss.py #存放各种损失函数
●metrics.py #模型验证指标,包括ap,混淆矩阵等
●plots.py #绘图相关函数,如绘制loss、 ac曲线, 还能单独将一 个bbox存储为图像
,torch
_utils.py #辅助函数

七、其他一级目录的文件

在这里插入图片描述
.dockerignore # docker的ignore文件
.gitattributes#用于将.ipynb后缀的文件剔除GitHub语言统计.
.gitignore# docker的ignore文件
.CONTRIBUTING.md # markdown格式说明文档
. detect.py#目标检测预测脚本
. export.py #模型导出
. hubconf.py # pytorch hub相关
.LICENSE#证书
README.md # markdown格式说明文档
. requirements.txt #可以通过pip install requirement进行依赖环境下载
. setup.cfg # 项目打包文件
. train.py#目标检测训练脚本
. tutorial.ipynb #目标检测上手教程. val.py #目标检测验证脚本
. yolov5s.pt # coco数据集模型预训练权重,运行代码的时候会自动从网上下载

这里面最重要的几个文件是:
①推理部分:detect.py
②训练部分:train.py
③验证部分:val.py

由于代码量比较大,所以我会放到下一节进行分析。

八、总结一下

我认为yolov5的源码基本以两个部分的文件为核心,一个是.yaml文件,另一个是.py文件
yaml文件一个是关于数据集的配置,一个是关于神经网络结构的配置。
.py文件一个是关于一些工具类的配置,一个是关于推理、训练、验证方面的配置

后续几篇文章将深入解析这些文件的内容:

①推理部分:detect.py
②训练部分:train.py
③验证部分:val.py
④配置文件:yolov5s.yaml‘
⑤网络结构之:yolo.py
⑥网络结构之:common.py

为了完成一个深度学习目标检测的全过程,会按照以下顺序进行:

①配置部分(yolov5s.yaml):用于确定yolov5的网络结构和参数,包括模型的架构、数据预处理方式、训练参数等重要信息

②工具部分(yolo.py、common.py):提供一些函数,用于辅助后续部分,包括定义网络结构、损失函数、激活函数等

③训练部分(train.py):首先,使用训练部分的代码(train.py)来训练模型。在训练过程中,模型会根据训练数据集进行参数更新,以便更好地识别目标物体。

④验证部分(val.py):在训练过程中,通常会使用验证部分的代码(val.py)来评估模型在验证数据集上的性能。这有助于监控模型的泛化能力和避免过拟合。

⑤推理部分(detect.py):最后,在完成训练和验证后,可以使用推理部分的代码(detect.py)来对新的图像或视频进行目标检测。推理部分通常用于实际应用场景中使用训练好的模型进行预测。

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

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

相关文章

RHEL9 DNF/YUM仓库管理软件包

DNF/YUM仓库管理软件包 一个基于RPM包的软件包管理器能够从指定的服务器自动下载RPM包并且安装,自动处理依赖性关系,并且一次性安装所有依赖的软件包C/S模式 Server服务端提供RPM软件包与数据库文件repodataClient客户端使用dnf仓库 常用组合 组合参…

解决Klipper下位机ID获取失败问题

使用硬件: 上位机:必趣派,版本CB1_Debian11_Klipper_kernel5.16_20230303 下位机:八爪鱼STM32F407 问题:上位机获取下位机ID失败。 解决:咨询DIY群友,也对这个问题不太了解。我调试过程中&…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-1、线条平滑曲面(原始图形)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

【vivado】 clock wizard 时钟IP

一、前言 MMCM和PLL是在FPGA设计中不可避免需要使用到的时钟资源,对于其功能及使用方法的理解是正确进行FPGA设计的前提。 二、Xilinx 时钟 IP配置 vivado中使用时钟向导(Clocking Wizard)配置时钟IP核,其框图如下: clk_in 输入时钟&#…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的的商品标签识别系统(Python+PySide6界面+训练代码)

摘要:开发商品标签识别系统在提升零售业运营效率和顾客购物体验中发挥着关键作用。本篇博客详细阐述了如何应用深度学习技术构建此类系统,并提供了完整的代码实现。该系统基于高效的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5进行了性能对比&…

*Javaweb -- MyBatis*

一:介绍: 1.MyBatis是一个优秀的 ①持久层 ②框架,用于简化JDBC的开发! ①:JAVAEE有三层的结构:表现层, 业务层, 持久层. 表现层代表的是页面的展示,业务层则指的是对于相关逻辑的处理, 而持久层, 指的则是对于数据进行持久化,保存在数据库当中. 持久层具体的来说就是负责…

数字孪生+工业互联网标识解析,打造智能工厂新标杆!

当前,工业4.0浪潮愈发澎湃,加快数字化、网络化、智能化发展成为了制造业转型升级的必然要求。 51WORLD基于数字孪生技术与工业互联网标识解析体系,打造了一个集协同化供应、个性化定制、智能化生产于一体的全连接产线孪生平台(以…

antv L7结合高德地图使用dome1

antv L7结合高德地图使用 一、设置底图二 、添加antv L7 中要使用的dome1. 安装L7 依赖2. 使用的dome 、以下使用的是浮动功能3. 运行后显示 自定义样式修改1. 设置整个中国地图浮动起来 自定义标注点1. 静态标注点2. 动态标注点(点位置需要自己改)3. 完…

Python笔记:函数

Python函数定义规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。return [表达式] 结束函数,选择性地返回一个值给调用方,不带表…

Windows系统中安装docker及镜像加速的配置

文章目录 一.安装wsl二.下载docker desktop三.更换Docker镜像引用出处 一.安装wsl 在安装wsl之前,先在Windows中配置WSL环境,步骤很简单,按照以下文章进行 Windows10/11配置WSL(Ubuntu)环境 以管理员身份打开Windows PowerShell,执行以下命…

模型驱动架构MDA

MDE 模型驱动工程(MDE, Model-Driven Engineering)是软件工程的一个分支,它将模型与建模拓展到软件开发的所有方面,形成一个多维建模空间,从而将工程活动建立在这些模型的映射和转换之上。[1] MDE的基本原则是将模型视…

2.Windows平台Python的下载、安装和配置环境变量——跟老吕学Python编程

2.Windows平台Python的下载、安装和配置环境变量——跟老吕学Python编程 一、下载Windows版Python1.Python官网2.Windows版Python下载网址 二、在Windows安装Python1.全自动安装Python(不推荐)1.1 启动安装1.2 安装进度1.3 安装完成1.4 查看版本 2.自定义…

【GO】HTTP标准库1 - http协议基础知识

目录 一 http协议 1 http协议 2 http request 3 请求方法 4 URL 5 协议版本 6 请求头 7 Content-type 9 POST与GET区别 10 HTTP Response 11 常见的状态与话术 12 HTTP 响应头 13 完整的HTTP响应 14 HTTPS 一 http协议 1 http协议 HTTP(HyperText Tra…

Kubeadm部署K8s

Kubeadm部署K8s 集群规划: Master节点规划: Node节点规划: 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘…

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关(XD-COPNm20)在智能领域,变流器的应用非常广泛,变流器一般会采用CANopen协议。现场采用台达的变流器(支持CANopen协议)作为CANopen从站,S7-1500系列PLC做主站,…

表单进阶(3)-上传文件和隐藏字段

上传文件&#xff1a;<input type"file"> 隐藏字段&#xff1a;<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled&#xff1a;<button disabled"disabled">注册</bu…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理(Wireshark抓包分析)

继续蓝牙系列的研究。 在上篇博客&#xff0c;通过阅读BTStack的源码&#xff0c;大体了解了其框架&#xff0c;对于任何一个BTStack的应用程序都有一个main函数&#xff0c;这个main函数是统一的。这个main函数做了某些初始化之后&#xff0c;最终会调用到应用程序提供的btst…

【嵌入式】嵌入式系统稳定性建设:最后的防线

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…

一文带你了解MySQL之B+树索引的原理

前言 学完前面我们讲解了InnoDB数据页的7个组成部分&#xff0c;知道了各个数据页可以组成一个双向链表&#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表&#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录&#xff0c;在通过主键查…

蓝桥杯真题讲解:子矩阵(二维滑动窗口)

蓝桥杯真题讲解&#xff1a;子矩阵&#xff08;二维滑动窗口&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;子矩阵&#xff08;二维滑动窗口&#xff09; 二、正解代码 //二维单调队列 #include<bits/stdc.h> #define endl \n #def…