食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理
根据 Facebook 的统计,Instgram 上的美食图片数量已经超过 3 亿张。然而,获取食物烹饪方法的途径依然有限,例如,通过烹饪网站或相关教程。怎样能够挖掘丰富食物图片背后的烹饪方法,让每个人都可以在家方便地学习新菜式呢?
Facebook 研究团队最近在 CVPR 2019 发表论文,提出了一种新思路。用户可以输入食物图片,并获得对应的食材和制作方法。在用户实验上的结果说明,用这种方法烹饪食物的成功率,比传统检索方法成功率更高。
看美食图片就能知道食谱?这个 AI 比美食家还灵么?
喜欢研究吃的人经常会在看到美味食物甚至食物图片时垂涎不已,甚至千方百计想弄明白怎么才能做出这道美食。
最近,Facebook 提出了一种 AI 方法,能够根据美食图片直接生成食谱!天啊,简直满足了天下爱吃且爱做饭的人的心愿啊~
这张图片中左侧为原图;右侧显示了食物名称、原料,甚至还有操作说明。有了这个 AI,只需要有美食图,就可以准备做饭,不用再费力查找食谱啦~
目前,Facebook 已经把这个项目开源了:
GitHub 地址:https://github.com/facebookresearch/inversecooking
reddit 用户 JonathanFly 将该项目做成了一个 Colab demo,参见:
https://gist.github.com/JonathanFly/33946a08080041e90e8360b25e263a4e#file-facebook-cooking-demo-ipynb
还用非食物的图片进行了尝试,结果令人捧腹。
比如,如果你使用皮卡丘的图片,这个系统会告诉你「皮卡丘的食谱」:
「皮卡丘」竟然被认成了万圣节幽灵饼干!原来皮卡丘是烤制而成的~
从图像到食谱,如何实现?
从图片中生成食谱需要同时理解组成食材和制作的过程(如切片、和其他材料搅拌等)。传统方法将这个问题视为检索任务,基于输入图片和数据集图片的相似度计算,将食谱从一个固定的数据集中检索出来。很明显,传统方法在数据集缺少某种食物制作方法的情况下就会失败。
有一种方法可以克服这一数据局限,即将图片到菜谱的问题视为一个条件生成任务。研究人员认为,与其直接从图片中获取菜谱,不如首先预测食物的材料,然后基于图像和食材生成食物制作方法。这样可以利用图片和食材的中间过程获取一些额外信息。
模型
模型主要由两部分构成,首先研究人员预训练一个图片编码器和一个食材解码器(ingredients decoder),提取输入图像的视觉特征来预测食材。然后训练一个食材编码器(ingredient encoder)和烹饪流程解码器(instruction decoder),根据输入图片的图像特征和已经预测到的食材,生成食物的名称和烹饪流程。
模型架构如下图所示:
图 2:模型的结构。模型的输入是食物图片,输出的是烹饪方法序列,而中间一步是基于图像生成食材清单。
具体来讲,烹饪流程解码器使用了三种不同的注意力策略:
图 3:烹饪流程解码器使用的注意力策略。Transformer 模型(a)中的注意力模块被替换成了三种不同的注意力模块(b-d),用于多种条件下的烹饪说明。
效果如何?
研究人员使用 Recipe1M [45] 数据集来训练和评估模型。该数据集包括从烹饪网站上爬取的 1,029,720 个食谱。在实验中,研究者仅使用了包含图片的食谱,并移除了使用少于两种食材或两道流程的食物。最终,实验使用了 252,547 个训练样本、54,255 个验证样本和 54,506 个测试样本。
研究人员对比了传统的检索方法和该研究提出的新方法,结果如下:
表 3:基线方法和论文方法的对比。左图为 IoU 和 F1 分数,右图为食材在烹饪指南上的精确率和召回率。
研究人员还进行了用户测试。他们从测试集中随机选择了 15 张图片,让用户根据提供的图片选择 20 种食材,并写下可能图片对应的菜谱。为了减少人类任务的复杂度,研究人员提高食材使用频率的阈值,减少了食材的选择数量。
表 4:用户测试。左图为基线方法、人类和论文方法判断食材的 IoU 和 F1 分数,右图为根据人类判断,这三种方法生成食谱的成功率。
实验结果说明,使用 AI 生成的食谱比检索方法生成的食谱效果更好。
这样的研究只是造福吃货吗?
这项研究通过对食物图片的研究,可以进一步猜测其食材和加工方式。这可以进一步方便人们学习新的食物制作、协助计算食物中每种成分的卡路里、创造新的菜谱。同时,该研究采用的方法可以进一步启发「根据图片预测长文本」的研究。
更何况,再也不用看着社交媒体上的美食流口水了。扫图出菜谱,人人都可以学着做~
参考链接:https://ai.facebook.com/blog/inverse-cooking/
https://www.reddit.com/r/MachineLearning/comments/c1tb5m/p_using_ai_to_generate_recipes_from_food_images/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理的更多相关文章
- CVPR 2020目标跟踪多篇开源论文(上)
CVPR 2020目标跟踪多篇开源论文(上) 1. SiamBAN:面向目标跟踪的Siamese Box自适应网络 作者团队:华侨大学&中科院&哈工大&鹏城实验室&厦门 ...
- CVPR 2020目标跟踪多篇开源论文(下)
CVPR 2020目标跟踪多篇开源论文(下) 6. Cooling-Shrinking Attack: Blinding the Tracker with Imperceptible Noises 作 ...
- CVPR论文《100+ Times Faster Weighted Median Filter (WMF)》的实现和解析(附源代码)。
四年前第一次看到<100+ Times FasterWeighted Median Filter (WMF)>一文时,因为他附带了源代码,而且还是CVPR论文,因此,当时也对代码进行了一定 ...
- Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文
前言 之前也分享了不少自己的文章,但是对于 Flink 来说,还是有不少新入门的朋友,这里给大家分享点 Flink 相关的资料(国外数据 pdf 和流处理相关的 Paper),期望可以帮你更好的理解 ...
- 如何起草你的第一篇科研论文——应该做&避免做
如何起草你的第一篇科研论文——应该做&避免做 导语:1.本文是由Angel Borja博士所写.本文的原文链接在这里.感谢励德爱思唯尔科技的转载,和刘成林老师的转发.2.由于我第二次翻译,囿于 ...
- 如何把图片变得炫酷多彩,Python教你这样实现!
有趣的图片 如何能让图片变得好玩?首先需要让它动起来!可如果是多张图片,我们还可以将其拼接起来组成gif动图,可一张图怎么玩?记得之前写过一个小练习,把一张图片拆分成九宫格的分片图.那么,能否由此下手 ...
- CSS3实现鼠标移动到图片上图片变大
CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义 <!DOCTYPE html><html> <head&g ...
- CSS使图片变灰
为了悼念,各大网站都纷纷将自己的站点颜色调灰,就连图片也一样,到底如何实现的呢,请看下面的代码. 〈img src="http://hovertree.com/hvtimg/201512/f ...
- CSS实现图片变灰色及透明度
[图片变灰] 每当遇到哀悼日,很多网站快速变灰色,来看看实现方式吧: 方式一,仅支持ie) html{filter:progid:DXImageTransform.Microsoft.BasicIma ...
随机推荐
- 【系统篇】Archlinux系统安装
本教程为最新安装Linux的教程,想看更详细可以到我B站主页看视频教程 ArchLinux安装配置手册[系统篇] 本教程参考自 https://wiki.archlinux.org/index.php ...
- 基础又重要的浮动(float)
浮动 浮动的概念 什么是浮动,他在css中占据什么样的位置 网页布局的核心,就是用CSS来摆放盒子位置.如何把盒子摆放到合适的位置? 在css中有三种方式来定位位置 普通文档标准流方式 (默认方式) ...
- C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 带着问题,再读ijkplayer源码
问题 主流程上的区别 缓冲区的设计 内存管理的逻辑 音视频播放方式 音视频同步 seek的问题:缓冲区flush.播放时间显示.k帧间距大时定位不准问题- stop时怎么释放资源,是否切换到副线程? ...
- 单页面和多页面的网页差别比较(SPA)
单页面应用(singlePAge Web Application) 多页面应用MultiPage Applicaton,MPA) 组成 一个外壳页面和多个页面片段组成 多个完整的页面组成 资源公用 ...
- ant tree 展开key的集合
这次有个功能 ant的tree 展开 点击子节点 新增节点之后 数据能够照常展开 有几种方法 我能想到的 因为ant 有个expanded 只要设置为true就能展开了,但是这边有个陷阱,就是仅仅设置 ...
- 01 极简Linux操作系统发展历史
Unix操作系统的诞生 1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘.显示器),连接一台电脑 ...
- SQL之开窗函数详解--可代替聚合函数使用
在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句复杂难 ...
- ggplot2(8) 精雕细琢
8.1 主题 主题系统控制着图形中的非数据元素外观,它不会影响几何对象和标度等数据元素.这题不能改变图形的感官性质,但它可以使图形变得更具美感,满足整体一致性的要求.主题的控制包括标题.坐标轴标签.图 ...
- AspNetCore3.1_Middleware源码解析_3_HttpsRedirection
概述 上文提到3.1版本默认没有使用Hsts,但是使用了这个中间件.看名字就很好理解,https跳转,顾名思义,就是跳转到 https地址. 使用场景,当用户使用http访问网站时,自动跳转到http ...