制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)

一、缺陷检测任务

缺陷检测的任务通常可以分为三个主要阶段,包括缺陷分类、缺陷定位和缺陷分割。

1.缺陷分类

缺陷分类是检测过程的第一步,目的是将检测到的缺陷区域分类为不同的类别,通常是根据缺陷的性质或类型进行分类。分类的类别包括异色、空洞和经线。这一阶段的目标是确定缺陷的类型,以便后续的处理。

2.缺陷定位

缺陷定位是在确定缺陷的类型的基础上,进一步标注出缺陷在图像中的准确位置。这意味着需要在图像中识别出缺陷所在的区域,通常以边界框或者图像中心点的相对位置进行表示。缺陷定位为后续的处理提供了关键信息,使得可以进一步分析缺陷的尺寸、形状和位置。

3.缺陷分割:

缺陷分割是逐像素地将缺陷从背景中分离出来,形成缺陷区域的精确掩膜。通常涉及使用图像分割算法,如语义分割或实例分割,以将缺陷与周围背景分开。这允许更详细的分析和处理缺陷区域。

二、缺陷检测方法

1. 有监督方法

有监督方法通常需要带有标签的训练数据,这些标签包括缺陷的类别、位置等信息。在这种方法中,模型在训练阶段使用带有标签的数据来学习缺陷的特征和模式。这意味着模型知道什么是正常和异常的图像区域,并且可以进行分类、定位和分割缺陷。有监督方法通常在数据标注充分的情况下效果很好,但需要大量标记的数据。

2. 无监督方法

无监督方法不依赖于带有标签的训练数据,而是依赖于对正常数据的学习。模型通过学习正常区域的特征和分布来检测异常。这种方法在处理大规模数据或者缺乏带有标签的数据时非常有用。无监督方法可以自动检测与正常情况不符的异常情况,但对于不同类型的缺陷可能表现不如有监督方法。

3.算法比较

选择哪种方法通常取决于数据的可用性和问题的性质。如果有足够的标记数据和明确定义的缺陷类别,有监督方法通常是更可靠的选择。无监督方法可以用于发现未知的异常情况,但可能会产生误报,因为它无法准确区分不同类型的缺陷。
有时候,也可以结合这两种方法,例如使用有监督方法来识别已知类型的缺陷,并使用无监督方法来检测未知类型的异常。这种混合方法可以提高缺陷检测的鲁棒性

三、识别网络

1. 目标识别网络

目标检测是计算机视觉领域中的核心任务,它旨在确定图像中目标的位置和类别。基于深度学习的目标检测方法通常可分为两大类:两阶段(two-stage)网络和一阶段(one-stage)网络,它们在结构和工作原理上有一些关键差异。

  1. 两阶段网络(以Faster R-CNN为代表):
    两阶段网络的主要特点是分为两个阶段:首先,生成候选框(即提出框或区域建议),然后在这些候选框上进行目标检测。这些网络通常包括两个主要组件:区域提出网络(Region Proposal Network,RPN)和目标检测网络。RPN负责生成可能包含目标的候选框,并将它们提供给目标检测网络,进一步进行分类和定位。两阶段网络通常在准确性上表现出色,特别是对于小目标或密集目标的检测。然而,其计算复杂度较高,速度相对较慢。

  2. 一阶段网络(以SSD或YOLO为代表):
    一阶段网络直接利用深度卷积神经网络中提取的特征图来同时预测目标的位置和类别,而无需额外的候选框生成步骤。这些网络通常更快速,适用于实时应用,但在目标小而密集的情况下可能会失去一些准确性。SSD(Single Shot MultiBox Detector)和 YOLO(You Only Look Once)是一阶段网络的代表,它们通过密集地分析图像中的多个位置来检测目标。

选择两阶段还是一阶段网络通常取决于应用需求。两阶段网络在准确性上具有优势,适用于要求高准确性的任务,例如医学影像或自动驾驶。一阶段网络更适合要求实时性能的应用,如实时物体检测和跟踪。此外,还有一些改进型的网络结构和混合型方法,旨在兼顾准确性和速度,以满足不同的应用场景。

2.小目标检测问题

在工业表面缺陷检测中,面临的最大的问题是部分缺陷偏小,因为小尺寸的缺陷通常在图像中具有低信噪比,难以精确检测,引入以下的几种办法,可以对小目标检测进行优化:

  1. 特征金字塔结构:
    特征金字塔结构允许网络在不同尺度下检测目标,从而提高多尺度检测的准确率。这可以通过在网络中引入多尺度的特征图来实现,使网络能够同时处理不同大小的目标。

  2. 图像尺寸放大:
    增加图像尺寸可以使小目标变得更大,从而提高它们的可检测性。这通常需要在训练和测试期间对图像进行插值或重采样,以增加分辨率。然而,需要注意的是,这可能会增加计算成本。

  3. ROI Align替代ROI Pooling:

ROI Align 是一种精确的感兴趣区域(ROI)池化方法,可以在较小的目标上提供更准确的特征。与传统的ROI Pooling 不同,ROI Align 考虑了像素级的插值,提高了对小目标的精确性。

  1. 超分辨率技术:
    使用生成对抗网络(GAN)或其他超分辨率技术,可以将小目标的特征图增强到更高分辨率。这可以帮助网络更好地捕捉小目标的特征,从而提高检测准确性。

四、分割网络

分割网络在表面缺陷检测任务中是将任务转化为对缺陷与正常区域进行语义分割,甚至实例分割。这种方法不仅可以提供精细的缺陷区域分割,还能够获取缺陷的位置、类别以及多个几何属性,如长度、宽度、面积、轮廓、中心等。FCN 和 Mask R-CNN常被应用在表面缺陷中:

1.FCN (Fully Convolutional Networks)

FCN 是一种语义分割方法,它将卷积神经网络(CNN)扩展为全卷积结构,以便能够对输入图像的每个像素进行标签预测。这使得它适用于像表面缺陷检测这样的任务,其中需要对每个像素进行分类,确定它属于正常区域还是缺陷区域,以及缺陷的类别。FCN方法在图像分割领域具有较好的性能,并且可以用于多类别和多尺度的分割任务。

2. Mask R-CNN

Mask R-CNN 是一种实例分割方法,它是 Faster R-CNN 的扩展,除了检测目标,还能够生成每个目标的精确分割掩膜。这使其在缺陷检测任务中非常有用,因为它不仅可以提供缺陷的位置和类别,还能够提供每个缺陷的精确分割掩膜。Mask R-CNN 可以应对多个实例的分割,并且在处理小目标时也表现出色。

3. Yolov5/8实例分割:

在YOLOv5/8中,实例分割方法与传统的实例分割方法(Mask R-CNN)存在明显区别。它采用了不同的方法,以实现实例分割的功能。

主要区别包括:

  • 输入特征图选择:
    YOLOv5/8中,实例分割采用了Head1中尺寸最大的特征图作为Mask分支的输入。这个选择通常有助于更好地保留目标的细节信息。

  • Mask 生成:
    通过 proto_pred 卷积层的处理,YOLOv5/8生成了形状为 (B, mask_channel, H, W) 的 mask_feature。这些掩膜特征用于后续的实例分割。

  • 检测框预测分支:
    YOLOv5/8的检测框预测分支与标准的YOLOv5 Head结构基本相同,但它在特征图通道上增加了参数,用于生成实例分割所需的掩膜信息。这些参数的数量与 proto_pred 输出的 mask_channel 相同。

  • 分割过程:
    在分割过程中,首先使用非极大值抑制(NMS)来筛选最终的检测框。接下来,从这些检测框中选择相应数量的掩模参数(coeffs),然后将它们与 mask_feature 相乘并加权,以获得最终的实例分割结果。

五、算法选择

1.使用场景分析

在制造业中,小缺陷的检测是一个具有挑战性的问题,因为它们通常具有较少的像素覆盖,缺乏足够的关注和语义信息。现有的卷积检测方法忽视了上下文的长程依赖,并且缺乏自适应融合策略来利用异构特征。
深度学习方法在检测小缺陷时通常表现较差,因为少数像素的覆盖缺乏细节,如异常值、边缘和纹理,导致语义不足和感知困难。此外,来自实际工业环境的图像通常受到背景光反射、模糊和污垢等污染,使得难以从背景中区分轮廓并专注于小缺陷。

2.YoloV8

2.1.算法简介

Yolov8是一个SOTA模型,它建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性,使其成为实现目标检测、图像分割、姿态估计等任务的最佳选择。其具体创新点包括一个新的骨干网络、一个新的Ancher-Free检测头和一个新的损失函数,可在CPU到GPU的多种硬件平台上运行。
Yolov8各种指标全面超越现有对象检测与实例分割模型,Yolov8主要借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,其本身创新点不多,偏重在工程实践上,具体创新如下:

  1. 提供了一个全新的SOTA模型(包括P5 640和P6 1280分辨率的目标检测网络和基于YOLACT的实例分割模型)。并且,基于缩放系数提供了N/S/M/L/X不同尺度的模型,以满足不同部署平台和应用场景的需求。
  2. Backbone:同样借鉴了CSP模块思想,不过将Yolov5中的C3模块替换成了C2f模块,实现了进一步轻量化,同时沿用Yolov5中的SPPF模块,并对不同尺度的模型进行精心微调,不再是无脑式一套参数用于所有模型,大幅提升了模型性能。
  3. Neck:继续使用PAN的思想,但是通过对比Yolov5与Yolov8的结构图可以看到,Yolov8移除了1*1降采样层。
  4. Head部分相比Yolov5改动较大,Yolov8换成了目前主流的解耦头结构(Decoupled-Head),将分类和检测头分离,同时也从Anchor-Based换成了Anchor-Free。
  5. Loss计算:使用VFL Loss作为分类损失(实际训练中使用BCE Loss);使用DFL Loss+CIOU Loss作为回归损失。
    标签分配:Yolov8抛弃了以往的IoU分配或者单边比例的分配方式,而是采用Task-Aligned Assigner正负样本分配策略。

2.2.算法改进

在表面缺陷检测中测试,现有的Yolov8的目标检测与目标分割对小目标的处理并不理想,但引入BIFPN层之后,算法在小目标检测方面有了很大的提升。BIFPN是Google Brain《EfficientDet: Scalable and Efficient Object Detection》提出。

BIFPN原理介绍
BIFPN是一种特征金字塔网络,它能够自适应地融合不同尺度的特征并进行上下文信息的传递。通过使用BIFPN,可以提高Yolov8对
小目标的检测精度。

  1. 特征金字塔网络(FPN)
    特征金字塔网络是一种常用的目标检测算法中的模块,它通过自上而下和自下而上的方式融合来自不同层级的特征。这种设计可以提供多尺度的特征表示,从而使得算法能够在不同大小的目标上进行检测。
  2. 双向特征金字塔网络(BiFPN)
    传统的特征金字塔网络在融合特征时只使用了上采样和下采样的操作,而没有引入跳跃连接。受到残差网络的启发,BiFPN引入了跳跃连接,使特征在不同层级之间可以直接传递。这种设计可以更好地保留高层级和低层级特征的语义信息。
  3. 加权双向特征金字塔网络(BIFPN)
    BIFPN在BiFPN的基础上进行了改进,引入了特征金字塔网络中的特征融合操作。具体而言,BIFPN在每个融合节点处引入了一个权重系数,用于控制特征的融合程度。这种设计可以使得网络能够更灵活地适应不同大小目标的检测需求。

下图表示各类网络模型的结构:
在这里插入图片描述
( a ) FPN 引入自上而下的路径来融合从 3 级到 7 级(P3 ‑ P7)的多尺度特征;
( b ) PANet 在 FPN 之上添加了一个额外的自下而上的路径;
( c ) NAS‑FPN 使用神经架构搜索找到不规则的特征网络拓扑,然后重复应用相同的块;
( d ) BiFPN 双向跨尺度连接和加权特征融合,具有更好的准确性和效率权衡。

3.CANet网络

从现有的样本分析,能满足当前的应用场景,可以找到CANet这篇论文:CANet: Contextual Information and Spatial Attention Based Network for Detecting Small Defects in Manufacturing Industry。
CANet是为制造业表面小缺陷而设计的网络。CANet提出发两个针对小目标的解决优化方案:
1、提出了一种基于注意力和上下文建模的网络架构,名为CANet,用于准确检测工业检测中的小缺陷。该网络通过建立远程依赖性和自适应融合来增强特征感知能力,并通过空间注意力编码器和上下文块解码器来重建远程依赖性和聚合上下文信息;
2、提出了一种改进的特征金字塔网络(LaplacianFPN),通过考虑不同层级的多尺度特征的一致性和异质性,实现了非破坏性信息融合。这种融合策略解决了在利用纹理和语义信息检测小缺陷时出现的特征冲突问题。

3.1、研究方法:

CANet提出了一种基于上下文信息和空间注意力的网络,利用空间长程依赖性和上下文信息进行非破坏性多尺度特征融合,来增强图像中小尺寸缺陷的感知能力。如图1所示,网络主要由4个阶段的特征提取器组成,每个阶段由一个CA块构成。在每个CA块中,使用空间注意力编码器(SAE)和上下文块解码器(CBD)来增强对小缺陷的感知能力。然后,将输出馈送到LaplacianFPN,其中使用一致性和异质性融合(CH)模块来自适应融合级别相邻的特征。最后,输出的共享特征通过标准的RPN和RCNN头部进行检测。
在这里插入图片描述
空间注意力编码器(SAE)部分如图2所示,给定一个输入特征X,SAE 首先执行步幅为 2 的平均池化以缩小空间维度。然后通过简化的多重对查询Q、键K和值V执行空间编码头注意,为了实现高效的空间编码,并且降低计算复杂度,本文通过扩展从均匀分布采样的向量p 来生成查询矩阵,而不是经验注意力中特征的卷积。然后,重新映射的Q、K和V都被展平并馈入注意力编码器。注意力编码器通过缩放的点积权重将查询和一组键值对映射到输出。
在这里插入图片描述
上下文块(CBD)如图3所示,用于在瓶颈之后解码和聚合上下文信息。上下文块首先将特征通道缩小到1,通过1×1卷积形成空间概率图 ;然后将获得的概率图展平,然后输入到 softmax 函数中,沿空间维度 H 和 W 进行概率归一化。最后经过层归一化、ReLU 和具有类似残差连接的卷积之后,生成具有聚合上下文信息作为通道特定偏差的解码输出。
在这里插入图片描述
基于一致性和异质性的融合模块(CH)和LaplacianFPN如图4和图5所示,CH模块通过两个并行的期望和残差分支同时对多尺度特征的一致性和异质性进行建模。由于异质性反映了上采样的高层特征与相邻低层特征之间的层次差异,这类似于拉普拉斯金字塔的基本原理,因此本文将设计的基于CH的FPN命名为LaplacianFPN。
对于CH模块,给定一个低级特征 Fl和一个高级特征 Fh,CH 模块首先对齐它们的空间通过对高级特征进行 2× 上采样来调整大小,然后对其进行 1 × 1 卷积。然后期望和残差分支并行地对一致性和异质性进行建模。
对于CH模块,给定一个低级特征 Fl和一个高级特征 Fh,CH 模块首先对齐它们的空间通过对高级特征进行 2× 上采样来调整大小,然后对其进行 1 × 1 卷积。然后期望和残差分支并行地对一致性和异质性进行建模。
在这里插入图片描述
对于LaplacianFPN,主干提取的特征定义为{C2,C3,C4,C5},它们将被输入到颈部LaplacianFPN中进行多尺度融合并产生{P2,P3,P4,P5,P6}。其中,在自上而下的路径中,{P2,P3,P4,P5}是通过CH模块中相应的自下而上层的横向连接产生的,而额外的最高级别P6是通过C5的直接最大池化得到的。
在这里插入图片描述
论文的实验部分将提出的CANet部署在NEU-DET和自建 ESD 数据集上进行性能评估。其中,NEU-DET是一个开放的缺陷检测数据集,包含热轧钢板缺陷的六种类型,包括裂纹、夹杂物、斑块、麻点表面、卷入氧化皮和划痕,每种类型有300张图像。总共有4189 个带注释的 groundtruth框。ESD数据集是从真实的工业环境中收集的,由497张图像组成,分辨率为3620×3700。手动标记的缺陷实例有6075个,属于划痕和斑点2类。

论文将CANet与其他先进的方法在NEU-DET数据集上定量进行比较,结果如表1(a)所示。在NEU-DET数据集中,对于银纹和卷入氧化皮这样的硬缺陷,检测起来更具挑战性,即使对于此类缺陷,本文提出的方法也能产生平衡或有竞争力的结果(银纹和卷入氧化皮分别为 47.0%、59.7%),这证明了检测硬缺陷的有效性。对于ESD数据集, CANet 优于所有其他方法,对于小物体实现了45.7% mAP、88.7% mAP50、20.6% mAPs,分别比同行提高了 1.2%、1.8%、4.7% 。
从论文给出的实验可以看出,CANet有效地注意到了与背景无法区分且受到灰尘、方向等环境污染严重的区域的斑点,并实现了准确的定位和分类,对于大多数缺陷的置信度高于95%。此外,CANet 能够检测被污垢背景严重模糊的划痕、极小尺寸的划痕和斑点、上下文无法区分的缺陷和浅划痕。与其他方法相比,CANet 还平衡了更高的类别置信度和更少的小缺陷漏检。
然后,本文通过消融实验,验证了本文提出的CAblock和LaplacianFPN两个主要模块对于CANet整体的性能的影响,结果表明本文提出的两个模块对于检测工业微小缺陷都有重要贡献。

最后,为了防止模型的过拟合风险,以及增强数据的可信度,本文对 NEU-DET 和 ESD 进行了 5 折交叉验证,结果如表2所示。值得注意的是,我们的 CANet 在具有更多小尺寸缺陷的 ESD 上比 NEU-DET 表现出更大的改进(与 SSD512、Faster RCNN、Faster RCNN 和 Res2Net 相比分别提高了 11.24%、4.82% 和 1.5%)。这表明CANet在提取和利用小缺陷的语义方面更加有效。

3.2、结论:

论文提出了一种用于工业中的微小缺陷检测的CANet。它利用上下文信息和空间注意力来增强对小缺陷的感知能力。CANet 的基本模块 CAblock 集成了空间注意力编码器 (SAE) 和上下文块解码器 (CBD)分别对空间长程依赖性进行编码,并将上下文信息解码为通道特定偏差。此外,我们还提出了基于并行双分支融合策略的 LaplacianFPN,以在考虑一致性和异质性的基础上自适应地聚合多尺度特征。在 NEU-DET 基准和自建 ESD 数据集上进行的实验证明了 CAblock 和 LaplacianFPN 的有效性,以及 CANet 相对于最先进方法的优越性能。它为准确检测工业中的小缺陷检测提供了可行的解决方案。然而,该方法在计算成本、推理速度和内存限制等方面存在局限性,因此不适合有高速要求的环境。

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

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

相关文章

中文编程开发语言工具系统化教程初级1上线

中文编程系统化教程初级1 学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,…

工控安全与网络安全有什么不同?

在当代,全球制造业正在经历一场前所未有的技术变革。工业4.0不仅代表着自动化和数据交换的进步,它还揭示了工业自动化、智能制造与系统集成的融合。这种集成为企业带来了效率和质量的双重提升,但同时也暴露出新的安全隐患。工控系统成为了这一…

化工园区数字孪生可视化管控平台,赋予园区安全环保智慧发展

化工行业作为国民经济的支柱和工业发展的引擎,对安全生产、环保节能、应急管控有着很高的要求。目前国内外化工园区面临安全和环保两大压力。为有效解决这两大难题,巨蟹数科综合运用物联网、数字孪生等新一代信息技术,建设了数字孪生园区智慧…

研发效能(DevOps)职业技术认证-第六期开班啦丨IDCF

本证书是由国家工业和信息化部教育与考试中心颁发的职业技术证书,也是国内首个《研发效能(DevOps)工程师职业技术认证》。该《认证》对研发效能(DevOps)工程师的职业技术分为初级、中级、高级三个专业等级。 IDCF社区…

Qt之普通项目如何生成DLL(含源码+注释)

文章目录 一、示例图二、普通项目需要改造的内容三、源码(创建了一个TestDLL的项目,更改内容主要在pro文件和maindow.h文件)TestDLL.promainwindow.hmainwindow.cppmainwindow.ui 总结 一、示例图 使用不同的编译模式编译,会在对…

【产品经理】APP备案(阿里云)

工信部《关于开展移动互联网应用程序备案工作的通知》 工业和信息化部印发了《关于开展移动互联网应用程序备案工作的通知》,“在中华人民共和国境内从事互联网信息服务的App主办者,应当依照相关法律法规等规定履行备案手续,未履行备案手续的…

微信小程序——后台交互

目录 后台准备 pom.xml 配置数据源 整合mtbatis 前后端交互 method1 method2 后台准备 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org…

Redis实现消息队列

使用Redis中的list实现消息队列 list是Redis的一种数据结构&#xff0c;可以把它理解成双向链表 可以从头部插入数据然后从尾部取出数据&#xff0c;从而实现消息队列的效果 利用命令 LPUSH和RPOP &#xff08;从左边插入数据从右边取出数据&#xff09; lpush l1 e1 e2rpo…

Dynamics 365 重写自带按钮

必备工具&#xff1a;Ribbon Workbench 步骤&#xff1a; 1、查看默认按钮使用的方法名称 右键按钮选择自定义命令(Customise Command)&#xff0c;然后查看command使用的命令 2、在前台chrome浏览器中搜索对应的命令&#xff0c;查看命令细节 3、基于命令细节新建command&am…

内裤洗衣机有用吗?最好用的四款内衣洗衣机测评

相信很多小伙伴往往会因为懒而不想洗内衣&#xff0c;又或者洗内衣时经常会洗不干净&#xff01;这时就很有必要入手一台内衣洗衣机了&#xff0c;当我们洗完澡时&#xff0c;顺手把内衣放入洗衣机内&#xff0c;一键启动即可把我们的内衣洗得干干净净&#xff01;同时还可以为…

Node.js与npm版本比对

Node.js与npm版本比对 Node.js与npm版本比对版本对比表Node版本对比 Node.js与npm版本比对 我们在项目开发过程中&#xff0c;经常会遇到公司一些老的前端工程项目&#xff0c;而我们当前的node及npm版本都是相对比较新的了。 在运行以前工程时&#xff0c;会遇到相关环境不匹…

uview 1 uni-app表单 number digit 的输入框有初始化赋值后,但是校验失败

背景&#xff1a; 在onReady初始化规则 onReady() { this.$refs.uForm.setRules(this.rules); }, 同时&#xff1a;ref,model,rules,props都要配置好。 报错 当input框限定type为number&#xff0c;digit类型有初始值不做修改动作,直接提交会报错&#xff0c;验…

PCIe架构的处理器系统介绍

不同的处理器系统中&#xff0c;PCIe体系结构的实现方式不尽相同。PCIe体系结构以Intel的x86处理器为蓝本实现&#xff0c;已被深深地烙下x86处理器的印记。在PCIe总线规范中&#xff0c;有许多内容是x86处理器独有的&#xff0c;也仅在x86处理器的Chipset中存在。在PCIe总线规…

lua-web-utils和proxy程序示例

以下是一个使用lua-web-utils和https://www.duoip.cn/get_proxy的爬虫程序示例。每行代码后面都给出了详细的中文解释。 -- 导入所需的库 local http require("http") local ltn12 require("ltn12") local json require("json") local web_u…

mac安装jdk

1、下载jdk&#xff08;我的电脑要下载arm版&#xff0c;截图不对&#xff09; Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#jdk17-mac 2、双击安装

详解 Diffusion (扩散) 模型

扩散模型是跨不同深度学习领域使用的生成模型。目前&#xff0c;它们主要用于图像和音频生成。最值得注意的是&#xff0c;这些模型是令人印象深刻的图像生成模型&#xff08;例如 Dalle2 和稳定扩散&#xff09;背后的驱动力。我相信您已经看过这些模型生成的闪烁图像。令人惊…

线性表操作的实现--单链表(链式存储结构)

本文参考朱战力老师的数据结构与算法--使用C语言一书 目录 文章目录 前言 一、链表是什么&#xff1f; 二、具体实现 1.单链表的定义 2.初始化ListInitiate&#xff08;SLNode **head&#xff09; 3.求当前元素的个数ListLength&#xff08;SLNode *head&#xff09; 4.插入Lis…

8.2 矢量图层点要素单一符号使用一

文章目录 前言单一符号&#xff08;Single symbol&#xff09;渲染简单标记(Simple Marker)QGis代码实现 SVG标记&#xff08;SVG marker&#xff09;QGis代码实现 总结 前言 上一篇教程对矢量图层符号化做了一个整体介绍&#xff0c;并以点图层为例介绍了可以使用的渲染器&am…

c语言进制的转换16进制转换2进制

c语言进制的转换16进制转换2进制 c语言的进制的转换 c语言进制的转换16进制转换2进制一、16进制的介绍二、八四二一法则三、16进制转换2进制 一、16进制的介绍 十六进制&#xff1a; 十六进制逢十六进一&#xff0c;所有的数组是0到9和A到F组成&#xff0c;其中A代表10&#x…

【网络原理】| 应用层协议与传输层协议 (UDP)

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;javaEE初阶 &#x1f397;️ 乾坤未定&#xff0c;你我皆黑马 目录 一、应用层协议二、传输层协议&#xff08;UDP协议&#xff09; 一、应用层协议 应用层是和代码直接相关的一层&#xff0c;决定…