机器学习中的图像字幕生成

2025年3月17日 | 阅读 12 分钟

自然语言处理与计算机视觉的融合,在图像字幕生成领域取得了显著进展。图像字幕生成是指为图像生成准确而富有表现力的文字描述的过程。通过利用机器学习技术,已开发出能够提供丰富且上下文相关的字幕的图像字幕系统。这提高了视觉内容的访问性和理解能力。

自动为图像生成书面描述的做法被称为图像字幕生成。图像字幕生成超越了传统的图像识别算法,后者仅为图像生成标签或标记。相反,它生成类似人类的描述,捕捉图像的联系、内容和上下文。为了实现这一目标,需要将用于文本生成的自然语言处理模型与用于图像解释的计算机视觉模型相结合。

图像字幕的应用

图像字幕在各个领域都有众多实际应用。

  • 可访问性:通过提供视觉内容的详细文本描述,例如社交媒体帖子、新闻文章和教学材料,图像字幕使有视觉障碍的人能够访问视觉内容。
  • 内容理解:通过允许用户使用文本查询来搜索、浏览和导航大量的图像集合,图像字幕提高了多媒体应用程序理解和检索内容的能力。
  • 辅助技术:图像字幕是一个有用的工具,支持诸如增强现实、导航辅助和场景解释等应用程序中的辅助技术和人机交互。

代码

现在我们将尝试创建一个模型来生成图像字幕。

导入库

预处理图像数据

输出

Image Captioning Using Machine Learning
Image Captioning Using Machine Learning

准备文本数据

使用以下函数使解释更清晰

  • 将所有单词转换为小写。
  • 删除所有标点符号。
  • 删除所有长度为一字符或更短的单词,例如“a”。
  • 删除包含数字的任何单词。

我们的目标是获得一个尽可能有限且富有表现力的词汇表。减少词汇量将导致更快的训练和更小的模型。为了了解我们数据集词汇表的范围,我们可以将清理后的描述转换为一个集合并打印其大小。集合没有重复值,并且经过高度优化。它有一个基于哈希表的实现。因此,我们得到一个简短而富有表现力的词汇表。

输出

Image Captioning Using Machine Learning

加载数据

输出

Image Captioning Using Machine Learning

在将描述性语言输入模型或与模型的预测进行比较之前,必须通过编码将其转换为数字。要开始编码数据,必须建立从单词到不同整数值的稳定映射。Keras 提供的 Tokenizer 类能够使用导入的描述数据来获取此映射。

下面定义了 create_tokenizer() 和 to_lines() 函数,它们将描述字典转换为字符串列表,并根据加载的照片描述文本拟合分词器。

输出

Image Captioning Using Machine Learning

现在可以对文本进行编码了。我们将把每个描述分解成单词。模型将接收一个单词和一个图像,然后生成下一个单词。然后,模型将接收描述的前两个单词以及图像来生成下一个单词。模型将以这种方式进行训练。

定义模型

整个模型分为 3 部分

  • 照片特征提取器:一个 16 层 VGG 模型,已在 ImageNet 数据集上进行了预训练。该模型提取的特征将被用作输入。图像使用 VGG 模型(省略输出层)进行了预处理。
  • 序列处理器:词嵌入层,即序列处理器,负责处理文本输入。它后面是一个具有长短期记忆(LSTM)的循环神经网络层。
  • 解码器:序列处理器和特征提取器的结果是一个固定长度的向量。将这些向量组合并由一个 Dense 层处理以生成最终预测。Photo Feature Extractor 模型期望接收的输入图像特征是包含 4,096 个元素的向量。Dense 层对其进行处理并生成图像的 256 个元素的表示。

Sequence Processor 模型将输入序列馈送到一个 Embedding 层,该层使用掩码来忽略填充值。输入序列的预定义长度为 34 个单词。接下来是一个具有 256 个记忆单元的 LSTM 层。

两个输入模型都会生成一个 256 个元素的向量。此外,两个输入模型都使用了 50% 的 dropout 正则化。由于此模型配置学习速度快,目标是减少训练数据集的过拟合。

使用额外的操作,Decoder 模型组合了来自两个输入模型的向量。然后,将其传递到一个具有 256 个神经元的 Dense 层,最后传递到一个最终输出 Dense 层,该层使用 softmax 在整个输出词汇表上预测序列中的下一个单词。

输出

Image Captioning Using Machine Learning
Image Captioning Using Machine Learning

评估模型

让我们来看看模型的准确性。

输出

Image Captioning Using Machine Learning

生成新描述

现在我们将为图像生成新的描述。

输出

Image Captioning Using Machine Learning

输出

Image Captioning Using Machine Learning

"startseq 穿着红色衬衫的男人正站在岩石上 endseq"