可视化和理解卷积网络外文翻译资料
2022-12-28 16:59:46
Very Deep Convolutional Networks for Large-Scale Image Recognition
用于大规模图像识别的深度卷积网络
Karen Simonyan* amp; Andrew Zissermandagger;
Visual Geometry Group, Department of Engineering Science, University of
Oxford(牛津大学工程科学系视觉几何组)
摘要
在这项工作中,我们研究了卷积网络深度在大规模的图像识别环境下对准确性的影响。我们的主要贡献是使用非常小的(3times;3)卷积滤波器架构对网络深度的增加进行了全面评估,这表明通过将深度推到 16-19 加权层可以实现对现有技术配置的显著改进。这些发现是我们的 ImageNet Challenge 2014 提交论文的基础,我们的团队在定位和分类过程中分别获得了第一名和第二名。我们还表明, 我们的表示对于其他数据集泛化的很好,在其它数据集上取得了最好的结果。我们使我们的两个性能最好的 ConvNet 模型可公开获得,以便进一步研究计算机视觉中深度视觉表示的使用。
1 引 言
卷积网络(ConvNets)近来在大规模图像和视频识别方面取得了巨大成功
(Krizhevsky 等,2012;Zeiler&Fergus,2013;Sermanet 等,2014;Simonyan&
Zisserman,2014),由于大的公开图像存储库,例如 ImageNet,以及高性能计算
- current affiliation: Google DeepMind
- 目前所属机构:Google DeepMind
dagger; current affiliation: University of Oxford and Google DeepMind
dagger; 目前所属机构:牛津大学、Google DeepMind
系统的出现,例如 GPU 或大规模分布式集群(Dean 等,2012)使这成为可能。特别是,在深度视觉识别架构的进步中,ImageNet 大型视觉识别挑战(ILSVRC)
(Russakovsky 等,2014)发挥了重要作用,它已经成为几代大规模图像分类系统的测试平台,从高维度浅层特征编码(Perronnin 等,2010)(ILSVRC-2011 的获胜者)到深层 ConvNets(Krizhevsky 等,2012)(ILSVRC-2012 的获奖者)。随着 ConvNets 在计算机视觉领域越来越商品化,为了达到更好的准确性,
已经进行了许多尝试来改进 Krizhevsky 等人(2012)最初的架构。例如,ILSVRC-
2013(Zeiler&Fergus,2013;Sermanet 等,2014)表现最佳的论文使用了更小的感受野窗口尺寸和第一卷积层更小的步长。另一条改进措施在整个图像和多个尺度上对网络进行密集地训练和测试(Sermanet 等,2014;Howard,2014)。在本文中,我们讨论了 ConvNet 架构设计的另一个重要方面——其深度。为此,我们修正了架构的其它参数,并通过添加更多的卷积层来稳定地增加网络的深度,这是可行的,因为在所有层中使用非常小的(3times;3)卷积滤波器。
因此,我们提出了更为精确的 ConvNet 架构,不仅可以在 ILSVRC 分类和定位任务上取得的最佳的准确性,而且还适用于其它的图像识别数据集,它们可以获得优异的性能,即使使用相对简单流程的一部分(例如,通过线性 SVM 分类深度特征而不进行微调)。我们发布了两款表现最好的模型 1,以便进一步研究。
本文的其余部分组织如下。在第 2 节,我们描述了我们的 ConvNet 配置。图像分类训练和评估的细节在第 3 节,并在第 4 节中在 ILSVRC 分类任务上对配置进行了比较。第 5 节总结了论文。为了完整起见,我们还将在附录 A 中描述和评估我们的 ILSVRC-2014 目标定位系统,并在附录 B 中讨论了非常深的特征在其它数据集上的泛化。最后,附录 C 包含了主要的论文修订列表。
2. ConvNet 配置
为了衡量 ConvNet 深度在公平环境中所带来的改进,我们所有的 ConvNet 层配置都使用相同的规则,灵感来自 Ciresan 等(2011);Krizhevsky 等人(2012 年)。在本节中,我们首先描述我们的 ConvNet 配置的通用设计(第 2.1 节),
然后详细说明评估中使用的具体配置(第 2.2 节)。最后,我们的设计选择将在
2.3 节进行讨论并与现有技术进行比较。
架构
在训练期间,我们的 ConvNet 的输入是固定大小的 224times;224 RGB 图像。我们唯一的预处理是从每个像素中减去在训练集上计算的 RGB 均值。图像通过一堆卷积(conv.)层,我们使用感受野很小的滤波器:3times;3(这是捕获左/右,上/ 下,中心概念的最小尺寸)。在其中一种配置中,我们还使用了 1times;1 卷积滤波
器,可以看作输入通道的线性变换(后面是非线性)。卷积步长固定为 1 个像素;
卷积层输入的空间填充要满足卷积之后保留空间分辨率,即 3times;3 卷积层的填充
为 1 个像素。空间池化由五个最大池化层进行,这些层在一些卷积层之后(不是
所有的卷积层之后都是最大池化)。在 2times;2 像素窗口上进行最大池化,步长为
2。
一堆卷积层(在不同架构中具有不同深度)之后是三个全连接(FC)层:前两个每个都有 4096 个通道,第三个执行 1000 维 ILSVRC 分类,因此包含 1000 个通道(一个通道对应一个类别)。最后一层是 soft-max 层。所有网络中全连接层的配置是相同的。
所有隐藏层都配备了修正(ReLU(Krizhevsky 等,2012))非线性。我们注意到,我们的网络(除了一个)都不包含局部响应归一化(LRN)(Krizhevsky 等,2012):将在第 4 节看到,这种规范化并不能提高在 ILSVRC 数据集上的性能,但增加了内存消耗和计算时间。在应用的地方,LRN 层的参数是(Krizhevsky 等,2012)的参数。
配置
本文中评估的 ConvNet 配置在表 1 中列出,每列一个。接下来我们将按网络名称(A-E)来表示网络。所有配置都遵循 2.1 节提出的通用设计,并且仅是深度不同:从网络 A 中的 11 个加权层(8 个卷积层和 3 个全连接层)到网络 E 中的 19 个加权层(16 个卷积层和 3 个全连接层)。卷积层的宽度(通道数)相当
小,从第一层中的 64 开始,然后在每个最大池化层之后增加 2 倍,直到达到 512。
表 1. ConvNet 配置(以列显示)。随着更多的层被添加,配置的深度从左(A) 增加到右(E)(添加的层以粗体显示)。卷积层参数表示为“convlang;感受野大小
rang;-lang;通道数rang;”。为了简洁起见,不显示 ReLU 激活功能。
在表 2 中,我们列出了每个配置的参数数量。尽管深度很大,我们的网络中权重数量并不大于具有更大卷积层宽度和感受野的较浅网络中的权重数量
(144M 的权重在(Sermanet 等人,2014)中)。
表 2:参数数量(百万级别)
讨论
我们的 ConvNet 配置与 ILSVRC-2012(Krizhevsky 等,2012)和 ILSVRC-
2013 比赛(Zeiler&Fergus,2013;Sermanet 等,2014)表现最佳的参赛提交中使用的 ConvNet 配置有很大不同。不是在第一卷积层中使用相对较大的感受野
(例如,在(Krizhevsky 等人,2012)中的 11times;11,步长为 4,或在(Zeiler&
Fergus,2013;Sermanet 等,2014)中的 7times;7,步长为 2),我们在整个网络使用非常小的 3times;3 感受野,与输入的每个像素(步长为 1)进行卷积。很容易看到两个 3times;3 卷积层堆叠(没有空间池化)有 5times;5 的有效感受野;三个这样的层具
有 7times;7 的有效感受野。那么我们获得了什么?例如通过使用三个 3times;3 卷积层的
堆叠来替换单个 7times;7 层。首先,我们结合了三个非线性修正层,而不是单一的,
这使得决策函数更具判别性。其次,我们减少参数的数量:假设三层 3times;3 卷积堆叠的输入和输出有 C 个通道,堆叠卷积层的参数为 3(32C2)=27C2 个权重;同时,单个 7times;7 卷积层将需要 72C2=49C2 个参数,即参数多 81%。这可以看作是对 7times;7 卷积滤波器进行正则化,迫使它们通过 3times;3 滤波器(在它们之间注入非线性)进行分解。
结合 1times;1 卷积层(配置 C,表 1)是增加决策函数非线性而不影响卷积层感受野的一种方式。即使在我们的案例下,1times;1 卷积基本上是在相同维度空间上的线性投影(输入和输出通道的数量相同),由修正函数引入附加的非线性。应该注意的是 1times;1 卷积层最近在 Lin 等人(2014)的“Network in Network”架构中已经得到了使用。
Ciresan 等人(2011)以前使用小尺寸的卷积滤波器,但是他们的网络深度远远低于我们的网络,并且他们没有在大规模的 ILSVRC 数据集上进行评估。
Goodfellow 等人(2014)在街道号码识别任务中采用深层 ConvNets(11 个权重层),并且其表明增加深度取得了更好的性能。GooLeNet(Szegedy 等,2014) 是 ILSVRC-2014 分类任务的表现最好的项目,是独立于我们工作之外开发的, 但是类似的是它也是基于非常深的卷积网络(22 个权重层)和小卷积滤波器(除了 3times;3,它们也使用了 1times;1 和 5times;5 卷积)。然而,它们的网络拓扑结构比我们的更复杂,并且在第一层中特征图的空间分辨率被大幅度地减少,以减少计算
量。正如将在第 4.5 节显示的那样,我们的模型在单网络分类精度方面胜过
Szegedy 等人(2014)。
分类框架
在上一节中,我们介绍了我们的网络配置的细节。在本节中,我们将介绍分类卷积网络训练和评估的细节。
训练
ConvNet 训练过程基本上遵循 Krizhevsky 等人(2012)的做法(除了从多尺度训练图像中对输入裁剪图像进行采样外,如下文所述)。也就是说,通过使用具有动量的小批量梯度下降(基于反向传播(LeCun 等人,1989))优化多项式逻辑回归目标函数来进行训练。批量大小设为 256,动量为 0.9。训练通过权重衰减(L2 惩罚乘子设定为 5sdot;10minus;4)进行正则化,前两个全连接层采取 dropout 正则化(dropout 比率设定为 0.5)。学习率初始设定为 10minus;2,然后当验证集准确率停止改善时,学习率以 10 倍的比率进行减小。学习率总共降低 3 次,学习在 37 万次迭代后停止(74 个 epochs)。我们推测,尽管与(Krizhevsky 等,2012)的网络相比我们的网络参数更多,网络的深度更深,但网络需要更小的 epoch 就可以收敛,这是由于(a)更大的深度和更小的卷积滤波器尺寸引起的隐式正则化,
(b)某些层的预初始化。
网络权重的初始化是重要的,由于深度网络中梯度的不稳定,不好的初始化可能会阻碍学习。为了规避这个问题,我们开始训练配置 A(表 1)的网络,其深度足够浅故以随机初始化进行训练。然后,当训练更深的网络架构时,我们用网络 A 的层初始化前四个卷积层和最后三个全连接层(中间层被随机初始化)。我们没有减少预初始化层的学习率,允许他们在学习过程中改变。对于随机初始化(如果应用),我们从均值为 0 和方差为 10minus;2 的正态分布中采样权重。偏置初始化为零。值得注意的是,在提交论文之后,我们发现可以通过使用 Glorot&
Bengio(2010)的随机初始化程序来初始化权重而不进行预训练。
为了获得固定大小的 224times;224 ConvNet 输入图像,它们从归一化的训练图像中被随机裁剪(每个图像每次 SGD 迭代进行一次裁剪)。为了进一步增强训
练集,裁剪图像经过了随机水平翻转和随机RGB 颜色偏移(Krizhevsky 等,2012)。下面解释训练图像归一化。
训练图像大小。令 S 是等轴归一化的训练图像的最小边,ConvNet 输入从 S
中裁剪(我们也将 S 称为训练尺度)。虽然裁剪尺寸固定为 224times;224,但原则上 S 可以是不小于 224 的任何值:对于 S=224,裁剪图像将捕获整个图像的统计数据,完全扩展训练图像的最小边;对于 S≫224,裁剪图像将对应于图像的一小部分,包含一个小对象或对象的一部分。
我们考虑两种方法来设置训练尺度 S。第一种是修正对应单尺度训练的 S(注意,采样裁剪图像中的图像内容仍然可以表示多尺度图像统计)。在我们的实验中,我们评估了以两个固定尺度训练的模型:S=256(已经在现有技术中广泛使用(Krizhevsky 等人,2012;Zeiler&Fergus,2013;Sermanet 等,2014))和 S=384。给定一个 ConvNet 配置,我们首先使用 S=256 来训练网络。为了加速 S=384 网络的训练,用
剩余内容已隐藏,支付完成后下载完整资料
Visualizing and Understanding Convolutional Networks
可视化和理解卷积网络
Matthew D. Zeiler and Rob Fergus
Dept. of Computer Science, New York University, USA
美国纽约大学计算机科学系
摘要
大型卷积网络模型最近在 ImageNet 基准测试上表现出了令人印象深刻的分类性能Krizhevsky 等[18]。然而,人们还没有明确的理解他们为什么表现如此之好,或者如何改进它们。在本文中,我们将探讨这两个问题。我们介绍了一种新的可视化技术,可以深入了解中间特征层的功能和分类器的操作。作为诊断的手段,这些可视化技术使我们能够找到优于Krizhevsky 等人在ImageNet 分类基准的模型架构。我们还进行了消融研究,以发现不同模型层的在模型性能上的贡献。我们的研究表明我们的 ImageNet 模型能很好地泛化到其他数据集: 当softmax 分类器被重新训练时,它令人信服地击败了 Caltech-101 和Caltech-256 数据集上当前最先进的结果。
- 引言
自 20 世纪 90 年代早期LeCun 等[20]提出卷积网络以来,卷积网络(convnets)在手写数字分类和人脸检测等任务中表现出色。在过去的 18 个月中,有几篇论文表明,他们还可以在更具挑战性的视觉分类任务中具有更出色的表现。Ciresan 等[4]表明其在 NORB 和CIFAR-10 数据集上最好的性能。最值得注意的是,Krizhevsky 等[18]
在 ImageNet 2012 分类基准测试中获得了创纪录的表现,他们的卷积模型实现了 16.4%的错误率,而第二名的结果是 26.1%。基于这项研究工作,Girshick 等[10]研究报道了 PASCAL VOC 数据集上最佳的检测性能。有几个因素导致这种性能的显着提高:(i)具有数百万个标记样本的更大规模的训练集的可用性;(ii)强大的 GPU 实现,使非常大的模型的训练成为现实;(iii)更好的模型正则化策略,例如Dropout [14]。
尽管取得了令人鼓舞的进展,但对这些复杂模型的内部操作和行为,或者它们如何实现如此良好的性能,仍然了解甚少。从科学的角度来看,这是非常令人不满意的。如果没有清楚地了解它们如何以及为何起作用,那么更好的模型的开发过程将被简化为试错。在本文中, 我们介绍了一种可视化技术,该技术揭示了激发模型中任何层的单个特征映射的输入激励。它还允许我们在训练期间观察特征的演变并诊断模型的潜在问题。我们提出的可视化技术使用 Zeiler 等[29]提出的多层反卷积网络(deconvnet),即将特征激活投影回输入像素空间。我们还通过遮挡输入图像的部分来进行分类器输出的灵敏度分析,从而揭示图像的哪些部分对于分类是重要的。
使用这些工具,我们从 Krizhevsky 等[18]的架构开始,探索不同的架构,发现在 ImageNet 上超越其结果的架构。然后,我们探索模型对其他数据集的泛化能力,只需重新训练 softmax 分类器。因此, 这是一种受监督的预训练形式,这不同于Hinton 等[13]和其他人[1,26] 推广的无监督预训练方法。
-
- 相关工作
可视化:可视化特征以获得关于网络的直觉是常见的做法,但主
要局限于可以投影到像素空间第一层。在较高层中,必须使用其它方法。[8]通过在图像空间中执行梯度下降来找到每个单元的最佳刺激, 以最大化单元的激活。这需要谨慎的初始化,并且不提供有关单元不
变量的任何信息。由后者的缺点所激发,[19(] 通过[2]扩展一个想法)
揭示如何围绕最优响应以数字方式计算给定单元的Hessian 矩阵,从而对不变量有所了解。问题是对于更高层,不变量非常复杂,因此通过简单的二次近似很难捕获。相反,我们的方法提供了不变量的非参数视图,显示了训练集中的哪些模式激活了特征映射。我们的方法类似于 Simonyan 等[23]同期工作,他们揭示了如何通过从网络的全连接层投影回来而获得显着性图,而不是我们使用的卷积特征。Girshick 等[10]表明识别数据集中的补丁的可视化,这些补丁与模型中较高层的强激活相关。我们的可视化不同之处在于它们不仅仅是输入图像的裁剪,而是自上而下的投影,揭示每个图像块中刺激特定特征图的结构。
特征泛化:在 Donahue 等[7]和Girshick 等[10]的同期工作中也探
讨了我们研究的卷积特征的泛化能力。他们使用卷积特征在前一个研究中获得 Caltech-101 和 Sun 场景数据集的最佳性能,后者研究是在PASCAL VOC 数据集上进行对象检测。
- 方法
根据 LeCun 及 Krizhevsky 等的定义,我们在整篇论文中使用标准的完全监督的卷积模型。这些模型通过一系列层将彩色 2D 输入图像 xi 映射到C 个不同类别上的概率向量 yi。每层包括:(i)前一层输出(或在第一层的情况下,输入图像)与一组学习过滤器的卷积;(ii) 通过整流线性函数(relu(x) = max(x,0))传递响应;(iii)[可选地]在局部邻域上的最大池化和(iv)[可选地]局部对比操作,其对特征映射之间的响应进行归一化。有关这些操作的更多详细信息,请参见[18] 和[16]。网络的前几层是传统的全连接网络,最后一层是 softmax 分类器。图 3 显示了我们许多实验中使用的模型。
我们使用大量 N 个标记图像{x,y}训练这些模型,其中标签 yi 是指示真实类的离散变量。适用于图像分类的交叉熵损失函数用于比较
?̂?和 yi。网络的参数(卷积层中的滤波器,全连接层中的权重矩阵和偏差)通过相对于整个网络中的参数反向传播损耗的导数来训练,并通过随机梯度下降来更新参数。训练的详细情节见第 3 部分。
-
- 通过反卷积可视化
理解卷积网络的操作需要解释中间层的特征活动。我们提出了一种新颖的方法来将这些活动映射回输入像素空间,显示最初在特征映射中引起给定激活的输入模式。我们使用反卷积网络(deconvnet)
Zeiler 等[29]实现此映射。反卷积网络可以被认为是一个使用相同组件(过滤,池化)的逆向的卷积模型,即不是将像素映射到特征,而是将特征映射到像素。在 Zeiler 等[29]中,反卷积网络作为进行无监督学习的一种方式而被提出。在这里,它们不会用于任何学习能力, 仅作为对已经训练好的卷积网络的探索。
如图 1(上图)所示,为了检查一个卷积网络,网络的每个层都附有一个反卷积网络,提供了一条返回图像像素的连续路径。首先, 将输入图像呈现给卷积网络并通过所有层计算特征。为了检查给定卷积网络的激活,我们将图层中的所有其他激活设置为零,并将特征图作为输入传递给附加的反卷积网络层。然后我们依次(i)反池化,(ii)纠正和(iii)过滤以重建下面的层中的活动,从而产生所选择的激活。然后重复这一过程,直到达到输入像素空间。
图 1.上图:反卷积层(左)与卷积层(右)相连。反卷积网络将从下面的层重建一个近似版本的卷积网络特征。下图:反卷积网络中使用 switch 反池化操作的示意图,switch 记录卷积网络池化时每个池化区域(彩色区域)中局部最大值的位
置。黑/白条在特征图中表示负/正激活。
反池化:在卷积网络中,最大池化操作是不可逆的,但是我们可以通过在一组切换变量中记录每个池化区域内的最大值的位置来获
得近似逆。在反卷积网络中,反池化操作使用这些切换将来自上层的重建放置到适当的位置,从而保留激活的结构。有关步骤的插图,请参见图 1(底部)。
纠正:卷积网络使用 relu 的非线性,即纠正特征图,从而确保特
征图始终为正。为了在每一层获得有效的特征重建(也应该是正的),我们通过 relu 非线性传递重建的信号。
滤波:卷积网络使用学习到的过滤器来卷积前一层的特征图。为
了近似反转这一点,反卷积网络使用相同滤波器的转置版本(如其他自动编码器模型,例如 RBM),但应用于纠正的映射图,而不是层下面的输出。实际上,这意味着垂直和水平翻转每个过滤器。
请注意,在此重建路径中,我们没有使用任何对比度归一化操作。从较高层向下投影使用在前进途中由卷积网络中的最大池化生成的切换设置。由于这些开关设置是给定输入图像所特有的,因此从单次激活获得的重建类似于原始输入图像的一小块,其结构根据它们对特征激活的贡献而加权。由于模型是有区别地训练的,因此它们隐含地表明输入图像的哪些部分是有区别的。请注意,这些预测不是来自模型的样本,因为不涉及生成过程。整个过程类似于反向支持单个强激
活(而不是通常的梯度),即计算 part;ℎ ,其中 h 是具有强激活的特征映
part;??
射的元素,而 Xn 是输入图像。然而,它的不同之处在于(i)独立地施加 relu,(ii)不使用对比度归一化操作。我们的方法的一个总体缺 点是它只能显示单个激活,而不是图层中存在的整体的激活。然而, 正如我们在图 6 中所示,这些可视化是输入模式的精确表示,其刺激模型中的给定特征图:当对应于模式的原始输入图像的部分被遮挡时, 我们看到特征图中激活的明显下降。
- 训练细节
我们现在描述将在第 4 节中被可视化的大型卷积网络模型。图 3 中所示的架构类似于 Krizhevsky 等[18]用于 ImageNet 分类的架构。一个区别是 Krizhevsky 的 3,4,5 层使用的稀疏连接(由于模型分为 2 个GPU)在我们的模型中被密集连接替换。另一个重要的不同是关于
1,2 层,其被用于图 5 中后面可视化的检查,如 4.1 部分所述。
该模型在 ImageNet 2012 训练集上进行了训练(130 万张图像, 分布在 1000 多个不同的类别中)[6]。每个 RGB 图像都经过预处理, 方法是将最小尺寸调整为 256,裁剪中心 256times;256 区域,减去像素平均值(在所有图像上),然后得到 10 个不同的裁剪块,尺寸为 224
times;224(原图像及水平翻转的四个角 中心)。使用具有 128 的小批量大小的随机梯度下降来更新参数,学习率 10-2 开始,结合动量项 0.9。当验证错误达到平稳时,我们在整个训练过程中手动降低学习率。Dropout [14]用于全连接的层(6,7 层),dropout 比率为 0.5。所有权重都初始化为 10-2,偏差设置为 0。
在训练期间可视化第一层过滤器显示其中一些过滤器占主导地位。为了解决这个问题,我们将其 RMS 值超过固定半径 10-1 的卷积层中的每个滤波器重新归一化到该固定半径。这一点至关重要,特别是在模型的第一层, 输入图像大致在[-128, 128] 范围内。如在
Krizhevsky 等[18],我们生成了多种不同的裁剪块和每个训练样例的翻转,以提高训练集的大小。我们在 70 个 epochs 之后停止了训练, 基于[18]的实现在一个 GTX580 GPU 上花了大约 12 天。
- 卷积网络可视化
使用第 3 节中描述的模型,我们现在使用反卷积网络可视化
ImageNet 验证集上的特征激活。
特征可视化:图 2 所示为训练完成后我们模型的特征可视化。对
于给定的特征映射,我们显示前 9 个激活,每个激活分别投影到像素空间,揭示激发该映射并显示其对输入变形的不变性的不同结构。除了这些可视化外,我们还会显示相应的图像补丁。 它们比可视化具有更大的变化,可视化仅关注每个补丁内的判别结构。 例如,在第 5
层,第 1 行,第 2 列中,补丁似乎没有什么共同之处,但可视化显示此特定要素图聚焦于背景中的草,而不是前景对象。
图 2.完全训练模型中的特征可视化。对于 2-5 层,我们在验证数据的特征映射的随机子集中显示前 9 个激活,使用我们的反卷积网络方法投影到像素空间。我们
的重建不是来自模型的样本:它们是来自验证集的重建模式,其导致给定特征图
中的高激活。对于每个特征图,我们还会显示相应的图像块。注意:(i)每个特
征图内的强分组,(ii)较高层的较大不变性和(iii)图像的辨别部分的放大,例如,狗的眼睛和鼻子(第 4 层第 1 行第 1 列)。电子版观看效果最佳。由于 30Mb 的提交限制而使用了压缩算法,而不是重建算法本身。
每层的投影显示了网络中特征的分层特性。 第 2 层响应角落和
其
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[269661],资料为PDF文档或Word文档,PDF文档可免费转换为Word