Press "Enter" to skip to content

使用不同的特征提取器生成字幕

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

西蒙·达尔斯-4586077

 

引言

 

在不断发展的计算机视觉和深度学习研究领域,新技术或现有技术的变体被迅速发现和发表。例如,在2013年最先进的分类器ImageNet图像分类基准上,AlexNet[1]达到了大约60%的TOP-1准确率。目前最先进的基于Vision Transformers的VIT-G/14[3]图像分类器达到了90.45%的ImageNet TOP-1准确率。因此,仅在过去的8年里,图像分类器的准确率就大幅提高。在这8年中,人们研究并发表了许多不同的图像分类器的实现和变体。所有这些不同的体系结构都试图以不同的方式收集有关它们“看到”的图像的语义信息。将图像放入管道,以便学习在某个向量空间中捕获图像特征。这一过程称为特征提取。这些嵌入在某些特征空间中的图像向量显然编码了关于图像的语义信息,分类器算法可以使用这些语义信息来最好地描述图像的内容。这种抽象的表现形式让我们人类很难理解。我们人类大多以文字形式描述图像,就像图像的真实字幕。因此,研究深度学习模型如何为图像添加字幕是很有意义的。在这篇博文中,我将研究使用不同的特征提取器模型生成图片字幕的不同之处。

 

特征提取

 

特征提取过程采用原始图像数据(RGB像素),并学习如何放置、从中派生出更易管理和更有信息量的特征表示。请注意,这些功能捕获了某些模式,对算法有意义,但对人类来说可能完全无关紧要。图像中的大量数据可能是冗余的。想象一下,在一面白墙前有一个物体的图像,比如一株植物。图像中最重要的部分是植物。即使你想提到它背后的白墙,也只需要很少的数据来描述白墙。在学习的同时,特征提取器还可以学习丢弃冗余数据。因此,实际上,在让特征提取器处理图像之后,您最终会得到一个更小、更具语义信息的图像表示形式。如果要为图像生成有意义的标题,这很有用。

图像字幕

 

利用深度学习算法生成字幕是一个有趣而实用的问题。例如,维基百科可以用它来获取页面上图片的真实说明。有趣的是,它与大多数标准的深度学习任务不同。通常,深度学习算法试图通过从输入数据中学习派生特征来预测一些地面真实标签。然而,对于这个问题,地面事实的标签是相当主观的。对于同一张图片,不同的人会想出微妙的不同的标题。因此,机器将如何为图像添加字幕是很有趣的。

 

架构

 

我使用的模型类似于[4]中的模型,其实现灵感来自于TensorFlow的这篇博客文章。它主要由两部分组成:编码器和解码器。 this blogpost

 

编码器

 

编码器将从图像中提取的特征编码到一定的嵌入空间中。然后,解码器接收编码的特征和隐藏状态,并预测字幕的下一个单词。作为编码器,我使用了一个简单的固定平均池层。在TensorFlow教程中,他们为此使用了(可训练的)线性图层。然而,由于我的重点是比较使用不同特征提取器的字幕结果,我认为使用相同的编码器会导致更公平的比较。

解码器

 

解码器是架构中进行大部分计算的部分。因为它必须预测一个句子,所以它被实现为RNN。它由以下几个部分组成:单词嵌入、GRU、注意和完全连接层。

 

首先,编码的特征被馈送到注意模块。注意模块被实现为巴赫达诺注意[2],正如前面提到的TensorFlow教程中所做的那样。注意力将解码器的GRU的隐藏状态和编码提取的特征作为输入。然后,为每个像素计算一个权重。然后将编码特征的每个像素乘以其相应的关注度权重。

 

然后,将参与的特征和嵌入的单词表示连接起来,并馈送到GRU中。为了获得单词预测,隐藏状态被馈送到线性输出层,以将其映射到词汇表大小。这个过程是重复的,所以以前的预测都被考虑进去了。

投稿

 

这个项目的目标是比较使用不同的特征提取器生成的字幕。比较的三个特征提取器是:InceptionV3、VGG-11和Deit。这是三种相对不同的体系结构,因此,看看它们的结果是否不同以及有何不同将是一件有趣的事情。我会使用BLEU评分来比较建筑,这是一种评估机器翻译的方法,但也适用于此目的。我还将显示训练曲线,还将突出显示三种模型之间生成的字幕中的一些明显差异。

 

预处理

 

对于这个项目,我使用了MS Coco数据集。此数据集提供对象的图像,每个图像具有5个相关标题。我在这个项目中使用了6,000张图片(所以有30.000个字幕),培训测试分为80-20个部分。对图像和字幕都进行了一些预处理。每个标题使用包含5000个最频繁出现的单词的词汇表进行标记化。然后,填充每个字幕,使其具有最初最长字幕的长度,从而使每批字幕具有相等的尺寸。在预处理期间应用特征提取器。每幅图像都被送入特征提取器,提取的特征保存在单独的文件中。 MS COCO dataset

 

培训

 

作为损失函数,我使用了“有效分批”的交叉熵损失函数,灵感来自于这个博客。这种有效的批处理确保只计算不是

的预测单词的损失。因为TensorFlow的博文使用老师强迫,所以我也使用了。因此,不是将先前预测的单词馈送到GRU中,而是将实际的先前目标单词馈送到GRU中。
this blog

 

结果

 

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/15/%e4%bd%bf%e7%94%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e7%89%b9%e5%be%81%e6%8f%90%e5%8f%96%e5%99%a8%e7%94%9f%e6%88%90%e5%ad%97%e5%b9%95/

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注