使用 Keras 进行基于注意力的图像字幕制作

图像字幕是视觉和语言交叉领域的一项具有挑战性的任务。在这里,我们演示了如何使用 Keras 和 Eage Execution 来整合注意力机制,使网络能够专注于与当前文本生成状态相关的图像特征。

来源:RStudio AI博客

在图像字幕制作中,算法会给出一张图像,并负责制作合理的字幕。这是一项具有挑战性的任务,原因有很多,其中最重要的一点是它涉及显著性或相关性的概念。这就是为什么最近的深度学习方法大多包含一些“注意力”机制(有时甚至不止一个)来帮助关注相关的图像特征。

显著性 相关性

在这篇文章中,我们展示了将图像字幕制作为编码器-解码器问题的公式,并通过对图像网格单元的空间注意力进行增强。这个想法来自最近一篇关于使用视觉注意力的神经图像字幕生成的论文(Xu 等人,2015 年),并采用了与我们在机器翻译文章中详述的相同类型的注意力算法。

具有视觉注意的神经图像标题生成 (Xu 等人 2015) Xu 等人 2015 机器翻译

我们正在从最近的 Google Colaboratory 笔记本移植 Python 代码,使用 Keras 和 TensorFlow Eager Execution 来简化我们的生活。

Google Colaboratory 笔记本

先决条件

此处显示的代码将与当前 CRAN 版本的 tensorflow、keras 和 tfdatasets 一起使用。检查您是否至少使用了 1.9 版 TensorFlow。如果不是这种情况,截至撰写本文时,此

tensorflow keras tfdatasets

将为您提供版本 1.10。

加载库时,请确保您按照此顺序执行前 4 行。我们需要确保使用的是 Keras 的 TensorFlow 实现(Python 领域中的 tf.keras),并且我们必须在以任何方式使用 TensorFlow 之前启用 Eager 执行。

tf.keras

无需复制粘贴任何代码片段 - 您可以在此处找到完整的代码(按执行所需的顺序):eager-image-captioning.R。

eager-image-captioning.R

数据集

MS-COCO 训练图像 注释 long

解压后,让我们定义图像和标题的位置。

注释文件 <- "train2014/annotations/captions_train2014.json"image_path <- "train2014/train2014"
注释文件 <- image_path <- "train2014/train2014" image_path