IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> A Generic Deep-Learning-Based Approach for Automated Surface Inspection-论文阅读笔记 -> 正文阅读

[人工智能]A Generic Deep-Learning-Based Approach for Automated Surface Inspection-论文阅读笔记

A Generic Deep-Learning-Based Approach for Automated Surface Inspection

一种基于深度学习的表面自动检测方法

//2022.6.21开始阅读笔记

论文地址

A Generic Deep-Learning-Based Approach for Automated Surface Inspection | IEEE Journals & Magazine | IEEE Xplore

论文贡献

本文提出了一种只需要少量数据进行训练的ASI检测方法。该方法的实现思路:

  1. 根据图像块的特征构建分类器,特征是从CNN中转移得到的;
  2. 然后,将训练好的分类器在输入图像上获得像素级预测;

论文内容

1.介绍

ASI方法分为四种:1.结构;2.统计;3.基于过滤器;4.基于模型的方法;

结构方法对纹理基本体和位移进行建模。这种方法通常应用于重复的图案,如纺织品[7]、织物[8]和皮革[9]。流行的结构方法包括原始测量[10]、边缘特征[9]、骨架表示[7]和形态学操作[8]、[10]。第二种方法是测量像素值分布的统计方法。统计方法对于随机纹理(如瓷砖、铸件和木材)非常有效。常用的统计方法包括基于直方图的方法【11】、局部二元模式(LBP)】和共现矩阵【13】。第三种方法是基于过滤器的方法,将过滤器组应用于纹理图像。基于滤波器的方法可分为空间域【14】、频域【15】和空间频域【16】、【17】。最后,基于模型的方法通过对缺陷的多个属性建模来构建图像的表示【5】、【18】、【19】。

尽管ASI方法种类繁多,但这些技术都旨在为图像构建模板或特征。因此,ASI技术的性能取决于表示对缺陷特性的建模程度。对于ASI相关的任务,没有明确的准则来选择最佳表示。因此,人类专业知识是ASI成功的关键。提供适用于各种纹理的通用ASI方法是一个挑战。

为了应对这两个挑战,本文提出了一种通用的ASI方法。该方法利用预训练的DL网络提取patch特征,根据patch特征生成缺陷热图,并对热图进行阈值分割,预测缺陷区域。该方法不需要大规模的训练数据,因为patch特征是从预训练模型中提取的高层表示,无需任何训练。此外,提议的方法通过基于训练好的patch分类器生成缺陷热图来识别缺陷区域。实验结果表明,该方法适用于小数据集,大大降低了数据采集成本,并且该方法适用于多种类型的表面缺陷数据集。

2.相关工作

2.1 CNN相关介绍

本文省略细节介绍,感兴趣的同学可以自主查阅CNN相关论文。

2.2 从深度CNN传输特征

尽管Decaf等深层CNN被证明对图像相关应用非常有效,但由于培训所需的数据量很大,在实践中没有多少人从头开始培训深层CNN。相反,许多研究人员首先对大规模图像数据进行深度CNN训练,并将训练后的权重作为特征提取程序应用于另一个领域的小数据【24】、【25】。这通常是通过移除经过训练的CNN的最后几层来执行的。

Decaf网络的权重被经常使用来进行特征提取,使用Decaf网络进行特征提取的示意图如下。

?

使用fc6层具有比fc7更广义的特征,所以fc6在大多数任务中表现得比fc7好。

3.建议的通用ASI方法

3.1patch分类器的训练

在分类器训练阶段,从训练数据中提取多个图像块。patch分类器是基于decf变换后的特征进行训练的。patch分类器训练的细节如下。

1) 补丁提取:训练补丁的收集与CNN类似。假设patch大小为m×m,步幅大小为s。从大小为m×N的图像中提取的patch数是。修补程序的训练标签对应于修补程序中出现的缺陷。如果补片内没有缺陷,则补片标记为正常。?

2) 特征提取:收集训练patch后,使用第2.1节中所述的特征转移来提取patch特征。选择中间层fc6作为特征提取器,因为它被证明对广泛的计算机视觉任务是有效的【23】、【26】。

3)分类器选择:根据训练补丁的转移特征,训练分类器。分类器被选择为多项式logistic回归(MLR),因为它自然接近于用于Decaf分类阶段的Softmax回归。

?

3.2 细分框架

第二阶段是缺陷分割阶段。该阶段包括patch提取、特征提取、分类以及热图生成和预测。

1) patch提取:分割框架的第一步是patch提取。执行与第3.1节中相同的过程并应用相同的参数集(m、n和s)。

2)2) 特征提取:第二步是提取获得的patch的特征。类似地,所有补丁都被送入Decaf的fc6的输出表示补丁特征。

3) 分类:在第三阶段,将训练好的分类器堆叠在从Decaf(conv1到fc6)的九层之后。分类器输出输入图像在不同类别中的概率。

4) 热图生成和预测:下一阶段是热图生成和缺陷预测。假设缺陷类型的数量为Nd,第i个补丁的符号为Pi,Pi四个角的坐标为{(x{i,1},y{i,1}),(x{i,2},y{i,1}),(x{i,1},y{i,2}),(x{i,2},y{i,2}),分类器的预测是?pi=(prob{i,1},prob{i,2},…,prob{i,Nd})。对于每个缺陷类别,通过逐像素迭代添加概率来获得热图。用于获取热图的伪代码如算法1所示。在该算法中,0x×y表示大小为x×y的零矩阵,⊕ 表示元素相加,和?表示按元素划分。该算法中更新了计数矩阵C,以规范化热图。因此,获得的归一化热图的值为0到1。

?

在获得每个类的热图后,应用Otsu的方法【27】进行二值化。Otsu的方法通过获得最小化组内方差的最佳阈值来对图像进行二值化。假设图像像素用L灰度直方图表示,pi是灰度i的归一化直方图值。Otsu方法的目标是:

?

在获得二值化图像后,应用Felzenswalb的分割[28]来细化缺陷区域。该算法是一种基于图形的方法,根据像素的颜色相似性对其进行分组。应用Felzenswalb分割的目的是从阈值步骤中移除小的断开部分,并连接大的潜在缺陷区域。假设G=(V,E)是无向图,其中V是像素集,E是边集,w(vi,vj)表示vi和vj之间的权重,Ci表示分割的第i个区域。设D表示确定分段边界的谓词。D如下式所示:

?

该算法中有两个参数可供选择。第一种是σ,用高斯滤波器对图像进行平滑处理。按照【28】中的描述,σ设置为0.8。第二个参数是k,用于计算阈值。k值越大,分割结果的分量越大。

由于总是为每种类型的缺陷生成热图,因此在分割结果之后设置一个阈值,以移除具有低缺陷概率的预测区域。从而得出最终预测。缺陷区域预测如算法2所示。

?

3.3 参数选择

1) 热图生成参数:热图生成有四个参数,补丁大小m×m,步长s。m的选择取决于缺陷大小的领域知识。例如,如果缺陷尺寸约为50×50,则选择补片尺寸100×100会导致不精确的热图,而补片尺寸5×5可能不会包含足够的缺陷信息。因此,选择的修补大小与缺陷大小大致相同。对于参数s,高值导致热图不精确,低值导致计算成本高。在建议的工作中,s=(1 /5)m适用于所有实验。

2) 缺陷面积预测参数:为了预测缺陷面积,采用了Otsu阈值法和Felzenzwalb分割法。Otsu方法的阈值确定是基于输入图像的强度全自动的。然而,Felzenswalb的分割中有两个参数σ和k。σ是图像预处理阶段高斯滤波的参数。σ始终选择为0.8,因为根据[28]去除噪声时,它不会导致图像发生显著变化。另一个参数k与观测尺度有关。k越大,分割中的分量越大。该参数根据缺陷区域选择。根据【28】,对于20×20左右的缺陷尺寸,k=200;对于50×50左右的缺陷尺寸,k=500,依此类推。

4.数据描述

为了验证所提出的方法是否可以推广,本实验选择了具有不同纹理的广泛曲面。数据集包括热轧带钢上的纹理缺陷【29】,X射线图像上金属管的表面缺陷,木材颜色和纹理缺陷【3】,钛合金微观结构缺陷。这些数据集包括纹理缺陷、颜色缺陷和微观结构缺陷。这些数据集的详细信息描述如下。

4.1 NEU表面缺陷数据库

第一个公共数据库是NEU表面缺陷[29]。该数据库包括热轧带钢的六种表面缺陷。缺陷包括银纹(Cr)、夹杂物(In)、路径(Pa)、凹坑表面(PS)、轧入鳞片(RS)和划痕(SC)。每类缺陷有300个样品。缺陷图像的示例如图4所示。数据库中给出了所有图像的标签,但未提供缺陷区域的ground-truth。

?

4.2焊接缺陷数据库

第二个公共数据集来自GDX射线图像【30】。该数据集包括五组的X射线图像,即铸件、焊缝、袋装、自然和设置。本文使用的数据集是焊缝,因为它与表面检查相关,而其他数据集则不相关。焊缝数据集包括金属管道的射线照片。数据库中提供了10幅具有逐像素地面真实度的图像。图像的示例如图5所示。

?

4.3 木材缺陷数据库

实验研究中的最后一个公共数据库是木材ASI的木材缺陷数据库[3]。数据库中有两个子集。一种是手动标记缺陷图像,其中包括不同类型的木节。该子集提供了七种类型的结缺陷的438张图像。示例图像如图6所示。该数据库的另一个子集是木板图像,其中地面真实值由边界框提供。提供了839张电路板图像,包括18种类型的缺陷。一些示例如图7所示。

?

?

4.4 微观结构缺陷数据集

最后一个数据集是劳斯莱斯的工业数据集。图像采集自钛合金风扇叶片,图像尺寸为1944×2580。训练集包括49幅缺陷图像和10幅正常图像。测试集包括十幅缺陷图像和十幅正常图像。使用边界框标记缺陷区域。一些示例如图8所示。

?

5.实验结果

本节显示了实验结果。评估包括两部分。第一部分是评估传输的特征,其中对缺陷图像进行分类。第二部分是对提出的分割框架进行评估。

对于分类结果,在所有公共数据集中应用了两种通用的纹理特征提取方法进行基准测试,即多分辨率局部二值模式(MLBP)[31]和灰度共生矩阵(GLCM)[32]。为这些方法选择的参数符合【12】和【31】。对于MLBP,图像特征是灰度旋转不变局部二值模式和旋转不变方差测度的联合分布。

根据文献[31],将多对邻域和半径处的特征进行组合,即{(8,1),(16,2),(24,3)}。该方法已被证明在广泛的纹理数据集上表现良好。因此,选择它作为基准方法。对于GLCM,选择的角度为{0?, 45?, 90?, 135?} 距离集是{1,2,4,8,16}。纹理特征是角二阶矩、反差分矩、熵、相关性、对比度和能量的组合【33】。

除了常规纹理特征外,还选择了针对单个数据集的最先进的手工特征作为基准。这是为了将转移特征的性能与单独设计的算法进行比较。

对于分割评估,将一些依赖于数据集的ASI方法与所提出的框架进行比较。

5.1 传输特征的评估

????????选择预训练DL网络中的特征作为图像表示。基于第四节中描述的三个数据集评估特征的分类性能。除非数据集中另有说明,否则本节中报告的精度均基于五倍交叉验证。

对于单个数据集,测试了一些特定于数据集的特征提取和分类方法。该分类器包括具有对数似然损失的梯度boost分类器、支持向量机(SVM)、logistic回归(LR)和MLR。每个测试阶段包括20次运行,并报告平均精度。

1) NEU表面缺陷数据库分类结果:对于NEU表面缺陷数据库,选择整个图像而不是patch进行评估。这是因为这些图像已经放大到patch比例。传统的纹理特征提取方法如MLBP和GLCM被用作基准。在[34]中,散射卷积网络在该数据集上被证明是有效的。因此,选择它作为基准方法,其中SVM和最近邻分类器具被使用。测试集的选择方法与[34]中所述的方法相同,其中每个类别随机选择150个图像。结果如图9所示。结果表明,传输的特征优于所有基准测试,准确率为99.21%。

?

2) 焊缝缺陷数据库中的补片分类:对于GDX射线数据集中的焊缝图像,将为每个图像提供基本真实值。为了测试图像特征的性能,评估了25×25、50×50和75×75的patch大小。为每个图像选择200个非缺陷区域的补丁和200个缺陷区域的补丁。修补片的最小缺陷尺寸选择为100像素,因为缺陷区域应具有合理的大小以提取缺陷信息。选择五幅图像来生成patch。这些贴片通过五倍交叉验证进行评估。结果如图10所示。

?

结果表明,对于所有三种patch尺寸,转移特征的性能最好。MLBP在分类任务中也表现良好。然而,对于这个数据集,GLCM并不比随机猜测(50%)好多少。

3) 木材缺陷数据库分类:木材缺陷数据集上转移特征的评估基于第一个子集。该方法与[35]进行了比较,交叉验证方法也遵循了[35]中所述的方法。文献[35]中的图像特征是Gabor滤波器,分类器包括自组织神经网络和前馈感知器神经网络(FFPNN)。本方法中报告的缺陷类型包括包裹缺陷、叶状缺陷、边缘缺陷和声节缺陷。

结果如图11所示。在所有方法中,转移特征的精度最高。它优于一般纹理特征(MLBP和GLCM)和手工分类方法(Gabor过滤器和FFPNN)。

在上述三个分类任务中,转移的特征是本实验中纹理的高级表示。它在很大程度上优于传统纹理特征和手工制作的特征。

?5.2 缺陷分割评估

????????分类结果表明,所转移的特征在多个数据集上具有较高的性能。算法1和2中描述的分割方法也在这些数据集上进行实现。对于单个数据集,将该框架与针对特定数据集的手工分割方法进行比较。由于NEU表面缺陷数据集中没有基本真实框,因此仅评估焊接缺陷、木材缺陷和微观结构缺陷数据集进行分割。

1) 木材缺陷数据集的分割结果:对于木材缺陷数据库中板材图像的子集2,patch大小选择为50×50。分段参数选择为σ=0.8和k=500。

此数据集中提供的基本事实不是像素级的。它们是由四个坐标定义的边界框。因此,绩效评估遵循【3】和【36】中的描述。使用的五个标准是缺陷检测(D)率、错误逃逸(E)率、误报(F)率、误分类率(M)和准确度(A)。计算这些指标所需的信息如下所示。

  1. Ndet:检验模型生成的检测次数。
  2. Nlab:真实缺陷的数量。
  3. Ndet_lab:检验模型检测到的真实缺陷数量。
  4. N:选择用于评估的图像补片总数(包括缺陷补片和正常补片)。

根据上述定义,Ndet_lab是Nlab和Ndet的交叉点。补充材料中的图S-4显示了这些参数之间的关系。

缺陷检测率是检验模型检测到的实际缺陷的比例,如下所示:

?

错误逃逸率是检验模型遗漏的缺陷比例,如下所示:

E=1-D

误报率由误报检测与系统产生的检测总数的比率表示,如下所示:

?

错误分类率是错误分类与斑块总数的比率,包括缺陷和非缺陷区域,如下所示:

?

准确度是正确分类的patch百分比,定义如下:

A=1-M

就高性能ASI方法而言,需要低错误逃逸(E)、低误报(F)、低未分类率(M)和高精度(a)。

将所提出的方法与最佳基准进行了比较【3】、【36】、【37】。在[3]中,颜色百分位数和LBP用作特征。将每个图像分为块,并对这些图像块应用自组织映射(SOM)。手动设置缺陷块和非缺陷块之间的阈值。文献[3]报道了两种选择阈值的方法,即乐观阈值法和电容阈值法。针对十种类型的缺陷报告了[3]的错误逃逸(E)rate和错误报警(F)rate。在[37]中,每个图像类似地被划分为块。图像特征是百分位颜色直方图和特征向量纹理特征。在特征上训练支持向量机分类器,以区分缺陷和非缺陷区域。针对六种类型的缺陷报告了[37]中的错误逃逸(E)。在[36]中,对图像应用了非负矩阵分解(NMF)。对双树复小波变换(DTCWT)和LBP进行了特征提取试验。文献[36]的错误分类(M)报告了七种类型的缺陷。

对于所提出的方法,对所有18种缺陷类型的性能进行了评估。结果如图12–14所示。 图中,未经[3]、[36]和[37]研究的缺陷标记为缺失数据。从图12可以看出,拟议的方法在总体E、F和M方面的表现并不优于其他方法。然而,评估拟议的方法所包含的缺陷类型的数量大于基准方法。基准方法中未包含的某些类别的缺陷会导致较大的E和F(M除外)。因此,比较检测每种缺陷类型的性能是一个公平的标准,而不是总体性能。

图13和14显示针对每种缺陷类型的建议方法和基准方法的E和A。补充材料中的图S-1包括该算法产生的预测示例。对于这些中间输出,热图显示像素异常的可能性,Otsu的阈值化将热图转换为二值图像,Felzenswalb的分割去除噪声并细化缺陷区域。从图13可以看出,所提出的方法的错误逃逸率在以下方面明显低于基准方法,在缺陷类型为干结、树脂和树脂袋上。在检测声音结和分裂方面,它不是性能最好的算法。然而,与基准方法相比,性能仅略有下降。对于健全的节点缺陷,所提出的方法的E为3.13%,而最佳性能基准的E为1.5%。对于分裂缺陷,它是13.51%,而不是13.3%。在图14中,对于所有七种缺陷类型,所提出的方法优于[36]中的三种方法。

2) 焊接缺陷数据库的分割:对于焊接缺陷数据库,它被分割为五个训练图像和五个测试图像。对于每个训练图像,选择100个缺陷和100个非缺陷patch来训练patch分类器。虽然patch大小25×25是分类精度最高的patch,但在缺陷分割任务中选择了patch大小75×75。25×25所需的斑块数是75×75的9倍。因此,选择75×75patch可以大大减少计算量,而不会损失太多精度。对于分割步骤,根据缺陷大小,σ选择为0.8,k选择为200。V alavanis和Kosmopoulos【38】被选为基准方法。它首先通过执行Sauvola局部阈值分割[39]和Felzenswalb分割[28]来分割缺陷区域。接下来,它根据几何特征和基于强度的描述符对缺陷进行分类【38】。

在[38]中,包括了几种类型的缺陷进行评估。然而,我们的实验并没有为焊接缺陷数据集提供缺陷类型的信息。此外,文献[38]中的数据集包括24张射线照片,而在我们的实验中只有10张图像。因此,所提出的方法无法直接与[38]进行比较。然而,文献[38]中的结果显示了预测缺陷和非缺陷像素的准确性,这意味着该方法的性能。[38]中的结果表明,对非缺陷像素的分类准确率为78%。图15显示了使用所提出方法的结果。五幅图像的二值分类精度在66.27%~97.26%之间。虽然数据集很小,但所提出的方法的性能仍与文献[38]中报告的结果相当。

?

补充材料中的图S-3显示了使用所提出方法的预测结果示例。结果表明,热图中的高强度区域是缺陷区域。但是,由于管道边界的原因,噪音很大。通过应用Otsu方法,将高强度像素设置为1,低强度设置为0。通过分割算法,去除了噪声和小区域。因此,获得了最终预测。

?

?

3) 微观结构数据集的分割结果:该方法也应用于工业微观结构数据集。微观结构数据的现有ASI方法通常适用于规则模式【40】、【41】。然而,这些图像的纹理是随机的。在ASI领域,有关钛风扇叶片显微组织图像的文献很少。因此,此数据集不包括基准方法。

????????对于这些微观结构图像,工程师们对突出显示缺陷区域很感兴趣,假阳性比假阴性更可取。选择相对较大的patch(256×256)以加快检测速度,因为不需要精确的像素分类。该数据集的标签类似于木材缺陷子集2。因此,重新使用评估标准(2)–(6)。补充材料中的结果如图16所示,检测示例如图S-2所示。

????????结果表明,该方法具有零错误逃逸率和略高的虚警率。事实上,这种特性对于微结构缺陷检测是可取的。由于风扇叶片中未检测到的缺陷可能会导致严重的安全问题,因此,误报的成本总是比误报的成本高得多。实验结果表明,该方法是该微结构数据集ASI的良好候选方法。

从分类和分割任务的实验结果来看,该方法对于较小的训练数据是有效的。由于该方法不需要大量的训练数据,只需优化分类层的参数,而不需要整个深层的CNN,因此通过应用特征转移,降低了数据采集和模型训练的成本。此外,该方法还具有通用性,因为从Decaf中提取的特征是patch的高级表示,并且与数据集无关。

6.实施细节

该框架在具有24核和32GB内存的工作站上实现。图17显示了三种特征提取方法对patch大小x×x的计算时间。基于LBP的方法由于其像素级计算,计算成本随着patch大小的增加而显著增加。转移特征的计算成本与patch大小无关,因为DECF总是将输入图像的大小调整到特定的尺寸。由于预训练神经网络的深度,特征提取的计算成本高于基于LBP和GLCM的小patch方法。为了加快该方法的速度,并行实现了特征提取步骤。对于具有2000个patch的图像的缺陷分割,平均需要2分钟才能生成热图。

这些算法是使用Python实现的。此实现中涉及的软件包包括Scikit Learn、2 Numpy、3 Scipy、4 Scikit Image、5和Decaf。6.Decaf的预训练重量是公开的。

7.讨论

从实验结果来看,对于所有纹理图像,传输的特征都优于手工制作的特征。此外,所提出的ASI方法在缺陷分割方面也表现良好。本节探讨了如此高绩效的原因。

7.1 传输的特征

从第五节的分类结果来看,转移特征是表面检查数据集的高质量表示。这是由于目标识别任务的复杂性。在对象识别中,多种类型的信息是必不可少的,例如纹理和形状。CNN通过其层的传播学习不同级别的表示。图18显示了Decaf从木材缺陷中获取的信息类型示例。低层检测输入图像的边缘和纹理,而高级层为缺陷生成高质量的特征映射。此示例表明,DECF对ASI域的适应性很强。

?

7.2 分割方法

对于分割任务,结果表明,该方法具有较高的性能,并且在各种数据集上具有通用性。该方法有两个主要优点。首先,它可以在小数据集上进行训练,而且可以非常精确。对于焊缝缺陷的分割,虽然只有五幅训练图像,但该方法的结果仍然与现有的方法相当。这表明了该方案对小训练数据的处理能力。它为工业应用节省了人力成本,因为大多数目视检查都需要大量的手动工作来收集和标记图像。其次,该方法易于在不同领域的数据集之间实现。传统上,ASI方法取决于缺陷的属性,包括尺寸、纹理和颜色。因此,大多数现有ASI方法都依赖于手工制作的特征,而这些特征无法应用于各种各样的曲面。该框架是全自动的,对缺陷属性的变化具有鲁棒性。

8.结论

本文提出了一种通用的基于DL的ASI方法。该方法包括预训练DL网络的特征转换和patch分类器对输入图像的卷积。在分类任务中,转移的特征明显优于手工制作的特征。三个数据集的准确度提高范围为0.66%~25.50%。对于分割任务,该方法降低了三种缺陷类型的错误逃逸率从6.00%-19.00%,七种缺陷类型的准确率提高了2.29%-9.86%,微观结构数据集的错误逃逸率为0.0%。

在未来,我们将关注两个研究方向。一个方向是加快热图生成过程,以实现实时缺陷定位。第二个方向是使用机器学习方法自动化面片大小选择过程。

//本文仅作为日后复习使用,并无他用。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:06:59  更:2022-06-25 18:10:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:26:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码