Waiting
Login processing...

Trial ends in Request Full Access Tell Your Colleague About Jove
Click here for the English version

Engineering

基于图像的饮食评估深度神经网络

Published: March 13, 2021 doi: 10.3791/61906

Summary

本文介绍的工作目标是开发从移动设备拍摄的图像中自动识别食品和饮料物品的技术。该技术由两种不同的方法组成 - 第一种方法执行食物图像识别,而第二种方法执行食物图像分割。

Abstract

由于与人工饮食评估方法相关的问题和成本,需要自动化的解决方案来缓解和加快工作速度,提高工作质量。如今,自动化解决方案能够以更简单的方式记录一个人的饮食摄入量,例如使用智能手机摄像头拍摄图像。在本文中,我们将重点讨论这种基于图像的饮食评估方法。对于食品图像识别问题,近年来,深度神经网络已经达到了最先进的水平,我们介绍了我们在这一领域的工作。特别是,我们首先使用一种称为 NutriNet 的深度神经网络架构来描述食品和饮料图像识别方法。与早期基于深度学习的食品图像识别所做的大多数研究一样,此方法仅限于每个图像的一个输出,因此不适合具有多个食品或饮料项目的图像。这就是为什么执行食物图像分割的方法要强大得多,因为它们能够识别图像中任意数量的食品或饮料项目。因此,我们还提出了两种食物图像分割方法 - 一种基于完全卷积网络 (FCN),另一种基于深残余网络 (ResNet)。

Introduction

饮食评估是确定个人饮食可操作区域的关键一步。然而,使用传统的手工方法进行饮食评估与相当大的成本相关。这些方法也容易出错,因为它们往往依赖于个人的自我报告。自动饮食评估通过提供更简单的方法来量化和验证食物摄入量来解决这些问题。这种方法还可以减轻手动方法中存在的一些错误,例如误餐、无法准确评估食物量等。因此,通过开发解决方案,识别不同的食物和饮料,并量化食物摄入量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 接受 512x512 像素图像作为输入(与 AlexNet 的 256x256 像素图像相反),而 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的发展。

Protocol

1. 食品图像识别与营养网

  1. 获取食品图像数据集
    1. 收集不同的食品和饮料列表,这些食品和饮料将是食品图像识别模型的输出。受欢迎的食品和饮料列表是首选,因为这将使培训一个强大的食品形象识别模型。
    2. 将食品和饮料列表保存在文本文件中(例如,"txt"或"csv")。
      注:本文作者使用的文本文件可以在补充文件("food_items.txt")中找到,并包括 520 个斯洛文尼亚食品的列表。
    3. 编写或下载 Python43 脚本,该脚本使用 Google 自定义搜索 API44 从列表中下载每个食品项目的图像,并将它们保存到每个食品项目的单独文件夹中。
      注:本文作者使用的 Python 脚本可以在补充文件("download_images.py")中找到。如果使用此脚本,则需要将开发人员密钥(可变的"开发人员键"、Python 脚本代码中的行 8)和自定义搜索引擎 ID(可变"cx",Python 脚本代码中的行 28)替换为正在使用的 Google 帐户所使用的值。
    4. 从步骤 1.1.3 运行 Python 脚本(例如,使用命令:"蟒蛇download_images.py")。
  2. (可选)清洁食品图像数据集
    1. 以与第 1.4 节相同的方式训练食品图像检测模型,但仅使用两个输出(食品、非食品)与步骤 1.1.1 的输出列表除外。
      注:本文作者使用食谱网站和 ImageNet 数据集45 组合的图像来培训食品图像检测模型。由于这里的重点是食品图像识别,这是清洁识别数据集的可选步骤,则省略了更多详细信息。相反,有关这种方法的更多细节可以在梅兹盖克等人身上找到。
    2. 在食品图像数据集上从步骤 1.2.1 运行检测模型,这是步骤 1.1.4 的结果。
    3. 从第 1.2.1 步删除被检测模型标记为非食品的每个图像。
    4. 手动检查食品图像数据集,以查看其他错误或低质量的图像,以及图像重复。
    5. 删除步骤 1.2.4 中找到的图像。
  3. 增强食品图像数据集
    1. 使用 CLoDSA 库46( 包含的 Python 脚本中的行 19 到 21)将其旋转 90°,从而从食品图像数据集创建每个图像的新版本。
      注:包含本文作者使用的所有 CLoDSA 命令的 Python 脚本可以在补充文件中包含的文件中找到("nutrinet_augmentation.py")。如果使用此脚本,则需要将输入路径(可变"INPUT_PATH"、Python 脚本代码中的行 8 和输出路径(可变"OUTPUT_PATH",Python 脚本代码中的行 11)替换为所需文件夹的路径。
    2. 使用 CLoDSA 库(包含的 Python 脚本中的行 19 到 21)将其旋转 180°,从而从食品图像数据集创建每个图像的新版本。
    3. 使用 CLoDSA 库(包含的 Python 脚本中的行 19 到 21)将其旋转 270°,从而从食品图像数据集创建每个图像的新版本。
    4. 使用 CLoDSA 库水平翻转每个图像(包括 Python 脚本中的行 23 和 24)创建每个图像的新版本。
    5. 使用 CLoDSA 库(包含的 Python 脚本中的行 26 和 27)向其添加随机颜色噪声,从食品图像数据集创建每个图像的新版本。
    6. 使用 CLoDSA 库(包含的 Python 脚本中的 29 行和 30 行)将其放大 25%,从而从食品图像数据集创建每个图像的新版本。
    7. 将图像从步骤 1.3.1-1.3.6 以及原始图像(包括 Python 脚本中的 16 行和 17 行)保存到新的食品图像数据集(每个食品图像总共 7 个变种)。这是通过执行包含的 Python 脚本第 32 行中的命令来完成的。
  4. 执行食物图像识别
    1. 将食品图像数据集从步骤 1.3.7 导入 NVIDIA DIGITS 环境47,将数据集划分为 NVIDIA DIGITS 用户界面中的培训、验证和测试子集。
    2. 将 NutriNet 架构2 的定义文本复制并粘贴到 NVIDIA 数字中,作为自定义网络。
      注:NutriNet 架构定义文本可在补充文件中找到("营养素.原件")。
    3. (可选)在 NVIDIA 数字用户界面中定义训练超参数。
      注:超参数是用于在培训开始前定义培训过程的参数。本文作者使用的超参数可以在补充文件中包含的文件中找到("nutrinet_hyperparameters.protoxt")。虽然每个数据集都需要进行实验才能找到最佳的超参数计,但该文件包含一个超参数配置,可复制到 NVIDIA DIGITS 用户界面中。此外,NVIDIA 数字以可用作基线的默认值填充超参数。因此,此步骤是可选的。
    4. 运行 NutriNet 模型的培训。
    5. 培训完成后,采取性能最好的 NutriNet 模型迭代。然后,此模型用于测试此方法的性能。
      注意:有多种方法可以确定性能最佳的模型迭代。这样做的简单方法如下。NVIDIA 数字输出每个训练时代的准确度测量图。检查哪个时代实现了食品图像数据集验证子集的最低损失值 - 该模型迭代可被视为性能最佳。确定最佳性能模型迭代的一个可选步骤是观察训练子集的损失值如何从时代到时代变化,如果在验证子集的损失值保持不变或持续上升时开始持续下降,请在训练损失值下降之前拍摄这一时代,因为当模型开始过度适应训练图像时,这可以表示。

2. 食品图像与FCN的分割

  1. 获取假食品图像数据集
    1. 获取假食品图像的数据集。假食物图像由使用食物复制品进行行为研究的研究人员收集。
      注:本文作者收到了在实验室环境中收集的假食品图像18。
    2. 手动注释像素级别上的每个食物图像 - 图像中的每个像素必须包含有关它属于哪个食物类别的信息。此步骤的结果是食物图像数据集中每个图像的一个注释图像,其中每个像素表示一个食物类别。
      注:有许多工具来实现这一点 - 本文的作者使用 JavaScript 段注释器48
  2. 增强假食品图像数据集
    1. 执行与第 1.3 节相同的步骤,但仅在食品图像数据集培训子集的图像上执行。
      注:除第1.3.5步外,所有数据增强步骤也需要在相应的注释图像上执行。如果使用第 1.3 节的脚本,则需要将输入路径(可变的"INPUT_PATH"、Python43 脚本代码中的行 8 和输出路径(Python 脚本代码中的可变"OUTPUT_PATH",Python 脚本代码中的行 11)替换为所需文件夹的路径。此外,将问题(可变"问题",Python 脚本代码中的行 6)设置为"instance_segmentation"和注释模式(可变"ANNOTATION_MODE",Python 脚本代码中的行 7)和输出模式(可变"OUTPUT_MODE",Python 脚本代码中的行 10)设置为"coco"。
  3. 执行假食品图像分割
    1. 执行与第 1.4 节相同的步骤,但步骤 1.4.2 除外。代替该步骤,执行步骤 2.3.2 和 2.3.3。
      注:超参数是用于在培训开始前定义培训过程的参数。本文作者用于可选步骤 1.4.3 的训练超参数可以在补充文件中包含的文件中找到("fcn-8s_hyperparameters.protoxt")。虽然每个数据集都需要进行实验才能找到最佳的超参数集,但该文件包含一个超参数配置,可以复制到 NVIDIA DIGITS47 用户界面中。此外,NVIDIA 数字以可用作基线的默认值填充超参数。
    2. 将 FCN-8s 架构15 的定义文本复制并粘贴到 NVIDIA 数字环境中,作为自定义网络。
      注:FCN-8s 架构定义文本可在 GitHub49上公开提供。
    3. 将预培训的 FCN-8s 模型权重输入 NVIDIA 数字用户界面。
      注:这些模型重量是在PASCAL VOC数据集17上预先训练的,可以在互联网上找到49。

3. 食品图像细分与 HTC ResNet

  1. 获取食品图像数据集
    1. 从 FRC 网站19下载食品图像数据集。
  2. 增强食品图像数据集
    1. 执行步骤 1.3.1-1.3.4。
      注:包含本文作者使用的所有 CLoDSA46命令的 Python43脚本可以在补充文件中包含的文件中找到("frc_augmentation.py")。如果使用此脚本,则需要将输入路径(可变"INPUT_PATH"、Python 脚本代码中的行 8 和输出路径(可变"OUTPUT_PATH",Python 脚本代码中的行 11)替换为所需文件夹的路径。
    2. 使用 CLoDSA 库(包含的 Python 脚本中的行 26 和 27)将高斯模糊添加到其中,从食品图像数据集创建每个图像的新版本。
    3. 使用 CLoDSA 库(包含的 Python 脚本中的行 29 和 30)锐化每个图像的新版本。
    4. 使用 CLoDSA 库(包含的 Python 脚本中的行 32 和 33)对每个图像进行伽马校正,从而从食品图像数据集创建每个图像的新版本。
    5. 将图像从步骤 3.2.1-3.2.4 以及原始图像(包括 Python 脚本中的 16 行和 17 行)保存到新的食品图像数据集(每个食品图像总共 8 个变种)。这是通过执行包含的 Python 脚本第 35 行中的命令来完成的。
    6. 将图像从步骤 3.2.2-3.2.4 以及原始图像(包括 Python 脚本中的 16 行和 17 行)保存到新的食品图像数据集(每个食品图像总共 4 个变种)。这是通过删除包含的 Python 脚本的行 19 到 24 以及在 35 行中执行命令来完成的。
  3. 执行食物图像分割
    1. 修改现有的 HTC20 ResNet-101 架构16 定义,从 MMDetection 库50 中修改架构定义文件的"模型设置"和"数据集设置"部分,以便接受步骤 3.1.1、3.2.5 和 3.2.6 中的食品图像数据集。
    2. (可选)从步骤 3.3.1 修改 HTC ResNet-101 架构定义,以定义培训超参数:部分"数据集设置"中的批次大小、"优化器"中的解答器类型和学习速率、"学习策略"部分中的学习策略以及架构定义文件部分"运行时间设置"中的培训时间数。
      注:修改后的 HTC ResNet-101 架构定义文件可在补充文件中找到("htc_resnet-101.py")。超参数是用于在培训开始前定义培训过程的参数。虽然每个数据集都需要进行实验才能找到最佳的超参数集,但该文件已经包含一个超参数配置,无需修改即可使用。因此,此步骤是可选的。
    3. 使用 MMDetection 库(例如,使用命令:'巨蛇 mmdetection/工具/训练.py htc_resnet-101.py)从步骤 3.1.1 开始,在食品图像数据集上运行 HTC ResNet-101 模型的培训。
    4. 从步骤 3.3.3 完成培训后,采取性能最好的 HTC ResNet-101 模型迭代,并从步骤 3.2.5 开始对食品图像数据集进行下一阶段培训,对模型进行微调。
      注意:有多种方法可以确定性能最佳的模型迭代。这样做的简单方法如下。MMDetection 库输出指挥线接口中每个训练时代的准确度量值。检查哪个时代实现了食品图像数据集验证子集的最低损失值 - 该模型迭代可被视为性能最佳。确定最佳性能模型迭代的一个可选步骤是观察训练子集的损失值如何从时代到时代变化,如果在验证子集的损失值保持不变或持续上升时开始持续下降,请在训练损失值下降之前拍摄这一时代,因为当模型开始过度适应训练图像时,这可以表示。
    5. 从步骤 3.3.4 完成培训后,采取性能最好的 HTC ResNet-101 模型迭代,并从步骤 3.2.6 开始对食品图像数据集进行下一阶段的培训,对模型进行微调。
      注:请参阅步骤 3.3.4 的注释。
    6. 从步骤 3.3.5 完成培训后,采取性能最好的 HTC ResNet-101 模型迭代并重新调整它,从步骤 3.2.5 再次运行食品图像数据集的下一阶段培训。
      注:请参阅步骤 3.3.4 的注释。
    7. 从步骤3.3.6完成培训后,采取性能最好的HTC ResNet-101模型迭代。然后,此模型用于测试此方法的性能。
      注:请参阅步骤 3.3.4 的注释。步骤 3.3.3-3.3.7 为本文作者定义的目的产生了最佳结果。每个数据集都需要进行实验,以找到培训和数据增强步骤的最佳顺序。

Representative Results

NutriNet 测试了当时流行的三种深度学习架构:亚历克斯网14、古格莱网51和 ResNet16。还对所有架构测试了多个训练参数,以确定最佳值2。其中包括解算器类型的选择,它决定了如何最大限度地减少损失功能。此功能是培训神经网络的主要质量指标,因为它更适合在培训期间进行优化,而不是分类精度。我们测试了三个解答器:随机梯度下降 (SGD)52,涅斯特罗夫的加速梯度 (NAG)53和自适应梯度算法 (AdaGrad)54。第二个参数是批次大小,它定义同时处理的图像数量。深度学习架构的深度决定了这一参数的价值,因为深层结构在 GPU 内存中需要更多的空间 - 此方法的后果是,无论深度如何,所有架构的内存都完全充满了图像。第三个参数是学习速率,它定义了训练期间神经网络参数的改变速度。此参数与批次大小一致设置,因为并发处理的图像数量决定了收敛速率。AlexNet 模型采用 256 张图像的批量大小和 0.02 的基本学习速率进行培训:NutriNet 使用了 128 张图像的批次大小和 0.01 的速率:古格莱网 64 张图片,速率 0.005:和 ResNet 16 图像和 0.00125 速率。为所有架构修复了另外三个参数:学习速率策略(逐步降低)、步幅(30%)和伽玛(0.1)。这些参数共同描述了每个时代的学习率是如何变化的。这种方法背后的理念是,学习速率正在逐渐降低,以微调模型,使其更接近最佳损失值。最后,所有深度学习架构2的训练时代也固定在150个。

在 NutriNet 测试的所有参数中,最好的结果是识别数据集的分类精度为 86.72%,比 AlexNet 的最佳结果高出 2% 左右,略高于 GoogLeNet 的最佳结果。整体表现最好的架构是 ResNet(约 1%),但与 NutriNet 相比,ResNet 的训练时间要高得多(大约 5 倍),如果模型不断重新训练以提高准确性和可识别食品的数量,这一点很重要。NutriNet、亚历克斯网和古格莱网使用AdaGrad解求器取得了最佳效果,而瑞斯网的最佳型号使用了NAG解解器。NutriNet 还在公开的 UNIMIB2016 食品图像数据集38上进行了测试。此数据集包含 73 种不同食品的 3,616 张图像。NutriNet 在此数据集上实现了 86.39% 的识别精度,略高于数据集作者的基线识别结果,即 85.80%。此外,NutriNet 在 115 种不同食品和饮料项目的 200 张真实图像的小型数据集上进行了测试,其中 NutriNet 获得了 55% 的前 5 个精度。

为了训练 FCN-8s 假食品图像分割模型,我们使用 Adam55 作为解解器类型,因为我们发现它为此任务执行得最佳。基础学习率设置非常低 - 到 0.0001。数字低的原因是一次只能处理一个图像,这是像素级分类过程的结果。此方法的 GPU 内存要求明显大于图像级别分类。因此,必须把学习速率定得很低,这样参数就不会变化太快,并趋同到最优值。培训时间设置为 100,而学习速率策略、步数大小和伽马设置为步进,分别为 34% 和 0.1,因为这些参数生成了最准确的模型。

FCN-8s模型的精度测量采用像素精度度测量15,类似于传统深度学习网络的分类精度,主要区别在于精度是在像素水平上计算的,而不是在图像水平上计算的:

Equation 1

其中PA是像素精度度,nij是我预测属于类jt i=Σ j nij是从类在地面真相标签1的像素总数。换句话说,像素精度测量是通过将正确预测的像素除以像素总数来计算的。训练有素的FCN-8s模型的最终准确率为92.18%。图 2显示了来自假食品图像数据集的三个示例图像(每个培训、验证和测试子集各一个),以及相应的地面真相和模型预测标签。

用于食品图像分割的 HTC20 ResNet-101 模型的培训参数设置如下:使用的解压器类型为 SGD,因为它优于其他解压器类型。基础学习速率设置为 0.00125,批次大小设置为 2 个图像。每个训练阶段的训练时间设置为 40 个,并执行多个训练阶段 - 首先在原始 FRC 数据集上,没有增强图像,然后在 8 倍增强和 4 倍增强的 FRC 数据集上多次交替进行,每次采取性能最佳的模型,并在下一个训练阶段进行微调。有关培训阶段的更多详细信息,请见协议文本第 3.3 节。最后,采用了逐步下降的学习政策,为学习率下降规定了固定时间(第一个培训阶段为28和35)。需要注意的一点是,虽然这一系列培训阶段在 FRC 范围内的测试中取得了最佳结果,但使用另一个数据集可能需要不同的序列才能产生最佳结果。

此基于 ResNet 的食品图像分割解决方案使用以下精度测量19进行评估:

Equation 2

P 精度方面 ,TP 是食品图像分割模型中真实正预测的数量 ,FP 是误报预测的数量 ,IoU 是"联盟"的交集,该等式与此方程计算:

Equation 3

重叠区域表示模型与地面真实性重叠的预测数量,而联盟区域表示模型的预测总数以及地面真实性,无论是像素级别还是每个食物类别。召回用作次要测量,使用以下公式19以类似方式计算:

Equation 4

其中R是召回和FN是由食品图像分割模型的虚假负面预测的数量。然后,在地面真相中,所有类别的精度和召回措施均为平均值。使用这些措施,我们的模型平均精度达到59.2%,平均召回82.1%,在食品识别挑战赛第二轮19中排名第二。这一结果比第一名落后4.2%,在平均精度测量方面领先第三名5.3%。表 1包含竞赛前 4 名参赛者的结果。

Figure 1
1:NutriNet深度神经网络架构图。 这个数字已经发表在《梅兹盖克等人》请点击这里查看此数字的较大版本。

Figure 2
2:来自假食品图像数据集的图像。 原始图像(左)、手动标记的地面真相标签(中)和FCN-8s模型的预测(右)。这个数字已经发表在《梅兹盖克等人》请点击这里查看此数字的较大版本。

团队名称 位置 平均精度 平均召回
斯费特 1 63.4% 88.6%
simon_mezgec 2 59.2% 82.1%
阿里姆布尔 3 53.9% 73.5%
潜伏 4 48.7% 71.1%

表1:食品识别挑战赛第二轮的前4名成绩。 平均精度作为主要性能衡量标准,平均召回作为次要指标。比赛结果取自19日正式比赛排行榜。

补充文件。请点击这里下载此文件。

Discussion

近年来,深度神经网络已多次被验证为识别食物图像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,但还需要做进一步的工作来验证这种方法,从世界各地的食物图像和营养师合作。

Disclosures

作者没有什么可透露的。

Acknowledgments

作者要感谢澳大利亚纽卡斯尔大学的塔玛拉·布彻提供假食品图像数据集。这项工作得到了欧盟"地平线2020"研究与创新计划(赠款编号863059 -FNS-Cloud,769661-SAAM)的支持:和斯洛文尼亚研究机构(赠款编号P2-0098)。欧洲联盟和斯洛文尼亚研究机构在这篇文章的设计、分析或写作方面没有作用。

Materials

Name Company Catalog Number Comments
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 Google 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

DOWNLOAD MATERIALS LIST

References

  1. Mezgec, S., Eftimov, T., Bucher, T., Koroušić Seljak, B. Mixed Deep Learning and Natural Language Processing Method for Fake-Food Image Recognition and Standardization to Help Automated Dietary Assessment. Public Health Nutrition. 22 (7), 1193-1202 (2019).
  2. Mezgec, S., Koroušić Seljak, B. NutriNet: A Deep Learning Food and Drink Image Recognition System for Dietary Assessment. Nutrients. 9 (7), 657 (2017).
  3. Chen, M., et al. PFID: Pittsburgh Fast-Food Image Dataset. Proceedings of the ICIP 2009. , 289-292 (2009).
  4. Joutou, T., Yanai, K. A Food Image Recognition System with Multiple Kernel Learning. Proceedings of the ICIP 2009. , 285-288 (2009).
  5. Yang, S., Chen, M., Pomerlau, D., Sukthankar, R. Food Recognition using Statistics of Pairwise Local Features. Proceedings of the CVPR 2010. , 2249-2256 (2010).
  6. Anthimopoulos, M. M., Gianola, L., Scarnato, L., Diem, P., Mougiakakou, S. G. A Food Recognition System for Diabetic Patients Based on an Optimized Bag-of-Features Model. IEEE Journal of Biomedical and Health Informatics. 18 (4), 1261-1271 (2014).
  7. LeCun, Y., Bengio, Y., Hinton, G. Deep Learning. Nature. 521, 436-444 (2015).
  8. Deng, L., Yu, D. Deep Learning: Methods and Applications. Foundations and Trends in Signal Processing. 7 (3-4), 197 (2014).
  9. Hubel, D. H., Wiesel, T. N. Receptive Fields, Binocular Interaction and Functional Architecture in the Cat's Visual Cortex. The Journal of Physiology. 160 (1), 106-154 (1962).
  10. Singla, A., Yuan, L., Ebrahimi, T. Food/Non-Food Image Classification and Food Categorization using Pre-Trained GoogLeNet Model. Proceedings of the MADiMa'16. , 3-11 (2016).
  11. Yanai, K., Kawano, Y. Food Image Recognition using Deep Convolutional Network with Pre-Training and Fine-Tuning. Proceedings of the ICMEW 2015. , 1-6 (2015).
  12. Liu, C., et al. DeepFood: Deep Learning-Based Food Image Recognition for Computer-Aided Dietary Assessment. Proceedings of the ICOST 2016. , 37-48 (2016).
  13. De Sousa Ribeiro, F., et al. An End-to-End Deep Neural Architecture for Optical Character Verification and Recognition in Retail Food Packaging. Proceedings of the ICIP 2018. , 2376-2380 (2018).
  14. Krizhevsky, A., Sutskever, I., Hinton, G. ImageNet Classification with Deep Convolutional Neural Networks. Proceedings of the NIPS'12. , 1097-1105 (2012).
  15. Long, J., Shelhamer, E., Darrell, T. Fully Convolutional Networks for Semantic Segmentation. Proceedings of the CVPR 2015. , 3431-3440 (2015).
  16. He, K., Zhang, X., Ren, S., Sun, J. Deep Residual Learning for Image Recognition. Proceedings of the CVPR 2016. , 770-778 (2016).
  17. PASCAL VOC Project. PASCAL Visual Object Classes. , Available from: http://host.robots.ox.ac.uk/pascal/VOC (2020).
  18. Bucher, T., vander Horst, K., Siegrist, M. Fruit for Dessert. How People Compose Healthier Meals. Appetite. 60 (1), 74-80 (2013).
  19. Food Recognition Challenge. AICrowd. , Available from: https://www.aicrowd.com/challenges/food-recognition-challenge (2020).
  20. Chen, K., et al. Hybrid Task Cascade for Instance Segmentation. Proceedings of the CVPR 2019. , 4974-4983 (2019).
  21. Kawano, Y., Yanai, K. Food Image Recognition with Deep Convolutional Features. Proceedings of the UbiComp 2014. , 589-593 (2014).
  22. Matsuda, Y., Hoashi, H., Yanai, K. Recognition of Multiple-Food Images by Detecting Candidate Regions. Proceedings of the ICME 2012. , 25-30 (2012).
  23. Christodoulidis, S., Anthimopoulos, M. M., Mougiakakou, S. G. Food Recognition for Dietary Assessment using Deep Convolutional Neural Networks. Proceedings of the ICIAP 2015. , 458-465 (2015).
  24. Tanno, R., Okamoto, K., Yanai, K. DeepFoodCam: A DCNN-Based Real-Time Mobile Food Recognition System. Proceedings of the MADiMa'16. , 89-89 (2016).
  25. Liu, C., et al. A New Deep Learning-Based Food Recognition System for Dietary Assessment on An Edge Computing Service Infrastructure. IEEE Transactions on Services Computing. 11 (2), 249-261 (2017).
  26. Martinel, N., Foresti, G. L., Micheloni, C. Wide-Slice Residual Networks for Food Recognition. Proceedings of the IEEE WACV 2018. , 567-576 (2018).
  27. Bossard, L., Guillaumin, M., Van Gool, L. Food-101-Mining Discriminative Components with Random Forests. Proceedings of the ECCV'14. , 446-461 (2014).
  28. Zhou, L., Zhang, C., Liu, F., Qiu, Z., He, Y. Application of Deep Learning in Food: A Review. Comprehensive Reviews in Food Science and Food Safety. 18, 1793-1811 (2019).
  29. Zhao, H., Yap, K. -H., Kot, A. C., Duan, L. JDNet: A Joint-Learning Distilled Network for Mobile Visual Food Recognition. IEEE Journal of Selected Topics in Signal Processing. 14 (4), 665-675 (2020).
  30. Kawano, Y., Yanai, K. Automatic Expansion of a Food Image Dataset Leveraging Existing Categories with Domain Adaptation. Proceedings of the ECCV'14. , 3-17 (2014).
  31. Hafiz, R., Haque, M. R., Rakshit, A., Uddin, M. S. Image-Based Soft Drink Type Classification and Dietary Assessment System using Deep Convolutional Neural Network with Transfer Learning. Journal of King Saud University - Computer and Information Sciences. , (2020).
  32. Shimoda, W., Yanai, K. Weakly-Supervised Plate and Food Region Segmentation. Proceedings of the ICME 2020. , 1-6 (2020).
  33. Ciocca, G., Micali, G., Napoletano, P. State Recognition of Food Images using Deep Features. IEEE Access. 8, 32003-32017 (2020).
  34. Knez, S., Šajn, L. Food Object Recognition using a Mobile Device: Evaluation of Currently Implemented Systems. Trends in Food Science & Technology. 99, 460-471 (2020).
  35. Furtado, P., Caldeira, M., Martins, P. Human Visual System vs Convolution Neural Networks in Food Recognition Task: An Empirical Comparison. Computer Vision and Image Understanding. 191, 102878 (2020).
  36. Chen, M. -Y., et al. Automatic Chinese Food Identification and Quantity Estimation. SA'12 Technical Briefs. , 1-4 (2012).
  37. Chen, J., Ngo, C. -W. Deep-Based Ingredient Recognition for Cooking Recipe Retrieval. Proceedings of the MM'16. , 32-41 (2016).
  38. Ciocca, G., Napoletano, P., Schettini, R. Food Recognition: A New Dataset, Experiments, and Results. IEEE Journal of Biomedical and Health Informatics. 21 (3), 588-598 (2017).
  39. Salvador, A., et al. Learning Cross-Modal Embeddings for Cooking Recipes and Food Images. Proceedings of the IEEE CVPR 2017. , 3020-3028 (2017).
  40. Ciocca, G., Napoletano, P., Schettini, R. CNN-Based Features for Retrieval and Classification of Food Images. Computer Vision and Image Understanding. 176-177, 70-77 (2018).
  41. Cai, Q., Li, J., Li, H., Weng, Y. BTBUFood-60: Dataset for Object Detection in Food Field. Proceedings of the IEEE BigComp 2019. , 1-4 (2019).
  42. Min, W., et al. ISIA Food-500: A Dataset for Large-Scale Food Recognition via Stacked Global-Local Attention Network. Proceedings of the MM'20. , 393-401 (2020).
  43. Python Software Foundation. Python. , Available from: https://www.python.org (2020).
  44. Google Custom Search API. Google. , Available from: https://developers.google.com/resources/api-libraries/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html (2020).
  45. Stanford Vision Lab. ImageNet. , Available from: http://www.image-net.org (2020).
  46. Heras, J. CLoDSA. , Available from: https://github.com/joheras/CLoDSA (2020).
  47. NVIDIA DIGITS. NVIDIA. , Available from: https://developer.nvidia.com/digits (2020).
  48. Yamaguchi, K. JavaScript Segment Annotator. , Available from: https://github.com/kyamagu/js-segment-annotator (2020).
  49. Shelhamer, E. Fully Convolutional Networks for Semantic Segmentation. , Available from: https://github.com/shelhamer/fcn.berkeleyvision.org (2020).
  50. Multimedia Laboratory, CUHK. MMDetection. , Available from: https://github.com/open-mmlab/mmdetection (2020).
  51. Szegedy, C., et al. Going Deeper with Convolutions. Proceedings of the CVPR 2015. , 1-9 (2015).
  52. Bottou, L. Large-Scale Machine Learning with Stochastic Gradient Descent. Proceedings of the COMPSTAT'2010. , 177-186 (2010).
  53. Nesterov, Y. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k2). Doklady Akademii Nauk SSSR. 27, 372-376 (1983).
  54. Duchi, J., Hazan, E., Singer, Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research. 12, 2121-2159 (2011).
  55. Kingma, D. P., Ba, J. Adam: A Method for Stochastic Optimization. arXiv Preprint. , (2017).

Tags

工程,第169期,食品图像识别,食品图像分割,深度神经网络,深度学习,卷积神经网络,饮食评估
基于图像的饮食评估深度神经网络
Play Video
PDF DOI DOWNLOAD MATERIALS LIST

Cite this Article

Mezgec, S., KoroušićMore

Mezgec, S., Koroušić Seljak, B. Deep Neural Networks for Image-Based Dietary Assessment. J. Vis. Exp. (169), e61906, doi:10.3791/61906 (2021).

Less
Copy Citation Download Citation Reprints and Permissions
View Video

Get cutting-edge science videos from JoVE sent straight to your inbox every month.

Waiting X
Simple Hit Counter