本篇文章3296字,读完约8分钟

雷锋。(公开号码:雷锋。com)出版社:这篇文章发表在《奥雷利》,由雷锋编辑。请点击这里阅读原始地址。

许多开发人员都玩过图像分类,他们中的许多人可能都熟悉图像分割,但图像字幕的难度无疑比前两者更大。

没有其他原因:使用神经网络生成符合现实需要的图像注释需要结合最新的计算机视觉和机器翻译技术。为了生成输入图像的文本标注,训练神经图像标注模型可以最大化其成功率并生成新颖的图像描述。例如,下图是在ms coco数据集上训练的神经图像注释生成器的潜在注释输出。

左边的注释:一个灰色的男人挥舞着棍子,一个黑色的男人看着;右边的注释:一辆公共汽车“坐”在一个人旁边

这篇文章是一个中级教程,旨在教你如何在flickr30k数据集上训练图像标注生成模型,使用Google show and tell模型的变体。我们使用张量流框架来创建、训练和测试模型,因为张量流相对容易使用,并且拥有不断增长的庞大用户群体。

图像标注技术的价值最近,计算机视觉和自然语言处理的深度学习的成功激发了人工智能研究人员在两者交叉领域的新应用。因此,注释生成模型需要平衡视觉线索和自然语言的理解。

这两个传统上截然不同且不相关的领域之间的交集有可能对行业产生广泛影响。这种技术有一些直接的应用场景,比如为youtube视频创建概要文件和注释未标记的图像,但是它的价值远远不止于此。与试图让计算机更容易进入和理解现实世界的传统简历技术类似,这项技术有可能让我们更容易理解现实世界。它可以作为我们日常生活中的向导和视觉辅助工具,例如horus(古埃及神话的Horus之眼),这是一款由意大利人工智能公司eyra为视障患者开发的可穿戴设备。

在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!

准备首先,你需要安装张量流。

其次,你需要熊猫、opencv2和jupyter来运行相关代码。但是,为了简化安装过程,我们强烈建议您遵循github资源库中docker的安装指南。

您还需要下载flickr30k数据集的图像注释和图像嵌入。下载链接也在github资源库中。

现在教程开始了。

图像标注生成模型

在高层次上,这是我们将培训的模型。每幅图像将由深度有线电视新闻网编码成一个4,096维的矢量表示。一种语言生成的Rnn将被依次解码,成为一种自然语言描述。

注释生成-作为图像分类的一个扩展和一个有着悠久历史的cv任务,在图像分类的背后有许多强大的模型。图像分类可以将图像中对象的相关形状和视觉信息拼凑在一起,并将图像归入对象类别。其他cv任务的机器学习模型基于图像分类,例如对象识别和图像分割。他们不仅可以识别所提供的信息,还可以学习如何解释二维空,协调两种理解,并确定图像中对象信息的位置分布。

在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!

对于注释生成,这提出了两个问题:

如何充分利用图像分类模型的成功,从图像中提取重要信息?

我们的模式,如何调和语言和图像的理解?

通过迁移学习

我们可以使用现有的模型来促进图像标注。迁移学习使得通过训练不同任务的神经网络来使用我们的数据成为可能。在我们的示例中,vgg-16图像分类模型导入224x224分辨率的图像以生成4,096维特征向量,这对于图像分类非常有用。

我们可以使用vgg-16模型的表示(即图像嵌入)来训练其他模型。由于空间的限制,本文没有详细介绍vgg-16的体系结构,而是提前计算了4,096维特征,以加快训练速度。

加载vgg图像特征和图像注释非常简单:

def get_data(标注_路径,要素_路径):

返回np.load(feature_path,r),注释[题注]。价值观念

理解注释

对于图像表示,我们需要模型来学习将其解码成可理解的注释。由于文本的序列特性,我们需要在rnn/lstm中使用循环。对于序列中的给定单词,这些网络被训练来预测下一个单词和图像表示。

lstm单元允许模型更好地选择在注释单词序列中使用哪些信息、记住什么和忘记什么。Tensorflow提供了一个包装函数,为给定的输入和输出维度生成lstm层。

为了将单词转换成适合lstm输入的固定长度表示,我们使用嵌入层,它可以学习将单词映射到256维特征(或单词嵌入)。单词嵌入帮助我们将单词表达为向量,相似的单词向量在语义上是相似的。

在vgg-16图像分类器中,卷积层提取4,096维表示,将其传输到最终的softmax层进行分类。由于lstm单元需要256维文本特征作为输入,我们需要将图像表示转换为目标注释的表示。为了实现这一点,我们使用另一个嵌入层来学习将4,096维图像特征映射到256维文本特征的空。

创建和培训模型总的来说,这就是谷歌展示和讲述模型的样子:

在上图中,{s0,s1,...,sn}表示我们希望在注释中预测的单词,而{wes0,wes1,...wesn-1}是每个单词的单词嵌入向量。lstm {p1,p2,...pn}是模型针对句子中的下一个单词生成的概率分布。该模型被训练成最小化每个单词的对数概率的负和。

在使用推理生成注释训练之后,我们有了一个模型。给定图像和所有先前的单词,它可以给出一个单词在下一步中出现在注释中的概率。如何使用它来生成新的注释?

最简单的方法是获取输入图像,输出下一个最可能的单词,并创建一个简单的图像注释。

这种情况在很多情况下都会发生,但是贪婪地使用每一个概率最高的单词可能不会得到整体概率最高的注释。

规避这个问题的一个潜在解决方案是采用一种称为“波束搜索”的方法。该算法将在长度t内反复考虑k个最佳句子集,作为生成t+1大小句子的候选,并只保留结果中的k个最佳选择。这允许开发人员探索大型高质量注释空,同时使推理在计算上可追踪。在下面的例子中,算法保留一个k = 2的候选句子列表,即从每个垂直时间步长到每个粗体字的路径。

在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!

限制神经图像注释生成器为学习将图像映射到人类级别的文本注释提供了一个非常有用的框架。铜鼓对在大量的图像标注对上训练,模型通过视觉特征学习捕捉相关的语义信息。

然而,对于静态图像,嵌入在我们中的注释生成器将关注图像中对分类有用的特征,而不是对注释生成有用的特征。为了改善包含在每个特征中的任务相关信息,我们可以训练图像嵌入模型(用于编码特征的vgg-16网络)作为注释生成模型的一部分。这使我们能够调整图像编码器的参数,这更符合注释生成器的作用。

此外,如果我们仔细观察生成的注释,我们会发现它们基本上是日常和常见的情况。下图是一个例子:

几乎可以肯定,这幅画是“长颈鹿站在一棵树旁”。然而,如果我们看看其他图片,我们会立即发现,无论哪一个是生成的,注释是“长颈鹿站在一棵树旁边。”这是因为训练中的长颈鹿都出现在树旁边。

首先,如果你想改进模型,你需要看看谷歌的开源展示和告诉神经网络。它嵌入了ms coco数据集和initiation-v3图像的训练。

现有的前沿图像标注模型将包括视觉注意机制,该机制使得模型能够找到图像的感兴趣部分,从而在生成标注时能够有选择地聚焦。

此外,如果你对注释生成的前沿执行感到好奇,看看这篇论文:显示、注意和讲述:具有视觉注意的神经图像标题生成。

雷锋。com提醒:作者已经将本文中的所有python代码上传到了github。请戳这里。

“张量流&神经网络算法高级应用类”即将开始!

从初级到高级,理论+实战,一站式深入了解张量流!

本课程面向深度学习型开发人员,教授如何使用张量流解决特定问题,如图像识别和文本分析。为期10周的课程将从张量流的原理和基本实践技能开始,逐步教会学生如何在张量流上构建cnn、自编码、rnn、gan等模型,最终掌握一套基于张量流的深度学习和发展的专业技能。

作为思想工作的高级技术专家,童达和白华川两位教师在构建大数据平台和开发深度学习系统方面有着丰富的经验。

时间:每周二和周四晚上20: 00到21: 00

课程时长:共20小时,10周完成,每周2次,每次1小时

在线教学地址:mooc.ai/

相关文章:

教你从零开始在张量流上构建rnn(完整代码)!

雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。

来源:搜狐微门户

标题:在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!

地址:http://www.shwmhw.com/shxw/62744.html