王新民 编译整理 量子位 出品 | 公众号 QbitAI 看图说话这种技能,我们人类在幼儿园时就掌握了,机器们前赴后继学了这么多年,也终于可以对图像进行最简单的描述。 O’reilly出版社和TensorFlow团队联合发布了一份教程,详细介绍了如何在Google的Show and Tell模型基础上,用Flickr30k数据集来训练一个图像描述生成器。模型的创建、训练和测试都基于TensorFlow。 如果你一时想不起O’reilly是什么,量子位很愿意帮你回忆:
好了,看教程: 准备工作 装好TensorFlow; 安装pandas、opencv2、Jupyter库; 下载Flicker30k数据集的图像嵌入和图像描述 在教程对应的GitHub代码介绍( https://github.com/mlberkeley/oreilly-captions)里,有库、图像嵌入、图像描述的下载链接。 图像描述生成模型
△图像描述生成模型的网络示意图。 该网络输入马的图像,经由深度卷积神经网络Deep CNN和语言生成模型RNN(循环神经网络)学习训练,最终得到字幕生成网络的模型。 这就是一个我们将要训练的网络结构示意图。深度卷积神经网络将每个输入图像进行编码表示成一个4,096维的矢量,利用循环神经网络的语言生成模型解码该矢量,生成对输入图像的描述。 图像描述生成是图像分类的扩展 图像分类是一种经典的计算机视觉任务,可以使用很多强大的经典分类模型。分类模型是通过将图像中存在的形状和物体的相关视觉信息拼凑在一起,以实现对图像中物体的识别。 机器学习模型可以被应用到计算机视觉任务中,例如物体检测和图像分割,atv,不仅需要识别图像中的信息,而且还要学习和解释呈现出的2D空间结构,融合这两种信息,来确定物体在图像中的位置信息。想要实现字幕生成,我们需要解决以下两个问题: 1.我们如何在已有成功的图像分类模型的基础上,从图像中获取重要信息? 2.我们的模型如何在理解图像的基础上,融合信息实现字幕生成? 运用迁移学习 我们可以利用现有的模型来帮助提取图像信息。迁移学习允许我们用现有用于训练不同任务的神经网络,通过数据格式转换,将这些网络应用到我们的数据之中。 在我们的实验中,该vgg-16图像分类模型的输入图像格式为224×224像素,最终会产生一个4096维的特征向量,连接到多层全连接网络进行图像分类。 我们可以使用vgg-16网络模型的特征提取层,用来完善我们的字幕生成网络。在这篇文章的工作中,我们抽象出vgg-16网络的特征提取层和预先计算的4096维特征,这样就省去了图像的预训练步骤,来加速全局网络训练进程。 载入VGG网络特征和实现图像标注功能的代码是相对简单的: defget_data(annotation_path, feature_path):annotations = pd.read_table(annotation_path, sep= 't', header= None, names=[ 'image', 'caption']) returnnp.load(feature_path, 'r'), annotations[ 'caption'].values 理解图像描述 现在,我们对图像标注了多个物体标签,我们需要让模型学习将表示标签解码成一个可理解的标题。 由于文本具有连续性,我们利用RNN及LSTM网络,来训练在给定已有前面单词的情况下网络预测后续一系列描述图像的句子的功能。 由于长短期记忆模型(LSTM)单位的存在,使得模型更好地在字幕单词序列中提取到关键信息,选择性记住某些内容以及忘记某些无用的信息。TensorFlow提供了一个封装函数,用于在给定输入和确定输出维度的条件下生成一个LSTM网络层。 为了将单词转化成适合于LSTM网络输入的具有固定长度的表示序列,直播,我们使用一个嵌入层来学习如何将单词映射到256维特征,即词语嵌入操作。词语嵌入帮助将我们的单词表示为向量形式,那么类似的单词向量就说明对应的句子在语义上也是相似的。 在VGG-16网络所构建的图像分类器中,卷积层提取到的4,096维矢量表示将通过softmax层进行图像分类。由于LSTM单元更支持用256维文本特征作为输入,我们需要将图像表示格式转换为用于描述序列的表示格式。因此,我们添加了嵌入层,该层能够将4,096维图像特征映射到另一个256维文本特征的矢量空间。 建立和训练模型 (责任编辑:本港台直播) |