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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> YOLO系列论文精度 & YOLOv2 and YOLO9000 -> 正文阅读

[人工智能]YOLO系列论文精度 & YOLOv2 and YOLO9000

论文关键词总结:

DarkNet、YOLO9000、YOLOv2、Word Tree、K-Means、多尺度训练、联合训练、passthrough layer、细粒度的特征、预选 Better Anchor Boxes

所有的代码和预训练的模型都可以在线获得:YOLO: Real-Time Object Detection

目录

一、摘要

二、结论

三、介绍YOLO9000

四、Better

(1)Batch Normalization

(2)High Resolution Classifier

(3)Convolutional With Anchor Boxes

(4)Dimension Clusters

(5)Direct location prediction

(6)Fine-Grained Features

(7)Multi-Scale Training

(8)Further Experiments

五、Faster

(1)Darknet-19

(2)Training for classification

(3)Training for detection

六、Stronger

(1)Hierarchical classification

(2)Dataset combination with WordTree


一、摘要

我们引入YOLO9000,这是一个最先进的实时物体检测系统,可以检测超过9000个物体类别。首先,我们对YOLO检测方法提出了各种改进,既有新颖的,也有借鉴前人工作的(Better)。改进的模型YOLOv2是最先进的标准检测任务,如PASCAL VOC和COCO。使用一种新颖的多尺度训练方法,同一个YOLOv2模型可以运行在不同的大小,在速度和精度之间提供了一个容易的权衡(Faster)。在67 FPS时,YOLOv2在VOC 2007上获得76.8 mAP。在40 FPS下,YOLOv2获得了78.6 mAP,超过了最先进的方法,如 Faster R - CNN 与 ResNet 和 SSD,同时运行速度很快。最后我们提出了一种联合训练目标检测和分类的方法(Stronger)。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。我们的联合训练允许YOLO9000预测没有标记检测数据的对象类的检测。我们在ImageNet检测任务上验证了我们的方法。YOLO9000 在 ImageNet 检测验证集上得到19.7 mAP,尽管在200个类中只有44个类有检测数据。在不属于COCO的156个种类中, YOLO9000 获得16.0 mAP。但是 YOLO 可以检测超过 200 个类;它预测了超过9000个不同对象类别的检测。而且它仍然实时运行。

二、结论

我们引入YOLOv2和YOLO9000实时检测系统。

  • YOLOv2是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在多种图像尺寸下运行,以在速度和精度之间提供平滑的折衷。
  • YOLO9000是一个实时框架,通过联合优化检测和分类来检测9000多个对象类别。我们使用 Word Tree?将来自不同来源的数据和我们的联合优化技术结合起来,在ImageNet和COCO上同时训练。YOLO9000为缩小检测和分类之间的数据集规模差距迈出了有力的一步。

我们的很多技术都是在目标检测之外进行推广的。ImageNet 的 WordTree 表示为图像分类提供了更丰富、更详细的输出空间。使用层次分类的数据集组合在分类和分割领域将是有用的。像多尺度训练这样的训练技术可以在各种视觉任务中提供好处。

对于未来的工作,我们希望使用类似的技术进行弱监督图像分割。我们还计划使用更强大的匹配策略来改进我们的检测结果,以便在训练过程中为分类数据分配弱标签。计算机视觉有大量标记数据是幸运的。我们将继续寻找方法,将不同来源和结构的数据汇集在一起,使视觉世界的模型更加强大。

三、介绍YOLO9000

通用目标检测应该快速、准确,并且能够识别各种各样的目标。自从引入神经网络以来,检测框架变得越来越快速和准确。然而,大多数检测方法仍然局限于一小部分对象。到目前为止,分类数据集非常丰富,但是目标检测数据集相对于分类数据集,价格很昂贵,令人望而却步。故:

  • 我们提出了一种新的方法来利用我们已经拥有的大量分类数据,并使用它来扩大当前检测系统的范围。我们的方法使用对象分类的分层视图,允许我们将不同的数据集组合在一起。
  • 我们还提出了一种联合训练算法,允许我们在检测和分类数据上训练目标检测器。我们的方法利用标记的检测图像来学习精确地定位对象,而它使用分类图像来增加它的词汇量和鲁棒性。

(YOLOv2和YOLO9000)使用这个方法,我们训练YOLO9000,一个实时对象检测器,可以检测超过9000个不同的对象类别。首先,我们在基本YOLO检测系统的基础上进行改进,以生产出最先进的实时检测器YOLOv2。然后我们使用我们的数据集组合方法和联合训练算法在ImageNet的9000多个类以及COCO的检测数据上训练模型,生成YOLO9000检测器。

四、Better

相对于先进的检测系统,YOLO存在着各种各样的缺点。YOLO相对于Fast R - CNN的误差分析表明,YOLO产生了大量的定位误差。此外,与基于区域建议的方法相比,YOLO具有相对较低的召回率。因此,我们主要关注在保持分类准确率的同时提高召回率和定位率。

计算机视觉普遍朝着更大、更深的网络方向发展。更好的性能往往取决于训练更大的网络或将多个模型集成在一起。然而,使用YOLOv2我们想要一个更精确的探测器,仍然是快速的。我们不是扩大我们的网络,而是简化网络,然后使表示更容易学习。我们将过去工作中的各种想法与我们自己的新颖概念结合起来,以提高YOLO的性能。结果汇总见表1。?

  1. Batch Normalization.? ? ? ? ? ? ? ? ? ? ? ? ? ?批规范化。?? ? ?
  2. High Resolution Classifier.? ? ? ? ? ? ? ? ? 高分辨率分类器。
  3. Convolutional With Anchor Boxes.? ? ? 与锚框卷积。
  4. Dimension Clusters.? ? ? ? ? ? ? ? ? ? ? ? ? 维度集群。
  5. Direct location prediction.? ? ? ? ? ? ? ? 直接位置预测。
  6. Fine-Grained Features.? ? ? ? ? ? ? ? ? ? ? ?细粒度特征。
  7. Multi-Scale Training.? ? ? ? ? ? ? ? ? ? ? ? ? ? 多尺度训练。
  8. Further Experiments.? ? ? ? ? ? ? ? ? ? ? ? ? ?进一步的实验。

?表1 从YOLOv1到YOLOv2的演变

(1)Batch Normalization

批归一化在消除对其他形式正则化的需要的同时,导致收敛性的显著改善。通过在YOLO中的所有卷积层上增加批归一化,mAP提高了2 %以上。批量归一化也有助于模型的规则化。通过批标准化,我们可以在不过度拟合的情况下从模型中删除dropout。

(2)High Resolution Classifier

所有最先进的检测方法都使用在ImageNet上预训练的分类器。从AlexNet开始,大多数分类器对小于256 × 256的输入图像进行操作。原始YOLO在224 × 224处训练分类器网络,并将分辨率提高到448进行检测。这意味着网络必须同时切换到学习目标检测,并调整到新的输入分辨率。对于YOLOv2,我们首先在ImageNet上对分类网络在全448 × 448分辨率下进行了 10 个 epochs 的微调。这给了网络时间来调整其滤波器(filters),以更好地工作在更高分辨率的输入。然后我们在检测时对生成的网络进行微调。这个高分辨率分类网络使我们的mAP提高了近4 %。

(3)Convolutional With Anchor Boxes

YOLO直接使用卷积特征提取器顶部的全连接层预测边界框的坐标。Faster R-CNN不直接预测坐标,而是使用手工选择的先验来预测边界框。Faster R-CNN中的区域建议网络( RPN )仅使用卷积层预测锚点框的偏移和置信度。因为预测层是卷积的,所以RPN在特征图中的每个位置预测这些偏移。预测偏移而不是坐标简化了问题,使网络更容易学习。

我们从YOLO中移除全连接层,并使用锚框来预测边界框。首先消除一个池化层,使网络的卷积层的输出具有更高的分辨率。我们还将网络收缩为对416 × 416的输入图像进行操作,而不是448 × 448。我们这样做是因为我们希望在我们的特征图中有奇数个位置,所以有一个单中心单元格。物体,尤其是大的物体,往往占据图像的中心位置,所以最好在中心位置有一个位置来预测这些物体,而不是四个位置都在附近。YOLO的卷积层减少了32倍的图像,所以通过使用416 × 416的输入图像,我们得到了13 × 13的输出特征图。

当我们移动到锚框时,我们也将类别预测机制与空间位置解耦,而不是为每个锚框预测类别和对象。在YOLO之后,目标性预测仍然预测基础真值的IOU,而提议的框和类预测则预测给定有一个对象的类的条件概率。

使用锚框,我们得到一个小的精度下降。YOLO每张图片只预测了98个框,但是我们的模型预测了超过1000个框。在没有锚框的情况下,我们的中间模型得到了69.5 mAP,召回率为81%。有了锚框,我们的模型得到 69.2 mA P,召回率为88 %。尽管mAP减少了,但召回率的增加意味着我们的模型有更大的改进空间。

(4)Dimension Clusters

当锚框与YOLO结合使用时,我们会遇到两个问题:

  1. 第一个问题是盒子的尺寸是手工挑选的。
  2. 第二个问题是模型不稳定,尤其是在早期迭代期间。

对于第一个问题,网络可以学习适当地调整框,但是如果我们为网络选择更好的先验框,我们可以使网络更容易学习预测好的检测。

我们不是手工选择先验,而是在训练集边界框上运行k - means聚类,以自动找到好的先验。如果我们使用标准的k - means与欧氏距离较大的盒子比较小的盒子产生更多的错误。然而,我们真正想要的是导致良好IOU分数的先验信息,这与盒子的大小无关。因此对于我们的距离度量我们使用:(非欧氏距离)

d(box, centroid) = 1 ? IOU(box, centroid)

我们对不同的 k 值运行k - means,并以最接近的质心绘制平均IOU,见图2。我们选择k = 5作为模型复杂度和高召回率之间的良好折衷。集群的质心与手工选取的锚框有显著差异。有更少的矮、胖的盒子和高、瘦的盒子。(浅色的是在VOC聚合的锚框,深色是在coco上聚合的锚框)

图2?Clustering box dimensions on VOC and COCO(在VOC和COCO上聚合盒子尺寸)。我们对边界框的维度进行k - means聚类,为我们的模型获得良好的先验。左图显示了我们通过对 k 的各种选择得到的平均IOU。我们发现k = 5给出了召回率和模型复杂度之间的良好折衷。右图显示了VOC和COCO的相对质心。两组先验都倾向于较高、较瘦的盒子,而COCO比VOC的尺寸变化更大。

我们将平均IOU与我们的集群策略和表1 中手工选择的锚框的最接近的前一个进行比较。在仅有5个先验时,质心的表现与9个锚框相似,平均IOU为61.0,而60.9。如果我们使用9个质心,我们可以看到更高的平均IOU。这表明使用k-means来生成我们的边界框可以使模型具有更好的表示,并使任务更容易学习。

表1?与VOC2007上最接近的前缀的框的平均IOU([15]: Faster r-cnn)

(5)Direct location prediction

与YOLO一起使用锚框时,我们遇到第二个问题:模型不稳定,尤其是在早期迭代期间。大部分的不稳定性来自于预测盒子的( x , y)位置。在区域建议网络《Faster r-cnn》中,网络预测值 tx 和 ty 以及( x , y )中心坐标计算为:

例如,tx = 1的预测将使框向右移动锚框的宽度,tx = -1的预测将使它向左移动相同的量。?

这个公式是不受约束的,所以任何锚框都可以在图像中的任何点结束,不管预测的是什么位置。在随机初始化的情况下,模型需要很长的时间来稳定预测显著偏移。

我们不预测偏移,而是遵循YOLO的方法,预测相对于网格单元位置的位置坐标。这使得基本真值落在0和1之间。我们使用 logistic logistic 来约束网络的预测落在这个范围内。

图3?带维度先验和位置预测的包围盒。我们预测盒子的宽度和高度作为集群质心的偏移量。我们使用 sigmoid 函数预测盒子 ‘相对于滤波器应用定位’ 的中心坐标

该网络在输出特征图的每个单元格处预测5个边界框。网络对每个包围盒预测5个坐标t_{x}, t_{y}, t_{w}, t_{h}, t_{o}。如果单元格被(c_{x}, c_{y})从图像的左上角偏移,并且先验边界框具有宽度和高度p_{w}, p_{h},则预测对应:

由于我们对位置预测进行了约束,参数化更容易学习,使得网络更加稳定。使用维度集群并直接预测边界框中心位置,YOLO比使用锚框的版本提高了近5%。

(6)Fine-Grained Features

这个修改的YOLO在一个13 × 13的特征图上预测检测。虽然这对于大型对象来说已经足够了,但它可以从更细粒度的特性中获益,以定位较小的对象。Faster R - CNN和SSD都在网络中的各种特征图上运行它们的建议网络,以获得一系列分辨率。我们采取了一种不同的方法,只需添加一个直通层(passthrough layer),它以26 × 26的分辨率从较早的层引入特征。????

直通层通过将相邻的特征叠加到不同的通道而不是空间位置,将高分辨率特征与低分辨率特征串联起来,类似于ResNet中的恒等映射。这将26 × 26 × 512的特征图转换为13 × 13 × 2048的特征图,可以与原始特征进行拼接。我们的检测器运行在这个扩展的特征图之上,这样它就可以访问细粒度的特征。这给予了 1% 的性能提升。

(7)Multi-Scale Training

原始YOLO采用448 × 448的输入分辨率。随着锚框的加入,分辨率变为416 × 416。然而,由于我们的模型只使用了卷积层和池化层,因此可以实时地进行调整。我们希望YOLOv2对不同大小的图像具有鲁棒性,因此我们将其训练到模型中。

我们每隔几次迭代就改变网络,而不是固定输入图像的大小。我们的网络每10个批次随机选择一个新的图像维度大小。由于我们的模型一次下采样32的因子,我们从以下32的倍数中抽出:{ 320,352,..,608 }。因此,最小的选项是320 × 320,最大的是608 × 608。我们将网络调整到那个维度并继续训练。

这种机制迫使网络学会在各种输入维度上进行良好的预测。这意味着同一个网络可以预测不同分辨率下的检测。网络在较小的尺寸下运行得更快,因此YOLOv2在速度和精度之间提供了一个简单的权衡。

在低分辨率下,YOLOv2作为一个便宜、相当精确的检测器工作。在288 × 288上,它以超过90 FPS的速度运行,mAP几乎和Fast R - CNN一样好。这使得它非常适合较小的GPU,高帧率视频,或多个视频流。

在高分辨率下,YOLOv2是目前最先进的检测器,在VOC 2007上达到78.6 mAP,但仍然运行在实时速度以上。有关YOLOv2与VOC 2007上其他框架的比较,请参见表3和图4。

表3?PASCAL VOC 2007上的检测框架

?图4 VOC 2007上的准确性和速度

(8)Further Experiments

我们在VOC 2012上训练YOLOv2进行检测。表4 给出了YOLOv2与其他先进检测系统的对比性能。YOLOv2实现了73.4 mAP,同时运行速度远远快于竞争方法。我们还在COCO上进行了训练,并与表5中的其他方法进行了比较。在VOC指标( IOU = .5 )上,YOLOv2获得44.0 mAP,与SSD和Faster R - CNN相当。

表4?PASCAL VOC2012 test detection results

YOLOv2与Faster R- CNN with Res Net和 SSD 等最先进的检测器性能相当,速度快2 - 10倍。

五、Faster

我们希望检测准确,但我们也希望它快速。大多数检测应用,如机器人或自动驾驶汽车,都依赖于低延迟预测。为了最大限度地提高性能,我们设计了YOLOv2从底层快速实现。

(1)Darknet-19

我们提出了一个新的分类模型作为YOLOv2的基础。我们的模型建立在网络设计的前期工作以及该领域的共同知识基础之上。与VGG模型类似,我们大多使用3 × 3滤波器,并在每个池化步骤后将通道数增加一倍。在网中网(NiN)的基础上,我们使用全局平均池化来进行预测,并使用1 × 1滤波器来压缩3 × 3卷积之间的特征表示《Network in Network》。我们使用批规范化来稳定训练,加快收敛,并规则化模型《Batch normalization》。

我们的最终模型名为Darknet-19,有19个卷积层和5个最大池化层。有关完整说明,请参见表6。Darknet-19处理一幅图像仅需55.8亿次运算,在ImageNet上取得了72.9%的top-1准确率和91.2%的top-5准确率。

(2)Training for classification

我们在标准的ImageNet 1000类分类数据集上使用随机梯度下降法训练网络160个epochs,使用Darknet神经网络框架,初始学习率为0.1,多项式速率衰减为4次,权重衰减为0.0005,动量为0.9,见本专栏另外一篇博客:YOLO系列论文精度 & YOLOv1。在训练期间,我们使用标准的数据增强技巧,包括随机作物、旋转、色调、饱和度和曝光变化。

如上所述,在对224 × 224的图像进行初始训练后,我们在更大的尺寸(448×448)上微调了网络。对于这个微调,我们用上面的参数进行训练,但是只有10个epochs,并且以0.001的学习率开始。在这个更高的分辨率下,我们的网络达到了 76.5% 的 top-1 精度和 93.3% 的 top-5 精度。

(3)Training for detection

我们对该网络进行了修改,去掉最后一个卷积层,改为在3个3 × 3的卷积层上分别添加1024个滤波器,最后添加一个1 × 1的卷积层,输出需要检测的个数。对于VOC,我们预测5个盒子,每个盒子有5个坐标,每个盒子有20个类,所以有125个滤波器。我们还在最后一个3 × 3 × 512层到倒数第二个卷积层中间添加了一个直通层(passthrough layer),使得我们的模型可以使用细粒度的特征。

我们以0.001的起始学习率训练网络160个epochs,在60和90个epochs时将其除以10。我们使用0.0005的权重衰减和0.9的动量。我们使用类似于YOLO和SSD的随机裁剪和颜色变化等的数据增强。我们在COCO和VOC上使用相同的训练策略。

六、Stronger

我们提出了一种对分类和检测数据进行联合训练的机制。我们的方法使用标记为检测的图像来学习特定的检测信息,如边界框坐标预测和对象性以及如何分类常见对象。它使用只有类标签的图像来扩大它所能检测的类别数量。

在训练过程中,我们混合了来自检测和分类数据集的图像。当我们的网络看到一个用于检测的图像标签时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,我们只从架构的分类特定部分反向传播损失。

这种方法提出了一些挑战。检测数据集只有共同的对象和通用的标签,如"狗"或"船"。分类数据集具有更广泛和更深入的标签范围。ImageNet上有一百多个品种的狗,包括'Norfolk terrier'、' Yorkshire terrier '和'Bedlington terrier'。如果我们想在两个数据集上进行训练,我们需要一种连贯的方式来合并这些标签。

大多数分类方法都使用一个跨越所有可能类别的softmax层来计算最终的概率分布。使用softmax假定类是相互排斥的。这给数据集的合并带来了问题,例如,由于类"Norfolk terrier"和"dog"不是互斥的,不希望使用该模型合并ImageNet和COCO。相反,我们可以使用多标签模型来组合不假定相互排斥的数据集。这种方法忽略了我们所知道的关于数据的所有结构,例如所有的COCO类都是相互排斥的。

(1)Hierarchical classification

ImageNet标签是从词网中提取的,词网是一个语言数据库,它构造概念以及它们之间的关系《Introduction to wordnet: An on-line lexical database》。在词网中,"诺福克猎犬"和"约克郡猎犬"都是"猎犬"的化名,它是一种"猎犬",它是一种"狗",它是一种"犬类",等等。大多数分类方法假设标签的结构是平坦的(flat structure),但是对于合并数据集,结构正是我们所需要的。

词网被结构化为有向图,而不是树,因为语言是复杂的。例如,在词网中,"狗"既是"犬"的一种,也是"家畜"的一种,都是同义词集合。我们没有使用完整的图结构,而是通过从ImageNet中的概念构建一个分层树来简化问题。

为了构建这棵树,in this case “physical object”,我们检查了ImageNet中的视觉名词,并查看它们通过词网图到根节点的路径。许多同义词集合只有一条路径通过图,所以:

  • 首先,我们将所有这些路径添加到我们的树。
  • 然后,我们迭代地检查我们留下的概念,并添加尽可能少地增加树的路径。

因此,如果一个概念有两条通向根的路径,其中一条路径将向我们的树添加三条边,而另一条路径只添加一条边,我们选择较短的路径。

最终结果为视觉概念的层次模型Word Tree为了使用Word Tree进行分类,我们预测了给定该同义词集的每个下位词在每个节点的条件概率。例如,在"terrier"节点,我们预测:

如果我们想计算一个特定节点的绝对概率,我们只需沿着树的路径到达根节点,然后乘以条件概率。如果我们想知道一张图片是否是我们计算的“Norfolk terrier”:

为了分类的目的,我们假设图像包含一个对象:Pr(physical object) = 1。?

为了验证这种方法,我们在使用1000类ImageNet构建的Word Tree上训练DarkNet-19模型。为了构建 WordTree 1k,我们添加了所有的中间节点,将标签空间从1000扩展到1369。在训练过程中,我们在树上传播真值标签,这样如果一个图像被标记为"Norfolk terrier",它也会被标记为 “dog” and a “mammal” 等。为了计算条件概率,我们的模型预测了一个由1369个值组成的向量,并计算了所有属于同一概念下义词的同义词集合上的softmax,见图5。

?图5?ImageNet vs WordTree上的预测

  • top:大多数ImageNet模型使用一个大的softmax来预测概率分布。
  • bottom:利用Word Tree,我们在共下义词上执行多个softmax操作。

使用与之前相同的训练参数,我们的层次化DarkNet-19取得了71.9 %的top - 1准确率和90.4 %的top - 5准确率。尽管增加了369个额外的概念,并且我们的网络预测了一个树结构,但我们的准确性只略有下降。以这种方式进行分类也有一些好处。在新的或未知的对象类别上性能下降得很好。举例来说,如果网络看到一只狗的照片,但不确定它是什么类型的狗,它仍然会预测"狗"有很高的自信,但在化名之间的信心较低。

这种配方也适用于检测。现在,我们不再假设每幅图像都有一个对象,而是使用YOLOv2的目标检测器给出?Pr(physical object)?的值。检测器预测一个边界框和概率树。我们沿着树向下遍历,在每个节点处取最高置信度路径,直到达到某个阈值,然后预测目标类别。

(2)Dataset combination with WordTree

我们可以使用Word Tree将多个数据集以合理的方式组合在一起。我们简单地将数据集中的类别映射到树中的同义词集合。图6 为使用Word Tree对ImageNet和COCO的标签进行合并的示例。词网是非常多样化的,所以我们可以使用这种技术与大多数数据集相结合。

图6 使用Word Tree层次结构组合数据集

如上图所示:(WordTree的简化视图,仅供参考。)

  • 首先使用词网概念图,我们构建可视化概念的分层树。
  • 然后我们可以通过将数据集中的类,映射到树中的同义词集合来合并数据集

如有疑问,欢迎评论区一起探讨。

希望本文章对你有所帮助,稍后会更新YOLO系列论文的比较。

未完待续。。。

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

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