这篇文章是微软的工作,是和谷歌《show and tell》同时期的文章,它们都去参加了微软的Image Caption比赛(MS COCO caption challenge),总的结果是并列第一。
文章的框架不是我们常见的encoder-decoder类型,但是仍然有启发意义。
文章生成caption的思路是
(1)给出一幅图像,首先使用视觉检测器提取出图像中可能存在的单词。
(2)提取完单词后,采用传统的方法,而不是lstm来进行语言建模。得到若干预测的captions.
(3)使用DMSM模型(deep multimodal similarity model)计算captions和图像的相似度 ,取最相似的一个caption作为最终的预测结果。
实现细节如下:
(0)准备工作
作者首先在所有的captions中提取了1000个单词,它们占到了所有单词出现次数的92%以上。
按照我们的想法,首先我们要提取图像中可能存在的词汇,对于 cat dog 等这一类名词,使用BBs框出来是比较容易的,但是一些抽象的词,比如 beautiful 没办法限定在图像特定的区域上。 作者使用的方法是使用弱监督的多实例学习(MIL)。
下面简单的介绍一下多实例学习(Multiple Instance Learning,MIL)
首先来简单介绍下多示例学习。多示例学习实际是一种半监督算法。考虑这样一种训练数据:我们有很多个数据包(bag),每个数据包中有很多个示例(instance)。我们只有对bag的正负类标记,而没有对instance的正负例标记。当一个bag被标记为正时,这个包里一定有一个instance是正类,但也有可能其他instance是负类,当一个bag被标记为负类时,它里面的所有instance一定是负类。我们的目标是训练一个分类器,可以对instance的正负进行判别。
多示例学习在现实中其实很常见。如一篇文章违禁时通常是因为该文章具有某些违禁词,但我们可能无法知道具体是哪个词违禁。在这个例子中,bag就是文章,instance就是单词。又如在医学图像领域,CT图被标定为有无病症,而一个人有病症是因为在CT图的某个区域被检测为病灶区域。我们往往只有CT图的标注,但没有CT图中每个区域的标注。这时,bag就是CT图像,而instance就是CT图中的小区域。
在这篇论文中,就是使用多示例学习来处理从图片出提取单词这一问题。对每一个单词来说,标注中含有该单词的图片就是正例的bag,图中的区域就是instance。
由此,我们使用多示例学习方法进行两步迭代,第一步是利用当前算法,选出正例bag中最有可能是正例的instance、以及负例bag的instance。这样,我们就有了大量instance的标签(1000个单词)。
第二步是利用选出的正例instance进行训练,更新训练,这就是一个监督学习的过程了。这样迭代下去,就可以对图片的区域进行分类。
这样给出一个图片的区域,我们就可以提取所需要的单词。文章采用的是针对目标检测改进版的多示例学习方法Noisy-OR MIL,来自(《Multiple instance boosting for object detection》)。
可以看出,最核心的两个问题是
怎么找最有可能时正例的instance(图像区域)和用什么网络架构对选出的instance进行训练。
测试的时候,给出一幅图像i,对每个区域j,计算该区域包含单词w的概率,计算出图像 i包含单词w的概率。
将图像输入训练好的全连接网络,输出12*12的特征图,特征图每个位置代表了图像上的一个区域(可能有重叠),利用这个特征图进一步产生词的概率。
训练的时候,我们把不同区域的特征输进网络,然后做一个多标签的预测。比如某一个标签是‘dog’,如果所有的区域特征输进网络,得到的结果都不是'dog;,我们判定该图像在‘dog’这个标签上是一个负包。否则是一个正包。根据图像对应的caption,我们可以知道图像在‘dog’上的gt究竟是正包还是负包。这就可以计算损失函数。
如果损失函数不为0,更新梯度值。
利用传统 的方法生成若干captions,这一部分没看懂。
建立DMSM模型计算captions和image的相似度。DMSM是一对神经网络。
将前面那个全卷积网络的最后fc表示叠加三个tanh非线性层,作为图像特征的表示。图像特征提取完成。(Q)
引入DSSM,将文本映射到特征空间。文本特征提取完成。(D)
采用余弦相似度计算二者的相似程度。
r是平滑因子。D是多个caption的集合。
经过这三部分,模型的框架搭建起来。不过不能实现端到端的训练,需要分阶段训练。这也是bottom_up机制存在的问题。