由于与人工饮食评估方法相关的问题和成本,需要自动化解决方案来缓解和加快工作速度并提高工作质量。如今,自动化解决方案能够以更简单的方式记录一个人的饮食摄入量,例如使用智能手机摄像头拍摄图像。在本文中,我们将重点介绍使用深度神经网络进行饮食评估的这种基于图像的方法,这些网络代表了该领域的先进水平。
特别是,我们将提出三种解决方案,一种用于食品图像识别,一种用于食品复制品的图像分割,或假食品,一种用于真实食品的图像分割。收集不同的食品和饮料列表,这些食品和饮料将是食品图像识别模型的输出。将食品和饮料列表保存在文本文件中,如 TXT 或 CSV。
请注意,本文作者使用的文本文件可以在食品点 TXT 下的补充文件中找到,并包括 520 个斯洛文尼亚食品项目列表。编写或下载 Python 脚本,该脚本使用 Google 自定义搜索 API 从列表中下载每个食品项目的图像,并将它们保存到每个食品项目的单独文件夹中。请注意,本文作者使用的 Python 脚本可以在下载图像点 pi 下的补充文件中找到。
如果使用此脚本,则 Python 脚本代码中的开发人员密钥可变开发人员密钥行 8 和 Python 脚本代码中的自定义搜索引擎 ID 可变 CX 行 28 中需要替换为 Google 帐户所使用的特定值。从步骤 1.1.3 运行 Python 脚本。使用 CLoDSA 库,通过旋转 90 度,从食品图像数据集创建每个图像的新版本。
请注意,包含本文作者使用的所有 CLoDSA 命令的 Python 脚本可以在 NutriNet 下的补充文件中包含的文件中找到,该文件强调增强点 pi。使用 CLoDSA 库,通过旋转 180 度,从食品图像数据集创建每个图像的新版本。使用 CLoDSA 库,通过旋转 270 度,从食品图像数据集创建每个图像的新版本。
使用 CLoDSA 库水平翻转,从食品图像数据集创建每个图像的新版本。使用 CLoDSA 库,通过向食品图像数据集添加随机颜色噪声,创建每个图像的新版本。通过使用 CLoDSA 库放大 25%的食品图像数据集,创建每个图像的新版本。
将图像从步骤 1.3.1 保存到 1.3.6,并将原始图像保存到新的食品图像数据集中。每个食物图像总共有七个变种。将食品图像集从步骤 1.3.7 导入 NVIDI 数字环境,将数据集划分为培训、验证和测试子集。
将 NutriNet 架构的定义文本复制并粘贴到 NVIDIA 数字中。请注意,NutriNet 架构定义可以在 NutriNet 点原 TXT 下的补充文件中找到。可选地,在 NVIDIA 数字中定义训练超参数或使用默认值。
本文作者使用的超参数可以在 NutriNet 下的补充文件中包含的文件中找到,该文件强调超参数点原 TXT。运行 NutriNet 模型的培训。培训完成后,采取性能最好的NutriNet模型迭代。
然后,此模型用于测试此方法的性能。请注意,有多种方法可以确定性能最佳的模型迭代。有关详细信息,请参阅文章文本。
获取一组假食品图像。请注意,本文的作者收到了在实验室环境中收集的假食品图像。手动注释像素级别上的每一个食物图像。
图像中的每个像素必须包含有关它属于哪个食物类别的信息。请注意,有许多工具可以实现此目的。本文作者使用 JavaScript 段注释器。
此步骤的结果是食物图像数据集中每个图像的一个注释图像,其中每个像素表示一个食物类别。执行与第 1.3 节相同的步骤,但仅在食品图像数据集培训子集的图像上执行。请注意,除步骤 1.3.5 外,所有数据增强步骤也需要在相应的注释图像上执行。
执行与第 1.4 节相同的步骤,但步骤 1.4.2 除外。代替该步骤执行步骤 2.3.2 和 2.3.3。请注意,本文作者使用的训练超参数可以在 FCN-8S 下的补充文件中找到超参数点原 TXT。
复制并将 FCN-8S 架构的定义文本复制并粘贴到 NVIDIA 数字中。将预先训练的 FCN-8S 模型重量输入 NVIDIA 数字。请注意,这些模型权重是在 Pascal 视觉对象类数据集上预先训练的,可以在互联网上找到。
从食品识别挑战网站下载食品图像数据集。执行步骤 1.3.1 到 1.3.4。请注意,包含本文作者使用的所有 CLoDSA 命令的 Python 脚本可以在 FRC 下的补充文件中找到,强调增强点 pi。
使用 CLoDSA 库,通过在食物图像数据集中添加高斯模糊来创建每个图像的新版本。使用 CLoDSA 库,通过锐化食品图像数据集创建每个图像的新版本。使用 CLoDSA 库对食品图像数据集应用伽马校正,创建每个图像的新版本。
将图像从步骤 3.2.1 保存到 3.2.4,并将原始图像保存到新的食品图像数据集中。每个食物图像总共有八个变种。将图像从步骤 3.2.2 保存到 3.2.4,并将原始图像保存到新的食品图像数据集中。
每个食物图像总共有四个变种。从 MM 检测库修改现有的 HTC ResNet 101 架构定义,以便接受步骤 3.1.1、3.2.5 和 3.2.6 的食品图像数据集。可选地,从步骤 3.3.1 修改 HTC ResNet 101 架构定义,以定义训练超参数或使用默认值。
请注意,修改后的 HTC ResNet 101 架构定义可以在 HTC 下划线 ResNet 101 点 pi 下的补充文件中找到。使用 MM 检测库从步骤 3.1.1 开始,在食品图像数据集上运行 HTC ResNet 101 模型的培训。从步骤 3.3.3 完成培训后,采取性能最好的 HTC ResNet 101 模型迭代,并通过运行从步骤 3.2.5 对食品图像数据集的下一阶段培训来微调它。
请注意,有多种方法可以确定性能最佳的模型迭代。有关详细信息,请参阅文章文本。这对于下一步也是相关的。
从步骤 3.3.4 完成培训后,采取性能最好的 HTC ResNet 101 模型迭代,并通过运行第 3.2.6 步的食品图像数据集的下一阶段培训来微调它。从步骤 3.3.5 完成培训后,采取性能最好的 HTC ResNet 101 模型迭代并微调它,从步骤 3.2.5 再次运行食品图像数据集的下一阶段培训。从步骤3.3.6完成培训后,采取性能最好的HTC ResNet 101模型迭代。
然后,此模型用于测试此方法的性能。请注意,步骤 3.3.3 到 3.3.7 为本文作者定义的目的产生了最佳结果。每个数据集都需要进行实验,以找到培训和数据增强步骤的最佳顺序。
在测试趋势模型 NutriNet 后,识别数据集的分类精度达到 86.72%,比 AlexNet 高 2% 左右,略高于 GoogLeNet,后者是当时流行的深度神经网络架构。为了测量FCN-8S假食品图像分割模型的准确性,使用了像素精度测量。训练有素的FCN-8S模型的精度为92.18%,基于 ResNet 的食品图像分割解决方案是使用食品识别挑战赛中定义的精确度量来评估的。
使用此测量,列车模型的平均精度达到 59.2%,在食品识别挑战赛中排名第二。近年来,深度神经网络多次被验证为识别食物图像的合适解决方案。本文中介绍的我们工作进一步证明了这一点。
单输出食品图像识别方法简单明了,可用于简单应用。虽然食物图像分割方法需要更多的工作来准备注释图像,但它更适用于现实世界的图像。今后,我们的目标将是进一步评估现实世界图像的开发程序。
向现实世界验证迈出的第一步是由粮食识别挑战提供的,其中包括一组真实世界的粮食图像。但是,还需要做进一步的工作来验证这种方法,从世界各地的食物图像和与营养师合作。