本发明涉及图像识别
技术领域:
,尤其涉及一种基于多任务学习和注意力机制的食品反演方法。
背景技术:
:最近几年我们见证了许多关于视觉识别任务研究的卓越成就,包括图像分类,实体识别以及图像语义分割等。但是,与一般的图像识别任务相比,食物图像理解面临着更加艰巨的挑战,因为食物及其组成食材在经过了各种切割和烹饪操作以后,在形状,形态,纹理和颜色等方面都发生了多样的变化,且菜品中的不同食材之间往往存在着相互的遮挡。因此,食品图像分析所面临的挑战已经超越了单纯的计算机视觉任务。一种早期的食材识别模型是pfd(成对局部特征分布),它利用食材预测的结果来进行食品分类。在pfd中,基于图像块的外观,像素点被标记为食材的类别。然后以标签共现它们的几何特性,例如以距离和方向为特征,将像素之间的空间关系建模为多维直方图。通过这些直方图,pfd表现出令人印象深刻的食品识别性能。但是,pfd在食材种类上几乎没有任何可扩展性,仅使用8个类别,而在食品食材多样的当下,这显然无法满足现实生活中的应用需要。基于食品图像的菜谱生成被设计为一个检索任务。通过计算食品图像在嵌入空间的相似度,系统从一个已有的数据集中检索出对应的菜谱。然而,这类系统的表现高度依赖于检索数据集的数据量和数据多样性,以及网络学习的嵌入向量的质量。此外,该系统也无法检索到数据集以外的菜谱信息。关于食物卡路里的估计,目前主流方法是根据的食物类别及其体积来预测食品产生的卡路里。基于深度相机的食物卡路里估算方法,通过深度相机拍摄食品图片来预测食品量从而得到食品图片的预测卡路里值。然而,深度相机作为特殊的设备,人们很难在日常生活中使用。dietcam是一个通过多张图片估算食物的卡路里的移动应用。它对食品图像进行了语义分割和图像识别,并重建了食品的3d体积,以此为依据预测食物卡路里。3d重建操作是通过基于sift的关键点匹配和单应性估计进行的;pouladzadhe等提出的食物热量预测系统需要从食品的顶部和侧面两个角度拍摄照片,并以用户的拇指作为参照物。该方法通过将根据顶视图图像预测的高度与从侧视图预测的宽度相乘从而估计食品的体积。上述用多个图像估计食物体积的方法,通常需要校准摄像机或调整拍摄角度,用户操作难度大,流程复杂。食品所含卡路里值主要依赖于食品的种类,体积,食材和烹饪方法等因素。有时相同类别的食品包含的卡路里不同,这是因为它们使用的食材和烹饪方法不同。因此,仅根据识别食品类别和体积不能完全解决食品卡路里预测任务,预测准确率有待提高。技术实现要素:本发明设计开发了一种基于多任务学习和注意力机制的食品反演方法,本发明的发明目的是解决检索式菜谱生成模型对数据集的依赖问题以及由于未考虑食品的食材和烹饪方法等因素,导致卡路里预测准确率低的问题。本发明提供的技术方案为:一种基于多任务学习和注意力机制的食品反演方法,包括如下步骤:步骤1、采集食品数据,构建菜谱数据集;步骤2、建立并训练基于注意力机制的食材文本模型,通过输入食品图片得到对应的食材文本;步骤3、建立并训练菜谱生成模型,通过输入食品图片和食材文本进而得到所述食品图片对应的菜谱文本;步骤4、将所述食材文本和所述菜谱文本分别转化为对应的食材向量和菜谱向量,建立并训练多任务卷积神经网络模型;在所述多任务卷积神经网络模型中通过输入待测食品图片进而得到所述待测食品图片对应的食品分类、卡路里值、食材向量和菜谱向量。优选的是,在所述步骤2中,通过transformer模型建立食材文本模型过程包括:将食品图片特征向量作为输入,输出为生成食材的序列l=(l0,…,lk,…,lk),式中,lk代表序列中的一种食材。优选的是,在所述步骤2中,通过列表结构表示所述食品图片对应的生成食材,包括:确定包含n个食材元素的字典为从字典d种选择k个元素,生成食材列表将l编码为k×n维的二进制矩阵l,当dj∈d被选中时,li,j=1,否则li,j=0;所述食材文本模型的训练数据包含m张食品图像和食材列表对所述食材文本模型的优化目标为式中,为根据图像x预测的目标矩阵,θi和θl分别是图像编码器和食材解码器的可学习参数;将分解为k个条件句:并指定为食材分类的概率分布。优选的是,在所述步骤2中,通过transformer模型建立食材文本模型通过adam优化器进行数据优化:设置β1=0.9,β2=0.99,∈=1e-8,设置学习率0.001,其中,预训练残差网络层学习率为0.0001;训练最大训练轮次为200轮,使用早停法,设置patience为50,如果50轮训练后验证数据的iou标准没有改善,则执行早停;其中,batch_size设置为128,num_workers设置为4。优选的是,在所述步骤3中,通过transformer模型建立菜谱文本模型过程包括:将食品图片特征向量和食材文本特征向量作为输入,输出为生成菜谱的序列r=(r1,…,rt,…,rt),式中,rt为序列中的一种词。优选的是,在所述步骤2中,通过transformer模型建立菜谱文本模型通过adam优化器进行数据优化:β1=0.9,β2=0.99,∈=1e-8,设置初始学习率0.001,每十个轮次衰减一次,衰减因子为0.99;本次训练最大训练轮次为200轮,使用早停法,设置patience为50,如果50轮训练后验证数据的iou标准没有改善,则执行早停;其中,batch_size设置为128,num_workers设置为4。优选的是,在所述步骤4中,建立并训练多任务卷积神经网络模型包括如下步骤:步骤4.1、采集样本数据并构建训练样本集和验证测试样本集;步骤4.2、搭建多任务卷积神经网络模型,步骤4.3、获取训练多任务卷积神经网络模型的损失函数:式中,lcal,lcat,ling,ldir分别为卡路里预测,食品分类,食材预测和菜谱预测四个任务的损失函数,λcat,λing和λdir分别为食品分类、食材预测和菜谱预测的损失函数的权重值,n为学习数据的总数;步骤4.4、对多任务卷积神经网络模型进行训练:设定初次训练时,各权重值初始化为1;将所述训练样本集中的图片特征向量输入到所述多任务卷积神经网络模型中,得到多任务卷积神经网络模型的输出为食品分类,卡路里值,食材文本向量和菜谱文本向量并计算食品分类,卡路里值,食材文本向量和菜谱文本向量与对应的真实值之间的损失函数,使所述损失降到最低停止训练得到训练后的多任务卷积神经网络模型;其中,多任务卷积神经网络模型训练过程中,保存每次迭代的损失值,最终所有迭代的平均损失值的倒数被作为各个任务损失函数的权重;步骤4.5、对所述训练后的多任务卷积神经网络模型在测试数据集上测试其预测准确率。优选的是,在所述步骤4.2中,将vgg16模型作为搭建所述多任务卷积神经网络模型的基础网络模型。优选的是,在所述步骤4.3中,所述卡路里预测损失函数lcal为lcal=λrelre λablab;式中,lab为绝对误差,lre为相对误差,λre,λab为卡路里预测损失函数的权重值;所述食品分类的损失函数lcat为式中,ycat(k)为食品图像x的单元k的预测值,gcat(k)是一个二进制值;当单元i是正确值时,设置gcat(k)=1;当单元i不是正确值时,设置gcat(k)=0,n是食品种类数;所述食材预测的损失函数ling为式中,ying(k)为模型的第k维预测值,ging(k)为第k维实际值;所述菜谱向量的损失函数ling为式中,ydir(k)为模型的第k维预测值,gdir(k)为第k维输出值。优选的是,通过word2vec模型分别将食材样本转换成对应的食材向量v_ingj为式中,k是食材的数量,word2vec(wk)是通过word2vec得到的对应wk的实数向量,tfidfk,j是样本rj中wk的tf-idf值;通过word2vec模型分别将菜谱样本转换成对应的菜谱向量v_dirj为式中,t是该样本中菜谱单词数,word2vec(vt)是通过word2vec得到的对应vt的实数向量,tfidfk,j是样本rj中vt的tf-idf值。本发明与现有技术相比较所具有的有益效果:1、本发明基于深度学习方法,设计了生成式菜谱预测模型,解决了传统检索式菜谱预测模型对菜名-菜谱对照数据集的依赖,即在食品图像对应菜名在数据库中不存在时,训练好的模型也能够根据图像信息生成合理的菜谱文本;2、本发明基于多任务卷积神经网络,实现了根据食品图像对卡路里值的直接预测,无需先计算图像中食品体积,有效提高卡路里预测的准确率;无需特殊的拍摄设备,降低模型复杂度和用户的使用门槛;3、本发明基于深度学习方法,实现了根据食品图像直接生成对应的菜谱文本,用户无需输入其他辅助信息,降低了用户操作复杂度;鉴于同一菜品在不同地区所用食材和烹饪方法可能不同,相比于检索式菜谱预测模型,本模型可以根据食品图像学习这些差异性,菜谱生成准确率更高。附图说明图1为本发明所述的菜谱生成模型示意图。图2为本发明所述的卡路里预测模型示意图。图3为本发明所述的系统总体实现流程图。图4为本发明所述的系统整体框架图。图5为本发明所述的多任务卷积神经网络示意图。图6为本发明所述的多模态注意力模型示意图。图7为本发明所述的食材编码器示意图。图8为本发明所述的菜谱解码器示意图。图9为本发明所述的单任务卷积神经网络的卡路里预测模型示意图。图10为本发明所述的多任务卷积神经网络的卡路里预测模型示意图。具体实施方式下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。本发明提供一种基于多任务学习和注意力机制的食品反演系统,包括如下步骤:步骤一、采集食品数据,构建菜谱数据集;其中,作为一种优选,在本实施中,使用网络爬虫技术从商业菜谱网站爬取共227310个包含食品图像,食品类别,所含食材,对应菜谱和卡路里标注的数据;选取的三个食谱网站分别为:(1)http://allrecipes.com/;(2)http://www.lettuceclub.net/recipe/;(3)http://www.orangepage.net/;在步骤一中,通过如下方式排除交叉领域噪音数据和交叉类别噪音数:1、去除小于80kb的图像对应样本;2、去除菜谱做法步骤多于8条或少于3条的样本;3、去除对应样本数少于100的食品类别,并去除对应样本;本发明对所有样本的菜名和食材名进行标准化:由于本发明的主要目标是细粒度的食品分类任务以及食材识别任务,对食品类别和食材名称进行删除或合并;例如,本发明保留了数据集中不同类型的面食和蛋糕名称作为一个独立的类别,但从数据集中删除了“意大利面”和“蛋糕”这些更加宽泛的名称;因此,食材的命名并不始终保持一致;例如,将食材“番茄”替换为“西红柿”;作为一种优选,在本实施中,将食材名称统一如表1所示;表1食材名称统一表作为一种优选,在本发明中,数据集共包含227310个样本,其中包含281个细粒度食品类别,1520种食材,28552个菜谱单词,卡路里值的单位是千卡(kcal)每份;本研究将图像调整尺寸为256×256,输入模型时将图像随机裁剪为224×224用于训练;步骤二、建立并训练基于注意力机制的编码器-解码器模型,得到食品图片对应得食材文本;在食材识别中,采用基于注意力机制的编码器-解码器模型,包括图像编码器和食材解码器:图像编码器用于将食品图像编码为特征向量;在本实施中,作为一种优选,选择50层的残差网络,网络生成图像编码维度为512;食材解码器基于windows10系统上的tensorflow2.0.0框架,使用python3.5.6编程语言,构建了由transformer模块组成的编码器-解码器模型,将图像编码器生成的图像特征向量解码生成食材文本。本发明采用transformer结构,将食品图像x(i)作为输入,目标是通过模型生成食材的序列l=(l0,…,lk,…,lk),其中,lk代表序列中的一种食材。食材解码器由4个transformer模块和softmax非线性层组成组成,每个模块包含2个注意力(attention)层和一个线性层;第一个注意力层用于对上一个时间步的输出的做self-attention计算,而第二个注意力层用于调整self-attention的输出;本发明采用列表结构来表示一张食品图像对应的食材文本,该列表长度可变,列表元素之间存在某种顺序关系。近一步,定义包含n个食材元素的字典为通过从字典d种选择k个元素,可以生成食材列表将l编码为k×n维的二进制矩阵l,当dj∈d被选中时,li,j=1,否则li,j=0;因此,编码器-解码器模型的训练数据包含m张食品图像和食材列表对模型的优化目标为:其中,为根据图像x预测的目标矩阵,θi和θl分别是图像编码器和食材解码器的可学习参数。由于l指代列表,可以将因式分解为k个条件句:并指定为食材分类的概率分布;共同训练图像编码器和食材解码器,概率分布和网络模型通过adam优化器进行训练调参;作为一种优选,在本实施例中,使用早停法,设置早停监控指标为验证损失,若50轮内验证损失不下降则训练停止;食材解码器由4个transformer模块和softmax非线性层组成组成,每个模块包含2个注意力(attention)层和一个线性层;第一个注意力层用于对上一个时间步的输出的做self-attention计算,而第二个注意力层用于调整self-attention的输出;在本实施例中,本发明使用自己构建的食品数据集训练食材识别模型;训练过程中,本发明采用了数据增强:对输入样本图像进行随机裁剪(crop)和指定缩放(rescale);本发明选用adam优化器(β1=0.9,β2=0.99,∈=1e-8),设置学习率0.001,其中,预训练残差网络层学习率为0.0001;本次训练最大训练轮次为200轮,使用早停法,设置patience为50,如果50轮训练后验证数据的iou标准没有改善,则执行早停;本模型训练的batch_size设置为128,num_workers设置4;步骤三、建立并训练菜谱生成模型,进而得到待测食品图像对应的菜谱文本;基于windows10系统上的tensorflow2.0.0框架,使用python3.5.6编程语言,将食品图像和食材列表同时作为模型输入,用于生成菜谱文本。菜谱解码器将食品图像编码ei和食材编码el作为输入,目标是通过模型生成菜谱序列r=(r1,…,rt,…,rt),其中,rt指序列中的一个词;通过步骤二的50层残差网络编码器即可得到512维食品图像向量ei;步骤二中,食材解码器生成食材的序列l=(l0,…,lk,…,lk),再通过一个嵌入层即可将食材文本映射为512维向量el。菜谱解码器由16个transformer模块和softmax非线性层组成组成,每个模块包含2个注意力(attention)层和一个线性层。第一个注意力层用于对上一个时间步的输出的做self-attention计算,而第二个注意力层用于调整self-attention的输出;本模型包含两个输入:图像特征向量和食材编码其中k是食材的数量,de是向量的维度;本发明采用的策略是组合两个注意力层来处理两种模态输入的问题,其中一层接受图像编码ei,另一层则接受食材编码el,两个注意力层的输出通过求和方法进行合并。在本实施例中,本发明使用自己构建的食品数据集训练编码器-解码器模型;训练过程中,本发明采用了数据增强:对输入样本图像进行随机裁剪(crop)和指定缩放(rescale);本研究选用adam优化器(β1=0.9,β2=0.99,∈=1e-8),设置初始学习率0.001,每十个轮次衰减一次,衰减因子为0.99;本次训练最大训练轮次为200轮,使用早停法,设置patience为50,如果50轮训练后验证数据的iou标准没有改善,则执行早停;本模型训练的batch_size设置为128,num_workers设置4;步骤四、建立并训练多任务卷积神经网络模型,进而得到待测食品图像对应的食品类别和卡路里值;在本发明中食品卡路里估算设计为回归问题,即输入食品图像,模型输出对应卡路里值;本发明假定给定的食品图像中仅包含一项食品,且输出食品的卡路里的预测标准时一人份,关于食品食材预测任务,本发明将食材信息由word2vec转换为词向量,并将其用于训练多任务卷积神经网络模型;另外,在菜谱预测任务中,做法步骤的句子文本也被转换成向量用于模型训练。本发明设计的多任务卷积神经网络架构主要基于vgg16,同时训练食品卡路里预测,食品分类,食材预测和菜谱预测任务;网络的全连接层(fc6)由所有任务共享,过渡层(fc7)分支到每个任务,因此每个任务分别具有过渡层(fc7)和输出层(fc8);设置lc,lcat,ling,ldir分别为卡路里预测,食品分类,食材预测和菜谱预测四个任务的损失函数,设置nmul为学习数据的总数;整个模型的损失函数表示为:设置lab为绝对损失,lre为相对损失,则lcal定义为:lcal=λrelre λablab;其中,λre,λab,λcat,λing和λdir分别代表四个任务的损失函数的权重值;模型初次训练时,各权重值被初始化为1,模型训练过程中,保存每次迭代的损失值,最终所有迭代的平均损失值的倒数被作为各个任务损失函数的权重;食品分类模型在vgg16模型的fc6全连接层后连接4096维的fc7b层以及一个fc8b,fc8b层的每一个单元对应一个食品类别。设置ycat(k)为食品图像x的单元k的预测值,设置gcat(k)为真实值,则lcat定义为:其中,gcat(k)是一个二进制值;当单元i是正确值时,设置gcat(k)=1;当单元i不是正确值时,设置gcat(k)=0,n是食品种类数;在本实施例中,作为一种优选,例如,当食品分类任务包含20种食品时,设置n=20。食品卡路里预测任务对应模型包含一个4096维的fc7a层和一个一维的fc8a输出层用于输出预测的卡路里值,由于食品卡路里是一个实数值,因此该任务被处理为一个回归问题,通常在回归问题中,选择mse(meansquareerror)作为损失函数,而本发明定义卡路里预测任务的损失函数为:lcal=λrelre λablab;其中,lab为绝对误差,lre为相对误差,λre,λab为损失函数的权重值;绝对误差是指卡路里预测值和实际值之差的绝对值;相对误差是指绝对误差与实际值之比;由于绝对误差和相对误差都是重要的指标,本发明将lab和lre结合得到lcal,模型在训练过程要使两种误差同时减小,设置ycal为图像x的卡路里预测值,设置gcal为实际卡路里值,则lab和lre定义为:lab=|ycal-gcal|;为解决食材预测任务,本研究使用word2vec将样本对应食材的每个单词转换为向量,由于每个食谱包含多种食材,本发明将获得的所有食材向量计算加权求和值,代表该样本的食材信息,即食品包含的所有食材的word2vec向量的线性组合,使用经过计算的向量作为食物食材信息的表示;在使用食材向量作为训练数据的情况下,想要通过食品图片识别出食品包含的每一个独立的食材是很困难的,由于本发明的目标并非通过食品图像识别所包含的食材,而是食品所含卡路里,本发明期望通过多任务卷积神经网络模型来提高食品分类和食品卡路里预测的准确性,获得同步多任务学习的效果,因此采用该方法训练食材预测模型。本发明使用大型食品语料库预先训练的word2vec模型,用于食品数据预处理,例如去除低频频率词和对高频词的二次采样;在本实施例中,本发明使用skip-gram模型并执行负采样来训练word2vec;对于每个样本,只取tf-idf值中排行前nmax的食材单词,nmax为样本平均食材单词数;最终,根据tf-idf值和word2vec向量可以计算一个样本的食材向量。设置wk为样本rj中的食材单词,样本rj对应的食材向量v_ingj定义为:其中,k是食材的数量,word2vec(wk)是通过word2vec得到的对应wk的实数向量,tfidfk,j是样本rj中wk的tf-idf值;本发明中,对食材信息的学习过程被转化为一个食材向量预测任务;该任务的模型包含一个4096维的fc7c层和一个维度与食材向量维度di相同的输出层(fc8c)。设置ying(k)为模型的第k维预测值,ging(k)为第k维实际值,则ling定义为:除了食材预测外,本研究还使用菜谱(做法步骤)预测作为多任务学习的附加信息。与食材预测任务相同,本研究将菜谱语句文本中的每个词通过word2vec转化为词向量,然后通过加权求和计算得到对应的菜谱向量。生成菜谱向量时,仅使用菜谱语句中的名词,动词和形容词,并且是tf-idf值较高的单词。对于每个食品样本,只使用菜谱语句中tf-idf值的最高的nmax个词,在实验中,nmax设置为每个样本中菜谱文本包含的平均单词数。最终,根据tf-idf权重值和word2vec向量计算得到每个样本的菜谱向量。设置vt为样本rj中菜谱文本的单词,样本rj对应的菜谱向量v_dirj定义为:其中,t是该样本中菜谱单词数,word2vec(vt)是通过word2vec得到的对应vt的实数向量,tfidfk,j是样本rj中vt的tf-idf值。本模型针对菜谱信息的训练是通过菜谱向量预测任务实现的,此菜谱向量预测任务模型由4096维的fc7d层和一个输出层(fc8d)组成,其中输出层的维度对应菜谱向量的维度。设置ydir(k)为模型的第k维预测值,gdir(k)为第k维输出值,则ldir定义为:本研究扩展了vgg-16模型并实现了多任务卷积神经网络,在fc6层和fc7层,使用批量标准化代替dropout;在批量归一化以外的其他层和fc8层,其初始参数设置为imagenet在1000类分类任务中预训练的vgg16模型参数。为了优化cnn参数,本研究使用了sgd值为0.9,小批量的大小为8。对于测试,在100次迭代中,本发明使用训练中最后1000次迭代的时间间隔获得了10个模型,并将每个模型预测值的平均值作为最终预测值。本发明将食品数据集的70%数据用于训练,其余30%用于验证和测试;设置0.001的学习率迭代50000次,然后改为0.0001学习率进行20000次迭代。为了训练模型预测食材向量和菜谱向量,本发明用大约8,710,000个烹饪步骤的句子训练word2vec,单词向量维度n=500;关于食品食材,本发明仅使用数据集样本中tf-idf值排在前12的食材单词,并创建食材向量;由于nmax=44,即每个样本中菜谱语句单词数的平均值为44,本研究只使用每个样本菜谱语句中tf-idf值排在前44的单词;然后,为了简单地考虑时间信息,菜谱文本被按时间顺序分为m个句子,创建m个菜谱向量,最后再将分割的向量连接起来。实施例本系统通过一张食品图像直接预测其卡路里值,无需用户手动输入其他信息,对图像拍摄角度等无要求,无需使用深度相机等特殊设备,用户操作更简便。如图9、图10所示,模型采用多任务卷积神经网络,在训练时同时学习卡路里预测,食品分类,食材预测和菜谱预测四个任务,有效提高食品分类和卡路里预测的准确率;实验结果表明,本发明所提模型(相关系数=0.7679)与单任务卷积神经网络的卡路里预测模型(相关系数=0.7217)相比,相关系数提高了0.0462。本发明构建食品数据集,其中包含281个细粒度食品类别和1520种食材,从一定程度上能够缓解食品和食材种类受限的问题。本模型将食品图像和食材文本同时作为输入,有效提高菜谱预测准确率;如表2所示,实验结果表明,本模型与食材单输入的菜谱预测模型相比,测试集困惑度(perplexity)下降了约0.18;本模型与食品图像单输入的菜谱预测模型相比,测试集困惑度下降了约1.40。表2测试集团困惑度实验结果模型困惑度食材单输入模型8.81图像单输入模型9.53生成式模型8.65与传统查询式菜谱生成系统中,预测准确度对数据集的过度依赖不同,本研究将菜谱生成任务设计为一个文本生成问题。如表3所示,实验结果表明,与传统查询式菜谱预测模型相比,本模型处理食材识别任务的交并比(intersection-over-union,iou)提高了10以上,f1分数提高了15以上。表3处理食材识别任务的交并比和f1的实验结果iouf1图像-菜谱查询式模型18.0129.67图像-食材查询式模型17.5827.93生成式模型30.5945.12如表4所示,与传统查询式菜谱预测模型相比,本模型处理菜谱生成任务,基于食材信息的精确率(precision)和召回率(recall)显著提高。表4食材信息的精确率和召回率的实验结果召回率精确率图像-菜谱查询式模型29.8327.62图像-食材查询式模型28.7529.16生成式模型70.3073.94尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。当前第1页1 2 3 
技术特征:1.一种基于多任务学习和注意力机制的食品反演方法,其特征在于,包括如下步骤:
步骤1、采集食品数据,构建菜谱数据集;
步骤2、建立并训练基于注意力机制的食材文本模型,通过输入食品图片得到对应的食材文本;
步骤3、建立并训练菜谱生成模型,通过输入食品图片和食材文本进而得到所述食品图片对应的菜谱文本;
步骤4、将所述食材文本和所述菜谱文本分别转化为对应的食材向量和菜谱向量,建立并训练多任务卷积神经网络模型;
在所述多任务卷积神经网络模型中通过输入待测食品图片进而得到所述待测食品图片对应的食品分类、卡路里值、食材向量和菜谱向量。
2.如权利要求1所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤2中,通过transformer模型建立食材文本模型过程包括:
将食品图片特征向量作为输入,输出为生成食材的序列l=(l0,…,lk,…,lk),式中,lk代表序列中的一种食材。
3.如权利要求2所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤2中,通过列表结构表示所述食品图片对应的生成食材,包括:
确定包含n个食材元素的字典为从字典d种选择k个元素,生成食材列表将l编码为k×n维的二进制矩阵l,当dj∈d被选中时,li,j=1,否则li,j=0;
所述食材文本模型的训练数据包含m张食品图像和食材列表对所述食材文本模型的优化目标为
式中,为根据图像x预测的目标矩阵,θi和θl分别是图像编码器和食材解码器的可学习参数;
将分解为k个条件句:并指定为食材分类的概率分布。
4.如权利要求3所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤2中,通过transformer模型建立食材文本模型通过adam优化器进行数据优化:设置β1=0.9,β2=0.99,∈=1e-8,设置学习率0.001,其中,预训练残差网络层学习率为0.0001;训练最大训练轮次为200轮,使用早停法,设置patience为50,如果50轮训练后验证数据的iou标准没有改善,则执行早停;其中,batch_size设置为128,num_workers设置为4。
5.如权利要求1所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤3中,通过transformer模型建立菜谱文本模型过程包括:
将食品图片特征向量和食材文本特征向量作为输入,输出为生成菜谱的序列r=(r1,…,rt,…,rt),式中,rt为序列中的一种词。
6.如权利要求3所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤2中,通过transformer模型建立菜谱文本模型通过adam优化器进行数据优化:β1=0.9,β2=0.99,∈=1e-8,设置初始学习率0.001,每十个轮次衰减一次,衰减因子为0.99;本次训练最大训练轮次为200轮,使用早停法,设置patience为50,如果50轮训练后验证数据的iou标准没有改善,则执行早停;其中,batch_size设置为128,num_workers设置为4。
7.如权利要求1所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤4中,建立并训练多任务卷积神经网络模型包括如下步骤:
步骤4.1、采集样本数据并构建训练样本集和验证测试样本集;
步骤4.2、搭建多任务卷积神经网络模型,
步骤4.3、获取训练多任务卷积神经网络模型的损失函数:
式中,lcal,lcat,ling,ldir分别为卡路里预测,食品分类,食材预测和菜谱预测四个任务的损失函数,λcat,λing和λdir分别为食品分类、食材预测和菜谱预测的损失函数的权重值,n为学习数据的总数;
步骤4.4、对多任务卷积神经网络模型进行训练:
设定初次训练时,各权重值初始化为1;
将所述训练样本集中的图片特征向量输入到所述多任务卷积神经网络模型中,得到多任务卷积神经网络模型的输出为食品分类,卡路里值,食材文本向量和菜谱文本向量并计算食品分类,卡路里值,食材文本向量和菜谱文本向量与对应的真实值之间的损失函数,使所述损失降到最低停止训练得到训练后的多任务卷积神经网络模型;
其中,多任务卷积神经网络模型训练过程中,保存每次迭代的损失值,最终所有迭代的平均损失值的倒数被作为各个任务损失函数的权重;
步骤4.5、对所述训练后的多任务卷积神经网络模型在测试数据集上测试其预测准确率。
8.如权利要求7所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤4.2中,将vgg16模型作为搭建所述多任务卷积神经网络模型的基础网络模型。
9.如权利要求7所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,在所述步骤4.3中,所述卡路里预测损失函数lcal为
lcal=λrelre λablab;
式中,lab为绝对误差,lre为相对误差,λre,λab为卡路里预测损失函数的权重值;
所述食品分类的损失函数lcat为
式中,ycat(k)为食品图像x的单元k的预测值,gcat(k)是一个二进制值;当单元i是正确值时,设置gcat(k)=1;当单元i不是正确值时,设置gcat(k)=0,n是食品种类数;
所述食材预测的损失函数ling为
式中,ying(k)为模型的第k维预测值,ging(k)为第k维实际值;
所述菜谱向量的损失函数ling为
式中,ydir(k)为模型的第k维预测值,gdir(k)为第k维输出值。
10.如权利要求7所述的基于多任务学习和注意力机制的食品反演方法,其特征在于,通过word2vec模型分别将食材样本转换成对应的食材向量v_ingj为
式中,k是食材的数量,word2vec(wk)是通过word2vec得到的对应wk的实数向量,tfidfk,j是样本rj中wk的tf-idf值;
通过word2vec模型分别将菜谱样本转换成对应的菜谱向量v_dirj为
式中,t是该样本中菜谱单词数,word2vec(vt)是通过word2vec得到的对应vt的实数向量,tfidfk,j是样本rj中vt的tf-idf值。
技术总结本发明公开了一种基于多任务学习和注意力机制的食品反演方法,包括如下步骤:步骤1、采集食品数据,构建菜谱数据集;步骤2、建立并训练基于注意力机制的食材文本模型,通过输入食品图片得到对应的食材文本;步骤3、建立并训练菜谱生成模型,通过输入食品图片和食材文本进而得到所述食品图片对应的菜谱文本;步骤4、将所述食材文本和所述菜谱文本分别转化为对应的食材向量和菜谱向量,建立并训练多任务卷积神经网络模型;在所述多任务卷积神经网络模型中通过输入待测食品图片进而得到所述待测食品图片对应的食品分类、卡路里值、食材向量和菜谱向量。
技术研发人员:孙成林;白洪涛;蔡芷薇;何丽莉;曹英晖
受保护的技术使用者:孙成林;白洪涛;蔡芷薇;何丽莉;曹英晖
技术研发日:2020.12.09
技术公布日:2021.03.12