本文介绍的工作目标是开发从移动设备拍摄的图像中自动识别食品和饮料物品的技术。该技术由两种不同的方法组成 – 第一种方法执行食物图像识别,而第二种方法执行食物图像分割。
由于与人工饮食评估方法相关的问题和成本,需要自动化的解决方案来缓解和加快工作速度,提高工作质量。如今,自动化解决方案能够以更简单的方式记录一个人的饮食摄入量,例如使用智能手机摄像头拍摄图像。在本文中,我们将重点讨论这种基于图像的饮食评估方法。对于食品图像识别问题,近年来,深度神经网络已经达到了最先进的水平,我们介绍了我们在这一领域的工作。特别是,我们首先使用一种称为 NutriNet 的深度神经网络架构来描述食品和饮料图像识别方法。与早期基于深度学习的食品图像识别所做的大多数研究一样,此方法仅限于每个图像的一个输出,因此不适合具有多个食品或饮料项目的图像。这就是为什么执行食物图像分割的方法要强大得多,因为它们能够识别图像中任意数量的食品或饮料项目。因此,我们还提出了两种食物图像分割方法 – 一种基于完全卷积网络 (FCN),另一种基于深残余网络 (ResNet)。
饮食评估是确定个人饮食可操作区域的关键一步。然而,使用传统的手工方法进行饮食评估与相当大的成本相关。这些方法也容易出错,因为它们往往依赖于个人的自我报告。自动饮食评估通过提供更简单的方法来量化和验证食物摄入量来解决这些问题。这种方法还可以减轻手动方法中存在的一些错误,例如误餐、无法准确评估食物量等。因此,通过开发解决方案,识别不同的食物和饮料,并量化食物摄入量1,自动饮食评估有明显的好处。这些解决方案还可用于估算食品和饮料项目的营养价值(从现在起为”食品项目”)。因此,自动饮食评估对于多种应用是有用的 – 从严格的医疗用途,如允许营养师更轻松、更准确地跟踪和分析患者的饮食,到针对普通人群的内部健康应用程序的使用。
从图像中自动识别食物是一个具有挑战性的计算机视觉问题。这是由于食物通常是可变形的对象,也由于食品在准备过程中可能会丢失大量的视觉信息。此外,不同的食物可能看起来非常相似,相同的食物可以看起来有很大的不同,在多个图像2。此外,识别的准确性取决于更多的因素,如图像质量,食品项目是否被另一个项目阻碍,图像拍摄的距离等。识别饮料项目会带来一系列自己的挑战,主要的挑战是图像中可用的视觉信息数量有限。这些信息可以是饮料的颜色,饮料容器的颜色和结构,并在最佳的图像条件下,饮料密度2。
要从图像中成功识别食品,必须了解每个食品和饮料类的功能。传统上,这是使用手动定义的功能提取器3、4、5、6 执行基于特定项目功能(如颜色、纹理、大小等)的识别,或这些功能的组合。这些功能提取器的示例包括多个内核学习4、对对本地功能5和功能袋模型6。由于食物图像的复杂性,这些方法大多实现了低分类精度 – 10%至40%之间3,4,5。原因是手动方法不够坚固,不够准确。由于食品在外观上可能差异很大,因此手动包含所有这些差异是不可行的。当食物类别减少5个,或者将不同的图像特征组合6时,手动定义的功能提取器可以实现更高的分类精度,从而表明需要更复杂的解决方案来解决这个问题。
这就是为什么深度学习被证明是如此有效的食物图像识别问题。深度学习,或深度神经网络,灵感来自生物大脑,并允许由多个处理层组成的计算模型通过对一组输入图像7,8的培训自动学习功能。正因这样,深度学习大大改善了各种研究领域的技术水平7,计算机视觉,以及随后的食物图像识别,成为其中2。
特别是,深度卷积神经网络(DCNN)是最受欢迎的食物图像识别 – 这些网络的灵感来自动物的视觉系统,其中个别神经元试图通过对视觉领域9的重叠区域作出反应来了解视觉输入。卷积神经网络采用输入图像,并在每个网络层中执行一系列操作,其中最常见的是卷积层、完全连接层和聚合层。卷积层包含可学的过滤器,这些滤波器响应输入数据中的某些功能,而完全连接的层则组成来自其他层的输出数据,以便从中获取更高层次的知识。汇集图层的目的是向下采样输入数据2。有两种方法可以使用深度学习模型,证明很受欢迎:采取现有的深度神经网络定义10,11,在本文中称为深度学习架构,或定义一个新的深度学习架构12,13,并在食品图像数据集上培训其中任何一个。这两种方法都有优点和缺点 – 在使用现有的深度学习架构时,可以选择并微调用于其他问题的架构,从而节省时间并确保选择经过验证的架构。另一方面,定义新的深度学习架构则更加耗时,但允许开发专门考虑问题细节的架构,从而在理论上更好地处理该问题。
在本文中,我们介绍了这两种方法。对于食品图像识别问题,我们开发了一种名为NutriNet2的新型DCNN架构,这是著名的AlexNet架构14的修改。与 AlexNet 相比,主要有两个区别:NutriNet 接受 512×512 像素图像作为输入(与 AlexNet 的 256×256 像素图像相反),而 NutriNet 在神经网络的开头具有额外的卷积层。引入这两个更改是为了从识别数据集图像中提取尽可能多的信息。拥有更高分辨率的图像意味着图像上有更多的信息,并且有更多的卷积层意味着可以从图像中提取更多的知识。与 AlexNet 的大约 6000 万个参数相比,NutriNet 包含的参数更少:大约 3300 万。这是因为第一个完全连接的层的尺寸差异是由额外的卷积层2引起的。 图 1 包含 NutriNet 架构的图表。用于训练 NutriNet 模型的食品图像是从互联网上收集的 – 协议文本中描述了该过程。
对于食物图像分割问题,我们使用了两种不同的现有架构:完全卷积网络 (FCN)15和深度残余网络 (ResNet)16,这两种结构都代表了图像分割的先进状态,当我们使用它们来开发各自的食品图像分割解决方案时。朗等人引进了多种FCN变种:FCN-32、FCN-16和FCN-815。FCN-32s 根据 FCN 最后一层的预测输出像素地图,而 FCN-16s 变种则将这些预测与较早一层的预测相结合。FCN-8s考虑了另一层的预测,因此能够做出最好的谷物预测,这就是为什么它适合食品图像识别。我们使用的 FCN-8s 在 PASCAL 视觉对象类 (PASCAL VOC) 数据集17上进行了预先培训,并在食品复制品图像(从今以后为”假食物“)18上进行了训练和测试,原因是它们与真实食品的视觉相似性,并且由于像素水平上缺乏真实食物的注释图像。假食物用于不同的行为研究,所有研究参与者的所有菜肴都使用假食物。由于这些图像的食物内容是已知的,它使图像数据集可用于深度学习模型培训。协议文本中描述了数据集处理步骤。
基于 ResNet 的解决方案是在食品识别挑战 (FRC)19的范围内开发的。它使用混合任务级联 (HTC)20 方法与 ResNet-10116 骨干。这是用于图像分割问题的最先进的方法,可以使用不同的功能提取器或骨干。我们也考虑了其他骨干网络,特别是其他 ResNet 变种,如 ResNet-5016,但 ResNet-101 最合适,因为它的深度和能力足以以足够复杂的方式表示输入图像。用于培训 HTC ResNet-101 模型的数据集是附加增强图像的 FRC 数据集。这些增强在协议文本中呈现。
本文旨在为机器学习专家寻找深度学习架构和数据增强步骤在食品图像识别和分割问题方面表现良好的信息,以及希望利用我们的方法实现食品图像识别自动化用于饮食评估的营养研究人员提供资源。在下面的段落中,介绍了来自食品图像识别领域的深度学习解决方案和数据集。在协议文本中,我们详细说明了这三种方法中的每一种方法是如何用于训练可用于自动饮食评估的深度神经网络模型的。此外,每个协议部分都包含用于培训和测试的食品图像数据集的获取和处理方式的描述。
DCNN 通常比其他食品图像识别和分割方法取得更好的结果,这就是为什么该领域近期的绝大多数研究都基于这些网络的原因。川野等人使用DCNN来补充手动方法21,并在UEC-FOOD100数据集22上实现了72.26%的分类精度。克里斯托多利迪斯等人专门使用它们,在自获取的数据集23上达到84.90%的更高精度。Tanno等人开发了DeepFoodCam-一款用于食品图像识别的智能手机应用程序,使用DCN24。刘等人提出了一个系统,使用DCN25进行基于物联网的饮食评估。Martinel等人推出了一种基于DCNN的方法,利用食品图像26的细节,并报告了食品-101数据集27的准确率为90.27%。周等人撰写了一篇关于食品领域深度学习解决方案的回顾。
最近,赵等人提出了一个专门用于移动应用中食品图像识别的网络29。此方法使用较小的”学生”网络,从更大的”教师”网络中学习。通过它,他们成功地在 UEC-FOOD25630 上实现了 84% 的准确率,在 Food-101 数据集 27 上实现了91.2%的准确率。哈菲兹等人利用DCNN开发出饮料专用图像识别解决方案,报告精度高达98.51%31。Shimoda等人描述了一种在食品图像中检测板区而不使用像素注释32的新方法。Ciocca等人推出了一个新的数据集,包含来自11个不同州(固体,切片,奶油糊等)的20种不同食品类别的食品,并介绍了他们的方法,培训识别模型,能够识别食品状态,除了食品类33。Knez等人评估了移动设备34的食品图像识别解决方案。最后,Furtado等人对人类视觉系统与DCN的性能进行了比较研究,发现人类识别的精度仍然优于DCN,精度为80%,而DCMN为74.5%。作者指出,在少量的食物类中,DCNN表现良好,但在有数百个类的数据集上,人类识别精度更高,突出了问题的复杂性。
尽管其最新成果,深度学习有一个主要缺点 – 它需要一个大的输入数据集来训练模型。在食品图像识别的情况下,需要一个大型的食品图像数据集,此数据集需要包含尽可能多的不同真实场景。在实践中,这意味着对于每个单独的食品或饮料项目,需要大量的图像集合,并且需要在数据集中显示尽可能多的不同项目。如果数据集中没有足够的图像用于特定项目,则不太可能成功识别该项目。另一方面,如果数据集只涵盖少量项目,解决方案的范围将受到限制,并且只能识别少数不同的食品和饮料。
过去提供了多个数据集。匹兹堡快餐图像数据集 (PFID)3被引入,以鼓励在食品图像识别领域的更多研究。电子通信食品大学100(UEC-FOOD100)22和电子通信大学食品256(UEC-FOOD256)30个数据集包含日本菜,在UEC-FOOD256数据集的情况下,与一些国际菜一起扩展。Food-101数据集包含从网站27获得的流行菜肴。Food-5036和视频检索组食品 172 (VireoFood-172)37个数据集是基于中国的食品图像集合。米兰-比科卡大学 2016 (UNIMIB2016) 数据集由来自意大利食堂38的食品托盘图像组成。食谱1M是烹饪食谱和食物图像39的大型数据集。Food-475 数据集40收集了以前发布的四个食品图像数据集 27、30、36、37 成一。北京理工大学食品60(BTBUFood-60)是用于食品检测的图像数据集41。最近,ISIA 食品-500 数据集42的杂项食品图像被提供。与其他公开的食品图像数据集相比,它包含大量的图像,分为500个食品类,旨在推动多媒体食品识别解决方案42的发展。
近年来,深度神经网络已多次被验证为识别食物图像10、11、12、21、23、25、26、29、31、33的合适解决方案。我们在这篇文章中提出的工作有助于进一步证明这一点1,2。单输出食品图像识别方法简单明了,可用于简单的应用,其中图像只有一个食品或饮料项目预计2。
食品图像分割方法似乎特别适合识别一般食品图像,而对食品数量没有任何限制。因为它通过对图像的每个像素进行分类来工作,它不仅能够识别图像中任意数量的食品,还可以指定食品物品的位置以及它有多大。然后,后者可用于执行食物重量估算,特别是如果用于参考对象或固定距离摄像头。
有关食物图像数据集3、22、27、30、36、37、38、39、40、41、42的可用性,我们已做一些工作,我们希望日后能做更多工作,特别是收集世界各地地区的食物图像数据集,以发展更有力的解决方案。目前,食品图像自动识别解决方案的精度尚未达到人体水平35,这在很大程度上是由于食品图像数据集的使用规模和质量不足。
今后,我们的目标将是进一步评估关于真实世界图像的已开发程序。一般来说,此字段中的数据集通常包含在受控环境中拍摄的图像或手动优化以进行识别的图像。这就是为什么收集一个大型和多样化的现实世界的食品图像数据集,以涵盖所有不同的食品和饮料项目,个人可能想要识别。实现这一点的第一步是由食品识别挑战赛提供的,其中包括一组真实世界的食品图像19,但还需要做进一步的工作来验证这种方法,从世界各地的食物图像和营养师合作。
The authors have nothing to disclose.
作者要感谢澳大利亚纽卡斯尔大学的塔玛拉·布彻提供假食品图像数据集。这项工作得到了欧盟”地平线2020″研究与创新计划(赠款编号863059 -FNS-Cloud,769661-SAAM)的支持:和斯洛文尼亚研究机构(赠款编号P2-0098)。欧洲联盟和斯洛文尼亚研究机构在这篇文章的设计、分析或写作方面没有作用。
HARDWARE | |||
NVIDIA GPU | NVIDIA | N/A | An NVIDIA GPU is needed as some of the software frameworks below will not work otherwise. https://www.nvidia.com |
SOFTWARE | |||
Caffe | Berkeley AI Research | N/A | Caffe is a deep learning framework. https://caffe.berkeleyvision.org |
CLoDSA | Jónathan Heras | N/A | CLoDSA is a Python image augmentation library. https://github.com/joheras/CLoDSA |
Google API Client | N/A | Google API Client is a Python client library for Google's discovery based APIs. https://github.com/googleapis/google-api-python-client | |
JavaScript Segment Annotator | Kota Yamaguchi | N/A | JavaScript Segment Annotator is a JavaScript image annotation tool. https://github.com/kyamagu/js-segment-annotator |
MMDetection | Multimedia Laboratory, CUHK | N/A | MMDetection is an object detection toolbox based on PyTorch. https://github.com/open-mmlab/mmdetection |
NVIDIA DIGITS | NVIDIA | N/A | NVIDIA DIGITS is a wrapper for Caffe that provides a graphical web interface. https://developer.nvidia.com/digits |
OpenCV | Intel | N/A | OpenCV is a library for computer vision. https://opencv.org |
Python | Python Software Foundation | N/A | Python is a programming language. https://www.python.org |
PyTorch | Facebook AI Research | N/A | PyTorch is a machine learning framework. https://pytorch.org |
Ubuntu OS | Canonical | N/A | Ubuntu 14.04 is the OS used by the authors and offers compatibility with all of the software frameworks and tools above. https://ubuntu.com |