倪 黎,邹卫军
(南京理工大学自动化学院, 南京210094)
基于大数据的深度学习是机器学习的新领域,也是其发展的趋势所在。深度学习的基础结构是深度神经网络,多层非线性运算单元组成深度学习的网络架构,这些单元类似于生物的神经细胞,同时具有自适应的特点。
以深度学习理论为基础的Inception是ILSVRC 2014比赛的冠军[1],网络结构的灵感来源于NIN[2],由Inception v1逐步发展到Icpetion v4[3-5]。该网络从扩展网络的宽度入手,组合了几种不同的卷积结构,在保证层数的同时大幅减小了参数量,解决了参数冗余带来的过拟合等问题。
Xception[6]是Inception的极端化体现,不同于常规的卷积操作,Xception使用深度可分离卷积(Depthwise Separable Convolutions),将通道间的相关性和空间相关性分开考虑,在不增加参数量的情况下取得了非常好的效果。由于Xception的优秀表现,使其在众多领域得到应用。文献[7]用Xception模块改进了U-Net体系结构,从而提取了遥感图像中的建筑物。文献[8]则比较了Xception等网络进行烟雾检测的能力。
SEnet(Squeeze and Excitation Networks)[9]是Imagenet 2017图像分类任务的第一名,其特点在于它考虑的不是从空间维度上优化神经网络,而是着眼于特征通道之间的关系。SEnet中的SE模块能够增加有用特征的影响度,弱化无用特征所占的比重,从而提升网络性能。通过与Xception网络的结合,能够更进一步提升Xception的准确度。
本文将SE模块嵌入Xception中,通过实验证明,SE模块能够有效地提升Xception的精确度。再将SE-Xception应用到动物种类识别中,取得了良好的效果。
卷积神经网络(CNN)[10]主要由特征提取层和特征映射层构成,能够自主提取图像特征,可以直接使用原始图像,避免了对输入图像的复杂预处理过程。
卷积神经网络由一系列卷积层、激活层、池化层及全连接层构成。卷积过程提取输入信号的不同特征,每个卷积核提取整个特征图上的某个单一特征,多核卷积使得特征被充分提取,提取到的特征再作为输入传入下一层,这些特征由低级到高级层层递进。因此,深层的网络结构使学习的特征更加全局化。
为了解决参数过多的问题,Inception网络中的Inception模块使用了多分支结构增加网络宽度,在分支中加入1×1卷积来减少参与运算的通道数,并且用全局平均池化代替了全连接层。
受到Inception模块的启发,Xception将前者的思路极端化,同时引入了深度可分离卷积。经过极限化对比分析,使用深度可分离卷积代替Inception模块,将卷积操作在通道上和空间上完全分离开。首先进行通道上的卷积以获得特征图,再使用1×1的卷积核将这些特征图融合起来。一个简化的Xception模块如图1所示。
图1 简化的Xception模块Fig.1 Simplified Xception module
Xception包含36个卷积层、14个模块,每个模块中包含若干个深度可分离卷积,后接池化层,并且几乎都采用了Resnet中的残差连接[11]。除残差连接中的1×1卷积外,使用的卷积核全部为3×3大小。最后进行全局平均池化,经过全连接层输出结果。
SE模块的核心是压缩(Squeeze)和激励(Excitation)。在卷积操作得到具有多个通道的特征之后,使用SE模块可以重新标定每个特征通道的权重。SE模块分为3个步骤,分别是压缩、激励和重定权重(Reweight),原理图如图2所示。
压缩操作使用全局平均池化(Global Average Pooling)将每个特征通道都压缩成一个实数,这样就将感受野扩展到全局范围。该实数由如下公式得到
式(1)中,u为通过卷积后得到的特征图,C为u的通道数,W×H为u的空间维度。
图2 SE模块原理图Fig.2 Schematic diagram of SE module
接着,激励操作捕获压缩后的实数列信息,使用两个全连接(FC)层增加模块的非线性。先经过第一个全连接层降维,再通过ReLU激活,然后经过第二个全连接层升维,最后经过sigmoid激活函数,整个过程如下
式(2)中,δ为非线性激活函数ReLU,W1和W2分别为两个FC层的参数,σ为sigmoid函数。
最后重定权重,用原特征逐通道乘以激励操作获得的通道重要度系数,得到重新标定的特征
(1)网络结构
为了减少参数增长,仅在Xception的Middle flow部分嵌入SE模块,嵌入方式如图3所示。
图3 SE模块嵌入Middle flow的示意图Fig.3 Schematic diagram of SE module embedding Middle flow
输入的训练图像先经过若干个深度可分离卷积得到特征图,再经过SE模块、重定通道的重要程度系数,从而使得有效特征的影响力得到增强,无关特征的影响力被削弱,最后加上残差。文献[9]通过对比实验比较了降维率r的不同取值对实验结果的影响,兼顾错误率和参数量,本实验SE模块中的参数r选取16。由于没有在特征通道数较多的层中嵌入SE模块,因此模型的复杂度和计算量仅有微量增加。
(2)数据集
验证实验在Oxford-IIIT Pet[12]数据集和CUB_200_2011[13]数据集上进行。
Oxford-IIIT Pet数据集包含了37个种类的宠物,每个种类有大约200张图片,一共7349张图片。CUB_200_2011是一个鸟类数据集,有200个种类,11788张图片。
将上述每个数据集所有数据的80%划分为训练集,20%划分为测试集。
(3)数据预处理
为了适应网络所需的输入数据大小,使用二次线性插值法将原始图片尺寸统一放缩为299×299。再进行零均值化处理,即减去同一个数据集中所有图片的均值,使得处理后的均值为零,这样可以加快反向传播过程中模型的收敛。再除以所有图片的标准差,从而使特征标准化。
(4)实验过程
将原始的jpg格式数据集转换为TFRecords格式(TFRecords是TensorFlow的一种标准二进制数据格式),能够使图片读取更加高效。使用shuffle batch随机打乱批量读取,读取的图片数据输入网络,经过一系列层,最后输出稀疏表示的分类结果。
损失函数使用Softmax交叉熵损失
式(4)中,k为预测的类别数,zj为第j个类别的预测输出,N为一个训练批次的大小。
优化器为Adam[14],Adam能够在消耗更少资源的情况下使模型更快收敛。初始学习率设置为0.0001,使用指数衰减法,学习率更新公式如下
式(5)中,lr为初始学习率,β1为Adam优化算法中梯度的一阶矩估计的衰减系数,β2为二阶矩估计的衰减系数,t为步数。
使用的电脑配置为16G内存、i7-8700KCPU、gtx1080ti显卡。
实验在TensorFlow上进行,TensorFlow是谷歌2015年开源的基于数据流图的深度学习框架,能够快速地搭建网络。该框架支持分布式计算,有利于大数据集和大型网络的训练,高效灵活,在国内外得到广泛应用。TensorFlow可以在一个或多个CPU/GPU上运行,除计算机外,它还可以应用于移动设备等多种计算平台上。TensorFlow提供有十分便捷的可视化工具TensorBoard,能够以图形和曲线的形式展现数据,使网络结构和变量更加直观。
在上述条件下分别训练30000步、50000步,训练集的精确度曲线如图4、图5所示。
图 4 SE-Xception与Xception在Oxford-IIIT Pet数据集上的实验对比Fig.4 Experiment comparison between SE-Xception and Xception on Oxford-IIIT Pet dataset
由实验结果可知,随着训练步数的增加,模型通过自主学习的方式调整权值和偏差,从而降低了训练误差,使得精确度逐步升高。在不同的数据集上,使用原始的Xception 模块进行训练,获得上升的精确度曲线。融合SE模块后,SEXception网络训练获得的精确度曲线均在Xception之上。图4中的Oxford-IIIT Pet数据集有1%~1.7%的提升,图5中的CUB_200_2011数据集有0.8%~1%的提升。
图 5 SE-Xception与Xception在CUB_200_2011数据集上的实验对比Fig.5 Experiment comparison between SE-Xception and Xception on CUB_200_2011 dataset
使用训练好的网络在测试集上分别进行测试,测试集的精确度如表1所示。
表1 测试集精确度对比Table 1 Accuracy comparison of test sets
由表1可知,融合SE模块的Xception在不同测试集上的精确度均高于原始的Xception。因此,SEnet可以进一步提高Xception的精确度。
Imagenet[15]是一个大规模图像识别数据库,它的出现对深度学习的发展产生了深远的影响。该数据库目前有14197122张图片,共21841个类别。
从Imagenet中搜集10种动物的彩色图片数据,剔除其中像素过小和模糊的数据后,一共有10074张。
部分种类图片示例如图6所示。
为了消除数据量差异对实验结果的影响,每类数据的数据量尽量相近,均在742~1188之间,数据分布如图7所示。
其中,9164张划分为训练集,910张划分为测试集,训练集和测试集划分比例如图8所示。
图6 动物图片数据示例Fig.6 Examples of image data for animals
图7 动物图片数据分布折线图Fig.7 Polyline diagram of distribution for animals image data
图8 训练集与测试集划分统计图Fig.8 Statistical diagram of the division between training set and test set
将上述数据的训练集作为训练数据,使用Xception网络进行训练,Adam加快模型收敛。使用原始图片训练20000步,初步训练的训练集精确度曲线如图9所示(实线)。
图9 Xception 在动物图片训练集上的精确度曲线Fig.9 Accuracy curves of Xception on animal image training set
在0步~5000步之间,由于训练误差的快速下降,测试集的精确度迅速上升;在5000步~18000步之间,测试集的精确度仍逐步上升,但上升的趋势逐渐平缓;18000步之后,精确度曲线最终趋于稳定,继续训练得到的训练集精度为93.5%。由于数据中有除待识别物体以外的很多无关物体,网络在训练的过程中会学习到这些无关物体的特征,并将这些特征作为判断依据。因此,对图片进行适当裁剪除去冗余特征,再重新放大为299×299大小,使神经网络能够获得更清晰准确的训练数据。进行再次训练,得到的训练集精确度如图9和图10所示(虚线)。
输入的数据集去除冗余特征后,训练集精确度曲线收敛较快,最终精确度为95.0%,相比于不处理数据集时提升了1.5%。由此可以说明,图像数据中的其他物体会形成干扰因素,对网络的学习造成一定影响。再在此基础上用SE-Xception网络替换Xception网络,同样训练20000步,获得的训练集精确度如图10所示(实线)。
图10 除去冗余特征的Xception和SE-Xception训练集精确度曲线Fig.10 Accuracy curves of Xception and SE-Xception with redundant characteristics removed on training set
由图10可知,将Xception网络替换为SEXception网络后,训练集精确度提升了2%。用训练好的网络分别在测试集上进行测试,测试集精确度如表2所示。
表2 动物种类识别测试集精确度Table 2 Accuracy of animal species recognition on test set
由表2可知,测试集的精确度逐步提高,最终达到95.63%。
本文通过在TensorFlow平台上进行实验,证明了融合SE模块的Xception具有更高的精确度,能够更好地应用于图像识别问题。在动物种类的识别任务中,收集了10种动物的图片数据,制作成TFRecords格式。先使用Xception网络进行训练,输入不经处理的原始数据时,测试集精确度只有88.79%;除去冗余特征后,测试集精确度提升到了90.87%;在此基础上将Xception替换为SE-Xception网络,最终测试集精确度能够达到95.63%。