深度学习与图神经网络核心技术实践应用高级研修班-Day4图像标题生成-image_caption_generation(encoder-decoder)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习与图神经网络核心技术实践应用高级研修班-Day4图像标题生成-image_caption_generation(encoder-decoder)相关的知识,希望对你有一定的参考价值。


1. 概述

1.1 图像标题生成

图像标题生成模型结合了计算机视觉和机器翻译的最新进展,利用神经网络生成真实的图像标题。

图像标题模型以图像作为输入,最大化产生给定图像的真实标题的可能性,并且可以在新的图像上生成标题。

例如,下图是使用 MS COCO数据集训练的图像标题生成模型可能生成的图像标题。

1.2 CNN

图像标题生成模型的重要组成部分是卷积神经网络CNN。

CNN可以很好地处理图像分类任务。一般图像的大小约为50*50像素,如果采用全连接网络,神经元数量将十分庞大。CNN可以通过卷积、池化等操作降低输入图像的维度,将其转化为固定维度的特征表示。这不仅可以减少过拟合的问题,也能获得更多的特征信息。

1.3 Decoder

图像标题生成模型的另一个重要组成部分是解码器Decoder

Decoder是一个RNN或LSTM网络,它的作用是将CNN网络生成的图像的高维特征表示“翻译”为图像标题。

文本翻译模型中也有Decoder,它们的功能大同小异。这两个模型的结构相似。

1.4 与文本翻译模型对比

图像标注模型思路源于文本翻译模型。

翻译模型包括两大结构:

  • 编码器(Encoder)
  • 解码器(Decoder)

编码器将输入的源语句转换为一个高维特征表示(Context)。

解码器根据编码器的输出Context,使用RNN或LSTM逐步生成目标单词序列。


RNN或LSMT网络在处理具有时序性的问题时效果很好,因此文本翻译模型中的编码器与解码器均为RNN网络。

CNN将输入的图像转为高维特征表示。

使用CNN网络代替文本翻译模型中的RNN Encoder。

2. 模型原理

2.1 图像标题生成模型

图像标题生成模型 = Encoder(CNN)+ Decoder(RNN/LSTM)

  • CNN(图像分类模型):识别图像中的信息,将图像转为高维特征向量
  • RNN(文本生成模型):从图像的特征向量中解码,逐步生成单词

直接使用现有的的CNN模型作为Encoder,这样可以省去图像的预训练步骤,加速全局网络训练进程。

本实验中,使用VGG19网络模型的特征提取层作为Encoder CNN

Decoder使用LSTM网络,能够更好地处理长文本。

2.2 学习目标、损失函数

学习目标为

给定一张图像,最大化输出正确描述的概率。

公式如下:


其中 I 为输入图像,S 为图像的正确标题,θ 为模型参数。

损失函数为负对数似然:

3. 代码实现

3.1 数据集

MSCOCO2014数据集:该数据是微软提供的图像数据集,训练集包括8万多张图片,验证集包括4万多张图片,并且提供了每张图片对应的标题。每张图片的标题不止一个,因此训练集一共411593个标题,而验证集一共201489个标题,平均一张图片五个标题。

与PASCAL COCO数据集相比,COCO中的图片包含了自然图片以及生活中常见的目标图片,背景比较复杂,目标数量比较多,目标尺寸更小,因此COCO数据集上的任务更难,结果也更能表现水平。

3.2 数据预处理

导入依赖库


加载数据

一张图片可能对应多个标题,因此以一个图片id和一个标题为一条数据。

对于图像,从图像中心开始保留一个固定大小的区域;对于标题,保留最多20个单词。


图像标题中一共有23728个单词。建立单词和数
字id之间的映射,并添加三个特殊字符。

将所有图像标题转换为id表示的序列

3.3 构建模型

加载已经预训练好的VGG19模型。

定义一个函数,对于给定的输入,返回VGG19各个层的输出值。通过variable_scope实现网络的重用,将卷积层的输出作为原始图片的表示。


构建Decoder

有了原始图像的特征表示后,需要将其解码为图像标题对应的单词序列。

首先初始化Decoder的权值、定义超参数。


依次定义输出序列的占位符、初始化Decoder网络状态:


实现词嵌入、特征映射等部分,定义LSTM单元:


生成图像标题中的每个词。采用注意力模型,得到更准确的结果:


定义LSTM处理、计算输出、计算损失函数几个部分:


在损失函数中加入注意力正则项,定义优化器,模型整体代码完成:

训练模型代码如下:

4. 实验结果

4.1 损失曲线

经过20轮训练后,损失函数曲线如图:

4.2 测试模型

图像标题生成结果:

涵盖了新娘、新郎、摆pose、拍照等关键词,并且注意力可视化也很好地反映了生成每个词时模型对图片不同区域的关注度.

5. 参考文献

  • Oriol Vinyals.Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge.2015. https://arxiv.org/pdf/1609.06647.pdf.
  • 张宏伦.深度有趣.2018.https://juejin.im/post/5ba4de5af265da0a89302eba#heading-8.
  • O’Relly.Caption this, with TensorFlow!.2017.https://github.com/mlberkeley/oreilly-captions.

以上是关于深度学习与图神经网络核心技术实践应用高级研修班-Day4图像标题生成-image_caption_generation(encoder-decoder)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习与图神经网络核心技术实践应用高级研修班-Day3迁移学习(Transfer Learning)

深度学习与图神经网络核心技术实践应用高级研修班-Day1典型深度神经网络模型

深度学习与图神经网络核心技术实践应用高级研修班-Day1Tensorflow和Pytorch

深度学习与图神经网络核心技术实践应用高级研修班-Day2基于Keras的深度学习程序开发

深度学习与图神经网络核心技术实践应用高级研修班-Day1受限波尔兹曼机和深度信念网络

深度学习与图神经网络核心技术实践应用高级研修班-Day4深度强化学习(Deep Q-learning)