雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Image Captioning with Attention
翻译 | 刘娇 整理 | 余杭
图像描述类任务就是给图像生成一个标题。 给定一个图像:
图片出处, 许可证:公共领域
我们的目标是用一句话来描述图片, 比如「一个冲浪者正在冲浪」。 本教程中用到了基于注意力的模型,它使我们很直观地看到当文字生成时模型会关注哪些部分。
这个模型的结构类似于论文:Show, Attend and Tell: Neural Image Caption Generation with Visual Attention.
本教程中的代码使用到了tf.keras和eager execution这两个工具,链接里有详细的内容可以学习。
这个 notebook 展示了一个端到端模型。 运行的时候,它会自动下载MS-COCO数据集,使用 Inception V3 模型训练一个编码 - 解码器,然后用模型对新图像进行文字描述。
这篇代码可以在Colab中运行,但是需要 TensorFlow 的版本 >=1.9
本实验对数据进行打乱以后取前 30000 篇描述作为训练集,对应 20000 篇图片(一张图片可能会包含多个描述)。 训练模型的数据量相对较小,因此只用了一个 P100 GPU,训练模型大约需要两个小时。
下载 MS-COCO 数据集
MS-COCO数据集包含 82,000 多张图片,每张图片都是用至少 5 句不同的文字描述的。 下面的代码在运行时会自动下载并且解压数据。
注意: 提前下载好数据,数据文件大小 13GB 。
选择是否压缩训练集大小来减少训练时间
本教程中选择用 30000 篇描述和它们对应的图片来训练模型,但是当使用更多数据时,实验结果的质量通常会得到提高。
Inceptions v3 图像预处理
这个步骤中需要使用 InceptionV3 (在 Imagenet 上训练好的模型) 对每一张图片进行分类,并且从最后一个卷积层中提取特征。
首先,我们需要将图像转换为 inceptionV3 需要的格式:
把图像的大小固定到 (299, 299);
使用preprocess_input函数将像素调整到 -1 到 1 的范围内(为了匹配 inceptionV3 的输入格式)。
初始化 InceptionV3 & 下载 Imagenet 的预训练权重
将 InceptionV3 的最后一个卷积层作为输出层时,需要创建一个 keras 模型
将处理好的图片输入神经网络,然后提取最后一层中获得的向量作为图像特征保存成字典格式(图名 --> 特征向量);
选择卷积层的目的是为了更好地利用注意力机制,并且输出层的数据大小是8x8x2048;
......
想要继续阅读,请移步至我们的AI研习社社区:https://club.leiphone.com/page/TextTranslation/628
领取专属 10元无门槛券
私享最新 技术干货