出处:云栖社区
一直以来,横亘在减肥塑身的志士仁人面前的除了坚定的意志还有一道很难逾越的坎:每天的摄入热量怎么算?
对于统计每天步数和大致热量消耗的设备,我们有手环、watch、手机;但每天的热量摄入,怎么计算呢? 每次就餐带上纸、笔、记算器,不太现实. 用热量计算app,需要手动输入每样食品吃了多少克,没有厨房称的帮助下,对大多数人来说,要感知 50g 和 75g 的区别比较困难.
当 AI 作为一个形容词,几乎可以应用在任何领域的时候,减肥这个领域,似乎还没有被充分开垦.
iDST 数据实验室的算法同学,正致力于做一个小小的改变:
帮助用户,通过拍一张照片,识别照片里包含的食材和对应的营养成份;通过选择对应的份量,还可以算出大致热量.
到目前为止,已实现对大部分常见的食物:中餐各式菜肴、面点、水果、饮料的识别,覆盖了几千种南北食材. 目前,该模型已经上线内测,我们也会努力尝试成为减肥界的一股清流.
让手机镜头,识别面前的每一种食物,输出它们的营养、热量和做法,我们是怎么做的?
一. 数据收集和处理:
首先是大量的数据收集和知识库的建设.
我们通过各类网站:搜索引擎、点评和外卖、淘宝商品和用户评价、获取了几千万张食物相关的图片.
根据解析到的实体标签以及映射到后台的知识库,把所有的图片分成对应为后台食材的3000个左右的叶子类. 从实拍集和训练效果的角度,保证每一个叶子类有至少2000张以上的训练数据.
二. 训练框架和方法:
食材识别的难点在哪里?
与通常的图像分类算法相比,通过拍照识别食材并估算热量是一个异常艰巨的任务. 因为烹调食品是一个复杂且漫长的过程,期间各种食材会经历多种物理和化学甚至生物变化.
例如,刀工会使得食材发生物理变化. 即使是标准的刀工,也会将原先的食材加工为片、丁、丝、条、茸、段、麦穗型、梳子型、菊花形、米状、末等完全不同的形状. 即便是同样的片状,还会细分为指甲片、柳叶片、月牙片、骨牌片、象眼片、马牙片、秋叶片等不同的模样. 形状的多变无疑增加了识别的难度.
烹饪中的化学反应进一步增加了识别的难度. 例如,随着烹饪过程中化学反应的发生,食材的颜色通常会发生变化,有些食材的颜色会与烹饪之前有很大的反差.
有些食材例如蛋白质会从液态变为固态,有些水溶性的食材会从固态变为液态. 涉及到发酵等生物反应的烹饪过程时,食材会进一步变的面目全非.
在实际的识别过程中,有些食材只露出小小的一角,而有些菜,如水煮鱼,看到的是上面的鱼片,用户会希望模型还有对应的知识,即鱼片的下面,其实铺满了豆芽.
由此,食材的识别和通常的图片识别和分类算法相比,有更多的困难.
我们的方法:
针对食材识别的问题,我们的方法是:使用深度学习的方法,将黑盒的神经网络与白盒的烹饪领域知识结合起来,同时确保训练数据的数量和质量.
我们综合评估了:GoogleNet, AlexNet, VGG, GoogleNet+BatchNorm 以及 Caffe 和 TensorFlow,从Top5 ACC (输出的前5个结果的准确率)的角度,上述框架没有存在显著的差异性. 目前我们采用的是 Caffe 以及 GoogleNet 和 ImageNet,更多的是从工程的可伸缩性,支持并发部署的角度来考虑的.
三. 挑战和业界评测
在饮食领域的图像识别和分类上面,业内一直有关注和研究,比如下面的 paper:
- Deep Learning Based Food Recognition
- DeepFood: Deep Learning-based Food Image Recognition for Computer-aided Dietary Assessment
- ChineseFoodNet: A large-scale Image Dataset for Chinese Food Recognition
- NutriNet: A Deep Learning Food and Drink Image Recognition System for Dietary Assessment
- ChinFood1000: A Large Benchmark Dataset for Chinese Food Recognition
- Learning Cross-modal Embeddings for Cooking Recipes and Food Images
对上述 paper 中的方法进行比较,基本上是基于AlexNet,Vgg,Gnet,ResNet,今年CVPR的 DenseNet做修改,细节有差异.
从数据集和分类目标两个层面,在启动之初,我们就站在比目前业界更高的起点上.
上面是几个用于做公开测评的通用数据集的数据情况,我们可以看到上述通用测试集的分类较少,每一个分类的样本数量相对均匀. 从千万级的数据规模和过千的分类数量上看, 我们的数据规模是比较庞大的.
从分类目标上,我们首先识别食材(而非菜名),进而解析出营养成分和热量,从场景上能够较完整地反映用户健康和饮食习惯. 从食材的数量和烹饪方式上看,中餐的识别相较于西餐要困难,识别食材又比菜名更困难.
识别效果评测,目前业内的最好成绩是:
数据集名称 | 分类数量 | 数据集大小 | 准确率 | 备注 |
---|---|---|---|---|
Food-101 | 101 | 101,000 | 88.28% | 基于GoogleNet |
UEC FOOD 100 | 100 | 9,060 | 81.45% | 日餐为主 |
UEC FOOD 256 | 256 | 31,397 | 76.17% | 基于GoogleNet |
UNIMIB 2016 | 65 | 3616 | 86.39% | 基于AlexNet |
Paper作者自有集 | 520 | 220,000 | 86.72% | |
Paper作者实拍集 | 520 | 200 | 55% |
从目前结果上看,我们的效果远远领先于MIT的CSAIL和业内在食物(中餐)上识别能力.
四. 拍食物有什么用
对大家日常饮食有什么用?
当食物的营养和热量识别,简化成只需要轻点拍摄这一步之后,我们可以帮助用户记录日常的饮食摄入.
有了日常记录以后,可以从膳食结构角度,帮助用户分析摄入的营养和食材的均衡情况,基于中国居民膳食指南,同时参考美国、日本等居民膳食指南,给出饮食建议. 这就是营养师口中的 “营养干预”,帮助减肥、增脂、增肌都是这个范畴.
You are what you eat,人的健康除了先天、环境因素之外,最大的影响因子就是饮食习惯.
从模型训练和算法的角度,当学会识别食材以后,后续将学会识别菜谱名称,从而告诉你做法,以及,从千万个淘宝和天猫商品中,根据菜谱为你选出:主料、辅料、佐料.
从此以后,正确的美食打开方式应该是:
输入菜肴名称,看完菜谱做法以后,根据算法为你准备好的:主料、辅料、佐料,轻触点击,一键加入购物车. 等着食材送上门以后一显身手吧.
切换成线下,到菜市场买菜也没问题,打开手机,拍一拍面前的生鲜食材,它叫什么,营养元素和热量,有哪些做法,可以搭配哪些食材一起烹饪,即时为你呈现.
作为iDST图像识别能力的输出,拍美食是“万物识别”项目的一部分,目标是致力于让AI使我们的生活越来越美好.