An End-to-End Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features-阅读笔记

An End-to-End Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features

一种融合多层次特征的端到端钢铁表面缺陷检测方法

//2022.5.11日上午8:41开始阅读

论文地址

An End-to-End Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features | IEEE Journals & Magazine | IEEE Xplore

个人总结

本文中,作者通过使用ResNet34/50作为骨干网络对于并结合MFN将不同等级的特征图进行融合,并使用RPN网络在融合后的完整特征图上进行预测,从而形成了本文中的DNN检测系统。作者在NEU-DET数据集上进行了分类和检测任务的实验,并探究了MFN网络在区域建议数量不同时和使用的IoU交并比不同时的实验结果。同时,作者还对使用MFN网络融合哪几层骨干网络输出作出了详细说明。此外,为了保持维度一致,一种简单的方法是使用1×1 conv来减少/增加维度。1×1 conv有两种放置模式:前置和后置,还有一个Hyper-style模式,共三个模式,作者也对于使用那种放置模式作出了说明。作者还说明了,如果使用更多的数据集,DDN网络可能会具有更高的精度。对于检测结果中的失败案例,作者也做出了说明。

论文目的

论文中提出了一种基于深度学习的新型缺陷检测系统,并专注于一个实际的工业应用:钢板缺陷检测。为了获得强大的分类能力,该系统在每个阶段使用基线卷积神经网络(CNN)生成特征图,然后提出的多级特征融合网络(MFN)将多个分层特征组合成一个特征,可以包含更多的缺陷位置细节。基于这些多级特征,采用区域建议网络(RPN)生成感兴趣区域(ROI)。对于每个ROI,由分类器和边界盒回归器组成的检测器生成最终检测结果。

论文中出现的名词对照

自动缺陷检测(ADI)、缺陷检测数据集(NEU-DET)、缺陷检测网络(DDN)、多级特征融合网络(MFN)。

论文内容

1.介绍

作者首先介绍了缺陷检测任务的两个不同任务:缺陷分类和缺陷定位。并且介绍了较为复杂的多类别钢板表面缺陷检测任务。

作者又介绍了传统ADI方法的缺点:1.手工特征的使用不明确,特征的确定过于主观;2.缺陷定位不精确。

作者为了解决上述传统的缺陷检测方法中存在的问题,使用基于深度学习方法的缺陷检测技术建立一个端到端的缺陷检测系统。

本文使用ResNet作为骨干网络,并使用了在ImageNet数据集上预训练的权重。

作者说明了使用CNN对特征进行提取时,图像在CNN流程中进行流动时,可能会出现重要部位的信息丢失的问题。为了解决高级特征图和低级特征图语义信息不一致的问题,本文还采用了多级特征图融合措施(MFN)。本文还使用了NEU-DET对模型进行微调。

为了克服上述挑战,本文建立了一个名为缺陷检测网络(DDN)的端到端ADI系统。DDN 1)在缺陷分类中采用了强大的ResNet;2) 建议最惠国收集更多的位置细节;3)建立用于微调的缺陷检测数据集,并报告改进情况。更详细地说,首先,我们在ImageNet上预训练ResNet,然后在NEU-DET数据集上进行微调。MFN可将选定的特征融合为一个多层次特征,其特征涵盖了ResNet的所有阶段。然后,在基于多级特征的建议生成中采用区域建议网络(RPN),然后DDN可以输出类分数和边界框坐标。最后,我们在NEU-DET上对该方法进行了评估,结果表明该方法明显优于其他ADI方法。

本文的主要贡献:1. 引入端到端缺陷检测管道DDN,该管道集成了ResNet和RPN,用于精确的缺陷分类和定位。2. 建议的融合多层次特征的MFN网络。与其他融合方法相比,MFN可以结合较低层次和较高层次的特征,使多级特征具有更全面的特征。3. 一个用于微调网络的缺陷检测数据集NEU-DET,并证明所提出的DDN在该数据集上具有非常有竞争力的性能。

2.相关工作

2.1 缺陷检测

通常,缺陷分类方法包括两部分:特征提取和分类器。经典的特征提取程序是获取手工特征,例如HOG和LBP,它们后面总是跟着一个分类器,例如SVM。因此,不同的特征抽取器和分类器的结合产生了多种缺陷分类方法。例如,Song和Yan[3]改进了LBP以抵抗噪声,并采用NNC和SVM对缺陷进行分类。Ghorai等人[9]基于一小组小波特征,使用SVM进行缺陷分类。与上述两种方法不同,Chu等人[8]采用了一种通用的特征提取方法并增强了SVM。从计算机视觉的角度来看,缺陷分类任务本质上是缺陷图像分类,这在复杂的缺陷图像中很难实现。为了解决这一问题,简单而直接的方法是在缺陷分类之前进行缺陷定位,使检测任务在缺陷区域而不是整个缺陷图像上进行分类,这就是缺陷检测任务。例如,[11]和[12]中的缺陷检测器首先执行0-1分类,以判断特征是否属于缺陷类别或非缺陷类别,然后根据缺陷类别特征的边界找到缺陷区域,最后执行不同的分类方法以确定缺陷的特定类别。此外,对于快速检测的要求,还有另一种简化的检测器,它只关注缺陷区域,而不管缺陷属于不同的类别[10]。

然而,基于DL的方法与上述方法截然不同。手工特征提取器局部分析单个图像并提取特征。然而,CNN需要通过大量的学习来构建所有输入数据的表示。CNN有很好的概括性和可转移性,因此有一些基于CNN的缺陷检测方法。例如,Chen和Ho[21]证明,像Overfeat[24]这样的物体探测器可以通过某种方式转换为缺陷探测器。与[18]和[19]类似,他们证明使用顺序CNN提取特征可以提高缺陷检查的分类精度。类似地,基于顺序CNN,Ren等人[17]对分类结果执行额外的缺陷分割任务,以定义缺陷的边界。此外,Natarajan等人[20]采用了更深层次的神经网络VGG19进行缺陷分类。随着CNN的深入,缺陷分类的准确率得到了进一步的提高。

2.2 适用于基线任务的骨干网络

目前有三种流行的CNN架构,它们被用作预训练的基线网络。早期成功的网络基于顺序管道结构[25],它建立了CNN的基本结构,并证明了网络深度的重要性。随后,初始网络采用了模块化单元,在不增加计算成本的情况下增加了网络的深度和宽度[26]。第三种类型是ResNet,使用剩余块使网络更深,而不会过度拟合[23]。ResNet被广泛应用于各种视觉任务中,只需几个参数即可获得有竞争力的结果。

选择合适的基线网络是DL方法获得良好结果的关键。大型网络对输入数据具有很强的表示能力,因此提取的特征具有很高的抽象性,但对训练数据的需求很大。

2.3 CNN检测器

CNN探测器的目标是通过一个边界框对每个目标进行分类和定位。它们主要分为两种方法:一种是基于区域的方法,另一种是直接回归方法。最著名的基于区域的探测器是“R-CNN系列”[27]、[28]、[14]。在这个框架中,数千个独立于类的区域建议被用于检测。基于区域的方法精度更高,但需要稍微多一些计算。有代表性的直接回归方法是YOLO[29]和SSD[30]。他们直接将图像分成小网格,然后对每个网格预测边界框,然后回归到地面真相框。直接回归法检测速度快,但在小情况下难以检测。

3. 缺陷检测网络(DDN)

在本节中,详细描述了DDN(参见图4)。CNN处理任意大小的单尺度图像,并生成ConvNet每个阶段的卷积特征图(ConvNet代表CNN的卷积部分)。我们提取多个特征映射,然后使用轻量级MFN在同一维度上聚合它们。通过这种方式,最惠国特征具有ConvNet的几个层次的特征。接下来,使用RPN[14]网络在MFN特征上生成区域建议(RoIs)。最后,通过ROI池[28]和全局平均池(GAP)层,将每个ROI对应的MFN特征转换为固定长度特征。该功能被馈入两个完全连接的(fc)层。一个是(C+1)缺陷分类层(“cls”)中的一个,另一个是边界框回归层(“loc”)。

3.1 基线卷积网络结构

正如我们所知,在ImageNet数据集上进行预训练对于实现竞争性性能非常重要,然后可以在相对较小的缺陷数据集上对该预训练模型进行微调。在本文中,我们选择最近成功的基线网络ResNet作为主干网。ResNet有以下几个吸引人的优点。

1.与同等规模的顺序管道结构CNN(ResNet50与VGG16,0.85 M与138 M参数)相比,ResNet可以在极少的参数下实现最先进的精度。这意味着ResNet具有较低的计算成本和较小的过拟合概率。

2. ResNet使用GAP来处理最终的卷积特征映射,而不是双重堆叠的fc层,这可以在某种程度上保留图像中缺陷的更全面的位置信息。

3. ResNet具有模块化的ConvNet,易于集成。

在本文中,我们选择ResNet34和ResNet50作为基线网络。两个网络的详细结构如表I所示,剩余块表示为{R2,R3,R4,R5}。

3.2 生成多级特征

以前的优秀方法仅利用高级特征来提取区域建议(如在最后一个卷积特征映射上更快的R-CNN提取建议)。为了获得高质量的区域方案,单级特征应该被扩展到多级功能。显然,最简单的方法是从多个图层组合特征地图[31]。因此,现在出现了一个问题,应该组合哪些层?有两个基本条件:不相邻,因为相邻层具有高度的局部相关性[32],以及覆盖范围,包括从低级到高级的特征。对于ResNet,最直观的方法是组合每个剩余块中的最后一层。

为了在不同层次上融合特征,在预训练模型上附加了所提出的网络MFN。MFN有四个分支,表示为{B2,B3,B4,B5},每个分支都是一个小网络。B2、B3、B4和B5依次连接到R2、R3、R4和R5的最后一层。当图像流经基线网络时,会按顺序生成Ri特征。Ri特征是指剩余块Ri最后一层的特征映射输出,i=2,5.同样,Bi特征是从MFN批次Bi的最后一层生成的特征图,i=2,5.然后,每个Ri特征被引导到产生Bi特征的MFN中的相应分支。最后,通过连接来自CNN不同阶段的B2、B3、B4和B5特征来获得多级特征。

最后,MFN具有计算效率高、泛化能力强的特点。MFN可以通过修改1×1 conv的滤波器数量来减少所需的参数。此操作可能会影响精度,但在训练数据不足的情况下可防止过度拟合。

3.3 提取区域建议

RPN通过在多级特征地图上滑动来提取区域建议。RPN将任意大小的图像作为输入,并输出锚定框(候选框),每个锚定框都有一个分数,表示它是否存在缺陷。RPN的原创性在于“锚定”方案,该方案使锚定盒具有多种尺度和纵横比。然后,将锚定框分层映射到输入图像,以便生成多尺度和纵横比的区域建议。由于最惠国功能的分辨率大小,可将RPN视为在R4功能上滑动。按照[14],我们设置了三个纵横比{1:1,1:2,2:1}。考虑到缺陷的多种尺寸,我们设置了四个尺度{642、1282、2562、5122}。因此,RPN在每个滑动位置生产12个锚箱。

区域提案提取器总是以ROI池层结束。该层对每个ROI内的特征映射执行最大池操作,将其转换为一个固定大小为W×H(本文中为7×7)的小特征向量(ResNet34为512-d,ResNet50为2048-d)。最后,基于这些小立方体,计算每个区域建议与相邻的地面真相盒的偏移量以及是否存在缺陷的概率。

4.训练

4.1 多任务损失函数

缺陷检测任务可以分为两个子任务,因此DDN有两个输出层。cls层为C+1类别(C缺陷类别加上一个背景类别)上的每个ROI输出一个离散的概率分布,k=(k1,…,kC)。通常,k由softmax函数计算。cls损失Lcls是两类(缺陷或非缺陷)的日志损失。Lcls=− 原木(k,k)∗) k在哪里∗ 这是一门基础真理课。loc层为每个C缺陷类别输出边界框回归偏移量t=(tx,ty,tw,th)。如[28]所述,loc损耗Lloc是一个平滑的L1损耗函数。Lloc=SmoothL1(t− T∗) t在哪里∗ 是与阳性样本相关的背景真相框。对于包围盒回归,我们采用t和t的参数化∗ 参见[27]

其中,下标x、y、w、a、n和h表示每个盒子的中心坐标及其宽度和高度。变量x,xa,a,n和x∗ 分别表示预测框、锚定框和地面真相框(y、w、a、n和h的规则相同)。

通过这些定义,我们最小化了一个多任务损失函数,它被定义为:

其中λ是平衡cls和loc项的权重参数。在培训期间,我们设置λ=2,表明DDN致力于实现更好的缺陷位置。P∗ 是loc术语的激活参数。定位损失仅涉及阳性样本的后续计算(p∗ = 1) 在其他情况下禁用(p∗ = 0). 我们遵循[14]中的“IOU”策略来确定锚定的阳性和阴性样本。

4.2 交替训练

对于预训练网络,MFN和RPN是新的层。因此,我们需要通过训练使这三个网络共享共同的卷积特性。预训练模型本质上是一个分类网络,由MFN生成的多级特征可以直接输入到cls层。因此,预训练网络和最惠国可以合并成一个网络,然后进行端到端训练。没有RPN,DDN的其余部分是一个检测器网络。为了与RPN共享特性,采用了[14]中的四步交替训练策略,在训练RPN和训练检测器网络之间交替进行。结合这两种策略,我们开发了一种实用的五步联合训练算法,如算法1所示。

在第2步和第3步之后,RPN和检测器网络依次用ImageNet预训练模型初始化。然而,这两个网络目前还没有共享卷积特性。他们得到它,直到步骤3和步骤4的微调过程完成。具体来说,我们冻结共享卷积层,只微调非共享层。最后,我们将两个网络合并为一个统一的网络。

4.3 实现细节

对于DDN,我们采用了以图像为中心的训练策略。图像被调整大小,使其短边为600像素。我们使用随机梯度descen进行训练,重量衰减为0.0001,动量为0.9。我们在每个小批量迭代中拍摄一张图像。探测器网络培训(包括MFN培训)的小批量大小为64,RPN培训的小批量大小为128。我们使用0.001的学习率(对于200k次小批量迭代)和0.0001的学习率(对于另外100k次小批量迭代)对模型进行微调。我们使用“Xavier”初始化所有新层[33]。为了避免过度拟合,我们还使用了几种数据增强方法,如旋转、反射和移位,但删除了退出模块。

5. 实验

5.1 NEU-DET数据集

NEU surface defect1是我们七年前开放的缺陷分类数据集[3]。热轧钢板有六种类型的缺陷,包括开裂、夹杂、斑点、麻点表面、轧屑和划痕。每个类别有300张图像,但这并不意味着一张图像包含一个缺陷。缺陷图像的示例如图5所示。

为了执行缺陷检测任务,我们提供了保存为XML文件的注释。利用它们,分类数据集升级为检测数据集。注释标记了图像中出现的每个缺陷的类别和边界框。每个边界框被视为一个groundtruth框,由其左上角和右下角坐标表示。总共有近5000个地面真相箱。为简单起见,我们将原始数据集NEU-CLS和补充数据集NEU-DET称为NEU-CLS。注释示例也如图5所示。

5.2 NEU-CLS的缺陷分类

如上所述,MFN可以合并到基线CNN中,用于缺陷分类任务。因此,我们首先报告缺陷分类的结果,以证明我们的方法可以实现与其他相关方法相比具有竞争力的准确性,并且合并MFN不会显著影响分类能力。图6显示了与其他方法相比的缺陷分类结果。根据图6,我们可以得出以下结论:

1. 具有MFN的网络可以很好地进行缺陷分类,因此多层特征仍然具有很强的语义能力;

2. 对于ResNet34,MFN对分类结果有轻微损害。然而,这种影响在更深层次的网络ResNet50中消失了。这表明,从更深层次的网络中提取的特征更加独特,因此整个网络变得更加健壮。

3. 有了MFN,ResNet34的准确度达到了ResNet50的99%,这表明,在实践中,缺陷分类任务实际上并不需要非常深的网络。

正如我们所知,更强的缺陷分类性能应该与更强的缺陷检测性能正相关。良好的分类结果是后续缺陷检测实验的前提。

5.3  NEU-DET的缺陷检测

我们在NEU-DET数据集上进行了缺陷检测实验。按照惯例,我们将NEU-DET分为训练集和测试集,并修复训练/测试分离。包含1260张图像的训练集用于微调第IV-B节中介绍的网络,以及包含540张图像的测试集。我们在测试集上将DDN与更快的R-CNN和HyperNet[34]进行了比较,两种方法都使用了他们论文中提到的相同基线网络(VGG16[40])。此外,由于类似的建议生成器,DDN和更快的R-CNN也在ResNet34\/50上进行了实验。与缺陷分类不同,在缺陷检测的情况下,只有准确度不是一个合适的性能度量。因此,我们用平均准确度(AP)来评估检测实验的结果,这是两个重要检测指标:准确度和召回率之间的一个很好的折衷。这些指数的定义如下:

其中TP、FP和FN分别代表真阳性、假阳性和假阴性的数量。还计算平均AP(mAP)来评估整体性能,即所有类别AP的平均值。

表II显示了缺陷检测实验的结果。在基线ResNet34\/50下,DNN的mAP为74.8\/82.3,比速度更快的R-CNN高出4.6\/4.4。这一结果表明,从多级特征中提取的方案优于从单级特征中提取的方案。在相同的基线网络(VGG16)下,更快的R-CNN实现了72.3的地图,HyperNet实现了74.8的地图。DNN实现了76.6的地图,比速度更快的R-CNN高4.3个点,比HyperNet高1.8个点。HyperNet也是一种基于多种特征的检测器,但我们的方法可以提取更高质量的区域建议,这将在第六节详细讨论。NEU-DET的检测结果示例如图7所示。

通过之前的缺陷分类实验,证明了MFN对分类精度的影响较小。因此,从多层次特征中提取的质量区域建议有利于地图的改进。这意味着MFN有助于提高定位精度。我们在第V-D节中具体评估了MFN的表现。

5.4 对MFN网络的分析

为了验证MFN能够提高定位精度,我们比较了几种区域建议提取器、滑动窗口、边缘框[35]和选择性搜索[36]。除了这些方法之外,RPN+MFN还与朴素的RPN(基于单级特征的提取方案)进行了比较。如果提案的质量得到改善,检测器可以使用更少的提案和更严格的IOU阈值,而不会影响召回。因此,我们在NEU-DET测试集上评估不同提案数量和IOU阈值的召回率。提案数量是通过这些方法选择的排名前K的地区提案。IOU表示预测框和基本真值框的交集和并集之间的比率。

图8显示了在三个不同数量的区域建议下,具有不同IOU阈值的缺陷召回率。借据门槛越大,选择方案的质量就越高。毫不奇怪,基于卷积特征的方法的性能明显高于没有CNN的方法[37]。当IOU>0.7时,与RPN+MFN相比,幼稚RPN的召回率急剧下降。朴素的RPN只从高级功能中提取建议,一些位置信息由前面的分层过滤导致提案质量下降。随着提案数量的增加,当IOU>0.7时,朴素RPN的下降幅度更大。这是因为RPN提取了太多低质量的提案,而且随着提案的增加,这种情况更加明显。朴素的RPN在严格的IOU阈值(例如,IOU>0.7)下工作不好。MFN可以帮助RPN从低级和中级特征中获取位置信息,这使得RPN对严格的IOU阈值具有更高的容忍度。

增加提案数量可以获得有希望的召回,但这将大大增加检测的运行时间[38],更糟糕的是,检测过程中会涉及低质量提案,在某些情况下会导致缺陷检测失败。因此,一个好的检测器应该选择尽可能少的方案,同时选择一个相对严格的IOU阈值。图9显示了在三个不同的IOU阈值下,具有不同数量提案的缺陷召回。naive RPN通过top300提案实现了理想的召回,但RPN+MFN只需要top 100提案就可以获得类似的性能。

如图10所示,对于带有ResNet34的RPN+MFN,我们通过只选择50个方案,实现了选择300个方案时92%的性能,这将运行时间减少了一半。我们认为,在实际缺陷检测任务中,选择前50名方案是一个很好的折衷方案。

6. 讨论

6.1 使用MFN网络融合骨干网络的哪几层输出?

MFN将不同级别的特征组合成一个多级特征,这对于提高检测效率是有效的。在第III-B节中,简要讨论了应组合哪些层。在DDN中,我们选择四个层,它们是R1、R2、R3和R4的最后一层。因此,这四层的其他组合方式是否会产生更好的性能。因此,我们在NEU-DET数据集上以五种不同的组合方式训练DDN+ResNet34。如表三所示,将所有四层结合在一起的效果优于其他方式。结果表明,多级特征对提高检测精度是有效的。

此外,对于缺陷检测,低级别特征(例如R1特征)应该比高级别特征(例如R5特征)更受关注,因为R2特征比R5特征具有更丰富的位置信息。

6.2 简单的设计对MFN网络有效么?

MFN的主要作用是在分辨率和维度上统一不同层次的特征。为了保持维度一致,一种简单的方法是使用1×1 conv来减少/增加维度。1×1 conv有两种放置模式:前置和后置。前置模式意味着在连接多级功能之前放置1×1 conv。我们在本文中使用的是前置模式,即在MFN的每个分支的末端放置一个1×1 conv,而后置模式意味着在串联多层次特征之后放置一个1×1 conv。这种模式看起来很简单,但实际上需要更多参数。与[34]类似,我们使用多个5×5 conv同时统一分辨率和维度。然而,5×5 conv是一种昂贵的操作,其效果与双层3×3 conv相同,但需要额外的参数。表四详细显示了三种模式的可比结果。前置样式使用的参数比后置样式少三倍,比hyperstyle少五倍。因此,前置式MFN不太可能过度安装。此外,在分辨率相同的情况下,最惠国功能可以保留更完整的信息,因为它比超功能(512对126)更大的维度。

6.3 是否需要更多的检测数据集

正如我们所知,目标检测器可以通过更多的训练数据来提高性能[39]。因此,该规则是否也适用于工业缺陷数据?为了弄清这个问题,我们不仅在完整的NEU-DET数据集上训练DDN,而且在每个子集上分别训练DDN。如图11所示,对于每个缺陷类别的AP,单独培训的表现通常比完整培训差。具体而言,银纹、轧入鳞片和划痕急剧下降,而夹杂物、补丁和凹坑表面呈现中度下降。这可能是因为前者比后者需要更多的学习数据。虽然训练数据总量相同,但结果却出现了显著差异。我们认为,更多的训练数据可以提高CNN对特殊情况的表示能力。也就是说,如果DDN可以在更多检测数据上进行训练,AP也可能会得到改善。最后,需要强调的是,其他类型的训练数据可能是无用的(例如,公共对象),因为DDN在ImageNet预训练模型上进行了微调。

6.4 失效案例分析

虽然我们的方法总体上取得了有希望的结果,但在某些情况下,对于缺陷类别,如“银纹”、“包含”、“补丁”和“滚入规模”,性能较差结合图7所示的成功案例,我们可视化了一些失败的检测结果图片,如图12所示,并进行分析且尝试探索检测不满意的原因。我们可以观察到,DDN对连续线性“银纹”缺陷具有鲁棒性,但未能在图12(a)的右下角找到不连续缺陷。这意味着难以正确识别过度区分的缺陷,由于提供的缺陷数据不全面。如图12(b)所示,很难定义令人困惑的缺陷,甚至人眼也无法准确地将其与背景区分开来。图12(c)所示的两种缺陷“夹杂”和“补片”重叠,“夹杂”得分较低。毫无疑问,DDN具有处理重叠缺陷的能力且成功的案例展示在图7(f)中。我们猜测原因是图中的“包含”和“补丁”是相似的,当它们非常接近时,它们会相互影响。对于“滚入比例”,边界框可能会忽略图12(d)所示的一些边缘缺陷,因为这些缺陷过于分散,无法定义其范围。目前还需要一种更理想的缺陷检测器,因为仍有改进的余地。

7.总结

本文提出了一种钢板缺陷检测系统DDN。该系统是一个DL网络,可以通过融合多层次特征来获取缺陷的特定类别和详细位置。对于缺陷检测任务,我们的系统可以为质量评估系统提供详细而有价值的指标,例如缺陷的数量、类别、复杂性和面积。此外,我们还建立了一个珍贵的缺陷检测数据集NEU-DET。实验表明,DDN对缺陷分类任务的准确率为99.67%,对缺陷检测任务的准确率为82.3%。此外,系统可以以20英尺/秒的检测速度运行,同时将地图保持在70英尺/秒。

在该特性中,我们将重点关注以下两个方向:一个是数据增强技术,因为检测数据集中需要昂贵的手动注释。另一种是利用DL技术进行缺陷分割,可以获得更精确的缺陷边界。

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

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值