制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)
一、缺陷检测任务
缺陷检测的任务通常可以分为三个主要阶段,包括缺陷分类、缺陷定位和缺陷分割。
1.缺陷分类
缺陷分类是检测过程的第一步,目的是将检测到的缺陷区域分类为不同的类别,通常是根据缺陷的性质或类型进行分类。分类的类别包括异色、空洞和经线。这一阶段的目标是确定缺陷的类型,以便后续的处理。
2.缺陷定位
缺陷定位是在确定缺陷的类型的基础上,进一步标注出缺陷在图像中的准确位置。这意味着需要在图像中识别出缺陷所在的区域,通常以边界框或者图像中心点的相对位置进行表示。缺陷定位为后续的处理提供了关键信息,使得可以进一步分析缺陷的尺寸、形状和位置。
3.缺陷分割:
缺陷分割是逐像素地将缺陷从背景中分离出来,形成缺陷区域的精确掩膜。通常涉及使用图像分割算法,如语义分割或实例分割,以将缺陷与周围背景分开。这允许更详细的分析和处理缺陷区域。
二、缺陷检测方法
1. 有监督方法
有监督方法通常需要带有标签的训练数据,这些标签包括缺陷的类别、位置等信息。在这种方法中,模型在训练阶段使用带有标签的数据来学习缺陷的特征和模式。这意味着模型知道什么是正常和异常的图像区域,并且可以进行分类、定位和分割缺陷。有监督方法通常在数据标注充分的情况下效果很好,但需要大量标记的数据。
2. 无监督方法
无监督方法不依赖于带有标签的训练数据,而是依赖于对正常数据的学习。模型通过学习正常区域的特征和分布来检测异常。这种方法在处理大规模数据或者缺乏带有标签的数据时非常有用。无监督方法可以自动检测与正常情况不符的异常情况,但对于不同类型的缺陷可能表现不如有监督方法。
3.算法比较
选择哪种方法通常取决于数据的可用性和问题的性质。如果有足够的标记数据和明确定义的缺陷类别,有监督方法通常是更可靠的选择。无监督方法可以用于发现未知的异常情况,但可能会产生误报,因为它无法准确区分不同类型的缺陷。
有时候,也可以结合这两种方法,例如使用有监督方法来识别已知类型的缺陷,并使用无监督方法来检测未知类型的异常。这种混合方法可以提高缺陷检测的鲁棒性
三、识别网络
1. 目标识别网络
目标检测是计算机视觉领域中的核心任务,它旨在确定图像中目标的位置和类别。基于深度学习的目标检测方法通常可分为两大类:两阶段(two-stage)网络和一阶段(one-stage)网络,它们在结构和工作原理上有一些关键差异。
-
两阶段网络(以Faster R-CNN为代表):
两阶段网络的主要特点是分为两个阶段:首先,生成候选框(即提出框或区域建议),然后在这些候选框上进行目标检测。这些网络通常包括两个主要组件:区域提出网络(Region Proposal Network,RPN)和目标检测网络。RPN负责生成可能包含目标的候选框,并将它们提供给目标检测网络,进一步进行分类和定位。两阶段网络通常在准确性上表现出色,特别是对于小目标或密集目标的检测。然而,其计算复杂度较高,速度相对较慢。 -
一阶段网络(以SSD或YOLO为代表):
一阶段网络直接利用深度卷积神经网络中提取的特征图来同时预测目标的位置和类别,而无需额外的候选框生成步骤。这些网络通常更快速,适用于实时应用,但在目标小而密集的情况下可能会失去一些准确性。SSD(Single Shot MultiBox Detector)和 YOLO(You Only Look Once)是一阶段网络的代表,它们通过密集地分析图像中的多个位置来检测目标。
选择两阶段还是一阶段网络通常取决于应用需求。两阶段网络在准确性上具有优势,适用于要求高准确性的任务,例如医学影像或自动驾驶。一阶段网络更适合要求实时性能的应用,如实时物体检测和跟踪。此外,还有一些改进型的网络结构和混合型方法,旨在兼顾准确性和速度,以满足不同的应用场景。
2.小目标检测问题
在工业表面缺陷检测中,面临的最大的问题是部分缺陷偏小,因为小尺寸的缺陷通常在图像中具有低信噪比,难以精确检测,引入以下的几种办法,可以对小目标检测进行优化:
-
特征金字塔结构:
特征金字塔结构允许网络在不同尺度下检测目标,从而提高多尺度检测的准确率。这可以通过在网络中引入多尺度的特征图来实现,使网络能够同时处理不同大小的目标。 -
图像尺寸放大:
增加图像尺寸可以使小目标变得更大,从而提高它们的可检测性。这通常需要在训练和测试期间对图像进行插值或重采样,以增加分辨率。然而,需要注意的是,这可能会增加计算成本。 -
ROI Align替代ROI Pooling:
ROI Align 是一种精确的感兴趣区域(ROI)池化方法,可以在较小的目标上提供更准确的特征。与传统的ROI Pooling 不同,ROI Align 考虑了像素级的插值,提高了对小目标的精确性。
- 超分辨率技术:
使用生成对抗网络(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等模型的设计优点,其本身创新点不多,偏重在工程实践上,具体创新如下:
- 提供了一个全新的SOTA模型(包括P5 640和P6 1280分辨率的目标检测网络和基于YOLACT的实例分割模型)。并且,基于缩放系数提供了N/S/M/L/X不同尺度的模型,以满足不同部署平台和应用场景的需求。
- Backbone:同样借鉴了CSP模块思想,不过将Yolov5中的C3模块替换成了C2f模块,实现了进一步轻量化,同时沿用Yolov5中的SPPF模块,并对不同尺度的模型进行精心微调,不再是无脑式一套参数用于所有模型,大幅提升了模型性能。
- Neck:继续使用PAN的思想,但是通过对比Yolov5与Yolov8的结构图可以看到,Yolov8移除了1*1降采样层。
- Head部分相比Yolov5改动较大,Yolov8换成了目前主流的解耦头结构(Decoupled-Head),将分类和检测头分离,同时也从Anchor-Based换成了Anchor-Free。
- Loss计算:使用VFL Loss作为分类损失(实际训练中使用BCE Loss);使用DFL Loss+CIOU Loss作为回归损失。
标签分配:Yolov8抛弃了以往的IoU分配或者单边比例的分配方式,而是采用Task-Aligned Assigner正负样本分配策略。
2.2.算法改进
在表面缺陷检测中测试,现有的Yolov8的目标检测与目标分割对小目标的处理并不理想,但引入BIFPN层之后,算法在小目标检测方面有了很大的提升。
BIFPN原理介绍:
BIFPN是一种特征金字塔网络,它能够自适应地融合不同尺度的特征并进行上下文信息的传递。通过使用BIFPN,可以提高Yolov8对
小目标的检测精度。
- 特征金字塔网络(FPN)
特征金字塔网络是一种常用的目标检测算法中的模块,它通过自上而下和自下而上的方式融合来自不同层级的特征。这种设计可以提供多尺度的特征表示,从而使得算法能够在不同大小的目标上进行检测。 - 双向特征金字塔网络(BiFPN)
传统的特征金字塔网络在融合特征时只使用了上采样和下采样的操作,而没有引入跳跃连接。受到残差网络的启发,BiFPN引入了跳跃连接,使特征在不同层级之间可以直接传递。这种设计可以更好地保留高层级和低层级特征的语义信息。 - 加权双向特征金字塔网络(BIFPN)
BIFPN在BiFPN的基础上进行了改进,引入了特征金字塔网络中的特征融合操作。具体而言,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 相对于最先进方法的优越性能。它为准确检测工业中的小缺陷检测提供了可行的解决方案。然而,该方法在计算成本、推理速度和内存限制等方面存在局限性,因此不适合有高速要求的环境。
相关文章:

制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)
一、缺陷检测任务 缺陷检测的任务通常可以分为三个主要阶段,包括缺陷分类、缺陷定位和缺陷分割。 1.缺陷分类 缺陷分类是检测过程的第一步,目的是将检测到的缺陷区域分类为不同的类别,通常是根据缺陷的性质或类型进行分类。分类的类别包括…...

支持多校 微信课表小程序源码 排课小程序源码 支持导入课表 情侣课表 背景设置
练手Lab课程表小程序源码是一个基于thinkphp系统进行开发的前后端分离系统。 源码功能介绍 1、情侣功能 2、情侣间留言 3、情侣间互相设置课程表背景 4、自己日、周课程表背景设置 5、教务系统课程表导入 6、导入别人分享的课表 7、导入别人分享的单课 8、多校支持 9…...

谷歌计划从Chrome119起测试IP隐私保护功能
目前,谷歌正为Chrome浏览器测试一项新的“IP保护”功能。因为该公司认为用户IP地址一旦被黑客滥用或秘密跟踪,都可能导致用户隐私信息泄露。 而这项功能可通过代理服务器屏蔽用户的IP地址,以增强用户的隐私性,这样就可以尽量在确…...

【技能树笔记】网络篇——练习题解析(九)
目录 前言 一、OSPF双栈 1.1 OSPFv3 LSA 1.2 OSPFv3 二、ISIS双栈 2.1 ISISv6 2.2 ISIS高级特性 三、BGP双栈 四、PIM双栈 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filot…...

c++ qt连接操作sqlite
qt客户端编程,用到数据库的场景不多,但是部分项目还是需要数据库来保存同步数据,客户端用到的数据库,一般是sqlite。 Qt提供了数据库模块,但是qt本身的数据库模块并不好用,会有各种问题, 建议大家不要,可以自己封装数据库的操作。本篇博客介绍qt连接操作sqlite。 sqlit…...

Qt之自定义QStringListModel设置背景色和前景色
一.效果 二.实现 QStringListModel里只实现了Qt::EditRole和Qt::DisplayRole,不能直接设置背景色和前景色,所以我们要继承QStringListModel,重写其中的data和setData方法,使其支持Qt::ForegroundRole和Qt::BackgroundRole。 QHStringListModel.h #ifndef QHSTRINGLISTMO…...

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040
线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…...
Linux 错误处理(字符设备基础三)
在Linux字符设备驱动中,即使是最简单的注册字符设备,也存在注册失败的可能性,因此在之前编写的驱动代码中采用检查函数返回值的方式,确认函数是否成功执行 一、goto 语句 在编写驱动程序时,驱动程序应该提供函数执行失…...

STM32 PWM配置及呼吸灯
PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。 在PWM中可以调节的其实只有两个东西,一个叫做可调周期(调频率),另一个叫做占空比(高电平/周期)。 而…...

华为云 CodeArts Snap 智能编程助手 PyCharm 插件安装与使用指南
1 插件安装下载 1.1 搜索插件 打开 PyCharm,选择 File,点击 Settings。 选择 Plugins,点击 Marketplace,并在搜索框中输入 Huawei Cloud CodeArts Snap。 1.2 安装插件 如上图所示,点击 Install 按钮安装 Huawei Cl…...

SpringSecurity分布式安全框架
Spring Security是一个基于Spring框架的安全框架,它提供了全面的安全解决方案,包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求,它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式…...

高速下载b站视频的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Qt之彻底解决QSpinBox限定范围无效的问题
QSpinBox有个比较啃爹的问题,不管取值范围设置为多少,都能一直输入0,如下图所示: 当取值范围包含负数时,负号后也可以一直输入0,如下图所示: 还有就是当取值范围设置为10以上时,比如10~100,却可以输入1~9 虽然上述非法输入最终都未生效,当QSpinBox失去焦点时会显示为…...
Ktor vs Spring Boot:哪个框架能帮助你构建更高性能的 Web 应用?
文章首发地址 Ktor 和 Spring Boot 是两个在 Kotlin Web 开发中常用的框架,它们有一些共同点,也有一些区别。 共同点: 都支持 Kotlin:Ktor 和 Spring Boot 都能够完全支持 Kotlin 语言,这使得开发者可以使用 Kotlin …...

【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)
LivoxHIKROBOT联合标定 引言1 海康机器人HIKROBOT SDK二次开发并封装ROS1.1 介绍1.2 安装MVS SDK1.3 封装ROS packge 2 览沃Livox SDK二次开发并封装ROS3 相机雷达联合标定3.1 环境配置3.1.1 安装依赖——PCL 安装3.1.2 安装依赖——Eigen 安装3.1.3 安装依赖——Ceres-solver …...

hadoop伪分布式安装部署
首先jdk安装完毕 jdk安装文档参考: Linux 环境下安装JDK1.8并配置环境变量_linux安装jdk1.8并配置环境变量_Xi-Yuan的博客-CSDN博客 准备好hadoop的安装包 我的下载地址如下: We Transfer Gratuit. Envoi scuris de gros fichiers. 将hadoop包上传到随…...

前端视角看 Docker : 加速开发和部署的利器
Docker 是一个开源的容器化平台,大大的降低了运维相关的工作。在日常开发中,中小公司很少有专职运维,所以在开发中通过使用 Docker,前端相关工作可以更加高效地构建、打包、部署和运行应用程序。此系列将从前端的视角出发…...

JVM相关的面试题
一、什么是程序计数器 二、简要的介绍一下堆 三、什么是虚拟机栈 四、能不能解释下方法区 五、你听过直接内存吗? 六、什么是类加载器,类加载器有哪些 七、什么是双亲委派模型 八、JVM为什么采用双亲委派机制 九、类装载的执行过程 十、对象什么时候被垃…...
HTML、CSS和jQuery:实现图片折叠展开的效果
在网页设计和开发中,我们经常需要实现一些动态特效来增加页面的吸引力和交互性。其中,图片折叠展开特效是一种常见但又很有趣的技巧。通过这种特效,我们可以让图片在用户的操作下折叠或展开,从而展示更多的内容或细节。以下介绍如…...

php简单后门实现及php连接数据库
php简单后门实现 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>easybackdoor</title>…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...