【论文阅读笔记】 Inverse Cooking: Recipe Generation from Food Images

本文是Facebook AI Research发表在CVPR2019,是一篇很有意思的论文。
人们喜欢美食摄影是因为他们欣赏美食。每顿饭的背后都有一个复杂的食谱描述的故事,不幸的是,仅仅看一个食物的图片,我们无法了解它的制作过程,在本文中介绍了一个逆向烹饪系统,它可以重建给定食物图像的烹饪食谱。通过一种新颖的体系结构来预测食材的组合,在不引入任何顺序的情况下对其依赖关系进行建模,然后通过同时处理图像及其推断出的食材生成烹饪指令。论文在大型Recipe1M数据集上对整个系统进行了广泛的评估,结果表明:(1)改进了以前的成分预测基线;(2)通过图像和配料的杠杆时效,获得高品质的配方;(3)与基于检索的方法相比,系统能够根据人类的判断生成更多引人注目的菜谱。论文代码已开源
整个系统的流程图如下:
在这里插入图片描述
在这里插入图片描述
该系统使用ResNet-50对美食照片进行图片特征 e I e_I eI提取,即图中的以 θ I \theta_I θI为参数的Image Encoder,然后通过Ingredient Decoder对食材图片特征向量进行食材预测,接着将预测出的食材通过简单的embedding层转化为定长的向量。烹饪流程模块(Instruction Decoder)由Transformer block组成,

Cooking Instruction Transformer

每个Transformer block由两层attention layer和一个linear layer组成,结构如图3(a),该结构和论文Attention is all you need中的结构类似,。但是为了综合图片和食材信息进行烹调流程生成,实现多模态的attention,对attention layer进行了改变:第一层attention layer对之前的输出进行self-attention,这和原始Transformer一致;第二层attention layer为了对第一层的self-attention进行细粒度提取,改变成有条件的attention,这一层的attention受两个约束:一是图片特征 e I ∈ R P × d e \mathbf{e}_{I} \in \mathbb{R}^{P \times d_{e}} eIRP×de,二是食材嵌入(ingredients embeddings) e L ∈ R K × d e \mathbf{e}_{L} \in \mathbb{R}^{K \times d_{e}} eLRK×de,其中P和K分别表示图像数目和成分特征, d e d_e de为嵌入维数。为了同时进行多模态融合,文中尝试了三种融合结构,即图3(b),3©,3(d)。最终的实验发现Concatenated方式效果最好。
### Ingredient Decoder
对于如何表示食材(Ingredient),文中探索了集合(set)和列表(list)两种探索,其中集合中食材是无序的,列表中食材是有顺序的。产生食材也是使用Transformer。在集合方式中为了消除顺序,文章对不同时间步的输出进行max-pooling,见图四:
在这里插入图片描述

优化

两阶段方式训练该架构:在第一个阶段,对图像编码器和成分解码器进行预训练,如第3.2节所示。在第二阶段训练成分编码器和指令解码器后,通过最小化负对数似性和调整 θ R , θ E \theta_R,\theta_E θR,θE。在训练过程中,指令解码器将ground truth成分作为输入。除Set Transformer外,所有Transformer模型均由teacher forcing进行训练。

实验效果

文中给出的代码链接中有jupyter notebook的demo,我尝试了一下:
在这里插入图片描述
在这里插入图片描述
再来一个中餐的酱爆鱿鱼圈,完全不对了,哈哈
在这里插入图片描述
在这里插入图片描述

本文的亮点

  • 文本生成完全摒弃了RNN,而改用该强大的Transformer
  • 如何对attention进行改造,从而融合多模态信息
  • 分阶段训练模型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值