| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> ICLR 2021 | An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale| ViT 阅读笔记(翻译) -> 正文阅读 |
|
[人工智能]ICLR 2021 | An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale| ViT 阅读笔记(翻译) |
An Image is Worth 16x16 Words: Transformers for Image Recognition at ScaleAuthor Unit: Google Brain, Google Research Authors: Alexey Dosovitskiy?,?, Lucas Beyer?, Alexander Kolesnikov?, Dirk Weissenborn?, Xiaohua Zhai?, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby?,? Code: https://github.com/google-research/vision_transformer Conference: ICLR 2021 Email: {adosovitskiy, neilhoulsby}@google.com Paper address: https://arxiv.org/abs/2010.11929 bilibili_limu: https://www.bilibili.com/video/BV15P4y137jb?spm_id_from=333.999.0.0 以下是根据论文和视频中大牛讲的内容来做的笔记。 Abstract虽然Transformer架构已经成为自然语言处理任务的标准,但它对计算机视觉的应用仍然有限。在视觉上,注意力要么与卷积网络一起应用,要么用于替换卷积网络的某些组件,同时保持其整体结构不变。我们表明,这种CNN的依赖是不必要的,直接应用于图像 patches 序列的 pure transformer 可以很好地执行图像分类任务。当对大量数据进行预训练并将其传输到多个中小型图像识别的benchmarks(ImageNet、CIFAR-100、VTAB等)时,与最先进的卷积网络相比,Vision Transformer (ViT)获得了出色的结果,同时所需的计算资源大大减少。 💡 这里说得所需计算资源大大减少是相对于巨大的计算资源,毕竟他都说ImageNet算中小型数据集了。 1 INTRODUCTION基于自我注意的架构,尤其是Transformer (Vaswani et al., 2017),已经成为自然语言处理(NLP)的 model of choice。主要的方法是在大型文本语料库上进行预训练,然后在较小的特定任务数据集上进行微调 (Devlin et al., 2019)。得益于Transformer 的计算效率和可扩展性,训练具有超过100B参数的空前规模的模型成为可能 (Brown et al., 2020; Lepikhin et al., 2020)。随着模型和数据集的增长,仍然没有饱和性能的迹象。 ( 太可怕了,只要有更多的数据,就会一直提升性能 ) 然而,在计算机视觉中,卷积架构仍然占主导地位 (LeCun et al., 1989; Krizhevsky et al., 2012; He et al., 2016)。受NLP成功的启发,多个工作尝试将类似CNN的架构与自我注意相结合 (Wang et al., 2018; Carion et al., 2020),有一些工作是完全取代了卷积 (Ramachandran et al., 2019; Wang et al., 2020a)。后者在理论上是有效的,但由于使用了特殊的注意力模式,还没有在现代硬件加速器上有效缩放。因此,在大规模图像识别中,经典的ResNet架构仍然是最先进的 (Mahajan et al., 2018; Xie et al., 2020; Kolesnikov et al., 2020)。 💡 Transformer的复杂度是序列长度的平方,一般是几百或者几千,如果直接将图片中的像素点拉平当作一个序列,那复杂度是不可承受的。 受Transformer在NLP中缩放成功的启发, 我们尝试将标准Transformer直接应用于图像,并尽可能少地进行修改。为此,我们将图像分割为多个 patches ,并提供这些 patches 的 linear embedding 的序列,作为Transformer的输入。在NLP应用程序中,图像补丁被视为 tokens (单词)。我们以有监督的方式训练模型进行图像分类 ( 这里是因为基线都为有监督的,分类也很难利用无监督的数据吧? )。 当在没有强正则化约束的中等规模数据集(如 ImageNet)上进行训练时,这些模型产生的准确度比同等规模的 ResNets 低几个百分点。 这种看似令人沮丧的结果可能是意料之中的:Transformers 缺乏 CNN 固有的一些归纳偏差,例如平移等方差和局部性,因此当在数据量不足的情况下训练时不能很好地概括。( 这些归纳偏置可以让CNN具有良好的先验信息 ) 💡 CNN中一般有两个归纳偏置 inductive biases :一是 locality,意指相邻像素应该是相似的;二是 translation equivariance(平移同变性),即图片中的物体移动到什么地方,卷积核都能把其识别出来。 但是,如果模型在更大的数据集(14M-300M 图像)上训练,结果会发生变化。 我们发现大规模训练胜过归纳偏差。 我们的 Vision Transformer (ViT) 在经过足够规模的预训练并转移到具有较少数据点的任务时获得了出色的结果。 当在公共 ImageNet-21k 数据集或 in-house JFT-300M 数据集上进行预训练时,ViT 在多个图像识别基准上接近或击败了最先进的技术。 特别是,最佳模型在 ImageNet 上的准确率达到了 88.55%,在 ImageNet-ReaL 上达到了 90.72%,在 CIFAR-100 上达到了 94.55%,在 VTAB 套件的 19 个任务上达到了 77.63%。 💡 VTAB套件是作者提出的融合了19个任务的数据集,主要评测ViT的稳健性。 2 RELATEDWORKTransformer由 Vaswani et al. (2017) 提出用于机器翻译,并自此成为许多NLP任务中最先进的方法。基于transformer的大型模型通常在大型语料库上进行预训练,然后针对手头的任务进行微调:BERT (Devlin et al., 2019) 使用去噪的自·监督预训练任务,而GPT工作使用语言建模 LM 作为其预训练任务 (Radford et al., 2018; 2019; Brown et al., 2020)。 简单地将自注意应用于图像将要求每个像素关注其他所有的像素。成本为像素数量的平方,这并不能缩放到可行的输入大小。因此,在图像处理的背景下应用Transformer,以往尝试了几种近似的方法来执行。Parmar et al.(2018) 对每个查询像素只应用了局部邻域的自注意,而不是全局的自注意。这种 local multi-head dot-product self attention blocks 可以完全替代卷积(Hu et al., 2019; Ramachandran et al., 2019; Zhao et al., 2020)。在一个不同的工作中,Sparse transformer (Child et al.,2019) 采用可扩展的近似全局自我注意,以适用于图像。另一种扩大注意力的方法是在不同大小的块中应用它 (Weissenborn et al.,2019),在最极端的情况下仅沿单个轴 (Ho et al., 2019; Wang et al., 2020a)。这些特殊的注意力体系结构在计算机视觉任务上展示了有前景的结果,但需要在硬件加速器上高效地实现复杂的工程。 与我们最相关的是Cordonnier et al.(2020) 的模型,该模型从输入图像中提取 size 2×2的patch,并在顶部应用 full self-attention。这个模型与ViT非常相似,但我们的工作进一步证明了大规模的预训练可以使普通的Transformer与最先进的CNN竞争(甚至更好)。此外,Cordonnier et al.(2020)使用了一个较小的patch size of 2×2 pixels,这使得该模型仅适用于小分辨率图像,而我们也可以处理中分辨率图像。 也有很多结合 CNN 与 self-attention 的其他工作,by augmenting feature maps for image classification (Bello et al., 2019) or by further processing the output of a CNN using self-attention, e.g. for object detection (Hu et al., 2018; Carion et al., 2020), video processing (Wang et al., 2018; Sun et al., 2019), image classification (Wu etal.,2020), unsupervised object discovery (Locatello et al., 2020), or unified text-vision tasks (Chen et al., 2020c; Lu et al., 2019; Li et al., 2019). 另一个最新的相关模型是图像GPT (iGPT) (Chen et al., 2020a),它在降低图像分辨率和颜色空间后,将 Transformer 应用于图像像素。该模型以无监督的方式作为生成模型进行训练,然后可以对得到的表示进行微调或线性检测,以提高分类性能,在ImageNet上实现72%的最大精度。 与标准的ImageNet数据集相比,我们增加了在更大尺度的数据集上探索图像识别的工作。使用额外的数据源可以在标准基准上获得最先进的结果 (Mahajan et al., 2018; Touvron et al., 2019; Xie et al., 2020)。此外,Sun et al. (2017) 研究了CNN性能如何随数据集大小进行缩放,Kolesnikov et al. (2020); Djolonga et al. (2020) 从ImageNet-21k和JFT-300M等大规模数据集对CNN迁移学习进行了实证探索。我们也关注后两个数据集,但我们是用来训练 Transformers 而不是 ResNet-based models。 3 METHOD在模型设计中,我们尽可能地遵循原 Transformer (Vaswani et al., 2017)。这种有意的简单设置的一个优点是,可伸缩的NLP Transformer架构及其高效实现几乎可以开箱即用。 3.1 VISION TRANSFORMER(VIT)该模型的概述如图 1 所示。标准 Transformer 接收一维 token embeddings 序列作为输入。 为了处理 2D 图像,我们将图像 x ∈ R H × W × C x∈\R^{H×W×C} x∈RH×W×C 重塑为一系列展平的 2D 块 x p ∈ R N × ( P 2 ? C ) x_p∈\R^{N×(P^2·C)} xp?∈RN×(P2?C),其中 (H, W) 是原始图像的分辨率,C 是通道数,(P, P)是每个图像 patch 的分辨率, N = H W / P 2 N=HW/P^2 N=HW/P2是 patch 的结果数,也作为 Transformer 的有效输入序列长度。 Transformer 在其所有层中使用恒定的潜向量大小 D ( 这里也就是我们上面举例中的 size 768 ),因此我们将补丁展平并使用可训练的线性投影将 patch 映射到 D 维(方程 1)。 我们将此投影的输出称为 patch embeddings。 与BERT的 [class] token 类似,我们在嵌入的 patches 序列中前置一个可学习的嵌入 ( z 0 0 = x c l a s s z^0_0=x_{class} z00?=xclass?) ,其在Transformer编码器输出处的状态 ( z L 0 z^0_L zL0?) 作为图像的表征 y (Eq. 4)。在预训练和微调阶段, z L 0 z^0_L zL0?都有一个分类头 classification head。分类头在预训练中由一个隐藏层实现,在微调时由一个线性层实现。 💡 作者这里采用了 [class] token 的输出来做最后图像的表征结果( 也就是类似于分类结果的东西 ),但是为什么不和 ResNet 中的一样最后对所有特征进行 pooling 来得出图像的表征结果呢?附录里作者也给了实验,表示这两种方式得到的图像表征结果是差不多的,所以作者为了保持与 Transformer 的一致性采用了论文中的方法。作者也说了,直接用 Transformer 种的学习率,效果是不好的,所以有的时候不是你的 idea 不好,可能只是参数没调好。如图9所示。 Transformer编码器 (Vaswani et al.,2017) 由多头自注意 (MSA, see Appendix A) 和 MLP (Eq. 2,3) 的交替层组成。每个块之前应用 Layernorm (LN),每个块之后应用残差连接 (Wang et al., 2019; Baevski & Auli, 2019)。MLP 包含两层 GELU 非线性( 先扩大至 4×D,再缩小为原维度 D )。 Hybrid Architecture. 作为原始图像patch的替代方法,输入序列可以由CNN的feature maps形成(LeCun et al., 1989)。在该混合模型中,Eq. 1 中的 patch embedding 变为从CNN feature map中提取的patch。作为一种特殊情况,patches的空间大小可以是1x1,这意味着输入序列是通过简单地将feature map的空间维扁平化并投影到Transformer 维度来获得的。然后添加如上所述的分类输入嵌入和位置嵌入。 3.2 FINE-TUNING AND HIGHE RRESOLUTION通常,我们在大数据集上预先训练ViT,然后对下游 (较小的) 任务进行微调。为此,我们去掉预训练的 prediction head,并附加一个zero-initialized D×K 前馈层,其中 k 表示下游类的数量。与预训练相比,在更高分辨率下进行微调通常是有益的 (Touvron et al., 2019; Kolesnikov et al., 2020)。当提供更高分辨率的图像时,我们保持patch大小不变,从而获得更大的有效序列长度。Vision Transformer可以处理任意长度的序列(直到内存限制),但是,预先训练的位置嵌入可能不再有意义。因此, 我们根据其在原始图像中的位置,对预训练的位置嵌入进行二维插值。请注意,这种分辨率调整和补丁提取是唯一的点,关于图像的二维结构的归纳偏置被手动注入到Vision Transformer。 4 EXPERIMENTS我们评估了ResNet、Vision Transformer (ViT)和混合模型的表示学习能力。为了了解每个模型的数据需求,我们对不同大小的数据集进行预训练,并评估许多基准任务。当考虑到预训练模型的计算成本时,ViT表现得非常好( 指相对于非常大的模型 ),在大多数识别基准上以较低的预训练成本获得最先进的技术。最后,我们用自监督的方法进行了一个小实验,结果表明自监督的ViT对未来具有良好的前景。 4.1 SETUPDatasets. 对于基线 CNN,我们使用ResNet (He et al., 2016),但将 BN (Ioffe & Szegedy, 2015) 替换为 Group Normalization (Wu & He, 2018),并使用 standardized convolutions (Qiao et al., 2019)。这些修改改进了 transfer (Kolesnikov et al., 2020),我们表示了修改后的模型“ResNet (BiT)”。对于混合型,我们将中间的特征图以一个“像素”的patch大小输入ViT。为了实验不同的序列长度,我们要么(i)取常规ResNet50的第4阶段的输出,要么(ii)去除第4阶段,在第3阶段放置相同的层数(保持层总数),然后取这个扩展的第3阶段的输出。选项(ii)的结果是4倍长的序列长度,和更昂贵的ViT模型。 Training & Fine-tuning. 我们使用 Adam (Kingma & Ba, 2015) 训练所有模型,包括 β1= 0.9,β2= 0.999,批量大小为 4096 并应用 0.1 的高权重衰减,我们发现这对于 transfer 所有模型是有用的(附录 D.1 表明,与常见做法相比,在我们的设置中,Adam 在 ResNets 上的表现略好于 SGD)。 我们使用 linear learning rate warmup and decay,详见附录 B.1。 对于微调,我们使用具有动量的 SGD,批量大小为 512,对于所有模型,请参见附录 B.1.1。 对于表 2 中的 ImageNet 结果,我们在更高分辨率下进行了微调:ViT-L/16 为 512 的分辨率,ViT-H/14 为 518,并且还使用了 Polyak & Juditsky (1992) 平均,因子为 0.9999 (Ramachandran et al., 2019; Wang et al., 2020b)。 Metric 我们通过小样本或微调精度报告下游数据集的结果。 微调精度捕获每个模型在各自数据集上微调后的性能。 通过解决将训练图像子集的(冻结)表征映射到 { ? 1 , 1 } K \{?1,1\}^K {?1,1}K 个目标向量的正则化最小二乘回归问题,可以获得 few-shot 精度。 该公式使我们能够以封闭形式恢复精确的解。 尽管我们主要关注微调性能,但有时我们会使用线性小样本精度进行快速的动态评估,因为微调的成本太高。 4.2 COMPARISON TO STATE OF THEART我们首先比较了我们最大的模型– ViT-H/14 and ViT-L/16 –以及最先进的 CNN。第一个比较点是Big Transfer (BiT) (Kolesnikov et al., 2020),它使用大型 ResNets 执行有监督迁移学习。第二个是Noisy Student (Xie et al., 2020),它是一个大型的 EfficientNet,在去掉了标签后的ImageNet和JFT300M上使用半监督学习。目前,Noisy Student 是在 ImageNet 上最好的,而 BiT-L 在其他数据集上最先进。所有模型都是在 TPUv3 硬件上进行训练的,我们报告每个模型进行预训练所花费的 TPUv3-core-days,即用于训练的 TPUv3 内核数量(每个芯片2个)乘以训练时间(以天为单位)。 结果如表2所示。在 JFT-300M 上预训练的较小 ViT-L/16 模型在所有任务上都优于 BiT-L(在同一数据集上预训练),同时需要更少的计算资源来训练。更大的模型 ViT-H/14 进一步提高了性能,尤其是在更具挑战性的数据集——ImageNet、CIFAR-100 和 VTAB 套件上。有趣的是,与现有技术相比,该模型进行预训练的计算量仍然要少得多。然而,我们注意到预训练效率可能不仅受架构选择的影响,还受其他参数的影响,例如训练计划、优化器、权重衰减等。在第 4.4 节中我们提供了不同架构的性能与计算的受控研究。最后,在公共 ImageNet-21k 数据集上预训练的 ViT-L/16 模型在大多数数据集上也表现良好,同时预训练所需的资源更少:它可以使用标准云 TPUv3 进行训练,大约 30天。 4.3 PRE-TRAINING DATA REQUIREMENTS由于一些 CNN 的归纳偏置先验信息,在 ImageNet 的数据规模上 ViT 是比不过 ResNet 的,但是当数据量逐渐增大时,使用 Transformer 的效果会越来越好。 在大型JFT-300M数据集上进行预训练时,Vision Transformer表现良好。与ResNets相比,对视觉的归纳偏见更少,数据集的大小有多重要? 我们进行了两组实验。 首先,我们在越来越大的数据集上预训练 ViT 模型:ImageNet、ImageNet-21k 和 JFT300M。 为了提高较小数据集的性能,我们优化了三个基本的正则化参数——权重衰减、dropout 和标签平滑。 图 3 显示了微调到 ImageNet 后的结果(其他数据集上的结果见表 5)(请注意,ImageNet的预训练模型也进行了微调,但还是在ImageNet上。这是因为在微调过程中增加分辨率可以提高性能)。 当在最小的数据集 ImageNet 上进行预训练时,尽管(中等)正则化,ViT-Large 模型与 ViT-Base 模型相比表现不佳。 使用 ImageNet-21k 预训练,它们的性能相似。 只有使用 JFT-300M,我们才能看到更大模型的全部优势。 图 3 还显示了不同大小的 BiT 模型跨越的性能区域。 BiT CNN 在 ImageNet 上的表现优于 ViT,但在更大的数据集上,ViT 超过了它。 总体而言,ImageNet 上的 few-shot 结果(图 4)以及 VTAB 上的低 low-data 结果(表 2)对于 very low-data transfer 似乎很有希望。 进一步分析 ViT 的 few-shot 特性是未来工作的一个令人兴奋的方向。 4.4 SCALING STUDY我们通过评估 JFT-300M 的 transfer 性能,对不同模型进行了受控缩放研究。 在这种情况下,数据大小不会成为模型性能的瓶颈,我们会评估每个模型的性能与预训练成本。 模型集包括:7个ResNets,R50x1、R50x2、R101x1、R152x1、R152x2,预训练了7个epochs,加上预训练了14个epochs的R152x2和R200x3; 6个Vision Transformers,ViT-B/32、B/16、L/32、L/16,预训练7个epochs,加上L/16和H/14预训练14个epochs; 和 5 个混合模型,R50+ViT-B/32、B/16、L/32、L/16 预训练了 7 个 epoch,加上 R50+ViT-L/16 预训练了 14 个 epochs(对于混合模型, 模型名称的末尾不代表补丁大小,而是代表 ResNet 主干中的总向下采样率)。 图 5 包含 transfer 性能与总预训练计算的关系(有关计算成本的详细信息,请参见附录 D.5)。 每个模型的详细结果在附录的表 6 中提供。 可以观察到一些模式。 首先,Vision Transformers 在性能/计算权衡方面主导了 ResNet。 ViT 使用大约 2-4 倍 less 的计算来获得相同的性能(5 个数据集的平均值)。 其次,混合模型在较小的计算预算下略胜于 ViT,但对于较大的模型,这种差异消失了。 这个结果有些出人意料,因为人们可能期望卷积局部特征处理能够在任何规模下辅助 ViT。 第三,Vision Transformers 似乎不会在尝试的范围内饱和,从而推动未来的扩展工作。 4.5 INSPECTING VISION TRANSFORMER为了开始理解 Vision Transformer 如何处理图像数据,我们分析了它的内部表示。 Vision Transformer 的第一层将扁平化的补丁线性投影到低维空间(方程 1)。 图 7(左)显示了学习嵌入滤波器的顶部主成分。 这些组件类似于每个补丁内精细结构的低维表示的貌似真实的基函数。 投影后,将学习到的位置嵌入添加到补丁表征中。 图 7(中心)显示该模型学习在位置嵌入的相似性中对图像内的距离进行编码,即更近的补丁往往具有更相似的位置嵌入。 进一步,出现了行列结构; 同一行/列中的补丁具有相似的嵌入。 最后,对于较大的网格,正弦结构有时很明显(附录 D)。 位置嵌入学习表征 2D 图像拓扑解释了为什么使用 hand-crafted 2D-aware embedding variants 不会产生改进(附录 D.4)( 因为1D的位置 embedding 已经学到了二维信息 )。 Self-attention 允许 ViT 整合整个图像的信息,即使是在最低层。我们调查了网络在多大程度上利用了这种能力。具体来说,我们根据注意力权重计算图像空间中信息整合的平均距离(图 7,右)。这种“注意力距离”类似于 CNN 中的感受野大小。我们发现一些头已经在最低层关注了大部分图像,这表明模型确实使用了全局集成信息的能力。其他注意力头在低层中始终具有较小的注意力距离。在 Transformer 之前应用 ResNet 的混合模型中,这种高度局部化的注意力不太明显(图 7,右),这表明它可能具有与 CNN 中的早期卷积层类似的功能。此外,注意力距离随着网络深度的增加而增加。在全局范围内,我们发现该模型关注与分类语义相关的图像区域(图 6)。 4.6 SELF-SUPERVISIONTransformers 在 NLP 任务上表现出令人印象深刻的性能。 然而,他们的成功在很大程度上不仅源于其出色的可扩展性,还源于大规模的自监督预训练(Devlin 等人,2019 年;Radford 等人,2018 年)。 我们还对自监督的掩码补丁预测进行了初步探索,模仿了 BERT 中使用的掩码语言建模任务。 通过自监督预训练,我们较小的 ViT-B/16 模型在 ImageNet 上实现了 79.9% 的准确率,比从头开始训练显着提高了 2%,但仍比有监督预训练落后 4%。 附录 B.1.2 包含更多详细信息。 我们将对对比预训练(Chen 等人,2020b;He 等人,2020 年;Bachman 等人,2019 年;Hénaff 等人,2020 年)的探索留给未来的工作。 5 CONCLUSION我们探索了 Transformer 在图像识别中的直接应用。与之前在计算机视觉中使用自我注意的工作不同,除了最初的 patch 提取步骤外,我们没有将特定图像的归纳偏差引入到架构中。相反,我们将图像看作 patches 的序列,并使用NLP中使用的标准Transformer编码器对其进行处理。这种简单但可扩展的策略在与大型数据集的预训练相结合时效果非常好。因此,Vision Transformer在许多图像分类数据集上匹配或超过了目前的技术水平,同时预训练成本相对较低。 虽然这些初步结果令人鼓舞,但仍然存在许多挑战。一种是将ViT应用于其他计算机视觉任务,如检测和分割。我们的结果,加上Carion et al. (2020) 的结果,表明了这种方法的前景。另一个挑战是继续探索自监督的预训练方法。我们的初步实验表明,自监督预训练的效果优于有监督预训练,但自监督预训练与大规模有监督预训练之间仍存在较大差距。最后,ViT的进一步扩展可能会导致性能的提高。
个人总结: 该论文做到了很好的将 Transformer 与 CV 进行了结合,Method 部分并不多,主要是进行了大量的实验讨论,给后续的工作展示了很多的可能性。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/27 2:32:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |