根据 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论文让人人都可以学习新料理的更多相关文章

  1. CVPR 2020目标跟踪多篇开源论文(上)

    CVPR 2020目标跟踪多篇开源论文(上) 1. SiamBAN:面向目标跟踪的Siamese Box自适应网络 作者团队:华侨大学&中科院&哈工大&鹏城实验室&厦门 ...

  2. CVPR 2020目标跟踪多篇开源论文(下)

    CVPR 2020目标跟踪多篇开源论文(下) 6. Cooling-Shrinking Attack: Blinding the Tracker with Imperceptible Noises 作 ...

  3. CVPR论文《100+ Times Faster Weighted Median Filter (WMF)》的实现和解析(附源代码)。

    四年前第一次看到<100+ Times FasterWeighted Median Filter (WMF)>一文时,因为他附带了源代码,而且还是CVPR论文,因此,当时也对代码进行了一定 ...

  4. Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文

    前言 之前也分享了不少自己的文章,但是对于 Flink 来说,还是有不少新入门的朋友,这里给大家分享点 Flink 相关的资料(国外数据 pdf 和流处理相关的 Paper),期望可以帮你更好的理解 ...

  5. 如何起草你的第一篇科研论文——应该做&避免做

    如何起草你的第一篇科研论文——应该做&避免做 导语:1.本文是由Angel Borja博士所写.本文的原文链接在这里.感谢励德爱思唯尔科技的转载,和刘成林老师的转发.2.由于我第二次翻译,囿于 ...

  6. 如何把图片变得炫酷多彩,Python教你这样实现!

    有趣的图片 如何能让图片变得好玩?首先需要让它动起来!可如果是多张图片,我们还可以将其拼接起来组成gif动图,可一张图怎么玩?记得之前写过一个小练习,把一张图片拆分成九宫格的分片图.那么,能否由此下手 ...

  7. CSS3实现鼠标移动到图片上图片变大

    CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义 <!DOCTYPE html><html> <head&g ...

  8. CSS使图片变灰

    为了悼念,各大网站都纷纷将自己的站点颜色调灰,就连图片也一样,到底如何实现的呢,请看下面的代码. 〈img src="http://hovertree.com/hvtimg/201512/f ...

  9. CSS实现图片变灰色及透明度

    [图片变灰] 每当遇到哀悼日,很多网站快速变灰色,来看看实现方式吧: 方式一,仅支持ie) html{filter:progid:DXImageTransform.Microsoft.BasicIma ...

随机推荐

  1. java ThreadPoolExecutor初探

    导读:线程池是开发中使用频率比较高的组件之一,但是又有多少人真正了解其内部机制呢. 关键词:线程池 前言 线程池是大家开发过程中使用频率比较高的组件之一,但是其内部原理又有多少人真正清楚呢.最近抽时间 ...

  2. 《OneForAll框架搭建之旅》前端篇:微前端架构设计(Vue)

    心之所向,勇往直前!记录开发过程中的那些小事,给自己加点经验值. 前言 作为一个.Net后端开发,在竞争愈加激烈的当下,掌握点前端配菜好像已经是家常便饭了. 刚好在工作的第5个年头,辞去小主管职务的我 ...

  3. 车道线检测LaneNet

    LaneNet LanNet Segmentation branch 完成语义分割,即判断出像素属于车道or背景 Embedding branch 完成像素的向量表示,用于后续聚类,以完成实例分割 H ...

  4. H5多列布局

    多列布局 基本概念 1.多列布局类似报纸或杂志中的排版方式,上要用以控制大篇幅文本. 2.跨列属性可以控制横跨列的数量 /*列数*/ -webkit-column-count: 3; /*分割线*/ ...

  5. 为什么要使用webpack?

    在网页中会引用到哪些常见的静态资源? js (.js  .jsx  .coffee  .ts) css (.css  .less  .sass  .scss scss是sass的plus版) imag ...

  6. 多道技术 进程 线程 协程 GIL锁 同步异步 高并发的解决方案 生产者消费者模型

    本文基本内容 多道技术 进程 线程 协程 并发 多线程 多进程 线程池 进程池 GIL锁 互斥锁 网络IO 同步 异步等 实现高并发的几种方式 协程:单线程实现并发 一 多道技术 产生背景 所有程序串 ...

  7. HTTP GET请求302重定向问题

    1.问题描述 ① 在华为云服务器中搭建了java环境,并在tomcat中部署了一个空的web项目 ② 在此web项目中上传了一个名为:plugin_DTDREAM_LIVING_DEHUMIDIFIE ...

  8. Chromium的无锁线程模型C++代码示例

    引言 作者:程序员bingo,主要关注客户端架构设计.性能优化.崩溃处理,有多年的Chromium浏览器开发经验. 多线程一直是软件开发中最容易出问题的环节,很多的崩溃.卡死问题都与多线程有关.在常用 ...

  9. Excel之在单元格中生成随机密码

    公式 =CHAR(INT(RAND()*26+97))&INT(RAND()*10)&CHAR(INT(RAND()*26+97))&INT(RAND()*10) 分析 CHA ...

  10. Spring源码阅读笔记05:自定义xml标签解析

    在上篇文章中,提到了在Spring中存在默认标签与自定义标签两种,并且详细分析了默认标签的解析,本文就来分析自定义标签的解析,像Spring中的AOP就是通过自定义标签来进行配置的,这里也是为后面学习 ...