基于ViLBERT与BiLSTM的图像描述算法
发布日期:2025-01-04 15:53 点击次数:138图像描述(Image Caption)是将计算机视觉和自然语言处理两个领域相结合的跨模态跨领域的任务. 一般的, 它将输入的图片通过卷积神经网络提取图像特征并利用循环神经网络等方法生成一段文字的描述, 这段描述要求和图片的内容高度相似. 这项技术在我们的生活中有着广泛的市场需求, 例如应用在对盲人的实时语音导航中. 基于这样的需求, 将实时采集的视频图像应用图像描述技术得到对应的文本描述, 再通过文本转语音技术实时传输到盲人的耳中, 让盲人能够实时地感受到周围的环境. 这在智能机器人领域也有着类似的需求, 这项技术相当于让它有了一双能够理解分析世界的“眼睛”. 除此之外, 该技术在图像检索系统、医学CT图像的报告生成和新闻标题生成方面都有着不错的应用前景. 经典图像描述算法可分为3类. 1)通过模板填充的方法[1]来生成图像描述, 它主要是通过局部二值模式、尺度不变特征转换或者方向梯度直方图等算法提取图像的视觉特征, 并根据这些特征检测对应目标、动作及属性对应的单词词汇, 最后将这些单词填入到模板中. 这样的方法虽然能够保证句型语法的正确性, 也有着很大的局限性, 由于使用的模板是固定的, 它也依赖于硬解码的视觉概念影响, 这样生成的语句格式相对固定且形式单一, 应用的场景也很局限. 2)基于检索的方法[2], 它将大量的图片描述存于一个集合中, 然后通过比较有标签图片和训练生成图片描述两者间相似度来生成一个候选描述的集合, 再从中选择最符合该图片的描述. 这样的方法能保证语句的正确性, 但语义的正确性却难以保证, 因而对图像描述的正确率较低. 3)基于生成的方法. 这类方法一般采用编码-解码器的结构, 编码器使用卷积神经网络(CNN)[3]提取图像特征, 解码器采用循环神经网络(RNN)[4]来生成文本描述. 这是在图像描述中普遍应用且效果最好的模型, 它在语句结构的完整性、语义的正确性以及泛化能力得到了一致的认可. 编码器-解码器的结构最初由Vinyals等[5]提出. 该模型编码器使用基于CNN的InceptionNet网络提取图像特征信息, 解码器使用RNN处理输入的图像特征来生成描述. Fang等[6]对编码器进行了改进, 通过提取关键词作为输入来生成描述的方法为后续结合图像和语义的编码方法提供了借鉴. Wang等[7]提出了一种新型的解码结构. 由Skel-LSTM使用CNN提取的图像特征来生成骨架语句, 然后使用Attr-LSTM为骨架语句中的词语生成对应的属性词, 最后将这两部分结合生成完整的最终描述语句. Jyoti等[8]提出了一种不同于用LSTM或者RNN进行解码的方法, 该工作启发式地利用卷积来进行图像描述, 达到不比传统LSTM差的效果. 注意力机制的引入使得图像描述算法效果得到显著提高. Xu等[9]在NIC模型[5]的基础上把注意力机制应用在图像描述的图像特征中. 其基本思想是将编码阶段获取的图像特征进行注意力处理, 解码阶段使用LSTM. Lu等[10]提出注意力机制的改进工作. 这项工作对LSTM进行扩展, 加入“岗哨向量”, 存储着解码器中已有的知识信息. 同时提出新的自适应注意力机制, 通过空间注意力来决定关注图像的哪个区域. Anderson等[11]引入Top-down, Bottom-up机制, 使用Faster R-CNN提取图像区域特征. 对抗生成网络[12]的应用使得描述生成更加多样化. 文献[13,14]将Conditional GAN 运用在图像描述, 该方法生成的图片描述贴近人类的表达, 改善了句子的自然性和多样性. Zhang等[15]提出的模型由两个不同的GAN组成. Shekher等[16]拓展了COCO数据集, 并通过对抗样本验证了Lavi模型的鲁棒性, Dai等[17]则使用对抗样样本训练解决图像描述任务生成的描述缺少独特性的问题. 文献[18–21]通过强化学习的方法[22]将不同评价标准作为奖励来训练模型, 能够显著提高生成描述的质量. 传统图像描述算法研究仍有这些不足: 1) 在编码器端一般使用传统CNN或者目标检测算法进行图像特征的提取, 存在图像特征与文本描述关联不紧密, 仅有部分注意力权重大的特征得到利用的问题. 2) 使用的解码器LSTM模型较为单一, 可使用更为复杂的模型提升性能. 针对上述问题, 本文提出基于ViLBERT和BiLSTM结合的图像描述算法. 主要有以下贡献: 1) 使用预训练的ViLBERT模型学习图像和文本间的内在联系, 并用联合特征向量统一表示, 能更好地学习到图像特征. 2) 使用BiLSTM处理联合特征向量, 加入注意力机制能显著改善生成描述的质量. 3) 在MSCOCO2014数据集上进行训练和测试, 通过实验结果表明该算法达到了优异的性能. 本文第1节对本文图像描述算法涉及的相关工作进行介绍. 第2节介绍本文算法的具体框架及改进部分. 第3节介绍实验数据集、评价标准及实验的对比和分析. 第4节对本文算法进行总结并展望下一步研究工作. 1 相关工作 1.1 BERT BERT (Bidirectional Encoder Representations from Transformers)[23]即由Transformer进行的双向编码表示形式, 是广泛使用的自然语言处理(NLP)模型. BERT的特征之一是可以读取上下文. BERT具有一个称为Transformer[24]的内置体系结构, 并且通过从两个方向(句子的开头和结尾)学习句子来实现“读取上下文”. 由于BERT是双向的, 它们可以通过从左右两个方向读取数据来使语句联系上下文. 这样可以建立单词之间的关系, 并帮助模型对相关单词做出更明智的预测. 使用转换器架构对大量未标记数据集进行预训练, 因此不需要按顺序处理数据序列, 从而可以进行并行计算. BERT的主要模型结构是多层Transformer编码器. 原始形式的Transformer包含两种独立的机制: 读取文本输入的编码器和产生任务预测的解码器. 由于BERT的目标是生成语言模型, 因此仅需要编码器机制. BERT有简单和复杂两种结构, 结构参数见表1. 使用GELU作为非线性激活函数, 如式(1)所示, 其中tanh为双曲正切函数. $ {\textit{GELU}}\approx 0.5{{x}}\left( {1+\mathrm{t}\mathrm{a}\mathrm{n}\mathrm{h}\left[ {\sqrt{\frac{2}{\pi }}\left( {{{x}}+0.0447\;15{{{x}}}^{3}} \right)} \right]} \right) $ (1) 表 1 BERT模型参数 图1是对BERT模型的描述. 输入是一系列标识(tokens), 这些标识首先嵌入向量中, 然后在神经网络中进行处理. 输出是大小为 $ H $ 的向量序列, 其中每个向量对应于具有相同索引的输入标识. 1.2 BiLSTM BiLSTM[25], 即双向LSTM, 是一个由两个LSTM网络组成的序列处理模型: 一个LSTM将向量正向依次输入, 另一个LSTM则将该向量反向依次输入. BiLSTM有效地增加了网络可用的信息量, 改善了算法可用的上下文信息. 图 1 BERT模型 BiLSTM结构图如图2所示. 前向LSTM层的输出向量序列 $\overrightarrow{{h}}$ 由前T–n到T–1时刻的正序输入迭代计算得到, 而后向LSTM层的输出向量序列 $\overleftarrow{{h}}$ 由前T–n到T–1时刻的逆序输入迭代计算得到. 正向和反向层的输出都由标准LSTM更新公式计算, 见式(2)–式(7). BiLSTM层最终生成一个输出向量 ${{Y}}_{T}=[{{h}}_{T-n},\cdots ,{{h}}_{T-1}]$ , 其中每个元素通过式(8)计算. $ {{h}}_{t}={\sigma }_{h}\left({{W}}_{xh}{{{x}}}_{t}+{{W}}_{hh}{{h}}_{t-1}+{{b}}_{h}\right) $ (2) $ {{y}}_{t}={\sigma }_{y}({{W}}_{hy}{{h}}_{t}+{{b}}_{y}) $ (3) $ {{f}}_{t}={\sigma }_{g}\left({{W}}_{f}{{{x}}}_{t}+{{U}}_{f}{{h}}_{t-1}+{{b}}_{f}\right) $ (4) $ {{i}}_{t}={\sigma }_{g}\left({{W}}_{i}{{{x}}}_{t}+{{U}}_{i}{{h}}_{t-1}+{{b}}_{i}\right) $ (5) $ {{o}}_{t}={\sigma }_{g}\left({{W}}_{o}{{{x}}}_{t}+{{U}}_{o}{{h}}_{t-1}+{{b}}_{o}\right) $ (6) $ {\tilde {{C}}}_{t}=\tanh \left({{W}}_{C}{{{x}}}_{t}+{{U}}_{C}{{h}}_{t-1}+{{b}}_{C}\right) $ (7) $ {{y}}_{t}=\sigma \left({\overrightarrow{{h}}}_{t},{\overleftarrow{{h}}}_{t}\right) $ (8) 图 2 BiLSTM模型 其中, ${{h}}_{t}$ 是t时刻隐藏层向量, $ {{{x}}}_{t} $ 是输入向量, ${{W}}_{xh}$ 是从输入层到隐藏层的加权矩阵, $ {{W}}_{hy} $ 是从隐藏层到输出层的加权矩阵, $ {{W}}_{hh} $ 是连续隐藏层间的加权矩阵. $ {{b}}_{h} $ , $ {{b}}_{y} $ 分别为隐藏层和输出层的偏差向量. $ {{W}}_{f}, {{W}}_{i}, {{W}}_{o}, {{W}}_{C} $ 分别为隐藏层映射到遗忘门、输入门、输出门和细胞状态的加权矩阵, $ {{U}}_{f}, {{U}}_{i}, {{U}}_{o}, {{U}}_{C} $ 为前一LSTM模块细胞输出连接当前对应门和细胞状态的加权矩阵, $ {{b}}_{f}, {{b}}_{i}, {{b}}_{o}, {{b}}_{C} $ 为对应的偏差向量. $ \sigma $ 和tanh分别为Sigmoid函数和双曲正切函数. 相比单一LSTM, BiLSTM能更有效地从数据集中学习时空特征, 并且在大数据集中有很好的性能. 2 基于ViLBERT和BiLSTM图像描述算法 基于ViLBERT[26]和BiLSTM图像描述算法主要由VilBERT模型和结合注意力机制的BiLSTM组成. 整体模型框架见图3. 图 3 基于ViLBERT和BiLSTM图像描述框架 2.1 改进ViLBERT模型 ViLBERT是BERT技术的扩展. 为了将BERT模型应用于视觉和语言, 其研究小组使用一个概念性标题的数据集, 该数据集由大约300万张图片和对应文本组成. 他们的方法是屏蔽掉图像的随机部分, 然后要求模型根据相关的文本重建图像的其余部分. 本文模型中, ViLBERT由两个并行的BERT模型组成, 分别处理图像和文本部分, 见图3. 每一部分都是由一系列Transformer块(TRM)和联合注意力Transformer层(CoTRM)组成, 联合注意力Transformer层能够实现图像和文本不同Transformer块的信息交互. 给定一张图片, 用 ${{p}}_{1},{{p}}_{2},\cdots ,{{p}}_{t}$ 表示图像不同区域的特征, 这里使用Faster R-CNN使用Resnet152模块在Visual Genome数据集上进行了预训练, 来提取图像的区域特征. 图片对应的文本用 ${{w}}_{0},{{w}}_{2},\cdots ,{{w}}_{t}$ 表示. 图像文本两个流之间的交换被限制在特定的层之间. 文本流在与视觉特征交互之前需要经过一个Transformer块的处理, 这是因为视觉特征经过神经网络深层次的提取已经有高层语义的信息, 而句子中的单词提取只需要有限的上下文聚合. 联合注意力Transformer层使用将图像和文本特征进行残差相加后能使图像和文本流都具有多模态的特征. 图像流部分最终输出为 ${{h}}_{p0}, $ $ {{h}}_{p1},\cdots ,{{h}}_{pt}$ , 文本流部分最终输出为 ${{h}}_{w0},{{h}}_{w1},\cdots , {{h}}_{wt}$ . 然后将两部分进行加权相加, 在本文中, 加权因子取0.5, 即 ${{v}}_{i}=0.5{{h}}_{pi}+0.5{{h}}_{wi}$ . 得到最终的图像特征 ${{V}}=\{{{v}}_{1},{{v}}_{2},\cdots ,{{v}}_{t}\}$ . 2.2 融合注意力BiLSTM 采用加入注意力机制的双层长短期记忆网络, 不同于双向长短期记忆网络两个LSTM分别正向和逆向处理同一数据. 这里使用两个正向的LSTM处理不同的数据, 并在第2步LSTM中加入注意力权重向量. 每个LSTM采用式(2)–式(7)计算. 具体结构见图3上部分. 在每一个时间步长上LSTM使用式(9)计算: $ {h}_{t}={\textit{LSTM}}({{{x}}}_{t},{{h}}_{t-1}) $ (9) 其中, ${{{x}}}_{t}$ 为LSTM的输入向量, ${{h}}_{t-1}$ 为上一时间步长的LSTM的输出向量. 每一时间步长的LSTM模块由一个Att-LSTM和一个Lan-LSTM组成. BiLSTM中t时刻的Att-LSTM的输入为 ${{{x}}}_{t}^{1}= $ $ [{{h}}_{t-1}^{2},\bar{{v}},{{W}}_{e}{\prod }_{t}]$ , 其中 ${{h}}_{t-1}^{2}$ 为上一时间步长Lan-LSTM的输出, $\bar{{v}}$ 为ViLBERT模型最终输出的图像向量的均值池化值, 即 $\bar{{v}}=\dfrac{1}{k}\displaystyle\sum\nolimits_{i}{{v}}_{i}$ , ${{W}}_{e}{\prod }_{t}$ 为之前生成单词的编码向量, ${{W}}_{e}$ 为加权矩阵, $ {\prod }_{t} $ 为t时刻驶入单词的one-hot encoding(独热编码), 最后将这三者拼接得到 ${{{x}}}_{t}^{1}$ . 将其输入到Att-LSTM中, 输出得到 ${{h}}_{t}^{1}$ . 随后在每一个时间步长结合图像特征 ${{V}}$ 生成一个标准化注意力权重 $ {\alpha }_{i,t} $ , 并得到加权后的图像特征 $ {\widehat{v}}_{t} $ ,计算公式如下: $ {\alpha }_{i,t}={{\omega }}_{a}^{{\rm{T}}}\tanh\left({{W}}_{va}{{v}}_{i}+{{W}}_{ha}{{h}}_{t}^{1}\right) $ (10) $ {\widehat{{v}}}_{t}=\sum\nolimits_{i=1}^{{{K}}}{\alpha }_{i,t}{{v}}_{i} $ (11) 其中, ${{W}}_{va}\in {\mathbb{R}}^{H\times V},{{W}}_{ha}\in {\mathbb{R}}^{H\times M},{{\omega }}_{a}\in {\mathbb{R}}^{H}$ 是已学习的参数, ${{\omega }}_{a}^{{\rm{T}}}$ 为 ${{\omega }}_{a}$ 的转置矩阵, ${{v}}_{i}$ 是图形特征V的第i个区域特征, ${{h}}_{t}^{1}$ 为Att-LSTM的t时刻的输出隐藏向量. Lan-LSTM的输入为 ${{{x}}}_{t}^{2}=[{\widehat{{v}}}_{t},{{h}}_{t}^{1}]$ ,由Att-LSTM的输出 ${{h}}_{t}^{1}$ 和上文得到的有注意力权重的图像特征组成, 输出得到 ${{h}}_{t}^{2}$ . 使用符号 $ {y}_{1:T} $ 表示单词序列 $ {(y}_{1},\cdots ,{y}_{T}) $ , 在t时间步长输出单词的概率分布由下式给出: $ p\left({{y}_{t}|y}_{1:t-1}\right)={\textit{softmax}}({{W}}_{p}{{h}}_{t}^{2}+{{b}}_{p}) $ (12) 其中, ${{W}}_{p}\in {\mathbb{R}}^{\left|\mathrm{\Sigma }\right|\times M}$ , ${{b}}_{p}\in {\mathbb{R}}^{\left|\mathrm{\Sigma }\right|}$ 是已学习权重和偏差参数. 完整的序列输出分布为: $ {p(y}_{1:T})=\prod\nolimits_{t=1}^{T}p\left({{y}_{t}|y}_{1:t-1}\right) $ (13) 2.3 损失函数 基于给定的真实人工描述序列 $ {y}_{1:T}^{*} $ 和本文图像描述算法训练得到的参数 $ \theta $ , 采用交叉熵函数来最小化熵损失, 公式如下: $ L\left( \theta \right) = - \sum\nolimits_{t = 1}^T {\rm{l}} {\rm{g}}\left( {{p_\theta }\left( {y_t^*|y_{1:t - 1}^*} \right)} \right) $ (14) 其中, $ {y}_{t}^{*} $ 表示第t个真实人工描述. 3 实验及结果分析 3.1 数据集 实验采用MSCOCO2014数据集[27], 该数据集旨在通过将对象识别问题置于更广泛的场景理解问题的上下文中, 从而提高对象识别的最新水平, 并通过收集包含自然环境中常见对象的图像来实现. 该数据集使用专业机构人为地对图片进行描述, 每张图片收录5句或者15句参考描述, 标注集一般以JSON格式保存. 该数据集有超过33万张图片, 其中20万有标注描述, 包含91类目标, 32.8万张图像中总共有250万个带有标签的实例, 这也是目前最大的语义分割数据集. 3.2 评价指标 实验采用BLEU (BiLingual Evaluation Understudy)[28]和CIDEr[29]两种评价指标对本文算法进行评估. BLEU算法对生成的待评价语句和人工标注语句间的差异进行评分, 得分输出在0–1之间. 该标准现已成为图像描述算法应用最广泛的计算标准之一. 对于图像 $ {I}_{i} $ , 图像描述模型对于这个图像生成的描述语句 $ {c}_{i} $ , 人工标注的5个描述语句集合 ${S}_{i}=\{{s}_{i1},\cdots , $ $ {s}_{i5}\}\in S$ , 我们要对 $ {c}_{i} $ 进行评价. BLEU的计算公式如下所示: $ {\textit{CP}}_{n}\left(C,S\right)=\frac{{\varSigma }_{i}{\varSigma }_{k} {\rm{min}}\left({h}_{k}\left({c}_{i}\right),{{\rm{max}}}_{j\in m}{h}_{k}\left({s}_{ij}\right)\right)}{{\varSigma }_{i}{\varSigma }_{k}{h}_{k}\left({c}_{i}\right)} $ (15) $ b\left(C,S\right)=\left\{\begin{array}{l}1 \text{ , if}\;{l}_{C}>{l}_{S}\\ {{\rm{e}}}^{1-{l}_{S}/{l}_{C}}\text{ , if}\;{l}_{C}< {l}_{S}\end{array}\right. $ (16) $ {BLEU}_{N}\left(C,S\right)=b(C,S) {\rm{exp}}\left(\sum\nolimits_{n=1}^{N}{\omega }_{n}{\rm{lg}}{\textit{CP}}_{\textit{n}}(C,S)\right) $ (17) 其中, 每一个语句用n元组 $ {\omega }_{k} $ 来表示的, n元组 $ {\omega }_{k} $ 在人工标注语句 $ {s}_{ij} $ 中出现的次数记作 $ {h}_{k}\left({s}_{ij}\right) $ , n元组 $ {\omega }_{k} $ 在待评价语句 $ {c}_{i}\in C $ 中出现的次数记作 $ {h}_{k}\left({c}_{i}\right) $ , $ {l}_{C} $ 是待评价语句 $ {c}_{i} $ 的总长, $ {l}_{S} $ 是人工标注语句的总长度. BLEU得分越高, 性能也就越好. CIDEr是专门设计用于评价图像描述模型的, 它通过计算每个n元组的TF-IDF 权重得到待评价语句和参考语句之间的相似度, 以此评价图像描述的效果. 一个n元组 $ {\omega }_{k} $ 在人工标注语句 $ {s}_{ij} $ 中出现的次数记作 $ {h}_{k}\left({s}_{ij}\right) $ , 在待评价语句中出现的次数记作 $ {h}_{k}\left({c}_{i}\right) $ , n元组 $ {\omega }_{k} $ 的TF-IDF权重 $ {g}_{k}\left({s}_{ij}\right) $ 如下所示: $ {g}_{k}\left({s}_{ij}\right)=\frac{{h}_{k}\left({s}_{ij}\right)}{{\varSigma }_{{\omega }_{l}\in \Omega }}\lg\left(\frac{\left|I\right|}{{\varSigma }_{{I}_{p}\in I}\mathrm{m}\mathrm{i}\mathrm{n}\left( {1,\displaystyle\sum\nolimits_{q}{h}_{k}\left({s}_{pq}\right)} \right)}\right) $ (18) 其中, $ \Omega $ 是所有n元组的语料库, $ I $ 是数据集中所有图像的集合. CIDEr的得分越高, 生成的语句的质量也就越好. 3.3 实验环境 实验环境基于Ubuntu 18.04系统, CPU为Inteli9-9900k, GPU为NVIDIA GeForce RTX 2080Ti, 16 GB内存, Python 3.7+CUDA 10.1的PyTorch深度学习环境. 3.4 预处理及参数设置 在处理注释文件时, 删除了非字母字符, 将剩余的字符转化为小写字母, 并将所有出现小于5次的单词替换为特殊的单词UNK. 最终在MSCOCO数据集中得到9517个单词, 也就是最终使用的语料库. 将生成语句的最大长度设为16, 解码器生成采用beamsearch (集束搜索), N值设为3时算法的评价指标得分最佳, 采用Dropout方法防止过拟合, 参数设为0.5. 使用Adam优化器训练本文模型, 在训练损失函数阶段, 学习率设为 $ 3\times {10}^{-4} $ , 权重衰减为 $ 1\times {10}^{-6} $ , 批处理大小为128, 训练轮数设为30. 3.5 实验结果对比 表2对比本文算法(VB-BL)和文献[5,10,11,13,19–21,30]这些经典算法在B@1、B@4和CIDEr评价指标下的评分. 表 2 不同图像描述算法评价指标评分对比 可以看出, 本文的算法在B@1, B@4得分比该表中最优得分分别高出1.3和0.6, 有一定程度的提高, 在CIDEr得分比该表中最优得分高出5.1, 有4.2%的提升. 在编码阶段结合图像和文本特征之间的联系, 能够有效增强提取图像中的重要部分, 抑制与文本不相关、不重要的部分, 使得图像中各目标间的关联更加紧密, 起到注意力机制的效果. 在此基础上再结合双向注意力机制的LSTM, 能够有效地提高本文算法的效果. 接着验证本文算法不同模块的效果, 进行了两个消融实验: 1)将ViLBERT换成CNN; 2)将结合注意力机制的BiLSTM换成BiLSTM. 实验对比见表3. 从表3中可以看出, 将ViLBERT提取后的图像和文本特征进行加权处理后能够高效利用图像中的关键信息, 为后续的高质量的文本生成提供保证. 在BiLSTM中加入注意力机制也可以有效提升算法的效果. 综合对比可以看出, 在编码阶段使用文本信息参与对图像特征进行交融, 能使算法更加关注图像中的关键信息, 这也是本文算法取得优化的关键原因. 表 3 本文算法消融实验 图4中选取6张图片进行效果的展示, 本文算法生成描述与NIC模型的对比见表4. 图 4 对比效果图片 表 4 NIC模型和本文算法描述对比 对比可以看出, 本文算法生成的描述已经能够详细地表述出图中的主要内容, 并能够描述出各主要目标的细节特征. 在缺少人类主观因素和知识储备的情况下, 已经表现出优异的性能. 4 结束语 本文提出基于ViLBERT和BiLSTM结合的图像描述算法. 使用ViLBERT模型创新地融合了图像和文本间的特征, 使得提取到的图像特征具有类似视觉注意力的特性, 该模型精简的参数量能有效缩减训练的时间. 结合采用了融合注意力机制的双层长短期记忆网络能改善注意力权重的可解释性. 该算法进一步统一视觉图像和语言理解间的跨模块特征. 实验表明, 该算法在各评价指标上都有着优异的表现. 在未来的工作中, 将结合图卷积神经网络来加强图像内各目标间的联系来展开进一步的研究.