对Image caption的一些理解(看图说话)
1. 背景
在计算机视觉中,图像分类和目标检测任务是比较成熟的领域,已经应用到实际的产品领域。而“看图说话”要实现的功能是,给定一张图像,计算机能告诉我们图片的内容,显然,这会使一个比较复杂的任务,因为它涉及到了如下的子任务:
1)检测图像中的目标;
2)目标的属性,比如颜色、尺寸等;
3)目标之间的关联;
4)语言模型,用于把上面的信息表述成句子;
2. 相关的论文
2.1 “Show and Tell: A Neural Image Caption Generator”
为了实现看图说话的功能,初步的想法是使用多个模型,分别实现上面的各个子任务,然后把每个子任务的结果进行逻辑上的组合。作为谷歌的大作,“Show and Tell: A Neural Image Caption Generator”这一篇论文首次使用端到端的神经网络实现图文转换功能,该网络结构与语言翻译模型的对比如下,
语言翻译模型:source sentence —> encoder —>fixed length vector —> decoder —> target sentence
图文转换模型:source image —> encoder —>fixed length vector —> decoder —> target sentence
可以看出,它们是很相似的,区别在于输入的不同,语言翻译模型的输入是序列数据,对应的encoder便是RNN了,而图文转换模型的输入是图片,对应的encoder则为CNN网络,具体的网络结构如下,
注:引用自论文“Show and Tell: A Neural Image Caption Generator”
在训练阶段,模型经过两大阶段:图像信号的forward propagation和误差信号的back propagation。前向传播的公式表示如下,
误差信号的定义如下,
其中,,因此,优化的目标是给定任意输入图像I,输出序列S的联合概率最大化,这里是将联合概率展开成了条件概率的乘积的形式。
2.2 “Captioning Images with Diverse Objects”
上面的文章使用的是有监督的方法,只能识别训练集中出现的目标,因此在应用中是非常受限制的。大牛Lisa Anne在CVPR 2016上发的一篇文章“Deep Compositional Captioning”,第一次解决了描述novel 目标的目的(训练集中不存在该目标),作为一篇oral文章,作者提供了文章的代码,https://github.com/LisaAnne/DCC。
为了优化半监督看图说话模型的效果,作者所在团队在CVPR 2017发了一篇新的文章“Captioning Images with Diverse Objects”,这里主要阐述这篇文章中的思想。
2.2.1 网络结构
文中将所提模型称之为“Novel Object Captioner (NOC)”,其网络结构如下图,它包含了三个子任务:语言建模+目标识别模型+图文生成。从直觉上可见,当联合训练时,模型可以实现下面的目标:(1)生成读起来通顺的文本;(2)识别图像中的视觉目标;(3)生成合理的图片描述。当(2)和(3)互补时,可以使的生成的文本包含(2)的结果,这里(2)为imagenet 1000类的目标,(3)为MSCOCO caption数据集,只包含了80类目标,也即在inference阶段,生成的文本中可以包含其余的920种目标。
2.2.2 优化的目标函数
模型优化的目的是,在给出图像描述的同时尽可能多地识别图中的物体,包括image caption数据集(paired)中未出现或者很少出现的目标,在训练过程中联合优化Image model、Language model 和 Caption模型,整体的目标函数如下,
2.2.2.1 Image-specific Loss
与常用的CNN分类模型不同,这里我们希望能够尽可能全地描述出图像中存在的所有目标,所以这里的CNN为一个多标签模型,其cross-entropy 损失如下,
其中, 表示标签的总个数, 表示第 个输出的真实标签,0或者1。
2.2.2.2 Text-specific Loss
该路分支是一个语言模型,输入文本序列,预测下一个词,损失函数定义如下,
2.2.2.3 Image-caption Loss
该路分支用于根据输入图像,输出对应的sentence描述,损失函数定义如下,
其中,
代码链接:https://github.com/vsubhashini/noc/tree/recurrent/examples/noc
3. 数据集介绍
数据集名称 | sentence数量/每幅图像 | 图片数量 | 数据集介绍 |
---|---|---|---|
Flickr 30k | 5 | 3.1w | http://web.engr.illinois.edu/~bplumme2/Flickr30kEntities/ |
MS coco | 5 | 8w+ | https://arxiv.org/abs/1504.00325 |
由上表可以看出,每幅图片对应了5个sentence,这是因为给定一幅图像,不同的人对它的描述会是多种多样的,所以这样构造训练集,是很合理的。
4. 评测方法
在得到了看图说话模型后,有多种用于评测模型效果的指标,比如BLEU, METEOR, ROUGE 和 CIDEr,这里主要解释BLEU,在解释BLEU之前,需要说明一下n-Gram模型。
4.1 n-Gram模型
n-Gram模型用于对一个序列的联合概率进行建模,也就是估计一个序列(比如一句话)出现的可能性。举例来说,比如一句话有m个词,分别为,若想求联合概率,很直接地我们会想到链式法则,即将联合概率的求解分解如下,
n-Gram模型的假设条件是,第k个词出现的可能性只于相邻的n个词有关,用公式表达如下,
这里的n可以为1,2、、、,n越小,模型的计算量会越小,同时模型的表达能力也会越弱。条件概率是基于语料库中对词频的统计得到的,这种建模方式与神经网络建模有所不同,它属于传统统计机器学习的范畴,不会涉及到模型的训练和参数优化。
4.2 BLEU
BLEU衡量的是机器预测的结果(candidate text)和人工标注的结果(reference texts)之间的相似性,取值范围为[0, 1],值越大,表明两者越相似。更详细的解释参见微软的文章https://arxiv.org/abs/1504.00325,如果想直接看中文的话,可以参见 https://livc.io/blog/190。
5. 本地模型效果
根据作者提供的源代码,感兴趣的读者可以跑一下效果。另外,这里提两个待改进的点:(1)论文中将CNN得到的Embedding特征和语言模型得到的Embedding特征进行“Elementwise sum”操作。然而,前者属于图像特征空间,后者属于语义特征空间,可以从多模态学习领域中找些思路;(2)如何更好地引入注意力机制,也值得去研究。
6. 参考文献:
https://arxiv.org/abs/1411.4555