基于深度迁移学习的饮食图像识别研究
2021-11-12王策仁彭亚雄陆安江
王策仁,彭亚雄,陆安江
(贵州大学 大数据与信息工程学院,贵阳 550025)
0 引 言
计算机视觉学科领域发展至今,图像分类问题一直是此领域的重要内容。随着互联网技术的飞速发展,网络上的图像无论从数据大小、数量基数和种类的丰富都呈现指数式的增长。近几年,机器学习在图像识别领域发展迅速,便于进行矩阵和浮点计算的GPU性能快速进步,而作为机器学习的重要分支,其可以通过大量数据和GPU硬件加速来增强深度学习快速在学习科研[1]、工业应用[2]、医学诊断[3]等领域得到广泛的运用。
深度学习拥有比较优秀的建模和分析能力,在图形分类中优势明显。为此需要两个前提条件:一是足够深且合适的网络模型,二是质量好且标注优秀的数据集提供训练[4]。此外,对实验的硬件要求很高。
饮食的种类丰富多样,又是人们日常生活的必要因素,随着国家、民族、地域的不同,其种类风格也大相径庭。由于食物图片的数量之多,采用传统的深度学习方法,对硬件和数据集的质量要求太高,花费的时间较多,并难以得到较好的结果。人们日常接触到的食物图像数据样本大多质量一般,要么是样本的数量较少,要么是样本中无效数据或标注较少[5]。但是,这些通过卷积神经网络提取出来的特征信息部分,具有不错的泛化能力,可通过对迁移学习合理运用增加模型性能。
1 神经网络算法分析
深度学习是机器学习领域的一个重要分支,2012年Hinton等人[6]构建全连接网络和卷积神经网络结合的模型,并获得了当年ImageNet 大规模视觉识别挑战大赛(ImageNet Large Scale Visual Recognition Competition, ILSVRC)[7]图像分类目标的冠军,同时文献[6]中首次使用了GPU来加速模型的训练,借以寻求更优的网络和更准确的算法,从此奠定了卷积神经网络在图像分类领域的领先。
本文采用在ILSVRC大赛图像分类项目中具有不同特性的VGG16[8]、ResNet50[9]和MobileNetV2[10]网络,用于特征提取,迁移其在ImageNet(源域)上训练出的特征和权重知识到饮食图像分类(目标域)中[11],通过Pre-training + Fine-Tuning(预训练+微调)方式再训练。
1.1 改进型VGG16神经网络
VGG16网络模型是由牛津大学视觉几何组在2014开发的,整个网络共16层,由13层conv卷积层和3层fc全连接层共同组成(5层maxpool池化层不计入层数)。最后通过3层全连接层输出1 000个分类。
文献[8]中指出,网络的核心思路是通过堆叠对多个3x3卷积核来取代尺寸更大的卷积核,即通过感受野(receptive field)[12]的方式,由两个3x3卷积核堆叠取代5x5的卷积核;3个3x3的取代7x7的卷积核,如图1所示。计算公式为:
图1 感受野
N(i)=[N(i+1)-1]·S+K
(1)
其中:N(i)是第i层感受野;S是步距;K为卷积核大小。
1.2 改进型ResNet50神经网络
ResNet50在2015年由微软提出,其在结构上的优越性可以让网络突破1 000层组成超深的网络。得益于文献[9]中提出的残差(residual)结构,配合使用了BN(Batch Normalization)[13]来加速训练,减少了依赖dropout等拟合的方法。
如图2所示,网络由多组残差模块构成。ResNet50先通过一个7x7,步距为2的卷积层,再经过3x3,步距为1的最大池化层,后由4种不同的共16组残差模块组成。
图2 残差结构
其中,F(x)为正常通过卷积层的输出;H(x)为正常卷积层输出与捷径输出之和;ReLu函数是较为主流的非线性激活函数。[14]如图3所示,其公式定义为:
图3 ReLu函数图像
f(x)=max(0,x)
(2)
文献[13]中提出的方式,可以使每个batch的数据满足均值为0,方差为1的分布规律。公式如下:
batch均值:
(3)
batch的方差:
(4)
标准化:
(5)
最后得出:
(6)
其中,u、σ2由正向传播统计得到;γ、β由反向传播训练得到;m为一个batch总数。
1.3 改进型MobileNetV2神经网络
MobileNetV2是由Google团队在2018年研发的网络模型,相比其它的卷积神经网络,沿用了文献[15]的DW(Depthwise Convolution),卷积可以大量的减少网络的参数使用量和计算量,且仅牺牲小幅的精确度,相比VGG16精确度减少了0.9%,模型参数只有VGG16的1/32[15]。
该网络首次提出Inverted Residuals倒残差结构(图4)和采用ReLu6非线性激活函数(图5)提高准确度,使模型变的更小。
图4 倒残差结构
图5 ReLu6函数图像
2 深度迁移网络与数据
本文以文献[8-10]提出的3种网络结构为基础,迁移ImageNet上的特征信息。首先载入不同的饮食数据集,对图像预处理和数据增强,然后通过对CNN网络接入分布式微调的方式进行训练。流程如图6所示。
图6 深度迁移学习加微调流程图
2.1 数据预处理与分析
本文共使用2个数据集,数据来源于kaggle机器学习竞赛网站公开的饮食分类数据集。饮食11数据集中共12 000张图片,选取其中9 000张作为训练集,3 000张为验证集,数据集共11种分类,其中包括日常饮食中真实拍摄的食物,具有较好的代表性。饮食101数据集是一个涵盖范围更广的饮食数据集,共101类食物100 000张图,通过python编写的小程序对数据进行随机切分(比例控制在8:2),即其中80 000张作为训练集,20 000张为测试集。
由于数据集中图片都是日常拍摄,其像素和尺寸不一,甚至有的图片的主体并不是目标物。所以,在训练之前需将图像进行预处理。首先进行统一的水平裁切处理(验证集不需进行裁切),将图片等比例填充成280 x 280的纯黑色图片,再还原成分辨率统一裁剪为224 x 224的彩色图片,并提高一定量的对比度和亮度,然后对数据集进行标准化和归一化处理后,再进行旋转变换、平移变化和随机组合,达到增强数据的效果。
2.2 深度迁移网络
本文采用特征迁移的方式进行迁移学习[16],通过ResNet50、VGG16和MoblieV2网络对数据集进行特征提取,对最后几层全连接层失活,后接入分布式微调网络,通过微调网络进一步学习。
2.3 分布式微调网络
因本文所采用的数据集均是对特定类别的细化分类,通过原网络中学习的先验知识并不能完全的用于提取数据集的的特征,从而导致精确度下降,花费的训练时间还很多,所以需要对原网络全连接层进行失活,接入分布式微调网络,使用复杂度不一的微调网络,分布式的载入模型中,进而提高准确度,该方法即为分布式微调网络。
图7~9即为本文分布式微调网络结构。通过失活原CNN网络全连接层和分类器,再分布式加入具有不同特征的微调网络,对比不同形式的微调网络带来不同的结果进行分析。
图7 微调1网络结构
图9是失活原网络全连接层后,直接通过一个256神经元的全连接线性层后,接入分类器;图10同样接入一个256神经元的全连接线性层后,进行激活和Dropout[17],Dropout数值设为0.5(即随机失活一半的神经元),最后接入分类器;图11则是接入1 024神经元的全连接线性层后,进行激活,再接入512神经元的全连接线性层后激活,逐级减半,最后接入265神经元的线性层后接入分类器。
图8 微调2网络结构
图9 微调3网络结构
图10 ResNet50饮食11分类精确度对比图
图11 VGG16饮食11分类精度对比图
3 实验与结果分析
3.1 实验设置
本文实验基于深度学习pytorch库,实验模型和数据在Windows 10平台完成训练,计算机CPU为intel i7 9750H,主频2.6 GHz,最高睿频4.5 GHz,GPU使用NVIDIA GTX 1660Ti,计算机内存为16 GB。采用CPU和GPU并行计算,加速模型训练。
分别搭建ResNet50、VGG16、MoblieNetV2网络并载入该网络在ImageNet上训练得到的特征权重信息,对数据集进行特征提取。失活CNN网络中的全连接层后接入微调网络,对不同的微调网络训练结果记录并对比分析。
使用torchvision工具[18]对数据集进行边缘裁剪、标准化和归一化等预处理后,对图片进行数据增强。
实验中各组CNN和微调网络组成的深度迁移学习网络模型中,Batchsize均设置为64。通过CrossEntropy(交叉熵)[19]来计算损失函数,公式如下:
(7)
其中,p是真实值,q是预测值,p值经过ReLu函数激活后在0~1之间。同时实验使用Adam优化器来优化梯度下降过程。其可通过梯度的一阶二阶矩估计,自适应调节学习率。表达式如下:
mt=u·mt-1+(1-u)·gt
(8)
(9)
(10)
(11)
(12)
公式(8)、(9)分别是对梯度的一阶矩估计和二阶矩估计。其中,t为梯度时刻;g是梯度;u和v是指数衰减率。而公式(10)、(11)是对一阶、二阶矩估计的校正,近似对期望的无偏估计。公式(12)则是对学习率η的动态约束。其中,ε是一个极小值数,避免分母为0。实验优化器默认学习率设置为0.000 1。
3.2 结果分析
本实验基于3种CNN网络,通过迁移学习技术,迁移特征权重信息对数据特征提取后,接入分布式微调网络进行再学习和分类。经过上述实验设置,得到不同网络搭配的精确度和迭代时间。
图10~12分别对应ResNet50、VGG16、MobileNetV2分布式接入微调网络及传统CNN训练的饮食11分类精确度对比图。
从图中可以看出,分布式微调的3种方式在经过2-4次迭代后都可以达到精度较高且平稳上升的结果,同时训练出的精确度比传统CNN训练有很大提升。分步式微调的3种方式随着微调网络复杂度的变换,精确度也在提升。其中微调3方式效果最好。
图12 MobileNetV2饮食11分类精度对比图
图13~15则是对饮食101分类数据集的精确度对比图,其精确度对比结果同食物分类数据集的结果相似,迁移加分布式微调的可以快速且平稳得到一个优秀的效果且领先于传统CNN网络训练。对比饮食11分类,训练出的效果同样优势明显,且同样是微调3网络精确度更好。
图13 ResNet50饮食101分类精度对比图
图14 VGG16饮食101分类精度对比图
通过上述精度对比图可以看出,迁移加微调3网络从精度上看,两个数据集都可以得到不错的精确度,远超原CNN训练的结果。ResNet50、VGG16、MobileNetV2这3种网络在微调3模式下对比原网络,在50组迭代下饮食,11分类分别提升15%、13.5%和24.4%,饮食101分类分别提4.8%、3.5%和5.1%。MoblieNetV2提升最大,VGG16提升较少。
图15 MoblieNetV2饮食101分类精度对比图
对网络进行更深层次训练,精度对比结果见表1。3种网络进行微调3模式下训练200组后,对比原网络的精度,结果与50组迭代相似,ResNet50的精确度最高,VGG16次之,而在提升幅度上ResNet50提升最大,MoblieNetV2次之。
表1 200组迭代精确度对比表
本文评价网络性能的参考因素:一是网络的精确度,二则是网络的训练时间(时间性能)。实验记录了每次迭代的平均训练时间作为参考,见表2。在两个饮食分类数据集中,随着微调网络的复杂度增加,各个模式下花费的时间均有不同程度的增加,VGG16的网络复杂度最高,故花费时间最多,ResNet50次之,而以精简著称的MoblieNetV2时间最少。同样饮食11分类数据量和分类的复杂度都远小于饮食101分类,故饮食101分类的花费时间度远小于饮食11分类。
表2 平均单位迭代时间
3种CNN网络搭配3种微调模式共9种模式,在花费时间上都远小于原CNN训练的结果。在饮食11分类中3种网络时间性能分别平均提升25.5%、64.3%和38.8%,在饮食101分类中提升更大,分别为78.6%、110.7%和56.9%。3种CNN网络中,对硬件性能要求最高、使用参数量最多的VGG16网络的时间性能提升最大,而网络最为精简的MoblieNetV2所花费的时间最少。当然这和其精简的网络结构,更少的参数使用量和对设备性能的依赖性息息相关。
综合对比本实验的精确度和时间性能,在精确度层面,ResNet50配合微调3模式得到的效果最好,200组迭代后提升达到10%和7.6%,提升幅度最大;VGG16网络的精度第二,提升幅度第三;MoblieNetV2提升幅度第二,但精度最差。在对时间性能分析结果表明:VGG16时间性能提升最大,平均时间性能提升在两个数据集分类中分别达到64.3%和110.7%,ResNet50次之。可见,本实验采用的CNN复杂网络引入迁移学习预训练进行特征提取,后接入微调网络进行再训练,对复杂的网络、硬件设备要求越高的网络和数据复杂度越大的网络的提升就越大,无论是时间性能还是网络精度都有很好的效果。
学习配合分布式微调网络的策略可在极短的时间内获得优秀的结果。无论是精确度还是时间性能都远优于文献[8-10]CNN网络的零基础训练。
4 结束语
本文选用迁移学习解决深度学习中的饮食图像分类问题,提出一种CNN网络配合迁移学习的方法,采用分布式微调的方式增加网络的性能。本文采用3种不同的CNN网络,配合分布式微调网络对数据集分类训练。实验结果表明,本文采用的方法在精确度和时间性能上都远强于原网络训练的结果。综合对比下,VGG16配合微调3模式的性能最好,时间性能和精度都有不错的结果。下一步将建立更多的微调模式对不同的数据集进行训练,提高分类方法的性能和实用性。