张小锋,刘红铮
(南昌航空大学江西省图像处理与模式识别重点实验室,江西 南昌 330063)
随着科技的发展,人们越来越方便地使用电子设备拍摄花朵图片,催生了花朵识别的研究。之前人们对花朵识别的研究一直无法取得进步,主要是因为特征提取都是依靠手工提取。手工特征提取不仅耗费大量的时间,还需要一定的专业知识。花朵识别作为一种细粒度图像识别,特征的提取更为复杂。随着卷积神经网络(Convolutional Neural Network, CNN)的发展,图片的特征可以自动提取,花朵图片的分类也开始利用CNN。
每一个卷积层都含有多个特征图(feature map),卷积层中特征图通过卷积核与上一层的特征图构成局部连接。如图1所示,特征图的尺寸大小为32×32。
图1 卷积层过滤器结构图
由于卷积可以看作是2个函数的加权叠加,所以卷积过程就是卷积核与特征图上对应部分的矩阵进行相乘并加上偏置。
由图2可知原始的输入为3×3的矩阵,卷积核为2×2的矩阵,卷积核从输入特征图的左上角进行卷积得到1×(-2)+2×0+(-1)×1+0×(-1)=-3,依次计算得到其余的值。由此可以得到卷积核矩阵与输入的卷积计算公式为:
(1)
其中n为输入的通道数,h、w为卷积核矩阵的尺寸,i为第i个卷积核,b为偏置,f为激活函数。
图2 卷积过程
图3 最大池化和均值池化
全连接层在整个神经网络中起分类的作用。全连接层前一层是卷积层时,全连接层可以看做是h×w的全尺寸卷积,h和w为前一层输出的大小。如果前一层是全连接层,则转化为卷积核为1×1的全连接。
全连接层的参数数量可以占整个网络的80%以上,所以全连接会导致严重的参数冗余问题,降低训练速度。并且全连接层为了实现全连接将特征值转化为一个多维的数组,破坏了图像的空间结构信息,影响分类的准确率。
Softmax层作为全连接层的分类层,将输出转变为概率分布。假设原始的神经网络输出为y1, y2, …, yn,那么经过Softmax层的处理后输出变为:
(2)
从式(2)中可以知道,Softmax的输出总和为1,一个单元值的增加就意味着其他单元值的减小,形成了一种赢者通吃的竞争机制。
其实在最新一些GoogleNet和ResNet中全连接层已经被改进,转而用全局平均池化代替。本文用空间金字塔池化(Spatial Pyramid Pooling, SPP)对全连接层进行改进。
空间金字塔池化最初是在文献[2]中提出,最早应用在图像检测中,目的是为了使输入图片的大小变得不固定,提高检测精度。空间金字塔特征提取的过程如图4所示。
图4 图片划分
当输入一张图片时,分别用不同大小的网格去划分图片,在图4中用4×4、2×2和1×1这3种不同的网格,最后共得到16+4+1=21个不同的小块,每一个小块中包含多个像素点,然后从每一个小块中提取一个特征,得到一个21维的特征向量。
本文针对所采用的花朵数据集,提出一种CNN-SPP的网络结构,共29层。CNN-SPP采用1×3和3×1的卷积核代替3×3的卷积核,同时采用全零填充,保证输出尺寸不变。1×3和3×1的卷积核不仅减少了训练权值参数,而且增加了卷积层数,提高了最终的分类准确率。由于花朵图片的分类需要依靠花朵的花瓣、花萼和花蕊等的纹理形状,所以本文的池化层全部采用最大池化,有利于花朵纹理特征的提取。最后用空间金字塔最大池化代替全连接层的全连接部分,空间金字塔池化不仅减少了参数的数量,而且将每一个特征图从多个不同的角度进行了特征提取,再聚合,一定程度上保留了空间结构信息,提高了鲁棒性和模型的精度。
水塘干涸之后,红树林鳉鱼通过改变身体结构和新陈代谢来应对“水外”生活。它们的鳃会转而用来储存水和各种营养物质,将含氮的废弃物通过皮肤排到体外。一旦回到水中,一切功能便照旧运作。
但是由于层数的增加,容易产生梯度弥散的问题,因此增加了一层BN批规范化层,将输入进行归一化,公式如下:
(3)
(4)
其中μ、σ2为xi的期望和伪方差,通过归一化将输入拉回到均值为0方差为1的标准正态分布中,落入梯度比较敏感区域,从而解决了梯度消失的问题。这样梯度变大了,网络更新快,训练变快了。具体表现就是达到相同的正确率时迭代次数更少,迭代相同次数时正确率更高。
实验中输入图像为3通道彩色花朵图像,原始输入图像的大小不需要固定,可以直接输入。CNN-SPP网络为了防止输出值小于零时落入硬饱和区,导致权重无法更新,使用ELU函数代替了Relu函数。模型结构如表1所示。
表1 CNN-SPP网络结构
序号Layerkernel sizestridesoutput size1Input224×2242Convolution(1×3,3×1,64)×21224×2243Max pooling2×22112×1124Convolution(1×3,3×1,128)×21112×1125Max pooling2×2256×566Convolution(1×3,3×1,256)×3156×567Max pooling2×2228×288Convolution(1×3,3×1,512)×3128×289Max pooling2×2214×1410Convolution(1×3,3×1,256)×3114×1411Max pooling2×227×712Batch normalization7×713SPP(3×3,2×2,1×1)358414Fully connected358415Output102
目前花朵数据集使用较多的有牛津大学的Oxford flowers 102和Oxford flowers 17数据集,这2种数据集分别包含102种和17种花朵,Oxford flowers 102数据集共有8189张图片,而Oxford flowers 17数据集仅含有1336张图片,图片较少。本文实验采用的是Oxford flowers 102数据集。数据集中部分花朵图片如图5所示。
图5 部分Oxford flowers 102花朵图片
对于花朵图像分类,由于生长环境和拍摄角度的问题,不同种花朵之间可能会非常相似,而同种花朵又可能相差很大。并且通过图片无法观察花朵的大小和气味等特征,只能根据花瓣、花萼和花蕊的外形区分,在分类时需要提取大量的特征,但花朵的特征细微复杂,所以花朵的分类不仅是热点更是难点。
由于花朵数据集图片较少,且网络较深,为了减少过拟合,本文对花朵数据集进行预处理,对花朵图片分类主要依靠花朵图片的纹理形状,对花朵图片进行锐度和亮度的调整,使得花朵的纹理更加明显,同时去除高斯噪声,减少噪声干扰。由于每一张图片都会包含不相关的背景,为了减少背景的干扰,对图片进行随机裁剪,尽量除去背景的影响,预处理前后图片如图6所示。
(a) 原图
(b) 预处理后图
实验中将CNN-SPP网络与传统VGG16网络进行了对比。随机将所有的花朵数据分为训练数据和测试数据2部分,其中测试部分占10%,训练中每一批次包含16张图片,共计迭代16000步。
从表2可以看出,采用空间金字塔池化的方法虽然在准确率上仅提高了约1个百分点,但是时间却由原来的12.35 s每步下降到7.5 s左右,下降效果非常明显。
表2 CNN-SPP网络的实验结果
网络类型准确率/%每步平均时间/sVGG1685.7912.35CNN-SPP_max86.257.43CNN-SPP_average86.897.98
由于空间金字塔池化最大池化和平均池化类似,所以图7中仅对空间金字塔最大池化和VGG16进行了损失值的对比。可以看出,CNN-SPP网络损失值下降迅速且平稳,而VGG16网络随着迭代的增加损失值发生了波动,且有增加的趋势。
图7 损失值对比图
其实早在文献[3]中就已经提出了一种CNN-NiN网络,使用全局平均池化(global average pooling)对全连接层进行改进,并且已经在GoogleNet等网络中应用,所以本文实验也对比了CNN-NiN网络。结果如表3所示。
表3 不同卷积网络结果
网络类型准确率/%每步平均时间/sCNN-SPP83.257.43CNN-NiN_max73.515.34CNN-NiN_avg73.835.37
本文实验中进行了空间金字塔均值池化、全局平均池化和最大池化的对比。从表3与图8可以看出,虽然CNN-NiN网络的训练时间每步5.3 s比CNN-SPP网络的每步7.4 s快了2 s左右,但是准确率上相差了近10个百分点,相差较大,所以CNN-SPP网络仍然是一种更好的网络。
图8 准确率对比图
随着CNN的发展,全连接层的参数冗余和破坏数据空间结构的缺点逐渐暴露,本文实验也证明了全连接层的问题。在本文的实验中,CNN-SPP网络结构不仅大幅度缩短了训练的时间,而且使训练的准确率有所提升,达到86%以上,相信如果增大迭代步数准确率还会再增加。相较于全连接层,空间金字塔池化不仅使参数减少,而且在一定程度上保留了数据的原有空间结构信息。虽然在后面的实验中全局池化的训练速度要快于空间金字塔池化,但是在准确率上相差较大,所以CNN-SPP网络结构仍然不失为一种良好的改进方法。
考虑到迭代次数少和数据集较小的原因,网络容易陷入过拟合的状态,所以在以后的实验中还要利用更大的数据集和更深的网络,增加迭代步数,防止梯度弥散和过拟合,提高准确率。