基金项目:国家自然科学基金(61572409,61571188,61202143); 福建省自然科学基金(2013J05100); 中国乌龙茶产业福建省2011协同创新中心项目(闽教科〔2015〕75号); 福建省教育厅A类科技项目(JA13317)
通信作者:szlig@xmu.edu.cn
(1.厦门大学信息科学与技术学院,福建 厦门 361005; 2.武夷学院数学与计算机学院,福建 武夷山 354300; 3.福建省仿脑智能系统重点实验室,福建 厦门 361005; 4.认知计算与智能信息处理 福建省高校重点实验室,福建 武夷山 354300)
(1.School of Information Science and Engineering,Xiamen University,Xiamen 361005,China; 2.College of Mathematics and Computer Science,Wuyi University,Wuyishan 354300,China; 3.Fujian Key Laboratory of the Brain-like Intelligent Systems,Xiamen 361005,China;
image classification; feature extraction; classifier; stacked autoencoder; convolutional neural network
DOI: 10.6043/j.issn.0438-0479.201705031
图像分类问题包含两个重要的部分:特征提取器和分类器.多年来研究人员一直将精力投入到特征表示中,对于分类器却仅进行局部调参.基于一个性能优异的分类器与特征表示对图像分类系统同等重要的思想,提出了基于卷积特征的栈自编码器(stacked autoencoder on convolutional feature maps,SACF)的分类系统,并在数据集 CUB-200和 VGG-flower上进行了实验,对比了SACF与基于卷积特征和多层感知机的卷积神经网络(CNN)分类系统的分类效果,实验结果表明SACF具有更优的分类效果.
In problems of image classification,there are two important components:a feature extractor and a classifier.Researchers have focused on the former for decades,but only for local parameter adjustmentfor classifiers.According to the idea that a good classifier is just as important as the feature representation for the image classification,a classification system based on stacked autoencoder on convolutional feature maps(SACF)is proposed.Experiments are performed based on the CUB-200 and VGG-flower datasets and the classification results of the SACF classification system and the CNN classification system which based on convolutional feature maps and multilayer perceptron are compared.Results show that the accuracy of classification of SACF is superior to that of CNN.
分类问题是计算机视觉的一个经典问题,大多数视觉任务最终都能转换为分类问题,如目标检测、人脸识别、行为识别等.分类系统可分为两部分:特征提取和分类.首先提取图像特征,包括局部特征或全局特征,然后将提取的特征作为分类器的输入.传统的特征提取方法大多根据经验手动设计,如局部二值模式(LBP)[1]、尺度不变特征变换(SIFT)[2]、二元鲁棒独立元特征(BRIEF)[3]、快速旋转BRIEF(ORB)[4]、二元提升算法(BINBOOST)[5]等.而分类器一般采用线性支持向量机(support vector machine,SVM)[6]、非线性的提升(boost)分类器或者核支持向量机(kernel SVM)等.
近几年,卷积神经网络(CNN)[7]在目标分类问题上取得了巨大的成功,也引领了深度学习在计算机视觉应用的新潮流.CNN先在ImageNet上预训练一个分类网络,再根据具体任务微调这个卷积网络.虽然这种基于神经网络的方法模糊了特征提取器和分类器的界线,但仍可以确定一个逻辑分界.将全连接层认为是分类器,即可以将CNN的pool5层的输出作为图像特征提取,将多层感知机(MLP)看作是一个分类器.目前,基于CNN的分类系统相较于传统方法有非常明显的优势.
但很多研究者为了得到好的网络,将大量的时间、精力用在网络调参上,而调参很大程度依赖于经验规则,某些时候也具有一定的偶然性.这种工作对于计算机视觉的发展无法起到有力的推进作用.在分类系统中,分类器常采用比较简单的分类器,很少有人将精力投入到分类器的研究,但分类器对于图像分类的准确率与图像特征表示可能有着同样重要的影响.为了探究是否可以设计出更好的分类器,本研究构建了一个基于卷积特征的栈自编码器(stacked autoencoder on convolutional feature maps,SACF).这个分类系统以卷积特征为特征表示,分类器采用栈式自编码器(stacked autoencoder,SAE)而不是简单的MLP,并在数据集CUB-200和VGG-flower上进行实验,对比其与基于卷积特征和MLP的CNN的分类效果.
AE是一种无监督学习图像特征表示的方法,它期望神经网络的输出与输入相同,即(^overx)=x,其网络结构如图1所示.
AE的目标是拟合恒等函数hW,b((^overx))≈x,其中,hW,b((^overx))=f(W(^overx)+b),W为权重,b为偏置量.拟合恒等函数看似意义不大,但如果在拟合过程中给网络加入某些限制条件,比如限制隐含层的神经元数目,就可以得到输入数据的结构.比如:假设输入x是一个大小为10×10的灰度图(即n=10),隐含层包含50个神经元,输出(^overx)与x应当有相同的维度; 但由于该网络仅包含50个隐含节点,所以它会强制将输入进行压缩表示,而输出层需要从这个压缩表示中重构包含100个节点的输入x.当输入数据具有结构性,即输入数据的某些特征具有关联性,AE则可以求解出这种结构性.当隐含层的节点数目小于输入节点数时,AE的隐含层学习到的特征是输入数据的低维表示,因此可用于降维.如果AE网络包含一个隐含层,并且使用平均方差损失函数训练网络,那么它的K个隐含节点相当于将输入映射到输入数据的前K个主成分,与主成份分析(PCA)类似.如果隐含层是非线性的,那么AE可以拟合到输入数据的多模表示.当使用多层的AE时,这种不同将更加明显,AE的优势也将更加显著.当隐含层节点数大于输入节点数时,通过对隐含层加入稀疏性限制,可使隐含层节点中大部分神经元处于“抑制”状态,只有少部分处于“激活”状态.这种向自编码器加入稀疏性限制的网络称为“稀疏AE”(sparse AE).
在自编码器网络结构中,若a2j 表示第j个隐含节点的激活值,则第j个隐含节点在训练数据上的平均激活值表示为
(^overρ)j=1/m∑mi=1a2j xi.(1)
加入稀疏性限制(^overρ)j=ρ,使第j个隐含层神经元的平均激活值接近于ρ,ρ表示稀疏性参数.为了满足这个限制,大多数情况下该神经元的激活值接近0.
为了达到稀疏性目标,还需要在目标函数中加入一个额外的惩罚项,用于惩罚那些明显远离ρ的(^overρ)j.稀疏AE的惩罚项具体形式如式(2)所示:
KL(ρ‖(^overρ)j)=∑s2j=1ρlogρ/((^overρ)j)+(1-ρ)log(1-ρ)/(1-(^overρ)j),(2)
其中s2代表隐含层神经元数目.由于惩罚项是基于相对熵(KL divergence)的,因此也可写成 ∑s2j=1KL(ρ‖(^overρ)j).式(2)是以ρ和(^overρ)j为均值的伯努利分布的变量的相对熵,用来衡量两个不同分布的差异性.这个惩罚项具有如下属性:当(^overρ)j=ρ时,KL(ρ‖(^overρ)j)=0; 当(^overρ)与ρ两者的差异增加时,KL(ρ‖(^overρ)j)也随之增大.因此最小化惩罚项可以使(^overρ)j非常接近ρ.稀疏AE的目标函数表示为
Jsparse(W,b)=J(W,b)+β∑s2j=1KL(ρ‖(^overρ)j).(3)
其中:J(W,b)表示自编码器的目标函数; 参数β为用来控制稀疏惩罚项的权重;(^overρ)j依赖于参数W和b,因为它是隐含节点j的平均激活值; 而隐含节点的激活值依赖参数W和b.
SAE即多层的AE,它把前一层AE的输出作为后一层AE的输入,即把多个AE的编码部分叠加起来,然后再叠加对应AE的解码部分,这样就形成了一个含有多个隐含层的SAE.
SAE的编码步骤如下:
a(l)=f(z(l)),(4)
z(l+1)=W(l,1)a(l)+b(l,1),(5)
其解码步骤为
a(n+l)=f(z(n+l)),(6)
z(n+l+1)=W(n-l,2)a(n+l)+b(n-l,2).(7)
其中:a(n)是最深层隐藏单元的激活值,是对输入值的更高阶的表示; W(k,1),W(k,2),b(k,1),b(k,2)分别表示第k个自编码器对应的W(1),W(2),b(1),b(2)参数,n为神经元数,l为神经网络的层数.
如果把最后一个自编码器的隐含层作为输入数据的高阶特征表示输入到softmax分类器,就可以实现分类.SAE网络结构如图2所示.
由于SAE包含多层,整个网络的参数非常多,如果采用端到端(end-to-end)的训练方法,很容易过拟合.因此,为了防止过拟合现象,在网络训练时,从前到后依次对每一层的AE单独训练,每次只训练一个隐含层.在训练每一层参数时,其他各层参数保持不变.逐层训练将参数训练到快要收敛时,通过反向传播算法调整所有层的参数以改善结果.
AE可以学习到数据的特征表示; SAE则具有深度网络的所有优点,可以学习到更强大的表达能力.SAE第一层可以学习到一阶特征,更高层可以学习到更加抽象的特征表示.对于图像而言,第一层可以学习到边缘,第二层可以学习到由边组合形成的轮廓,更高层次可以学习到更形象、更有意义的特征.
Harr特征是一种基于图像矩形区域灰度差异的特征表示方法,模板反映了图像局部的灰度变化情况.不同类型的Haar特征可以用来检测人脸的不同部位,如眼睛、鼻子、嘴等,这样极大地提高了人脸检测的准确率.方向梯度直方图(histogram of oriented gradient,HOG)通过统计梯度的方向信息提取图像特征,梯度是刻画边缘非常有用的方法,而边缘具有较强的表达能力,通常可以很好地描述目标.因此HOG在行人检测中获得了极大的成功.
上述特征虽然在某些任务上取得了不错的效果,然而由于它们是手工设计的,不仅极大地依赖于人的经验,而且只在某些任务上有效,不具有普适性.另外,手工设计的特征只是片面地考虑某些图像特征,并不能提取图像的本质特征.卷积神经网络很好地解决了手工设计特征所存在的问题,可由网络自动学习图像的特征.浅层网络学习到简单的边缘特征(图3); 深层网络学习到的特征由浅层特征组合而成,因此更加具体,如目标轮廓.对于具体的人脸检测,深层网络可以学习到眼睛、鼻子、嘴等更加抽象的特征.使用神经网络提取特征不仅比传统特征提取更加鲁棒,并且具有普适性,在一个任务上训练得到的网络可以迁移到其他任务上.这样只需在一个足够大的数据集上训练网络模型作为预训练,然后在新任务上进行微调即可,这样极大地提高了训练速度.
为了提取图像特征,本研究采用的预训练网络是在ImageNet数据集上预训练的深度CNN网络,具体的网络模型使用Zeiler 和Fergus提出的ZF(Zeiler and Fergus)网络[8],包含5 个卷积层和3个全连接层(fully connected layer,fc).在ZF网络中池化层一般采用极大池化或平均池化,而本研究采用矩池化(moment pooling)[9].矩池化优于以上2种池化方法,它不仅可以保持高频分量,而且能有效地预防过拟合现象.更重要的是,池化层所采用的池化方法具有无参性,改变池化方法不会增加网络的训练复杂度,也不需要重新训练网络,只需要在特征提取时将池化方法替换成矩池化即可,也可以再对网络进行微调,但这对最终的网络性能没有实质性的影响.
基于上述卷积特征,本研究在卷积特征图上构建了一个新的分类系统,称为基于卷积特征的栈式自编码器(stacked autoencoder on convolutional feature maps,SACF).这个分类系统将CNN网络的pool5层的输出作为图像特征提取,分类器采用SAE而不是简单的MLP,因为SAE可以学习到更好的特征表示.SACF的结构如图4所示.
SAE的隐含层叠加在一起构成的网络与MLP网络很相似,不同的是前者是一种无监督学习方法,而后者是有监督学习方法.由于SAE的训练过程是一个无监督过程,可以获得大量的训练数据用于训练以得到一个非常好的初始网络.
将本研究提出的SACF与单纯的MLP在数据集Caltech-UCSD Birds 200[10](CUB-200)和Oxford Flower 102[11](VGG-flower)上进行比较.为了进一步探究在分类器部分网络层数对模型的影响,分别尝试不同的网络深度以获得最好的网络模型,网络深度分别为2,3,4.最后一个全连接层是(n+1)维的softmax,其他全连接层是4096-d的受限线性单元(rectified linear units,ReLUs)[12].例如:把3层的网络表示为“f4096-f4096-f200”,其中f表示全连接层,200表示CUB-200 的类别数; 如果使用VGG-flower数据集,那么本实验中为102.
实验采用Theano[13-14]构建模型.Theano 是一个python 库,它可以定义、优化及评价数学公式,尤其适用于处理模型的数学表达式中包含大量矩阵运算的情况.对于处理包含大量数据的问题,相较于C 语言的解决方案,Theano 可以大大地提高程序的处理效率.它的另外一个优势是可以使用GPU 进行加速.
Theano的编译器对于各种复杂的表达式采用了很多优化方法,这些方法包括:
1)使用numpy.ndarray编译函数;
2)使用GPU时的透明化:处理大量数据运算时的效率最大可达CPU的40倍;
3)合并相同的子图,以避免重复计算;
4)公式简化:(x×y)/y→x;
5)快速、稳定的优化:即使x非常小也可以得到log(1+x)的正确结果;
6)单元测试和自我校正:发现并修正许多错误.
CUB-200是一个致力于子类别分类的数据集,包含6 033张标注好的鸟类图片,鸟的类别有200 种(大部分存在于美国北部),训练集和测试集分别有3 000 和3 033 张图片.每一张图片的标注信息包含:粗分割、目标窗口和一个二值的属性.VGG-flower 数据集由102 种花的图片组成,每一个类别至少包含40 张图片.该数据集与CUB-200 一样,都是用于子类别分类的数据集,然而它增加了分类的难度,既扩大了类间的相似性,且缩小了类内的相似性.这2种数据集可用于评测图片分类模型和图片分割模型.
作为一种普适性的方法,本研究采用在ImageNet的数据集上预训练的1 000类深度卷积神经网络(deep CNN)模型提取图片特征.实验中采用ZF网络,包含5个卷积层和3个全连接层.
在训练阶段将特征图作为新的数据源,然后训练不同的SACF网络对该数据进行分类.SACF网络可以有多种不同的网络深度,它的最后一层是一个(n+1)类的分类器(n个目标类别加上背景),这个分类器是一个(n+1)维的softmax分类器.使用反向传播和随机梯度下降法[15]训练每一个SACF网络.预训练阶段将SACF网络的每一个AE当作单独的网络训练,而微调则将SACF网络的SAE作为一个整体训练,是一种端到端的过程.当训练得到一个理想的网络后,把最后一个AE的隐含层作为输入数据的高阶特征表示,输入到softmax分类器,就可以实现分类,这与R-CNN[16]类似.训练中使用高斯分布随机初始化权重,因此不同的SACF 可以非常公平地进行比较.
表1是基于卷积特征的MLP和SACF在数据集CUB-200上的实验结果.可以看出,采用不同层数的MLP,分类准确率不同,当采用网络f4096-f200时,分类准确率最高,为87.9%; 而对于SACF,采用网络f4096-f4096-f200时,获得最高分类准确率89.8%.虽然MLP与SACF在不同层次中获得最高分类准确率,但可以看出在不同网络结构中SACF的分类准确率都大于或者等于MLP的分类准确率.SACF的最高分类准确率比MLP的最高分类准确率提高了1.9个百分点.在SACF中,4-fc网络与3-fc网络分类准确率接近,为了减少模型复杂度,选择3-fc网络.
表2是MLP和SACF在数据集VGG-flower上的实验结果.与CUB-200类似,MLP在2-fc网络上获得最高分类准确率31.0%,SACF在3-fc网络上获得最高分类准确率34.6%.在不同的网络结构上,SACF的分类准确率都大于或者等于MLP的分类准确率.SACF的最高分类准确率比MLP的最高分类准确率提高了3.6个百分点.
综上,在不同的数据集上SACF都表现出其优越性,因此在分类器层面使用SAE可以提高网络的分类效果.这也验证了分类器与特征提取器对于分类系统同等重要的假设,在后续的工作中,可以继续研究性能更优异的分类器以提高网络性能.
本研究深入探究了图像分类系统,并且提出系统中的每个部件都同等重要的关键性见解,发现深度网络与深度特征提取器对系统性能都很重要.仅通过随机初始化深度网络就能取得良好的分类结果,说明微调并不是唯一提升性能的策略.本研究提出图像分类系统SACF,尝试不同网络深度以选择最佳的网络结构.在数据集CUB-200和VGG-flower上通过端到端训练深度特征提取器和基于SAE的深度分类器,表明本文中提出的SACF分类系统相对于CNN有更高的分类准确率.