图像字幕生成的性能分析
1. 相关技术基础
在图像字幕生成领域,有几个关键的技术基础。首先是向量空间的运用,其向量空间较小。接着是 word2vec 层,它是 2013 年由 Tomas Mikolov 等人开发的用于将文本语料库进行词嵌入的统计模型,效果显著。还有 Global Vector (GloVe) 层,用于词表示,其基于深度学习来学习数据的表示,而深度学习是机器学习的一部分。
Bilingual Evaluation Understudy (BLEU) 算法用于评估文本质量。根据 BLEU 得分可以计算准确性,其得分范围在 0 到 1 之间。NLTK 提供了 BLEU 得分的实现。在数据集里,存在实际字幕,经过图像字幕模型后会生成预测字幕,通过比较这两种字幕来生成 BLEU 得分,比较时会逐词进行。NLTK 库中的
sentence BLEU
函数可用于评估问题句子与一个或多个参考标记列表。
目标主要有以下几点:
1. 使用神经网络开发用于图像目标分类的模型。
2. 使用神经网络关联图像特征和文本描述。
3. 使用训练好的模型生成图像字幕。
4. 通过用户反馈测试和验证测试评估性能。
2. 文献综述
图像字幕生成在当今具有重要意义,有诸多应用,如图像搜索、帮助盲人等。近年来,不同科学家开发了许多字幕生成技术并取得了较好成果。例如:
- 2014 年 He 等人提出了一种架构。
- 2015 年微软 AI 实验室从管道视角进行图像字幕生成,使用 CNN 模型进行特征提取,使用 Multiple Instance Learning (MIL) 进行最佳词匹配。
- Vinyals 等人在 PC 视觉任务中使用 CNN 亮点和 RNN 编码器,即 Neural Image Caption (NIC)。
- 一些模型通过结合 CNN、Bidirectional Recurrent Neural Network (BRNN) 等,在 Flickr8k、Flickr30k 和 MSCOCO 数据库中取得了相当的结果。
- 2015 年 Jonathan 等人提出了一种密集字幕任务模型。
- 2016 年 Wang 等人开发了使用深度 CNN 和两个独立 LSTM 网络的模型。
- 2016 年 Xu 等人受 NIC 模型启发,结合目标识别和机器翻译领域的进展提出了新模型。
此外,还有许多相关工作,如使用 BLEU 得分作为准确性矩阵,对 BLEU 进行基于共识的图像描述评估改进,使用卷积自动编码器进行图像目标识别,开发基于注意力的模型、多级循环神经网络 (m - RNN) 等。
3. 提出的方法
该技术从帮助盲人的角度出发。使用 CNN 模型提取和训练特征,训练数据存储在两个数据束中,一个用于图像数据,另一个用于文本数据。将测试图像与训练好的模型进行比较,然后以自然语言生成输出句子,字幕在命令提示符窗口中生成。
3.1 卷积神经网络模型
在当前视觉识别中,CNN 模型被广泛应用。它有多个卷积层,专为 2D 图像设计,训练和处理所需参数较少,这是其主要优势。CNN 包含输入层、隐藏层和输出层。输入层以图像形式输入,隐藏层对输入信息进行计算,输出层生成计算和提取的结果。各层都有神经元,相互连接。CNN 用于特征提取,包含以下不同阶段:
-
卷积层
:是 CNN 的核心,在图像分类中,图像大小通常为 224 * 224 * 3(高度 224、宽度 224、3 个维度即 RGB 值)。
-
核(Kernel)
:通常采用 3 * 3 的核大小,作为过滤器用于从图像中提取特征。核矩阵在输入数据上移动,进行点积运算得到点积矩阵,每个核都有一个标量偏置。
-
激活函数
:使用 ReLU 激活函数,它是线性的,能克服梯度消失问题,使模型更简单快速。
-
步长(Stride)
:是一个过滤器,在图像上从左到右、从上到下移动,水平和垂直方向每次移动一个像素,其移动方向取决于输入图像的像素大小,且在高度和宽度维度上对称。
-
池化(Pooling)
:根据步长减少输入像素值的空间大小,常见的有最大池化和平均池化,多数应用中使用最大池化,步长通常为 2 * 2。
-
填充(Padding)
:可防止信息丢失,若填充为 1,则在矩阵顶部和底部添加 1 行,左右两侧添加 1 列。有零填充(在所有行和列插入零)等类型,使用填充操作可使输出矩阵与输入矩阵大小相同。
-
全连接层
:用于对大数据集进行分类,是前馈网络。将池化层或卷积层的输出(以扁平化向量形式)输入全连接层,类似于人工智能网络进行数学运算,后续连接 softmax 激活函数层进行数学操作。
3.2 循环神经网络模型
RNN 模型主要用于自然语言处理,RNN 或 LSTM 是序列处理器,使用嵌入层进行词表示,使意思相近的词有相似表示,能识别词的上下文。词通过词嵌入以向量形式表示,在自然语言处理和其他领域有不同应用,如 Gmail 的自动补全功能。RNN 也有输入层、隐藏层和输出层,输入数据为向量形式,每个神经元有激活函数,逐词处理,生成输出后将其反馈给隐藏层以顺序生成字幕或句子。
3.3 VGG16 模型
VGG16 是 ResNet 和 AlexNet 的先进预训练模型,是用于大规模图像识别的深度 CNN。在本工作中用于特征提取,“VGG”代表 Visual Geometry Group,输入图像,输出图像特征,“16”表示模型中有 16 层,每层后都会生成输出。
3.4 LSTM 模型
LSTM 是深度学习中特殊的 RNN 模型,用于处理经过嵌入层后的向量形式的文本数据,能保留文本的序列信息,解决记忆问题和梯度消失问题,用于句子生成,是基于反馈的设备,可处理单点数据和序列数据,包含单元、输入门、输出门和遗忘门,相互连接。
3.5 数据集
图像字幕生成中,数据集至关重要。本工作使用 Flickr8k 图像数据集,包含 8000 张图像。其中 1000 张用于训练和开发,该数据集时间成本较低。每张图像有 5 条字幕且有唯一 ID,6000 张用于训练模型,1000 张用于测试模型,通过此系统可计算模型的准确性。
Flickr8k.token
文件包含用于 RNN 模型句子生成的标记,每张图像基于此数据集生成 5 条字幕。
Expert annotations.txt
是专家判断文件,包含图像 ID、标记 ID 和专家判断得分(范围 1 到 4)。
例如,对于某张输入图像,数据集中的标记文件中有以下 5 条字幕:
- A blonde boy wearing a blue life vest and camo shorts jumps off a diving backward into a blue lake.
- A boy diving backward off a pier in a large lake.
- Boy in a blue life jacket jumps into the water.
- A boy in a blue life jacket jumps off a board into the lake.
- A boy is holding his nose and jumping off a diving board backwards into a lake.
3.6 数据预处理
数据预处理是将输入数据转换为机器语言的过程,便于机器理解,可提高系统准确性。因为数据通常存在噪声、缺失值或错误值,特征提取和特征选择是数据预处理的两种方法,直接影响模型的准确性。特征选择是选择数据的一些特征并丢弃无关特征。
以下是 CNN 模型处理流程的 mermaid 流程图:
graph TD;
A[输入图像] --> B[卷积层];
B --> C[核操作];
C --> D[激活函数(ReLU)];
D --> E[步长操作];
E --> F[池化操作];
F --> G[填充操作];
G --> H[全连接层];
H --> I[softmax 激活函数];
I --> J[输出特征];
4. 实验结果
4.1 Python 环境
在本工作中,安装 Python 3.7.1,还需安装 TensorFlow、Keras、Pandas、Pillow 等库,另外安装 Matplot 和 NLTK 用于字幕生成。
4.2 分词
分词是自然语言处理的第一步,主要有以下两种类型:
-
字符级分词
:2015 年由 Karpathy 首次引入,通过空格分隔字符。
-
词级分词
:通过空格和标点符号分割句子,Python 中使用 NLTK 库进行词级分词,本工作采用词级分词。例如,输入句子 “It originated from the idea that there are readers who prefer learning new skills from the comforts of their drawing rooms.”,分词输出为
['It', 'originated', 'from', 'the', 'idea', 'that', 'there', 'are', 'readers', 'who', 'prefer', 'learning', 'new', 'skills', 'from', 'the', 'comforts', 'of', 'their', 'drawing', 'rooms']
。
4.3 LSTM 字幕生成模型
在命令提示符中,字幕生成模型的总结包含输入层、嵌入层、丢弃层、密集层和 LSTM 模型。丢弃率设为 50%(即 0.5),丢弃值范围在 0 到 1 之间。密集层是常规的深度连接神经网络,有偏置、激活函数等支持参数。
以下是 LSTM 模型相关层的表格:
| 层名称 | 描述 |
| ---- | ---- |
| 输入层 | 接收输入数据 |
| 嵌入层 | 进行词表示 |
| 丢弃层 | 防止过拟合 |
| 密集层 | 进行数学运算 |
| LSTM 模型 | 处理序列数据生成句子 |
在 RNN 解码器中,使用 50 个周期进行迭代。迭代次数越多,准确性越高,但执行时间也越长,周期数还取决于 PC 的配置。系统的准确性随周期数增加而提高,损失减小。向命令提示符输入一张图像,可生成句子。
图像字幕生成的性能分析
5. RNN 训练与结果展示
在 RNN 解码器中,我们使用了 50 个周期进行迭代。迭代次数与系统性能有着紧密的联系,具体表现如下:
-
准确性
:随着迭代次数的增加,系统的准确性会不断提高。这是因为更多的迭代意味着模型有更多的机会学习数据中的特征和规律,从而能够更准确地生成图像字幕。
-
执行时间
:迭代次数越多,执行时间也会相应增加。因为每次迭代都需要对模型进行计算和更新,所以迭代次数的增加会导致整体执行时间变长。同时,周期数的选择还取决于 PC 的配置,配置较高的 PC 可以承受更多的迭代次数,而配置较低的 PC 可能需要适当减少迭代次数以保证训练的效率。
以下是准确性和损失随迭代次数变化的 mermaid 流程图:
graph LR;
A[迭代次数增加] --> B[准确性提高];
A --> C[执行时间增加];
A --> D[损失减小];
在实际操作中,我们向命令提示符输入一张图像,系统会根据训练好的模型生成相应的句子。例如,输入一张特定的图像,经过模型处理后,在命令提示符窗口中输出了对应的字幕。
6. 结论
在这项工作中,我们利用 CNN 和 RNN 模型,在 Python 3.7.1 环境下通过命令提示符成功实现了图像字幕的生成。整个过程的步骤清晰且易于执行,具体步骤总结如下:
1.
数据准备
:使用 Flickr8k 数据集进行模型的测试和训练,该数据集包含 8000 张图像,其中 6000 张用于训练,1000 张用于测试,每张图像有 5 条字幕。同时,
Flickr8k.token
文件提供了用于 RNN 模型句子生成的标记,
Expert annotations.txt
文件包含专家判断得分。
2.
模型构建
:
-
特征提取
:采用 VGG16 模型进行特征提取,它是一个预训练的深度 CNN 模型,有 16 层,能将输入的图像转换为图像特征。
-
数据处理
:使用 CNN 模型进行特征提取,CNN 包含卷积层、核、激活函数、步长、池化、填充和全连接层等不同阶段;使用 LSTM 模型处理文本数据,它能保留文本的序列信息,解决记忆和梯度消失问题。
3.
数据预处理
:对数据进行预处理,主要是分词操作,采用词级分词,使用 Python 的 NLTK 库将句子分割为单词,便于模型处理。
4.
模型训练
:在 RNN 解码器中使用 50 个周期进行迭代训练,随着迭代次数增加,系统准确性提高,损失减小。
5.
字幕生成
:将测试图像与训练好的模型进行比较,在命令提示符窗口中以自然语言生成输出句子。
通过以上步骤,我们成功地实现了图像字幕的生成,并且可以根据系统输出的字幕和专家判断得分来评估模型的性能。未来,我们可以进一步优化模型,例如调整模型的参数、增加训练数据量等,以提高图像字幕生成的准确性和质量。
以下是整个图像字幕生成流程的表格总结:
| 步骤 | 操作内容 |
| ---- | ---- |
| 数据准备 | 使用 Flickr8k 数据集,包括图像和字幕数据,以及相关标记和专家判断文件 |
| 模型构建 | VGG16 进行特征提取,CNN 进行特征处理,LSTM 处理文本数据 |
| 数据预处理 | 词级分词,使用 NLTK 库分割句子 |
| 模型训练 | RNN 解码器 50 个周期迭代训练 |
| 字幕生成 | 测试图像与训练模型比较,在命令提示符生成字幕 |
超级会员免费看
1179

被折叠的 条评论
为什么被折叠?



