目录
前言
本文主要就阅读《Entity Slot Filling for Visual Captioning》后,从中学习到的一些知识做分享,欢迎专业的学者指点和提问,本人不甚感激~
一、Entity Slot Filling for Visual Captioning是什么?
Entity Slot Filling for Visual Captioning是基于NLP 的一种任务,该任务类似于完形填空。具体来说是一种给出一个图片和一行描述性语句,在语句中拿掉一部分名词短语作为Slot,然后根据输入去预测这个Noun phrase。Entity Slot Filling for Visual Captioning是一种新的Image caption任务,以下简称ESFCap。
二、文章引言
文章首先给出一个列子来说明ESFCap任务,第一页右上角的图片给出了三种传统任务和ESFCap task。三种传统任务image captioning、VQA(visual question & answering)和image grouding,其中image grounding是一种给出一个图片描述并特别标出一些名词短语,让模型去自动地在图片上生成bound ing box。ESFCap task中slot的位置可以在句子的开头如:1.Slot: __in a shirt carries four cups on a tray. Filling:A woman2.Slot:A woman in a __carries four cups on a tray. Filling:shirt 也可以在句子中间位置,同样可以在句尾位置。ESFCap需要一个既能理解视觉和文本相结合语言,又能将正确的语句插入到masked slots的系统。也就是说,比起VQA这样的问答任务,VQA问答任务,输出短语'black tray','tray'和'a black tray'都是正确答案,ESFCap的输出要更精确,a black__,插口只能填tray才算正确。
三、数据集
作者基于Flick30K-entity数据集制作了用于ESFCap的Flick30K-EnFi,在此数据集中删除了名词短语,下面为数据集实例:
首先,左边这张图为名词的类型,主要有人名、其他、景物名、衣服名等等。右边的图片是名词短语的长度,从1到6个字符。纵坐标为名词短语的数量。
四、方法
作者提出了一个多模态融合的网络,叫做AdaMFN,并且将其分成了三个部分,特征表示模块、多模态融合模块和文本片段生成模块。
给一个图片和带插槽的句子作为输入,特征表示模块首先将图片像素和句子单词压缩成紧凑特征向量作为全局表示,与此同时,它将提取图像块和单词的隐状态(hidden states of words)作为局部表示。在图3中,V是局部表示,v是全局表示,它们分别由RCNN model和CNN model提取出。
接着,获取到的全局表示将通过多模态融合模块生成一个视觉-语义全局特征。然后将生成的多模态特征(即视觉-语义全局特征)作为初始化丢进LSTM中,逐个单词地生成文本,并且填入到插槽中。最后,在文本片段生成模块,作者还应用了自适应动态注意力机制,该机制能自动地通过视觉和语言的表示改变状态。我的理解是,能够更好的融合视觉特征和语言特征。
值得一提的是,作者在文章中使用的多模态融合方法是低秩双线性池化层(Low-rank bilinear pooling)。双线性池化用于将同一样本提取出来的两个特征x和y进行融合,得到融合后的向量,然后用来分类。如果特征x和y来自不同特征提取器,则称为Mutimodal Bilinear Pooling。原双线性池化层存在维数过高的问题,于是作者采用基于降维思想的Low-rank bilinear pooling来做。关于这块不懂可以看看这位大佬的解释:Low-rank Bilinear Pooling for Fine-Grained Classification论文笔记 - 知乎 (zhihu.com)
多模态融合模块的公式3:
这里提到两个超参数,一个是K另一个是C。C比较容易理解,就是将W∈A*B矩阵分成两个低秩矩阵U∈A*C和V∈B*C。K原文中说为output channels,我这里个人理解为一个很长的向量,然后里面是每个词应该出现在插槽的分数。
文本片段生成模块
在文本片段生成模块,参见公式4:
作者首先构建一个语言模型,用于生成文本片段y,这里T是y中的单词数量,θ是模型的参数。
然后,公式5用基于LSTM的模型给出每个词的概率:
x_t,h_t-1,m_t-1分别是输入特征,隐状态和记忆元,d指的是处在decoder过程。
最后,作者还设计了ADA(Adaptive dynamic attention)模块为了增强语言和视觉信息的融合。
总结
本文在MLB的基础之上,提出了用LSTM的decoder替换原classification layer,最后的实验说明了这种方法的有效性,新提出的AdaMFN在运用了ADA模块后比之前最好的MLB-Reg融合的效果还要好一点。我通过文章了解了Mutimodal bilinear pooling,也算是开启了在多模态学习上的一个新坑把!~~