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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> CVPR2021论文翻译:Yang Interactive Self-Training With Mean Teachers for Semi-Supervised Object Detection -> 正文阅读

[人工智能]CVPR2021论文翻译:Yang Interactive Self-Training With Mean Teachers for Semi-Supervised Object Detection

前言

论文地址:
https://openaccess.thecvf.com/content/CVPR2021/papers/Yang_Interactive_Self-Training_With_Mean_Teachers_for_Semi-Supervised_Object_Detection_CVPR_2021_paper.pdf

Abstract(摘要)

半监督目标检测的目的是为了使用少量的标注数据和大量的未标注数据进行学习一个模型,从而降低了数据标签的成本。即使少量的研究已经提供了多种基于自训练的方法或基于一致性正则化方法,但他们忽略了在不同训练迭代期间的同一图像中的检测结果中的差异。另外,在不同的检测模型里,被预测的检测结果也不一样。在这篇论文里,我们使用半监督目标检测里面的平均教师方法提供了一个交互自训练形式。特别地,为了减轻在不同迭代里目标检测结果地不稳定性,我们提出使用非极大值抑制的方法去融合不同迭代中目标检测结果。同时,我们使用多目标检测头去预测伪标签以相互提供互补信息。除此之外,为了避免不同检测头相互崩溃,我们使用一个平均教师模型代替原来的检测模型去预测伪坐标。因此,这个目标检测模型可以在标记数据和未标记数据上训练。广泛的实验结果验证了我们提出的方法的有效性。

1.Introduction(介绍)

近年来,随着深度卷积神经网络的成功应用,目标检测已经经历了重大进步。这些方法大致可以分为两类:单阶段目标检测和双阶段目标检测。然而,这些方法需要大量的像素级别已经标注好的训练样本,这个需求限制了它们的扩展能力。为了减少标注的花费,弱监督学习和半监督学习逐渐引起了关注。弱监督目标检测算法需要图片级标注,然而半监督目标检测算法需要大量的未标注数据和少量的像素级标注数据。弱半监督目标检测算法使用全标记数据和弱标记数据。在这篇论文,我们的目的是使用半监督去利用未标注数据去进一步改善目标检测的性能。
即使半监督学习已经在很多任务上(如图像分类)被广泛地应用,但是仅仅有少量的工作在关注如何将半监督学习算法应用到目标检测上。把半监督学习应用到目标检测的挑战在于每一张图可能有多个目标,且每个目标检测方法都要回归每个目标的位置,如图1所示。
在这里插入图片描述
最近,半监督学习目标检测算法可以被分为两类:基于自训练的方法和基于一致性正则化方法。基于自训练的方法使用一个预训练模型来评估未标记图像的伪标,然后用已标和未标的数据训练模型。然而,伪标只有一次,并且他们在半监督训练中保持不变(在半监督学习处理过程中,不正确的伪标通常不会被修正,因此,这种模型提供的改进是有限的)。相反,基于一致性正则化方法使得不同形式的数据增强下,相同的未标记图片的输出结果的一致。然而,这种方法忽略了不同迭代的输出的差异。
为了克服上面提到的挑战,我们将不同迭代和模型输出的检测结果看作一个整体而不是使用固定的伪标。在训练时,这个方法会评估当前批量未标记图片的最新检测结果来改善伪标。然而,如图1的(a)和(b)所示,来自不同迭代的检测结果是不同的。如果我们直接使用这个结果作为未标记数据的伪标,这个训练过程将会很难有意义。除此之外,如图1的?和(d)所示,来自不同检测模型(或者不同感兴趣头网络)的检测结果也不同,这意味着他们可能包含互补信息。因此,一个模型的检测结果有改善另一个模型的潜能。
在这篇论文里,我们提供用使用平均教师的交互式自训练方法作为半监督目标检测。具体来说,为了在半监督训练中确保模型融合时改进伪标的质量,我们将历史伪标保存在内存中,并且对历史伪标使用非极大值抑制去融合成最新的检测结果。然后我们更新伪标签内存库,这个被存储的伪标签内存库作为未标注数据最终的伪标签。第二,我们使用两个不同结构的ROI head从未标注数据中挖掘弥补信息。而且,为了避免过拟合和防止这两个ROI heads 达到同样的值,我们为每个student ROI head使用mean teacher方法去评估检测结果和为其他student ROI head 提供伪标签。相比于现有的基于自训练的目标检测方法,我们的方法通过使用mean teachers方法作为一个整体实现交互自训练,从而达到结合不同迭代和不同ROI heads中的知识。
这项工作的主要贡献总结如下。(1)我们提出使用NMS去从历史伪标中融合最新的检测结果来改进伪标的质量和稳定半监督的训练过程。(2)我们第一次为平均教师增强半监督目标检测的方法提出交互自学习方法,并且在里面用ROI heads评估伪标签。我们提供的方法在MS-COCO数据集上和PASCAL-VOC数据集上达到了半监督目标检测领域的state-of-the-art。为了验证每个组件的有效性,我们还提供了一个ablation study和一个进一步分析。

2.Related Works(相关工作)

目标检测:目标检测是一个已经被广泛研究的基础计算机视觉任务。目标检测根据是否使用区域推荐网络(RPN)可以分成两类:两阶段方法和单阶段方法。许多两阶段目标检测算法是基于确定感兴趣区域。Ren et al. 提出Faster-RCNN,里面实现了大量改进和对许多后续的研究提供了基础。然而,这些方法需要大量的像素级标注样本去训练检测网络,这个限制了他们的扩展。
半监督学习:半监督学习方法在使用深度学习进行图像分类方面已经取得了很进步。基于一致性正则化方法在输入图像中应用扰动并且最小化预测结果的不同。这个方法不需要已标注样本因为损失函数是由输出的不同决定的。基于一致性正则化方法以帮助平滑manifold而著名。基于自训练方法首先使用监督学习训练一些已经标注的数据得到一个模型,然后在大量未标注数据上预测伪标签,然而,网络结构设计的复杂性和目标检测的多任务学习阻碍了将现有的半监督学习算法从图像分类任务转到目标检测任务。
半监督目标检测:自训练在训练过程中通过利用高置信度伪标样本改进模型。然而,执行这些方法所需要的数据增强是非常耗时的,并且产生的性能范围主要取决于为标签的质量。尤其,Sohn等人提出将强数据增强应用到未标注数据图片上以避免过拟合的基于自训练的方法。然而,这种数据增强是在逐个案例上设计的,并且一种设计在不同的场景可能不是最优,这显著增加了训练一个目标检测模型的难度。从另一个角度,Jeong等人提出基于一致性正则化方法使对称未标注数据的输出一致。现有的全方位学习方法是低限制的,因为它需要在现有的已标注数据上展现,并且需要大量已标注数据和互联网级别的未标注数据。

3.Method(方法)

3.1.Preliminary(准备工作)

我们首先为半监督目标检测问题定义一些符号。假设已标注数据集为且未标注数据集为,且每个已标注数据有多个目标,且和分别代表真实框的类别和坐标。为了简单起见,我们在有两个金字塔网络(FPN)的Faster-RCNN上建立我们的模型,对于监督目标检测,损失函数如下所示。
在这里插入图片描述
在这篇论文,我们提出基于一个平均教师方法的互动自训练方法来改善伪标签的质量和避免过拟合未标注数据。尤其,如图2所示,我们在有两个ROI heads(这两个ROI heads的结构不同)的Faster R-CNN模型上建立我们的模型。首先,我们使用标注数据去与训练模型;然后,我们能评估未标注数据的检测结果。我们设置一个阈值去过滤掉低质量的检测结果,并且剩下的结果作为未标注数据的为标签。最后,在半监督训练期间,两个ROI heads 相互提供伪标。我们采用DropBlock方法,通过强制它们关注特征图的不同部分,来增加不同ROI heads函数的输入特征图的不同。为了去避免两个ROI heads函数的预测结果相互融合,并且去利用历史知识作为一个整体,我们使用这两个ROI heads 的平均教师去评估伪标。接下来,我们先介绍如何去从不同迭代中预测检测结果;然后,我们介绍没有平均教师互动自学习过程和如何将平均教师方法应用到互动自学习上。

3.2.Pseudo Labels Fusion(伪标融合)

如图1所示,这个预测的检测结果因不同迭代而不同;因此,如果我们直接使用这种这种不稳定的结果作为未标注数据的伪标,这个训练过程可能会不稳定并且很难去融合。然而,不同迭代的输出包括不同的知识。因此,从这些输出结果构建一个整体将可以改进伪标的质量。
在半监督学习的训练过程,为了平滑检测结果和利用不同迭代的输出之间的差异。我们提出使用非极大值抑制来融合这些输出。尤其,我们使用预训练模型为每个未标注情况评估检测结果;然后,这些结果被存储在内存中。有内存的网络最近被提出,它使深度学习的能力更强大,因为它可以记住过去的知识,并且可以模拟整个数据集的数据分布。以前的方法为每一张图片存储特征嵌入,并且通过使用滑动平均(或叫指数加权平均)更新特征嵌入。相反,我们的方法存储检测结果并且使用非极大值抑制更新它。尤其,让代表在伪标中一张图片被存储的预测检测结果,并且让代表半监督训练时最新的预测结果。然后,这个更新过程如下面的公式所示:
{?p,?t}= NMS(CAT({ ?p, ?t},{p,t}))
这里nms代表非极大值抑制,CAT代表并置运算(把新向量并接到原来的向量之后)。更新之后,将会被存储在内存里然后后面作为未标注数据的伪标使用。
Features VS. labels.正如上面所说,一些之前的方法使用内存去跟踪每张图片的特征嵌入。然而,每张图片在目标检测时有多个推荐框或目标,这些推荐框和目标使得特征嵌入特别大。除此之外,推荐框的索引在训练过程中可能会改变。因此,跟踪图像中每一个目标的特征嵌套是困难的。相反,使用非极大值抑制去融合不同迭代中的目标检测结果节约资源且非常高效。

3.3.Interactive Self-Training(互动自训练)

自训练在半监督学习里被广泛地使用。然而,使用使用一个简单的ROI head去评估伪标容易过拟合。噪声学生方法是自训练的扩展,它随机增加了未标注样本并且相应地转换成伪标;然后,它使用噪声未标注数据和噪声伪标去训练一个学生网络。这个噪声学习方法在一定程度上避免过拟合。在这篇论文,我们提出使用两个有着不同结构的ROI heads去评估伪标,进一步避免过拟合。具体而言,我们首先用两个不同结构的ROI heads使用已标注数据训练一个检测模型;然后,我们使用被训练的模型去评估未标注数据的伪标。让代表来自一个ROI heads的伪标。从另一方面来说,未标注数据的损失函数如下图所示。
在这里插入图片描述
里面的是另一个ROI head的输出。为了增加来自两个ROI heads中检测结果的不同,我们为每个ROI head介绍DropBlock模块,这个模块随机随机丢弃特征图的连续区域。在这个方法里,不同的ROI heads 从不同角度观察特征图,允许这些heads去捕捉关键信息去改进检测结果。
我们提出的方法和深度co-training或者深度互学习有关。Co-training和互学习是指把一个网络的输出作为一个网络赢得竞赛的目标,从而避免自训练中的问题。深度互学习首先会建立一个没有训练的学生池,这些学生池同时用监督学习方法学习去解决任务。我们的方法和Co-training更相似。深度 Co-training训练多个深度神经网络去学习不同视角,并且利用多抗例子来鼓励这个视角的不懂,从而防止这些网络相互崩溃。在我们提出的方法中,这两个ROI heads有不同的结构,且使用DropBlock模块,是它们有不同的特征图视角作为输入。此外,我们的模型可以灵活地使用更多地ROI heads去加强互动自学习。

3.4.Mean Teacher(平均教师模型)

在互动自训练,每一个ROI head为另一个ROI head提供伪标。然而,这样一个设置将会最终导致相互崩溃,应为它们尝试互相模仿。第二,为了保证评估的伪标的稳定性和促进网络的优化,我们介绍平均教师的概念。这个教师的参数是相关学生参数的移动平均。也就是说,对于每一个未标注图片,被评估的伪标在不同的迭代有确定的一致性。
在这里插入图片描述
在这里是一个平滑超参数并且是迭代次数,和分别是学生模型和老师模型的参数。SWA和MEA都集合模型的不同阶段,以提高模型的性能。然而,SWE是选择模型的平均值,而EMA是潜在移动平均。如图4所示,Teacher ROI 1是Student ROI Head 1的移动指数平均并且它评估Student ROI Head 2的最新检测结果。然后,最新检测结果与历史伪标融合,正如3.2节介绍的那样。这个缓慢改进的teacher model可以被看成所有不同训练迭代学生模型的总体。The mean teacher在每一步之后汇集信息而不是每一次迭代之后。除此之外,因为这个权重平均值改善所有网络层的输出,不仅仅是顶层的输出,目标模型也能实现更好的中间表示。因此,教师模型伪标的质量要远远好于学生模型伪标的质量。

3.5.Overview of Our Model(方法的综述)

正如图2所示,我们首先使用已标注数据训练一个监督学习检测模型,然后我们使用这个初始化训练模型对未标注数据进行预测,得到的伪标来初始化伪标内存。在半监督学习阶段,这个模型把伪标和已标注数据作为输入。对于已标注数据,损失函数与监督学习是一样的。对于未标注数据,The teacher ROI head 是student ROI head的指数移动平均,并且评估当前批量未标注数据的最新检测结果。然后,最新检测结果与伪标内存中同一张图片的相应历史伪标进行非极大值抑制来融合,得到最终的伪标。对于每一个student ROI head,这个伪标是通过另一个teacher head利用互补信息并且避免偏向某一方,来融合的。我们提出的这个方法的最终损失函数如下所示。
在这里插入图片描述
其中?是未标注数据的损失的权重。
在半监督学习中,伪标的质量很大成度上改善模型。在这篇文章里,我们使用伪标融合和平均教师来改善伪标的质量。伪标融合与[15]中的临时整体是相似的,后者对每个训练样本保持指数移动平均预测。然而,在目标检测,我们不能直接累积网络的输出,因为每一张图有多个目标。因此,我们使用非极大值抑制去构建一个网络输出的临时整体。然而,因为每个目标仅仅在每一次迭代被更新,所以被学习的信息会以一个较慢的速度成为训练过程的一部分。相反,平均教师在每一步而不是每一个迭代汇集信息。除此之外,因为平均值改善的不仅仅是顶层网络的输出,而是所有网络层的输出,这个目标模型获得更好的中间表示。

4.Experiments(实验)

4.1.Datasets and Evaluation(数据集与评估)

我们在两个目标检测公开数据集上验证了我们提出的方法的有效性:MS-COCO 和 PASCAL-VOC。MS—COCO包含超过118000张已标注图片,这些图片里包含来自80个类的大约850000已标注物体。除此之外,有123000张用于半监督学习的未标注数据。PASCAL-VOC07 包含来自20个类的5011张图片用于训练,且PASCAL-VOC12包含11540张图片。对于在MS—COCO数据集上的实验,以STAC为例,我们随机取样1%,2%,5%,和10%的标注数据,并且把其余部分看作未标注数据。对于这个实验,我们产生3个数据文件夹。和[33]一样,我们也使用所有的已标注数据作为训练数据,使用额外的未标注数据作为未标注数据。我们采用作为评估标准。对于PASCAL-VOC数据集,我们使用PASCAL-VOC07数据集作为已标数据和PASCAL-VOC12数据或MS-COCO的20个类数据作为未标注数据。我们评估VOC07测试集上的检测性能。

4.2.Implementation Details(实验细节)

和[32]中的STAC和[32]中的CSD一样,我们目标检测模型用的是使用了FPN的Faster-RCNN,特征提取模型用的是ResNet-50。特征提取网络用一个在图片上已经训练过的预训练模型进行初始化。在半监督学习期间,这个伪标置信度阈值是设置成0.9,用来过滤我们的噪声结果,并且然后非极大值抑制被用在历史伪标上,且IOU的阈值设置为0.5。平滑系数超参数和未标注数据的损失函数的权重分别被设置成0.99和2。在我们的实验里,ROI heads的数量为2。The dropout rate 和DropBlock的尺寸分别设置为0.3和3。相比于STAC,我们仅仅在未标注数据上使用颜色抖动去训练学生网络,而检测结果是用没有进行增强的教师网络进行评估。在测试期间,我们实验性地使用teacher ROI heads 中的一个去评估检测结果。我们是基于MMDetection上实现的。

4.3.Comparison to the state-of-the-art(与现存的方法比较)

我们拿我们的模型和最好的半监督目标检测算法进行比较。由于近些年只有少量的半监督目标检测算法被提出,我们拿我们的方法与MS-COCO,PASCAL VOC上的STAC进行比较,对于CSD,我们在PASCAL上进行了比较。结果图表1和表2所示。在表1中,我们的结果明显优于只使用标注数据的基线,并且它并且比STAC能达到更好的分数。尤其,我们使用的方法在只使用1%的标注数据时能达到18.95%,然而监督学习需要5倍的数据量才能达到相当的效果。这个结果代表我们提出的方法能有效地减少数据标注地花费。相比于现有的全方位学习,当额外的未标注数据被使用时,我们提出的方法能改善得越多。从表2中可以看出,我们能看到我们提出得方法的性能在要比对比的方法高,在要比对比的方法略低。在训练期间,我们提供的方法使用NMS去更新伪标。因此,一些有着低IOU值的低质量的伪标会被抑制。除此之外,STAC基线模型的性能要比我们高(分别为76.30和72.75)。这些实验结果证明了我们提出的方法的有效性。我们的方法不仅利用来自不同ROI heads的互补信息,而且还把来自多个迭代的伪标看成一个整体,确保了我们的方法改善伪标的质量和挖掘图片的更多信息。相反,STAC修改伪标,意味着它不能在训练期间改善伪标的质量。相比CSD,我们的方法表现了一致性正则化,因为我们正则化students ROI heads 的输出和其他 teacher ROI head的伪标。

4.4.Ablation Study(模型简化测试)

我们进行了模型简化测试在COCO数据集上来演示每一个模块的重要性(互自训练,平均教师和伪标融合)。实验结果如表3所示。
在这里插入图片描述
互动自训练的有效性:互动自训练目的在于半监督学习期间避免过拟合和提供互补信息。为了验证互动自训练的效果,这个被简化的模型仅仅有一个ROI head并且它用历史伪标融合它的teacher ROI head的检测结果。我们能够看到当未标注数据为10%时性能大幅度下降(从30.42到26.43)。然而,这个模型仍然比基准模型好,证明了互动自训练的不可或缺性。没有互动自训练,这个模型更可能去过拟合。
平均教师:为了去验证平均教师的有效性,我们从我们的模型中移除平均教师模型,并且直接用历史伪标融合the student ROI heads的检测结果。实验的显示结果如表3所示。当使用未标注数据为10%的coco数据集进行实验时,性能下降了2.2%。因此,平均教师方法不仅有效避免了偏向某一个ROI head,而且把不同迭代的模型看成一个整体。因此,来自教师模型的伪标比来自学生模型的伪标要好。
伪标融合的效果:同一张图片在不同迭代的检测结果不一样,尤其是当数据集很大时。因此,如果使用当前代的检测结果直接作为伪标时,目标会很大程度上发生变化,并且增加训练的难度。如表3所示。没有伪标融合的操作,性能从30.42%下降到25.32%。除此之外,伪标融合处理帮助我们过滤掉低质量的伪标和在训练阶段逐渐增加未标注图片标签实例数。

4.5.Further Analysis(进一步分析)

多ROI heads架构:我们在MS-COCO数据集上分析了多ROI heads架构来挖掘我们模型的潜力。到最后,我们也从每一个ROI head中移除了DropBlock 或增加ROI heads的数量。图表4所示,性能的增加和ROI heads数量的增加很相似。尤其,我们移除了DropBlocks,性能就减少了1.26。DropBlack进一步增加了不同ROI heads之间的差异,导致它们在从特征图中能挖掘到不同的信息。因此,两个ROI heads之间是相互互补的。虽然增加ROI heads能进一步增加模型的性能,但是也增加了训练时间。
在这里插入图片描述
未标注样本的损失权重:我们改变这个未监督损失权重去分析未标注数据权重的影响。结果如表5所示。当为2时模型达到最佳性能。当太高,模型会过度关注未标数据而带来噪声,因此性能降低。从另一方面来看,当太小,模型从未标数据中获得更少,但是仍然比基准模型表现得好。尽管如此,我们能看到我们提出的方法当在0.5到4之间时是普遍有效的。
在这里插入图片描述
平滑系数的影响:我们改变平滑系数去评估mean teacher的影响。我们介绍平均教师平滑伪标且避免两个ROI heads相互崩溃。如表6所示。我们可以看到当未0.99时,性能最好达到30.53。当太小时,教师模型的参数改变得太快。因此,被评估的检测结果会更多地依靠学生模型最近的迭代,性能就会和没有平均教师很像,如表3所示。当教师模型改变得太快,教师模型就会变得和学生模型很像。因此,这两个ROI heads可能相互崩溃。然而,当平滑系数太大,教师模型的权重会大量依赖之前的教师模型,伪标会改变得很慢,学生模型也会学习得很慢。
在这里插入图片描述
伪标的置信度阈值:伪标的置信度阈值决定未标注数据的边界框数量。一个更低的置信度阈值意味着更多的边界框会被考虑,这样会允许模型去挖掘更多的信息和检测更多的目标。然而,一个更低的阈值也带来额外的噪声伪标,这个决定着检测的性能。因此,我们将置信度阈值从0.5变到0.9来评价它的效果。如图5的(a)所示,随着置信度阈值的增加,边界框的数量也在增加,相关的性能如表7所示。当=0.5时,每张图片的边界框数量最高并且增加得最快,但是模型还是比基线模型表现得好。但阈值非常低的时候,伪标基本上是嘈杂的。从另一方面来看,即使当为0.9时,伪标质量是最好的,但是伪标的数量很少,意味着在半监督学习过程中,模型会胡略更多的目标。当=0.7时性能达到最佳。如图5所示,当我们没有用伪标融合训练模型时,每张图片边界框的数量是不稳定的。当=0.9时,边界框的数量逐渐减少,意味着模型在训练过程中趋于失去更多的目标。然而,当=0.5且伪标融合被移除时,边界框的数量飞速增加。当我们使用伪标融合训练模型时,边界框的数量缓慢增加,并且它们的置信度分数会越来越高,意味着在改善伪标的质量。
在这里插入图片描述
伪标可视化:我们为了观察伪标的改善过程,在半监督学习的过程中,可视化了伪标住数据的检测结果。如图6所示,伪标住图片初始化时包含很少的边界框。然而,在训练的过程中,未标注图片边界框的数量在增加。此外,低质量的边界框会被抑制,且新的目标会被发现。

5.Conclusion(总结)

在这篇论文,我们提出了一个使用了平均教师的互动自训练网络。这个被提出的网络避免了过拟合且提高了半监督目标检测中伪标的质量。为了提高伪标的质量,我们提出非极大值抑制的伪标融合方法去融合最新的检测结果和历史检测结果。因此,高质量的伪标会被保存,低质量的伪标会被过滤掉。为了克服过拟合和利用不同伪标预测之间的差异。我们介绍了平均教师模型代替学生模型去评估检测结果。然后,我们使用其中一个平均教师模型的伪标作为目标去计算另一个学生模型的损失函数。在MS-COCO数据集和PASCAL-VOC数据集上的实验结果验证了我们的方法的有效性。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 22:59:41  更:2021-07-22 22:59:51 
 
开发: 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年5日历 -2024/5/4 21:35:59-

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