边 竞, 王艺璇, 代宇晖, 陈泽众, 黄靖淳
(1 河北工业大学 理学院, 天津300000; 2 河北工业大学 人工智能与数据科学学院, 天津300000;3 河北工业大学 经济管理学院, 天津300000)
食物是供给机体活动所需能量的重要物质来源,与人类日常生活息息相关。 由于食物种类繁多,所含营养成分也千差万别,在普通条件下无法快速测定食物的种类及营养成分,但随着深度学习的火热,计算机视觉技术可以完成对食物图像的识别任务,因此,如何搭建一个泛化性较强、识别精度较高的食物图像识别分类算法是当前热门的研究领域之一。 在当下的食物图像识别分类领域,在国外,学者Yoshiyuki Kawano 等[1]提出了一种基于能移动设备端的食物识别技术;Joutou 等[2]提出采用多重核函数学习的方法集成颜色、纹理等图像特征用于食物图像的识别工作;Austin Myers 等[3]通过卷积神经网络实现对食物的识别,并基于食物的常用烹饪方法对其营养成分进行分析,Keiji Yanai 等人提出使用Pre-training 和Fine-training 来提高深度卷积神经网络对食物图像的识别精度[4],Simon Mezgec 等[5]融合4 种卷积神经网络形成深度神经网络进行食物识别。
在国内,Zhihui Fu 等[6]提出使用残差网络模型来进行中餐菜品食物图像的识别;郭礼华等[7]使用SIFT 特征、颜色直方图特征、梯度直方图、SURF 特征、LBP 特征和Gabor 特征等对食材图像数据库进行了分类,并与传统特征分类方法进行了分析与比较;Shulin Yang 等[8]对食物不同分成之间的特征关系进行两两统计形成食物识别分类器;Xin Chen等[9]通过分别对不同的深度神经网络进行训练,提出了一种简单集成训练好的深度神经网络模型用于中餐食物识别的研究方法。
图1 基于Inception-V3 和迁移学习的中餐菜品标签分类模型Fig. 1 Chinese food dish label classification model based on Inception-V3 and transfer learning
此外,深度学习离不开海量训练数据的支持,由于一般的图像识别任务获取百万级别的标签数据样本相对困难,小样本数据集训练的模型往往会出现“过拟合”情况。 基于上述存在的问题,迁移学习可以将具有较强泛化性能的预训练模型进行微调训练,从而可以检测到新对象类别[10]。
综合深度学习与迁移学习的优势[11],本文提出一种基于迁移学习和卷积神经网络的中餐菜品图像多标签分类方法。 该方法首先采用ImageNet 数据集上已完成预训练的Inception-V3 模型初始化各层的网络参数,然后通过微调,在本文所用到的中餐菜品图像数据集上进行迁移学习,依次完成单标签、多标签分类的卷积神经网络模型的搭建;分别完成中餐菜品图像的名称及原料的识别工作。 测试实验结果表明,该方法具有一定的准确可靠性。
本文提出的基于Inception-V3 模型的中餐菜品标签分类模型如图1 所示,该模型选取经过预训练的Inception-V3 作为基础网络架构,用于获取菜品图像的高层次视觉特征,从而实现中餐菜品图像的名称及原料识别工作。 该模型主要分为3 个部分:(1)中餐菜品图像数据集的预处理。 (2)对经过预训练的Inception-V3 进行微调,进行菜品图像视觉特征的提取。 (3)将提取的菜品图像特征应用至名称及原料的标签分类任务。
图2 VIREO Food-172 数据集样例Fig. 2 Sample VIREO Food-172 data set
VIREO Food-172 中餐图像数据库是Jingjing Chen 等[12]为进行中餐成分识别而建立的数据库,该数据库共包含172 种中餐菜品,353 种原料标签,图片总数共达110241 张。 本文以该数据库为蓝本,在每一类菜品图像集中随机抽取100 张图片。 由于Inception-V3 模型的输入图像像素大小至少为224,因此首先将抽取到的图片进行归一化处理,统一尺寸为(256,256,3);其次进行数据分离,将图像进行重命名,手工对每一种中餐菜品图像的实际位置进行标注,并注明类别标签,将对应的保存有中餐菜品位置信息及类别标签的xml 文件进行保存;最后仿照VOC 数据集的格式,将用于训练的图片放置到对应的目录下,同时将保存着图片中菜品信息的xml文件也保存至相应目录,构建中餐菜品训练数据集,作为Inception-V3 模型的输入。
Inception-V3 是由47 层网络组成的深度卷积神经网络,假设模型输入为M, 网络对应的输出为N,则该模型通过训练得到一个参数为Θ 的非线性映射F(·|Θ)[13],即
式 中, fl(·| Θl) 表 示 模 型 的 第l 层。 对Inception-V3 的迁移训练过程如下:(1)将ImageNet数据集上已完成预训练的Inception-V3 模型参数作为初始化网络参数。 (2)将Inception-V3 模型中Softmax 输出层的类别数,改成中餐菜品名称的类别数172、原料的类别数353。 (3)在进行监督分类的网络训练模式时,采用后向传播算法,在中餐菜品训练数据集上进行迁移学习,并对模型参数进行更新。
当完成Inception-V3 的训练之后,提取其最后一层(全连接层)产生的长度分别为172 和353 的特征向量作为模型最终学习到的高层次视觉特征,然后输入到线性支持向量机分类器,分别用于实现中餐菜品名称及原料组成的分类任务。
本实验在Python3.7(64 bit)平台上完成,具体测试环境见表1。 为测试本文方法的准确性,在图2中经过预处理的中餐菜品图像数据集上进行实验的测试。 该数据集数据规模相对较小,共包含172 种中餐菜品,图3 是部分中餐菜品图像样例。
表1 实验测试环境配置Tab. 1 Experimental test environment configuration
在对模型进行训练之前,首先需要使用预训练模型Inception-V3 进行参数设置,部分参数设置如下:每步使用的Batch Size 为64、 epoch 为50 000、迭代轮数为5、学习率为0.001;其次将VIREO Food-172 数据集划分成两部分:10% 作为测试集;90%作为训练集。 其中测试集1 000 张,训练集10 239张;然后将彩色图像进行灰度化处理,进行各层卷积特征的提取,以便于进行菜品名称及原料类别标签的匹配,完成中餐菜品名称及原料的标签分类任务。
图3 测试数据集样例Fig. 3 Sample VIREO Food-172 data set
此外,由于损失函数值对模型精确度影响最大,因此降低该数值可以提高模型的精确度,即损失函数值越小,模型精度越高,应用和研究的价值也就越大[14]。 因此在保持其他参数值不变的前提下,保证损失函数值相对较低可保证模型精度。 本文利用Inception-V3 模型在数据集VIREO Food-172 上迭代训练至50 000 次,损失函数值整体呈现下降趋势,表明模型的收敛效果较好。
使用上述模型对172 类中餐菜品进行名称的单标签分类,得出准确率为80.85%;对353 种菜品原料进行多目标分类,得出的准确率为56.26%。 部分中餐菜品的标签分类结果如图4 所示。
图4 部分中餐菜品名称及原料分类结果Fig. 4 Part Chinese food dish names and raw material classification results
由图4 可见,本文提出的中餐菜品名称及原料识别模型对菜品名称的识别率可达到75%以上,对菜品原料的识别率可达50%以上,表明本文提出的模型具有较高的识别性能。
本文针对基于卷积神经网络的中餐菜品名称、成分识别技术进行了研究,在迁移学习的基础上使用Inception-V3 模型对VIREO Food-172 数据集进行了标签分类,完成了中餐菜品名称及成分的识别工作,菜品名称准确率达到了80.85%,菜品原料识别率达到了56.26%,取得了较好的识别性能;与传统的CNN 以及SVM-HOG 方法相比,本文的方法可以更快速地对中餐菜品的名称及原料进行识别,且具有较好的可移植性,因此将训练好的模型与移动端架构相结合,实现智能移动端设备上的APP 模块化操作也将成为后续工作的重点研究方向[15]。