来自美国波士顿
更专业的论文润色机构
400-110-1310

咨询学术顾问:400-110-1310

服务时间:周一至周日,9:00-23:00

建议反馈/客户投诉:Editsprings@163.com

微信扫码二维码,添加学术顾问企业微信

您还可以点击在线咨询按钮,与人工客服直接对话,无需等待,立马接入。

在线咨询
欢迎关注“艾德思EditSprings”微信公众号

关注微信获取最新优惠和写作干货,
随时手机询价或咨询人工客服,更可实时掌握稿件
进度,加速稿件发表。

微信扫描二维码关注服务号

ResNet翻译冷夏的专栏,EditSprings,艾德思

网络 | 2019/03/11 13:41:23  | 193 次浏览

 文章地址:Deep Residual Learning for Image Recognition

译文地址:

摘要 越深的神经网络训练起来越困难.本文展示了一种残差学习框架,能够简化使那些非常深的网络的训练,该框架使得层能根据其输入来学习残差函数而非原始函数(unreferenced functions).本文提供了全面的依据表明,这些残差网络的优化更简单,而且能由更深的层来获得更高的准确率.本文在ImageNet数据集上使用了一个 152 层深的网络来评估我们的残差网络,虽然它相当于8倍深的VGG网络,但是在本文的框架中仍然只具有很低的复杂度.这些残差网络的一个 组合模型 (ensemble)在ImageNet测试集上的错误率仅为 .这个结果在2015年的ILSVRC分类任务上获得了第一名的成绩.我们在CIFAR-10上对100层和1000层的残差网络也进行了分析.

表达的深度在很多视觉识别任务中具有非常核心的重要性.仅仅由于我们相当深的表达,便在COCO目标检测数据集上获得了 28% 的相对提升. 深度残差网络是我们参加ILSVRC & COCO 2015 竞赛上所使用模型的基础,并且我们在ImageNet检测/ImageNet定位/COCO检测以及COCO分割上均获得了第一名的成绩.

1. 介绍 深度卷积神经网络在图像分类领域取得了一系列的突破 . 深度网络很好的将一个端到端的多层模型中的低/中/高级特征以及分类器整合起来,特征的等级可以通过所堆叠层的数量(深度)来丰富.最近有结果显示,模型的深度发挥着至关重要的作用,这样导致了ImageNet竞赛的参赛模型都趋向于" 非常深 '——16 层 到30层 .许多其它的视觉识别任务的都得益于非常深的模型.

在深度的重要性的驱使下,出现了一个新的问题:训练一个更好的网络是否和堆叠更多的层一样简单呢?解决这一问题的障碍便是困扰人们很久的梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛.归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛.

当深层网络能够收敛时,一个 退化 问题又出现了:随着网络深度的增加,准确率达到饱和(不足为奇)然后迅速退化.意外的是,这种退化 并不是由过拟合造成的 ,并且在一个合理的深度模型中增加更多的层却导致了 更高的错误率 ,我们的实验也证明了这点. 展示了一个典型的例子.

20层和56层的"plain'网络在CIFAR-10上的训练错误率(左)和测试错误率(右).越深的网络在训练和测试上都具有越高的错误率.

退化的出现(训练准确率)表明了并非所有的系统都是很容易优化的.让我们来比较一个浅层的框架和它的深层版本.对于更深的模型,这有一种通过构建的解决方案: 恒等映射 (identity mapping)来构建增加的层,而其它层直接从浅层模型中复制而来.这个构建的解决方案也表明了,一个更深的模型不应当产生比它的浅层版本更高的训练错误率.实验表明,我们目前无法找到一个与这种构建的解决方案相当或者更好的方案(或者说无法在可行的时间内实现).

本文中,我们提出了一种 深度残差学习 框架来解决这个退化问题.我们明确的让这些层来拟合 残差映射 (residual mapping),而不是让每一个堆叠的层直接来拟合所需的底层映射(desired underlying mapping).假设所需的底层映射为 H ( x ) H(x) .我们推断残差映射比原始未参考的映射(unreferenced mapping)更容易优化.在极端的情况下,如果某个恒等映射是最优的,那么将残差变为0 比用非线性层的堆叠来拟合恒等映射更简单.

公式 F ( x ) + x F(x)+x 可以通过前馈神经网络的" shortcut连接 '来实现().Shortcut连接就是跳过一个或者多个层.在我们的例子中,shortcut 连接只是简单的执行恒等映射,再将它们的输出和堆叠层的输出叠加在一起().恒等的shortcut连接并不增加额外的参数和计算复杂度.完整的网络仍然能通过端到端的SGD反向传播进行训练,并且能够简单的通过公共库(例如,Caffe)来实现而无需修改 求解器 (solvers).

残差学习:一个构建块.

我们在ImageNet数据集上进行了综合性的实验来展示这个退化问题并评估了我们提出的方式.本文表明了: 1) 我们极深的残差网络是很容易优化的,但是对应的"plain'网络(仅是堆叠了层)在深度增加时却出现了更高的错误率. 2) 我们的深度残差网络能够轻易的由增加层来提高准确率,并且结果也大大优于以前的网络.

CIFAR-10数据集上也出现了类似的现象,这表明了我们提出的方式的优化难度和效果并不仅仅是对于一个特定数据集而言的.我们在这个数据集上成功的提出了超过100层的训练模型,并探索了超过1000层的模型.

在ImageNet分类数据集上,极深的残差网络获得了优异的成绩.我们的 152层 的残差网络是目前ImageNet尚最深的网络,并且别VGG网络的复杂度还要低.在ImageNet测试集上,我们的组合模型(ensemble)的top-5错误率仅为 ,并赢得了ILSVRC 2015分类竞赛的第一名.这个极深的模型在其他识别任务上同样也具有非常好的泛化性能,这让我们在ILSVRC & COCO 2015 竞赛的ImageNet检测/ImageNet定位/COCO检测以及COCO分割上均获得了第一名的成绩.这强有力的证明了残差学习法则的通用性,因此我们将把它应用到其他视觉甚至非视觉问题上.

2. 相关工作 残差表达. 在图像识别中,VLAD是残差向量对应于字典进行编码的一种表达形式,Fisher Vector可以看做是VLAD 的一个概率版本.对于图像检索和分类它们都是强力的浅层表达.对于向量量化, 残差向量编码 比原始向量编码更加有效.

在低级视觉和计算机图形学中,为了求解偏微分方程(PDEs),通常使用 Multigrid 法将系统重新表达成多尺度的子问题来解决,每一个子问题就是解决粗细尺度之间的 残差问题 .Multigrid的另外一种方法是分层基预处理,它依赖于代表着两个尺度之间 残差向量 的变量.实验证明 这些求解器比其他标准求解器的收敛要快得多,却并没有意识到这是该方式的 残差特性 所致.这些方式表明了一个好的重新表达或者预处理能够简化优化问题.

Shortcut连接. Shortcut连接已经经过了很长的一段实践和理论研究过程.训练多层感知器(MLPs)的一个早期实践就是添加一个连接输入和输出的线性层.在Szegedy2015Going及Lee2015deeply中,将一些中间层直接与辅助分类器相连接可以解决梯度消失/爆炸问题.在 Szegedy2015Going中,一个" inception '层由一个shortcut分支和一些更深的分支组合而成.

与此同时," highway networks '将 shortcut连接 与门控函数 结合起来.这些门是数据相关并且是有额外参数的,而我们的恒等shortcuts是 无参数 的.当一个门的shortcut是"closed'(接近于0)时,highway网络中的层表示非残差函数.相反的,我们的模型总是学习残差函数;我们的恒等shortcuts从不关闭,在学习额外的残差函数时,所有的信息总是通过的.此外,highway网络并不能由增加层的深度(例如, 超过100层)来提高准确率.

3. Deep Residual Learning 3.1 Residual Learning 我们将 H ( x ) H(x) .尽管这两个形式应该都能够逼近所需的函数(正如假设),但是学习的难易程度并不相同.

这个重新表达的动机是由退化问题这个反常的现象(,左).正如我们在introduction中讨论的,如果增加的层能以恒等映射来构建,一个更深模型的训练错误率不应该比它对应的浅层模型的更大.退化问题表明了,求解器在通过多个非线性层来估计恒等映射上可能是存在困难的.而伴随着残差学习的重新表达,如果恒等映射是最优的,那么求解器驱使多个非线性层的权重趋向于零来逼近恒等映射.

在实际情况下,恒等映射不太可能达到最优,但是我们的重新表达对于这个问题的预处理是有帮助的.如果最优函数更趋近于恒等映射而不是0映射,那么对于求解器来说寻找关于恒等映射的扰动比学习一个新的函数要容易的多.通过实验()表明,学习到的残差函数通常只有很小的响应,说明了恒等映射提供了合理的预处理.

3.2 Identity Mapping by Shortcuts 我们在堆叠层上采取残差学习算法.一个构建块如所示.本文中的构建块定义如下():

y = F ( x , { W i } ) + x . y=F(x,{Wi})+x.

,如.

中的shortcut连接没有增加额外的 参数和计算复杂度 .这不仅是一个很有吸引力的做法,同时在对"plain'网络和残差网络进行比较时也是非常重要的.我们可以在参数/深度/宽度以及计算成本都相同的基础上对两个网络进行公平的比较(除了可以忽略不计的元素级的加法).

在中, x x

在中同样可以使用方阵 W s Ws 只是用来解决维度不匹配的问题.

残差函数 F F 一致,因此并不具有任何优势.

我们还发现不仅是对于全连接层,对于卷积层也是同样适用的.函数 F ( x , { W i } ) F(x,{Wi}) 可以表示多个卷积层,在两个特征图的通道之间执行元素级的加法.

3.3 Network Architectures 我们在多个plain网络和残差网络上进行了测试,并都观测到了一致的现象.接下来我们将在ImageNet上对两个模型进行讨论.

Plain网络. 我们的plain网络结构(,中)主要受VGG网络 (,左)的启发. 卷积层主要为3*3的滤波器,并遵循以下两点要求:(i) 输出特征尺寸相同的层含有相同数量的滤波器;(ii) 如果特征尺寸减半,则滤波器的数量增加一倍来保证每层的时间复杂度相同.我们直接通过stride 为2的卷积层来进行下采样.在网络的最后是一个全局的平均pooling层和一个1000 类的包含softmax的全连接层.加权层的层数为34,如(中)所示.

值得注意的是,我们的模型比VGG网络(,左)有更少的滤波器和更低的计算复杂度.我们34层的结构含有36亿个FLOPs(乘-加),而这仅仅只有VGG-19 (196亿个FLOPs)的 18%.

残差网络. 在以上plain网络的基础上,我们插入shortcut连接(,右),将网络变成了对应的残差版本.如果输入和输出的维度相同时,可以直接使用 恒等shortcuts ()(Fig.` ??? ??? 中的实线部分).当维度增加时(中的虚线部分),考虑两个选项: (A) shortcut仍然使用恒等映射,在增加的维度上使用0来填充,这样做不会增加额外的参数; (B) 使用的映射shortcut来使维度保持一致(通过1*1的卷积). 对于这两个选项,当shortcut跨越两种尺寸的特征图时,均使用stride为2的卷积.

对应于ImageNet的网络框架举例. 左 :VGG-19模型 (196亿个FLOPs)作为参考. 中 :plain网络,含有34个参数层(36 亿个FLOPs). 右 :残差网络,含有34个参数层(36亿个FLOPs).虚线表示的shortcuts增加了维度. Table 1 展示了更多细节和其它变体.

Table 1 对应于ImageNet的结构框架.括号中为构建块的参数(同样见),数个构建块进行堆叠.下采样由stride为2的conv3_1/conv4_1和conv5_1 来实现.

3.4 Implementation 针对ImageNet的网络实现遵循了Krizhevsky2012ImageNet和Simonyan2014Very.调整图像的大小使它的短边长度随机的从 [ 256 , 480 ] [256,480] 次迭代训练.我们将权值衰减设置为,a 动量为.根据 Ioffe2015Batch,我们并没有使用Dropout.

在测试中,为了进行比较,我们采取标准的10-crop测试. 为了达到最佳的结果,我们使用Simonyan2014Very及He2014spatial中的全卷积形式,并在多个尺度的结果上取平均分(调整图像的大小使它的短边长度分别为 { 224 , 256 , 384 , 480 , 640 } {224,256,384,480,640} ).

4. 实验 4.1 ImageNet Classification 本文在1000类的ImageNet2012数据集上对我们的方式进行评估.训练集包含128万张图像,验证集包含5万张图像.我们在10万张测试图像上进行测试,并对 top-1 和 top-5 的错误率进行评估.

Plain网络. 我们首先评估了18层和34层的plain网络.34层的网络如图(中)所示.18层的结构很相似,具体细节参见Table 1.

Table 2中展示的结果表明了34层的网络比18层的网络具有更高的验证错误率.为了揭示产生这种现象的原因,在(左)中我们比较了整个训练过程中的训练及验证错误率.从结果中我们观测到了明显的 退化问题 ——在整个训练过程中34 层的网络具有更高的训练错误率,即使18层网络的解空间为34层解空间的一个子空间.

我们认为这种优化上的困难不太可能是由梯度消失所造成的.因为这些plain网络的训练使用了BN,这能保证前向传递的信号是具有非零方差的.我们同样验证了在反向传递阶段的梯度由于BN而具有良好的范式,所以在前向和反向阶段的信号不会存在消失的问题.事实上34层的plain网络仍然具有不错的准确率(Table 3),这表明了求解器在某种程度上也是有效的.我们推测,深层的plain网络的收敛率是指数衰减的,这可能会影响训练错误率的降低.这种优化困难的原因我们将在以后的工作中进行研究.

残差网络. 接下来我们对18层和34层的残差网络ResNets进行评估.如 (右)所示,ResNets的基本框架和plain网络的基本相同,除了在每一对3*3的滤波器上添加了一个shortcut连接.在Table 2以及(右)的比较中,所有的shortcuts都是恒等映射,并且使用0对增加的维度进行填充(选项 A).因此他们并没有增加额外的参数.

我们从Table 2和中观测到以下三点:

第一,与plain网络相反,34层的ResNet比18层ResNet的结果更优( ).更重要的是,34 层的ResNet在训练集和验证集上均展现出了更低的错误率.这表明了这种设置可以很好的解决退化问题,并且我们可以由增加的深度来提高准确率.

第二,与对应的plain网络相比,34层的ResNet在top-1 错误率上降低了 (Table 2),这得益于训练错误率的降低( 右 vs 左).这也验证了在极深的网络中残差学习的有效性.

最后,我们同样注意到,18层的plain网络和残差网络的准确率很接近 (Table 2),但是ResNet 的收敛速度要快得多.( 右 vs 左). 如果网络" 并不是特别深 ' (如18层),现有的SGD能够很好的对plain网络进行求解,而ResNet能够使优化得到更快的收敛.

在 ImageNet 上进行训练.细曲线为训练错误率,粗曲线为使用中心crop时的验证错误率.左:18和34层的plain网络.右:18 和34层的ResNets.在这个图中,残差网络和对应的plain网络相比并没有增加额外的参数.

Table 2 ImageNet验证集上的Top-1错误率 (%, 10-crop testing).这里的ResNets并没有额外增加的参数.展示了整个训练过程.

Table 3 在ImageNet验证集上的错误率 (%, 10-crop testing).VGG-16是基于我们测试的网络.ResNet-50/101/152使用了选项B——利用映射来匹配增加的维度.

Table 4 单一模型 在ImageNet验证集上的错误率(%)(除了 + + 是在验证集上的结果).

Table 5 组合模型 在ImageNet测试集上的top-5错误率.

恒等 \vs 映射 Shortcuts. 我们已经验证了无参数的恒等shortcuts是有助于训练的.接下来我们研究映射shortcut().在Table 3中,我们比较了三种选项: (A) 对增加的维度使用0填充,所有的shortcuts是无参数的(与Table 2 和 (右)相同); (B) 对增加的维度使用映射shortcuts,其它使用恒等shortcuts; (C) 所有的都是映射shortcuts.

Table 3表明了三种选项的模型都比对于的plain模型要好.B略好于A,我们认为这是因为A中的0填充并没有进行残差学习.C略好于B,我们把这个归结于更多的(13个)映射shortcuts所引入的参数.在A/B/C三个结果中细小的差距也表明了映射shortcuts对于解决退化问题 并不是必需的 .所以我们在本文接下来的内容中,为了 减少复杂度和模型尺寸 ,并不使用选项C的模型.恒等shortcuts因其无额外复杂度而对以下介绍的 瓶颈结构 尤为重要.

深度瓶颈结构. 接下来我们介绍更深的模型.考虑到训练时间的限制,我们将构建块修改成\emph{瓶颈}的设计.对于每一个残差函数 F F ,我们使用了三个叠加层而不是两个(). 这三层分别是1*1/3*3 和1*1 的卷积,1*1 的层主要负责减少然后增加(恢复)维度,剩下的3*3的层来减少输入和输出的维度.展示了一个例子,这两种设计具有相似的时间复杂度.

无参数 的恒等shortcuts对于瓶颈结构尤为重要.如果使用映射shortcuts来替代(右)中的恒等shortcuts,将会发现时间复杂度和模型尺寸都会增加一倍,因为shortcut连接了两个高维端,所以恒等shortcuts对于瓶颈设计是更加有效的.

50层 ResNet :我们将34层网络中2层的模块替换成3层的瓶颈模块,整个模型也就变成了50层的ResNet (Table 1).对于增加的维度我们使用选项B来处理.整个模型含有38亿个FLOPs.

101层和152层 ResNets :我们使用更多的3层模块来构建101层和152层的ResNets (Table 1).值得注意的是,虽然层的深度明显增加了,但是152层ResNet的计算复杂度(113亿个FLOPs)仍然比VGG-16(153 亿个FLOPs)和VGG-19(196亿个FLOPs)的小很多.

50/101/152层ResNets比34层ResNet的准确率要高得多(Table 3 和4).而且我们并没有观测到退化问题.所有的指标都证实了深度带来的好处. (Table 3 和4).

对于ImageNet的一个更深的残差函数 F F .左:对于ResNet-34的如描述的构建块.右:对于ResNet-50/101/152的"瓶颈'构建块.

与最优秀方式的比较. 在Table 4中我们比较了目前最好的单模型结果.我们的34层ResNets取得了非常好的结果,152层的ResNet的单模型top-5验证错误率仅为 ,甚至比先前组合模型的结果还要好 (Table 5).我们将6个不同深度的ResNets合成一个组合模型(在提交结果时只用到2个152层的模型).这在测试集上的top-5错误率仅为 (Table 5),这一项在ILSVRC 2015 上获得了第一名的成绩.

4.2 CIFAR-10 and Analysis 我们在包含5万张训练图像和1万张测试图像的10类CIFAR-10数据集上进行了更多的研究.我们在训练集上进行训练,在测试集上进行验证.我们关注的是验证极深模型的效果,而不是追求最好的结果,因此我们只使用简单的框架如下.

Plain网络和残差网络的框架如 (中/右)所示.网络的输入是32*32的减掉像素均值的图像.第一层是3*3的卷积层.然后我们使用6n个3*3的卷积层的堆叠,卷积层对应的特征图有三种: { 32 , 16 , 8 } {32,16,8} .使用strde为2的卷积层进行下采样.在网络的最后是一个全局的平均pooling层和一个10类的包含softmax的全连接层.一共有6n+2个堆叠的加权层.具体的结构见下表: 使用shortcut连接3*3的卷积层对(共有 3n个shortcuts).在这个数据集上我们所有的模型都使用恒等shortcuts(选项 A),因此我们的残差模型和对应的plain模型具有相同的深度/宽度和参数量.

权重的衰减设置为,动量为,采用了He2015Delving中的权值初始化以及BN,但是不使用Dropout,mini-batch的大小为128,模型在2块GPU 上进行训练.学习率初始为,在第32000和48000次迭代时将其除以10,总的迭代次数为64000,这是由45000/5000的训练集/验证集分配所决定的.我们在训练阶段遵循Lee2015deeply中的数据增强法则:在图像的每条边填充4个像素,然后在填充后的图像或者它的水平翻转图像上随机采样一个32*32 的crop.在测试阶段,我们只使用原始32*32的图像进行评估.

CIFAR-10 上的训练效果.虚线表示训练错误率,实线表示测试错误率. 左 :plain网络.plain-110的错误率高达60% 以上,因此并没有展示出来. 中 :ResNets. 右 :110层和1202层的ResNets.

我们比较了 n = { 3 , 5 , 7 , 9 } n={3,5,7,9} ,也就是20/32/44以及56层的网络.(左) 展示了plain网络的结果.深度plain网络随着层数的加深,训练错误率也变大.这个现象与在ImageNet(, 左)和MNIST上的结果很相似,表明了优化上的难度确实是一个很重要的问题.

(中)展示了ResNets的效果.与ImageNet(, 右)中类似,我们的ResNets能够很好的克服优化难题,并且随着深度加深,准确率也得到了提升.

我们进一步探索了n=18,也就是110层的ResNet.在这里,我们发现的初始学习率有点太大而不能很好的收敛.所以我们刚开始使用的学习率,当训练错误率在 80% 以下(大约400次迭代)之后,再将学习率调回继续训练.剩余的学习和之前的一致.110层的ResNets很好的收敛了 (, 中).它与其他的深层窄模型,如FitNet和 Highway (Table 6)相比,具有更少的参数,然而却达到了最好的结果 ( 6.43% , Table 6).

Table 6 CIFAR-10}测试集上的分类错误率.我们对数据进行了增强.如Srivastava2015Training所述,对于ResNet-110,我们运行了5遍,然后展示了"(均值 ± ± 方差)最优'的结果.

在CIFAR-10上层响应的标准方差(std).响应是每一个3*3卷积层的BN之后/非线性层之前的输出. 顶部 :层是按照它们原始的顺序. 底部 :响应按降序排列.

Analysis of Layer Responses 展示了层响应的标准方差(std). 响应是每一个3*3卷积层的BN之后/非线性层(ReLU/addition)之前的输出.对于ResNets,这个分析结果也揭示了残差函数的响应强度.表明了ResNets的响应比它对应的plain网络的响应要小.这些结果也验证了我们的基本动机(),即残差函数比非残差函数更接近于0.从中ResNet-20/56和110的结果,我们也注意到,越深的ResNet的响应幅度越小.当使用更多层是,ResNets中单个层对信号的改变越少.

Exploring Over 1000 layers 我们探索了一个超过1000层的极其深的模型.我们设置n=200,也就是1202层的网络模型,按照上述进行训练.我们的方式对 10 3 103 层的模型并不难优化,并且达到了< % 的训练错误率(, 右),它的测试错误率也相当低( 7.93% , Table 6).

但是在这样一个极其深的模型上,仍然存在很多问题.1202层模型的测试结果比110层的结果要差,尽管它们的训练错误率差不多.我们认为这是过拟合导致的.这样一个1202层的模型对于小的数据集来说太大了().在这个数据集上应用了强大的正则化方式,如maxout或者 dropout,才获得了最好的结果.

本文中,我们并没有使用maxout/dropout,只是简单的通过设计深层窄模型来进行正则化,而且不用担心优化的难度.但是通过强大的正则化或许能够提高实验结果,我们会在以后进行研究.

4.3 Object Detection on PASCAL and MS COCO

Table 7 在PASCAL VOC 2007/2012测试集上使用Faster R-CNN的目标检测 mAP (%).

Table 8 在COCO 验证集上使用Faster R-CNN的目标检测 mAP (%).

我们的方式在其它识别任务上展现出了很好的泛化能力.Table 7和8展示了在PASCAL VOC 2007 和 2012以及 COCO上的目标检测结果.我们使用Faster R-CNN作为检测方式.在这里,我们比较关注由ResNet-101 替换VGG-16所带来的的提升.使用不同网络进行检测的实现是一样的,所以检测结果只能得益于更好的网络.最值得注意的是,在COCO数据集上,我们在COCO的标准指标(mAP@[.5, .95])上比先前的结果增加了 ,这相当于 28% 的相对提升.而这完全得益于所学到的表达.

基于深度残差网络,我们在ILSVRC & COCO 2015竞赛的ImageNet检测/ImageNet定位/COCO检测以及COCO分割上获得了第一名.

附录 附录部分为作者针对ResNet在目标检测/目标定位上的应用进行了解释,证明了ResNet强大的泛化能力,感兴趣的同学可以好好研究这篇文章,是非常有学习价值的.

 

 

更多科研论文服务,动动手指,请戳 论文润色投稿期刊推荐论文翻译润色论文指导及修改论文预审

语言不过关被拒?美国EditSprings--专业英语论文润色翻译修改服务专家帮您!

上一篇:好的英文论文润色需要具备哪些特点?四大特点要知道

下一篇:2018ei期刊目录论文修改润色,EditSprings,艾德思

特别声明:本文转载仅仅是出于传播信息的需要,并不意味着代表本网站观点或证实其内容的真实性;如其他媒体、网站或个人从本网站转载使用,须保留本网站注明的“来源”,并自负版权等法律责任;作者如果不希望被转载或者联系转载稿费等事宜,请与我们接洽。

凡注明来源为“EditSprings”的论文,如需转载,请注明来源EditSprings并附上论文链接。

最热论文