IM-IAD:工业制造中的工业图像异常检测基准 | IM-IAD: Industrial Image Anomaly Detection Benchmark in Manufacturing

论文:https://arxiv.org/pdf/2301.13359.pdf

github:https://github.com/M-3LAB/open-iad

目录

论文目的

摘要

1.介绍

2.相关工作

无监督IAD

全监督IAD

少量样本IAD

带噪IAD

持续IAD

3.IM-IAD

3.1问题定义

3.2实施细节

3.3统一视角

3.4开放挑战

4.结果与讨论

4.1总体比较

4.2逻辑IAD中全局特征的作用

4.3全监督IAD的异常数据

4.4基于特征嵌入的少量样本IAD中的旋转增强

4.5带噪IAD中的重要性重新加权

4.6用于持续IAD的记忆内存库方法

4.7对IM-IAD的统一视角

5.结论

6.个人总结与感悟


论文目的

详细讨论了工业制造领域中图像异常检测(IAD)的现状、挑战、以及一个新提出的综合性评估基准IM-IAD。

摘要

图像异常检测(IAD)是工业制造(IM)领域中新兴且至关重要的计算机视觉任务。最近,许多先进的算法被报道出来,但它们在不同的工业制造环境下的表现有很大的偏差。研究者意识到,缺乏一个统一的工业制造基准正在阻碍IAD方法在真实世界应用中的发展和使用。此外,没有统一基准,研究者很难分析IAD算法。为了解决这个问题,本文首次提出了一个统一的工业制造基准,以评估这些算法的表现,包括不同级别的监督(无监督与全监督)、学习范式(少量样本、持续学习和带噪声标签)和效率(内存使用和推理速度)。并构建了一个全面的图像异常检测基准(IM-IAD),包括七个主要数据集上的19种算法,采用统一设置。在IM-IAD上进行的广泛实验(总共17,017次)提供了关于IAD算法重新设计或选择的深入见解。此外,所提出的IM-IAD基准挑战了现有算法,并建议了未来的研究方向。

1.介绍

当前,很少有IAD算法在实际的工业制造中被使用,IAD领域迫切需要一个统一的基准来弥合学术研究和实际应用之间的差距。尽管如此,当前的计算机视觉社区研究主要集中在无监督学习上,很少有工作致力于分析行业的需求。因此,构建一个用于工业制造的统一基准是重要且紧迫的。

为了解决这一挑战,本文提出了首个统一的工业制造基准IM-IAD,以评估这些算法在不同的监督水平(无监督与完全监督)、学习范式(少量样本学习、持续学习和噪声标签学习)以及效率(内存使用和推理速度)方面的表现。IM-IAD基准包括了19种算法在七个主要数据集上的综合评估,旨在提供深入的见解,以促进IAD算法的重新设计或选择,并挑战现有算法,指出未来研究方向。

文章提出了几个IAD领域的关键问题有待解决:

1)首先IAD算法优先考虑更高的准确性但忽略了推理速度和GPU内存大小,这阻碍了IAD算法在工厂中的使用。

2)由于商业隐私的原因,很难收集许多正常样本进行训练;如果训练样本数量有限,IAD算法的性能几乎无法满足工业制造的要求。

3)大多数现有的IAD算法因为不具备持续学习能力而遭受灾难性遗忘。

4)由于缺陷尺寸很小,错误标注不可避免地会发生。结果是,一些训练数据集中的异常样本被标记为正常。带噪声的训练数据集将导致算法性能的下降。

在这篇论文中,研究者通过广泛实验解决了IAD中的上述问题,并在过程中总结了如下收获:

1)在准确性、内存使用和推理速度方面,没有一种基准的无监督IAD算法在统计上显著优于其他算法,这强调了选择异常类型的重要性。

2)长距离注意力机制在逻辑IAD中显示出巨大潜力,可能归因于其全局特征提取能力。

3)完全监督方法表现出比无监督IAD更优越的性能。这可以归因于将标记的异常纳入训练过程显著增强了IAD能力。

4)仅通过4个增强(旋转)数据,基于特征嵌入的少量样本IAD算法可以达到vanilla IAD的95%性能,揭示了数据特性的必要性。

5)即使噪声比例大于10%,重要性重新加权也成功提高了IAD算法的韧性。

6)内存库可以无缝集成到先进的IAD算法中,大大增强了它们抵抗灾难性遗忘的能力。

本文的主要贡献如下(原文翻译):

1)我们从制造过程中提取科学问题,并提出了一个标准化和统一的基准,以弥合学术研究和工业实践在图像异常识别中的差距。

2)我们在7个基准数据集上检验了16种IAD方法,共计17,017个实例。此外,我们提出了一个即插即用和模块化的实现,以公平评估IAD,这极大地促进了IAD算法的未来发展。

3)通过分析研究和工业制造过程的要求,我们检验了IAD算法的四个关键方面进行比较:基于变换的少量样本表示能力;准确性和效率之间的权衡;灾难性遗忘现象;以及算法在噪声标记存在时的鲁棒性。基于这些方面,我们提供了深入的见解并建议了未来的研究方向。

图一 IM-IAD在数据集、学习范式、算法和度量标准进行了全面测试

2.相关工作

这一章节主要展示了当前的各种IAD方法,总结如下(红色部分标注该方法当前短处)

无监督IAD

1)基于特征嵌入的方法:依赖于提取图像的特征表示,包括教师-学生模型、归一化流、内存库和单类分类。它们通过对正常图像特征的学习和比较来检测异常。

2)基于重构的方法:使用如自编码器、生成对抗网络、变换器和扩散模型的方法尝试重建输入图像,通过分析重构误差来识别异常。

这两种方法都严重依赖于教师网络的能力或内存库的大小,这可能限制了它们在实际工业中的泛化能力。

全监督IAD

使用正常和异常图像进行训练,专注于利用有限数量的异常样本来区分正常和异常特征。然而,一些全监督IAD方法的性能不如无监督方法,同时关于如何使用异常样本数据,仍有很大的改进空间。

少量样本IAD

少量样本IAD(包括零样本IAD)旨在使用极少数的训练样本来检测异常。这些方法通过设计高效的视觉等距不变特征或利用先进的模型如CLIP来解决冷启动问题。最近,一些方法在零样本场景下使用视觉语言模型的理解能力达到了新的最先进结果,但这些模型的大小过大,无法在真实生产线上部署。由于工业场景的实际需求(样本难以获取),少量样本学习仍将是异常检测未来研究的重点。

带噪IAD

使用带噪声的数据进行训练是实际中不可避免的问题,面对训练数据中存在的噪声问题,这类方法试图在带噪声的训练数据中有效地检测异常,例如通过补丁级别的去噪或内部关系学习来增强模型的表示能力。SoftPatch首次有效地以无监督的方式在补丁级别去噪数据。InReaCh通过学习图像内部关系来加强模型的表示能力,即使在人为损坏的数据上训练也能达到接近最先进(SOTA)的结果。

持续IAD

集成了持续学习的IAD方法关注在新类别数据集上训练后如何避免灾难性遗忘。这涉及到算法在不断变化的数据流上的适应性和鲁棒性。对于首次引入工业IAD的持续学习基准,其设置忽略了不同数据集之间的大域差异,比如LeMO关注在一个类别内的持续学习问题,然而,忽略了类别间遗忘的问题。

 

图二 当前IAD领域的各种代表性方法原理简图

本章提供了对当前IAD方法的全面回顾,展示了它们在处理工业图像异常检测问题时的多样性和复杂性。无监督方法利用了只有正常样本的训练集,而全监督方法则利用了异常样本。少量样本和零样本IAD旨在处理训练样本极少的情况,而带噪IAD和持续IAD则分别解决训练数据质量不一和模型在持续学习环境中的稳定性问题。这些方法的多样性和特点指出了在实际应用中选择合适IAD策略的重要性,同时也揭示了未来研究的潜在方向。

3.IM-IAD

这一章节总结了IM-IAD中五种设置的定义,然后总结基线方法、主流数据集、评估指标和超参数的实施细节。

3.1问题定义

IAD的目标是,给定来自目标类别的正常或异常样本,异常检测模型应预测图像是否异常,并在预测结果为异常时定位异常区域。以下为五种设置:

无监督IAD:训练集只包含每个类别的m个正常样本。测试集包含正常和异常样本。

有监督IAD:训练集由m个正常样本和n个异常样本组成,其中n远小于m。在本文的案例中,研究者将n设置为10。

少量样本IAD:给定只有m个正常样本的训练集,其中m ≤ 8,来自某个特定类别。目标类别的m的数量分别可以是1、2、4和8。

带噪IAD:给定一个由m个正常样本和n个异常样本组成的训练集,n最多为m+n的20%。并且在训练数据集中,n个异常样本被标记为正常样本。

持续IAD:给定一个有限的训练数据集序列T_{training}^{total}=\left \{ T_{training}^{1},T_{training}^{2}, ...,T_{training}^{n}\right \},其中子集T_{training}^{i}由来自某一特定类别c_{i}的正常样本组成,i\epsilon n。在CL场景下,IAD算法对每个类别数据集T_{training}^{i}。在测试中,更新的模型分别在以前数据集的每个类别T_{test}^{total}上进行评估,其中T_{test}^{total}=\left \{ T_{test}^{1},T_{test}^{2}, ...,T_{test}^{n}\right \}

3.2实施细节

1)对于设置基准算法:下图中列举出16种基准IAD算法(用紫色标记),这些算法在监督级别(全监督和无监督)、抗噪声能力、数据高效适应的便利性(少量样本)和克服灾难性遗忘的能力方面具有代表性,并在大多数工业图像数据集上实现了最先进(SOTA)的性能,它们被称为vanilla方法,并在IM设置中进行比较。

图三 IM-IAD中的代表性算法,紫色为基准方法

2)对于数据集的使用:IM-IAD中使用了七个公开数据集,包括MVTec AD、MVTec LOCO-AD、MPDD、BTAD、VisA、MTD和DAGM。下图提供了这些数据集的概览,包括样本数量(正常和异常样本)、类别数量、异常类型和图像分辨率。所有数据集都提供了像素级注释。(DAGM是一个合成数据集,MVTec LOCO-AD提出了逻辑IAD,VisA提出了多实例IAD)

图四 IM-IAD数据集的比较

3)对于异常评估:关于结构异常,采用接收者操作特征曲线下面积(AU-ROC/AUC)、精确率-召回率下面积(AUPR/AP)和PRO来评估异常定位的能力。关于逻辑异常,采用sPRO来衡量逻辑缺陷检测的能力。此外,本文还使用遗忘度量(FM)来评估抵抗灾难性遗忘的能力。相关公式展示在下图。(结构异常指的是物理损伤、缺陷或者产品表面的不规则性,如裂缝、划痕、凹陷、锈蚀等;逻辑异常指的是由于组件的缺失、错误结构、位移导致的异常。)

图五 IM-IAD使用的衡量标准

4)下图展示了IM-IAD的超参数设置,包括训练周期、批次大小、图像大小和学习率。详细信息可以在Github上找到。

图六 IM-IAD超参数设置

3.3统一视角

对于不同设置的IAD测试没有统一标准,而IM-IAD为连接不同的现有设置架起了桥梁。

1)从训练数据集的角度来看,训练样本的类型和数量是五种设置的主要差异。其中无监督IAD算法只使用正常数据集进行训练。相反,全监督IAD和带噪声IAD在训练阶段纳入有限量的异常样本。少量样本IAD使用有限数量的正常样本(≤8)进行训练。

2)从应用的角度来看,IM-IAD旨在适应实际生产线中的不同场景。由于收集大量异常样本进行训练很困难,无监督IAD被设计用于仅使用正常训练样本的一般情况。少量样本IAD旨在解决单一装配线场景中的冷启动挑战,其中正常样本有限。持续IAD的目标是解决将IAD模型集成到回收装配线时发生的灾难性遗忘问题。带噪声IAD尝试消除受污染训练数据造成的副作用。全监督IAD旨在提高异常样本利用的效率,因为标注异常是昂贵的。

总体来说,通过提出IM-IAD框架,研究者可以从一个统一的视角出发,综合考虑训练数据集的类型、数量和应用场景的多样性,来探索和开发更有效的IAD算法。

3.4开放挑战

关于IM-IAD的设置,以下是需要研究的挑战性问题的总结(原文翻译):

1)全监督IAD的剩余挑战是如何有效利用有限的异常数据和大量正常样本来检测异常。

2)对于少量样本IAD,我们的目标是使用训练集中少量的正常或异常图像来检测测试集中的异常。主要障碍是:i) 在少量样本设置中,每个类别的训练数据集只包含正常样本,意味着没有图像或像素级的注释。ii) 训练集的正常样本很少。在我们提出的设置中,训练样本少于八个。

3)我们尝试在存在噪声的情况下,给定目标类别检测异常样本并识别异常。例如,假设清洁的训练数据仅由正常样本组成。而受污染的训练数据包含错误标记为正常的噪声样本,即标签翻转。异常样本很容易被误标为正常,因为异常太小而难以识别。最重要的障碍总结如下。i) 每个类别的训练集包含可能容易混淆IAD算法决策阈值的噪声数据。ii) 噪声数据量大。这里,训练集中异常样本的百分比从5%到20%不等。因此,带噪声的IAD旨在评估当前无监督IAD方法在面对受污染数据时的韧性。

4)对于图二(f)中呈现的持续IAD,最大的挑战是当IAD算法完成对新类别数据集的训练后,可能会遭受灾难性遗忘。

4.结果与讨论

这部分总结不同IAD测试后的结果与分析,对于测试前数据的详细设置参考原文第四部分各个小节,这里不详细说明。

4.1总体比较

图8统计结果表明,没有一个算法能在所有数据集上都是优胜者。此外,图2(a)和图2(b)显示,在GPU准确性、推理速度和内存使用方面没有占优势的解决方案。具体来说,表VI指出,作为最先进的基于内存库方法之一的PatchCore,在MVTec AD上的表现优于MVTec LOCO-AD。因为PatchCore架构专注于结构性异常,而不是逻辑异常,MVTec AD和MVTec LOCO-AD之间的主要区别在于异常类型。(章节3.2中提到了两种异常的区别,这里再用一张图直观展示其区别)

图七 左侧三列(红色标注)显示结构异常,右侧三列(蓝色标注)显示逻辑异常

对于内存使用和推理速度。从图7来看,就准确性、内存使用和推理时间而言,没有占优势的IAD方法。PatchCore在图像AUC方面实现了SOTA性能,但没有利用内存使用和推理时间的优势。在实际场景中,必须充分考虑内存使用和推理速度。因此,当前先进的IAD算法无法满足IM的要求。

图八 在 MVTec AD 和 LOCO-AD 算法下,Vanilla IAD 算法在图像 AUC ↑、推理时间和 GPU 内存方面的可视化效果。Y 轴表示 IAD 模型的性能。X 轴表示每幅图像的推理时间。圆圈的大小表示 IAD 模型在测试阶段的 GPU 内存消耗,越小越好。

图九 使用 5 个指标对 7 个数据集的 vanilla IAD 算法进行比较。使用 0.05 集成参数报告 spro。最佳和次佳结果分别用红色和蓝色标出

使用图像级还是像素级评估?研究者通常使用图像级和像素级指标来评估IAD算法的分类性能。实际上,图像级指标用于判断整个产品是否异常,而像素级指标指示异常定位性能。具体来说,像素级指标可以评估缺陷程度,这与产品价格密切相关。较低的缺陷程度意味着较高的价格,反之亦然。根据图7,PatchCore在图像AUROC上表现良好,但在像素AP上表现不佳,反之亦然。这两种类型的指标标志着IAD算法的不同能力,对于IM来说都非常重要。因此,迫切需要开发在图像级指标和像素级指标方面都表现出色的创新IAD算法。

如何使用视觉异常的类型有效地选择和设计无监督算法?基于异常类型的算法选择至关重要,但在这一领域的研究不足。由于产品线专家可以提供异常类型的信息,提前了解视觉异常的类型是合适的。换句话说,无监督算法中的异常类型知识可以被视为监督信息。因此,算法设计者在开发算法时应考虑异常类型。(即通过预先了解异常类型,比如图钉容易弯曲;药片表面容易破损,提前根据不同异常类型设计相应的IAD方法至关重要)

4.2逻辑IAD中全局特征的作用

介绍逻辑IAD:逻辑异常不仅仅是物理上的缺陷(如划痕、凹陷等),而是涉及到产品的组装错误、部件缺失或位置错误等问题。这要求IAD算法不仅要识别图像上的异常模式,还需要理解产品的组装逻辑或结构逻辑。逻辑IAD更加依赖于全局特征的提取,因为识别逻辑异常需要对整个产品或其组成部分的全局布局和关系有一个综合理解。这与那些主要依赖局部特征来识别物理缺陷的传统IAD方法有所不同。

如下图所示,基线方法GCAD优于所有无监督IAD方法GCAD 的关键思想是通过瓶颈架构将每个像素的特征描述符编码成一个全局特征。现有的无监督IAD方法的缺点是它们的架构没有优化以获取全局特征。

图十 mvtec loco-ad 的逻辑异常、结构异常及其平均值基准。最佳和次佳结果用红色和蓝色标出。

4.3全监督IAD的异常数据

全监督IAD算法使用测试样本和训练样本之间的距离来预测异常核心思想是异常和正常样本的特征非常不同。例如,DevNet 提出使用偏差损失函数来强制所有异常与正常样本的统计偏差。从下图中,可以看到全监督IAD方法的性能在像素级别大大超过了无监督方法(如PatchCore)。这证明了纳入异常样本进行训练的有效性。

图十一 在完全监督设置下的性能。最佳和次佳结果分别用红色和蓝色标出

提高全监督IAD方法中异常样本的效能是至关重要的。因为在实际应用中与异常标签相关的高成本。平均而言,每个工作人员花费三小时完成每张图像的像素标签。在后续研究中,研究人员必须开发更高效的全监督IAD算法。该算法应在保持IAD准确性的同时减少训练所需的异常样本数量。

4.4基于特征嵌入的少量样本IAD中的旋转增强

下图可以看出CutPaste、STPM和PatchCore的性能与基础模型RegAD相当。本文尝试使用数据增强在IM少量样本设置中提高性能。统计结果表明,大多数数据增强方法足以提高少量样本IAD的性能。此外,研究者发现旋转是最优的增强方法,因为大多数实时工业图像可以通过旋转转换成另一张图像,如金属螺母和螺丝。

图十二  MVTec AD和MPDD上的少量样本IAD基准测试,Y 轴表示度量值,X 轴表示样本数量

合成异常样本是必要但困难的。之前,研究人员专注于为正常图像开发数据增强方法。然而,很少有努力合成异常样本。由于工业环境中的无故障生产线,收集大量异常样本非常困难。将来,应更多关注异常合成方法,如CutPaste和DRAEM。

4.5带噪IAD中的重要性重新加权

根据下图中呈现的统计发现,当处理有限的噪声水平(≤0.15)时,基于特征嵌入的方法比IGD更有效。

图十三 在MVTec AD和MPDD数据集上,不同噪声比例下带噪声IAD方法的图像AUC↑。最佳和次佳结果分别用红色和蓝色标记

为了识别原因,本文对代表性的基于特征嵌入的方法PatchCore进行了彻底的调查。在训练阶段,目标是建立一个记忆库,该记忆库默认使用WideResNet-50作为特征提取模型。记忆库的核心采样旨在平衡记忆库的大小与IAD性能。

用于构建特征存储器的算法:

在推理中,如果至少有一个补丁是异常的,测试图像将被预测为异常,通过每个补丁特征的分数计算像素级别的异常分割。特别是,使用正常补丁特征库M,测试图像x^{test}的图像级异常分数s通过测试图像的补丁特征P(x^{test})及其在M中的最近邻m^{*}之间的最大分数s来计算:

为增强鲁棒性,PatchCore 采用了重要性重新加权法来调整异常得分 s:

N_{b}(m^{*})表示对于测试补丁特征m^{*},在M中的b个最近的补丁特征。此外还进行了消融研究来验证重新加权的效果。下图的统计结果显示,当噪声比例大于10%时,重新加权提高了IAD算法的韧性。

图十四 不同噪声比和邻域数下 patchcore 图像 auroc ↑。最佳和次佳结果分别用红色和蓝色标出。

(在Real3D-AD中,其中的异常检测方法Reg3D-AD便是受PatchCore的启发)

所以,样本选择对于提高IAD的鲁棒性至关重要。样本选择在未来有极大的潜力,因为它可以与当前的IAD方法无缝集成。(即在面对较高噪声水平的情况下,适当调整训练样本的权重可以帮助模型更好地处理带有误标的数据,从而提高对异常的检测准确性)

4.6用于持续IAD的记忆内存库方法

下图显示,在所有无监督 IAD 中,基于记忆库的方法在克服灾难性遗忘问题方面表现令人满意,尽管这些方法并未明确提出用于持续IAD的设置主要思想是,重放方法非常适合基于内存的IAD算法。基于内存库的方法可以轻松添加新记忆以减少在学习新任务时的遗忘。

图十五 在持续设置中,根据遗忘度量(FM)的性能。最佳和次佳结果分别用红色和蓝色标记。

在持续IAD设置中,限制内存数据库的大小并最小化来自先前任务的干扰至关重要。在学习新任务时,简单地添加更多记忆会显著减慢推理时间并增加存储使用。对于固定的存储需求,建议使用存储采样来限制可以存储的实例数量。此外,新任务的记忆可能与先前任务的记忆重叠,导致IAD性能下降。因此,主要挑战是设计一种新的约束优化损失函数来避免任务干扰。

4.7对IM-IAD的统一视角

如下图所示,PatchCore在IM-IAD中达到了SOTA结果。然而,从图八可以看出,与其他IAD算法相比,PatchCore在GPU内存使用和推理时间方面较差,这使得其在实际场景中的使用变得具有挑战性。此外,如果对象类别超过100,维持内存库大小是现实部署的一个关键问题。

图十六  在IM-IAD设置下,基准测试了代表性的基础IAD算法,包括少量样本、带噪声标签、持续学习。最佳和次佳结果分别用红色和蓝色标记。

多目标神经架构搜索(NAS)是IAD中寻找最优权衡架构的一个极有前景的方向。如果IAD模型可以在实践中应用,需要满足许多目标,如快速的推理速度、低内存使用和持续学习能力。因为用于生产线的边缘设备的内存容量受到严重限制。此外,当测试样本在生产线上顺序流式传输时,大多数IAD方法无法立即预测新测试样本的到来。

5.结论

本文总结如下(原文翻译):

在本文中,我们介绍了IM-IAD,迄今为止最完整的基于工业制造的IAD基准测试,包括19种算法、7个数据集和5种设置。我们深入了解了全监督学习中部分标签的重要性、噪声设置中噪声比例的影响、持续学习的设计原则,以及逻辑异常中全局特征的重要作用。基于这些,我们提出了几条工业IAD未来研究的有趣方向。

6.个人总结与感悟

本文重点讨论了当前各种工业IAD的性能分析,可行性,未来发展与当前局限,通过大量数据分析对当前所有具有代表性的IAD进行了基准测试,给出了目前最全面的工业IAD基准测试:IM-IAD,从而帮助推动这一领域技术的发展和创新。

文章包含了大量的测试内容与统计表格😱,阅读过程中通过结合图表与分析内容一起思考,可以更好理解不同IAD为什么在某个数据集的某种设置下的表现优异,而在某些设置下表现不佳。接下来继续尝试使用文章源码测试来进一步理解文章内容。

  • 41
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
华为iad132用户手册是一本详细介绍华为iad132产品的使用方法和操作指南的手册。该手册内容丰富,清晰易懂,适合所有用户使用。 首先,手册会详细介绍iad132的外观和主要功能。它会对每一个按钮、接口进行示意图和文字解释,方便用户快速掌握设备的外观和功能布局。 其次,手册会介绍断电启动、以太网连接、Wi-Fi设置等基本设置步骤。通过手册的指引,用户可以轻松完成iad132的初次设置,并与网络进行连接,为后续的使用打下基础。 除此之外,手册还会详细介绍iad132的高级功能,比如QoS配置、安全性设置、VPN网络建立等。通过手册的介绍,用户可以了解如何根据自己的需求进行配置,以提高网络的运行效率和安全性。 此外,手册还会列举常见问题及解决方法,以帮助用户在使用过程遇到问题时能够及时解决。这其包括网络连接问题、无线信号强度问题等,用户可以根据手册提供的解决方案进行操作,解决问题。 最后,手册还会附上iad132的技术规格和注意事项。技术规格会详细列出设备的硬件参数和性能指标,方便用户了解设备的性能和适用范围。注意事项则会提醒用户在使用过程需要注意的事项,以避免不必要的损失和风险。 总之,华为iad132用户手册通过详细的介绍和操作指南,能够帮助用户快速掌握iad132设备的使用方法和配置技巧,为用户提供便捷的网络体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值