基于改进深度残差网络的图像分类算法
2021-04-09储岳中汪佳庆张学锋
储岳中,汪佳庆,张学锋,刘 恒
(1. 安徽工业大学计算机科学与技术学院 安徽 马鞍山 243032;2. 安徽省工业互联网智能应用与安全工程实验室 安徽 马鞍山 243023)
自从深度残差网络ResNet 被提出来并在ILSVRC2015 比赛中取得冠军后,许多研究者把目光放在了ResNet 的改进工作上,由此出现了一大批优秀的基于残差结构的卷积神经网络。目前为止改进大体上可分为4 类:1)是对输入模块的数据进行split-transform-merge 操作,例如使用分组卷积的ResNext[1]和使用层级残差结构的Res2Net[2],它们能在降低消耗的同时增加网络的精度。2)在残差结构里引入注意力机制,例如加入通道自注意力机制的SENet[3]、加入多尺度自适应调节感受的SKnet[4]、使用分组注意力机制的ResNeSt[5]。注意力机制的使用可以让网络有偏向地选择重要的特征图进行特征提取,从而提高精度。3)优化模块拓扑结构,例如使用预先激活方式的ResNetV2[6],使网络易于优化并提高模型的正则化,以及每个stage 采用不同模块来优化拓扑结构的IResNet[7],加强了信息在网络间的传播,减少了信息损失。4)对残差网络整体进行优化,例如提出让网络变得更宽的WRN[8]和建立密集连接从而缓解梯度消失、加强特征传播的DenseNet[9]。
上述网络大部分都是在ResNet 的瓶颈结构基础上进行改进的。瓶颈结构由一条主干和一条残差支路组成,主干上数据先由1×1 点卷积进行降维,再经过3×3 卷积块进行特征提取,最后由1×1 点卷积升维,卷积过程中还使用BN 操作进行归一化以及Relu 函数增加非线性。先降维最后升维的操作大大降低了3×3 卷积所需的计算量。传统的观点认为影响准确率的主要是3×3 卷积核,所以多数工作都是对其进行改进,而选择保留降维升维的1×1卷积核。瓶颈结构比较简单,但网络结构上也存在冗余,因此后面出现的残差网络如ResNext 才能在不过多增加计算量的前提下提高准确率。冗余的产生主要来自升维操作时生成的过多的类似特征图[10]。传统的改进方法偏向于增加升维时输入数据的特征图数量[8]以及复杂性[1-2,4]。这两种操作都能有效减少瓶颈结构输出信息的冗余。但考虑到冗余性还和分类任务的类别数有关,类别数越大,需要的有效特征图数量也就越多。在面对如10 分类这样的分类任务时,传统的瓶颈结构及其改进还是不可避免地产生过多的冗余特征图。这些冗余虽然保证了网络对输入信息的充分理解,但过多的冗余信息会导致计算资源的浪费。
针对这个问题,本文对瓶颈结构里的升维操作进行了改进。利用残差结构建立了升维操作输入和输出之间的通路,并使用连接操作代替残差结构中的加法。由于用到了残差结构和连接操作,把这个结构命名为RC。RC 结构不仅减少了升维操作的计算量和参数量,而且提高了反向传播时的梯度传递,在面对分类数较少的任务时能够有效提升网络精度。由于RC 结构能和很多残差网络相结合,在多个数据集上进行了多组对比实验,结果显示基于RC 的瓶颈结构在面对分类数较少的任务时,效率和精度都有所提升。
1 研究方法
1.1 冗余性分析
图1a 为ResNet 原文[11]中提出的一个瓶颈结构案例。输入数据的特征图通道数为256,经过降维、特征提取后,升维复原成256 个通道,并与支路传来的数据相加作为输出。比起直接使用一个3×3 卷积核进行特征提取,这样做无疑大大降低了运算量,但精度也会受到影响。图1b 为保证输入输出特征通道数不变的情况下,只使用一个3×3 卷积核进行特征提取的情况。在cifar10 上做了个简单的对比实验,相关配置和实验部分一致,实验结果如表1 所示。ResNet#为将ResNet29 中的瓶颈结构替换为图1b 时的情况,结果显示使用瓶颈结构后计算量和参数量大大减少了(表格里M 为million,B为billion),但在SGD 和Adam 这两种优化器下,准确率都减少了2%~3%。
图1 瓶颈结构案例和未使用瓶颈结构案例
表1 ResNet29 和ResNet#实验对比
在图1 中,两种模块的输出都是256 个通道,但实验结果表明,图1b 结构有着更好的特征表达能力,其输出的特征图所含信息更有效。图1a 输出的特征图虽然也是256 个通道,但相较图1b 的输出特征图存在一些冗余信息。设瓶颈结构中3×3卷积核输出通道数为n,1×1 卷积核升维所产生的通道数为m,则存在一个比例s=m/n,s 越大代表特征图通道数上升比例越大。文献[7]设计了更宽的ResNet,即m 不变的情况下n 更大的ResNet网络,实验表明增加n 能有效增加ResNet 模块的特征表达能力。反过来也能得到:ResNet 瓶颈结构中,m 不变的情况下,n 越小,s 越大,模块的特征表达能力越弱,冗余性越高。因此与s=4 的ResNet 网络不同,后面新出现的残差网络都选择了较小的s 值。
瓶颈结构的冗余性除了和s 值有关外,还和任务的类别数有关,以cifar10 和cifar100 为例,进行了3 组对比实验,如表2 所示。k 为n 不变的情况下s 缩放的倍率,k 越小,瓶颈结构输出的特征图通道数m 就越少。从表中可以看出ResNet29(k=1)在cifar10 和cifar100 上准确率相差很大。100 分类相较10 分类,对网络的精确度要求更高,本文认为,在其他条件不变的情况下,分类任务的类别数越大,维持精度所需的输出特征图就越多。而ResNet29 的网络结构每层输出的特征图是固定的,所以它在10 分类问题上存在的冗余特征图可能非常多。为了验证这个猜想,对k={3/4, 1/2}的情况进行了测试。表2 显示,在cifar10 上,k=1 和k=3/4 的结果十分相似,但k=3/4 时,瓶颈结构输出特征图的数量相较k=1 减少了25%,由此可见ResNet29 在cifar10 上存在相当多的冗余,而在cifar100 里k<1 时准确率明显下降,这说明在处理分类数较多的任务时,特征图的冗余性会有所降低,削减输出特征图的通道数会使得图像特征表达不充分,从而影响最终的准确率。
表2 不同 k 值的ResNet29 的对比实验
1.2 RC 结构
上节分析了瓶颈结构冗余性产生的原因,消耗资源生成冗余的特征图明显是不合适的,为了尽量减少这种额外的消耗,设计了新的升维操作,即RC 结构。RC 结构如图2 所示,把输出 Y分为y和y′两部分, y直接由x得到, y′由x经过1×1 点卷积生成,最后把两者连接起来作为输出。
图2 基于RC 的瓶颈结构
RC 降低了计算量和参数,假设点卷积的输入特征图的大小为n×w×h,n 为通道数,输出特征图的通道数为m。单样本情况下传统的升维操作运算量为:
参数量为:
RC 结构下的运算量为:
参数量为:
p′=n×(m-n)
很明显l >l′、p >p′,升维操作的消耗大大减少。
RC 结构将x 直接与输出连接起来,反向传播时加强了这部分的梯度传递,这使得RC 结构在降低了消耗的同时还能增加网络精度。
1.3 RC 结构适用性分析
虽然RC 模型输出的通道没有改变,但经过1×1 点卷积生成的特征图减少了,这有可能导致升维时输入的信息没有被完全表达。根据1.2 节的假设,传统瓶颈结构的升维操作里,点卷积是权重形状为[m,n,1,1]的张量,设其权重W=[w1,w2,···,wm],其中 wi是[n,1,1]的张量,则升维操作的运算可以简略为:
式中, W和 W′是随着反向传播而不断变化的张量;W′′则是固定的,且(W′⊕W′′)与 W的形状都是[m,n,1,1],因此(W′⊕W′′)是 W的一种部分权重固定不变的特殊情况。当瓶颈结构存在大量冗余时,通过W′输出的较少数量的特征图能够充分表达输入数据的特征,引入RC 结构后的瓶颈结构的特征表达能力就不会受到影响,但当瓶颈结构的冗余性较低时, W 比RC 结构里的W′⊕W′′有更多可以训练的权重,具有更好的特征表达能力,于是就可能出现引入RC 结构后瓶颈结构的特征表达能力不如原来的情况。因此RC 结构更适合存在较多冗余信息的网络,例如处理分类数较少的分类任务时。
2 实验与分析
实验部分首先进行了RC 结构关于反向传播的测试,以验证1.2 节的结论。而后分别在cifar10、cifar100 和TinyImageNet 这3 个数据集上进行了RC结构的功能性验证,实验选用的网络为ResNet、WRN、ResNetV2、ResNext、SENet、Res2Net 和SKNet,最后将前面表现得优秀的网络在遥感影像数据集上进行测试以验证其迁移性。
2.1 RC 反向传播测试
为了验证RC 结构对反向传播的影响,在图2的结构上做了些修改,如图3 所示, x与一个单位阵E 相乘从而得到y,由于y=x×E=x,所以图3结构下的y与图2 结构下的是一致的,但在训练过程中利用代码中断y=x×E这一过程里的梯度传递,这种结构记为RC_S。
图3 中断反向传播的RC
如表3 所示,由于ResNet 在10 分类问题上存在大量冗余,所以中断了y 到x 梯度传播的ResNet 29_RC_S 与ResNet29 训练结果相似,但引入了梯度传播后,ResNet29_RC 的准确率比改进前提高了1.28%。由此可见,直接将x 作为部分输出能带来精度提升,这也是后面实验里引入RC 结构的残差网络能比原版表现更优秀的原因。
表3 RC 的反向传播测试
2.2 cifar 数据集实验
cifar 数据集包括cifar10 和cifar100,分别对应10 分类和100 分类任务。由于cifar 的图片大小为32×32,所以本文选用ResNext29_32×4d 作为基础框架,并在其基础上搭建了需要测试的网络。训练批次为120,优化器选取的是SGD,初始学习率为0.1,并且采用每隔30 轮学习率除以10 的调整策略,对于数据预处理,采用的是随机裁剪、随机反转和标准化。对实验结果采用的是去掉极小值后取平均值的统计方法,每个数据都是3 组及以上样本的平均值。
首先对 ResNet、 WRN、 ResNetV2(PreAct-ResNet)、ResNext、Res2Net、SKNet 和引入SE 结构的ResNet 进行测试,实验结果如表4 所示。除了SKNet 外,其余残差网络引入RC 后的准确率在cifar10 上都有所增长。而在cifar100 上,Res2Net准确率降低了,一方面RC 结构在处理分类数较多的问题时会出现特征表达不完全的情况,另一方面Res2Net 引入的多尺度信息可能会和RC 结构产生一定冲突,如果这种冲突直接作用在Linear 层,会对分类产生较大影响。于是将Res2Net29_RC 的最后一个瓶颈结构替换为原来的结构,为了方便描述,这种针对Res2Net 的改进记为RC_res2。结果显示,Res2Net_RC_res2 在cifar10 的准确率有了进一步提升,而且在cifar100 上也超过了原版。
表4 cifar 数据集的实验
除了Res2Net 外,也对SEResNet 做出了特殊改进,如图4 所示。RC 结构之所以能提高准确率,是因为将输入升维操作的数据直接作为输出的一部分,从而加强了这部分的梯度传递。而在与SELayer 结合的时候, y参与了自注意力机制的情况下可能会影响到其梯度传递,所以设计了图4b的结构。为方便区分,这种结构记为RC_se。表4 显示,在cifar 数据集上,SEResNet29_RC_se 的准确率和效率比SEResNet29_RC 与SEResNet29 更加出色。
图4 针对SEResNet 做出的特殊改进
此外,对于SKNet 与RC 结合的失败,本文也做出了各种改进,但准确率都达不到原版的效果,引入RC 结构后,SKNet 的特征表达能力受到很大的负面影响。SKNet 较小的s 值(SKNet 瓶颈结构的s=2)是影响因素之一,根据1.1 节的分析,越大的s 值代表网络的冗余性越多,与RC 结构的结合效果就越好。本文尝试增大SKNet 的s 值,发现s 值增大时,RC 结构起到了提高准确率的作用,这说明SKNet 也是遵行“冗余性越高,与RC 结构结合效果越好”这一结论。因此SKNet 与RC 结构结合失败的原因目前只能归结为:SKNet 瓶颈结构的输出特征图冗余性较低,加入RC 结构后会影响其特征表达能力。
2.3 TinyImageNet 实验
TinyImageNet 是200 类的ImageNet 子集,图片大小为64×64,本文以ResNet50 作为基础,搭建需要测试的网络,训练相关设置和cifar 保持一致。训练结果如表5 所示。正如1.3 节分析的,RC结构不适合分类数较大的任务,在2.2 节cifar100的实验里也出现Res2Net-RC 的准确率有所下降的情况,而在200 类的TinyImageNet 里,这一特性更加明显,除了SEResNet50 外,其余网络的准确率都出现了小幅下降。所以RC 结构并不适合处理分类数较多的任务,且不同残差网络对应的分类数临界值也会有所不同,需要根据具体情况判断是否使用RC 结构。
2.4 更多的数据集
为了验证RC 结构的有效性,针对遥感影像数据做了额外的实验,数据集选用了12 分类的SIRIWHU Dataset[12]与21 分类的UC Merced Land-Use DataSet[13],采用4∶1 的比例划分为训练集和测试集。与前面实验不同的是,采用Adam 作为训练优化器,学习率初始值为0.001,每隔30 个批次除以2,训练120 个批次,选用ResNet50 为基础网络,实验结果如表6 所示。SIRI-WHU Dataset的图片大小为224×224,UC Merced Land-Use DataSet的图片大小为256×256,面对图片大小在200 以上的数据集时,RC 在ResNetV2(PreActResNet)上表现得并不理想,但在其他网络上都有一定的提升。
表5 TinyImageNet 的实验
表6 遥感影像数据集的实验
3 结 束 语
本文分析了残差网络的冗余性,针对瓶颈结构进行了改进,使用RC 代替原来的升维操作。RC使用残差结构和连接操作,降低了升维操作的计算量和参数量,并增强了梯度传播。利用cifar 数据集和tinyImagenet 数据集在多种残差网络上进行了测试,验证了RC 在较少类别分类任务上的有效性。最后还在遥感影像识别领域做了额外的实验。本文的实验部分也存在一些问题没有得到解答,例如在SKNet 上直接套用RC 结构并没有发挥出理想的效果,根本原因是什么?能不能做出有效改进?两个瓶颈结构之间的升维降维操作是否存在冗余计算,可否进一步降低计算量等。RC 结构还有值得挖掘的地方,期待未来的研究能完善它。