【论文笔记】What Value Do Explicit High Level Concept Have in Vision to Language Problems?

来源:互联网 发布:古筝网络视频教学网 编辑:程序博客网 时间:2024/06/08 17:16

不知道大家在接触image caption各种模型的时候有没有发现一些共同点,个人感觉无非是改CNN,改RNN和改衔接方式,这其中可能包含几个问题。
CNN提取出的特征图虽然很适合图像问题,但作为输入直接衔接到翻译问题中合适吗?
CNN的输出要怎么加入到RNN中才能更好的使图像中的注意力信息被文本化呢?
多次输入效果真的不如单次好吗,如果多次输入不同呢?
还有最原始的问题,RNN对长句子的遗忘问题怎么解决呢?

很多论文就是对以上几个问题做了很多的改进和实验,比如说MAT: A Multimodal Attentive Translator for Image Captioning用了很新颖的CNN+encoder+attention+decoder的方式;本次要说的论文使用了BB+pooling的方式优化衔接过程;show attend and tell在CNN和RNN之间加入了上下文,使得每次都有顺序的看图像的不同部位……当然这些模型都取得了不错的效果。纵观CV和NLP中的各种模型的发展,给人一种由硬到软的发展趋势,也就是说类似hard coding(比如说卷基层到fc层的固定神经元数量的映射使得输入图像大小必须一致)的问题一直在向着soft coding发展,但随之而来的问题可能就是参数越来越多,网络越来越复杂。

好啦,以上是个人一点小见解,如果说的欠考虑的也欢迎大家留言讨论。言归正传,这篇论文不知道为什么读的时候非常之爽,可能与之前自己的想法有些许相通之处。如果说它主要解决了一个什么问题,我认为简而言之就是上述第一个问题,CNN提取出的特征图虽然很适合图像问题,但作为输入直接衔接到翻译问题中合适吗?。更详细的说,如何处理特征图才能更具有高层语意特征?因为我们要做的就是让图像变成一句话,所以语意特征是十分重要的。原文这样描述类似NIC、NeuralTalk这样简单的模型:This approach does not explicitly represent high-level semantic concepts, but rather seeks to progress directly from image feature to text.

那是怎么解决这个问题的呢?用attribute vector进行finetune,用detections进行预测再综合输出,得到具有较高层语意信息的RNN输入。根据原文的流程图,模型可以分成三个演化过程:1. Pretrained VGG. 2. Finetune on MSCOCO to make it a semantic model. 3. Using a detector.

这里写图片描述

1. Pretrained VGG
站在巨人的肩膀上,使用了在imagenet上预训练的VGG模型。

2. Finetune on MSCOCO to make it a semantic model
(来来来画重点了)
1) Attribute Vector
使提取出来的特征具有语意信息,顾名思义也就是说让特征图和单词句子挂钩,本模型使用了attribute vector。在训练集中的标注语句中提取了最常出现(至少5次)的256个词作为最具代表性的属性,这些词可以是任何词性,但是不区分时态和单复数(因为只是在标注训练集上,虽然非常可以代表训练图片的属性,缺点是词太少了,文章后面有用wordnet扩充,这个不重要这里就不说了)。
2)Finetune
将pretrained VGG最后输出改成256D的,进行多标签任务的分类(因为一个图片可能对应好几个属性)进行微调。这里对FC层使用xavier初始化,不同的层lr策略不同,并且使用element wise logistic loss function而不是MSE。总之把这一套做完,每张图经过网络之后输出的就已经是语意属性了。

3. Using a detector.
作者考虑很周全,想到了这样一个问题,给一张图过一次网络固然可以,很多以前的模型也是这么做的,但是语意就不完备了啊。比如说,我的图里有很多不同的物体和动作,如果只用一幅图直接过了那可能出来的属性就有一些预测不到,精度不够,但如果先做image detection,把BBs都过一遍,再结合起来,更细的粒度可能会带来更好的效果。为了computational efficiency,在经过检测网络后,将BBs聚类成m个,再取每一类IOU最大的k个框框,加上原图一共m*k+1个BB(将原图和BB一视同仁好吗?)。这样会出现m*k+1盒预测得到的attribute vector,对每一个属性取最大值做max pooling得到一个vector就是原文中的Vatt(I)了,这个向量就是将要输入到RNN中的。

后面的RNN部分使用的LSTM其实平淡无奇,对于不同的任务再这一部分稍有不同,看一看图就懂了。只有一点值得关注,初次输入使用的Wea*Vatt(I),也就是说多了一个参数矩阵Wea。这是我想到了NIC中是直接输入的特征图,这里又一次验证了开头的想法,模型变得越来越“软“了,什么东西都要乘个参数让模型自己学习一下。

这里写图片描述

Evaluation部分看起来也是蛮有趣的,因为作者很仔细的做了很多很多实验,严格的控制变量看起来头头是道~直接贴图

这里写图片描述

回顾一下,总的来说有几点心得:
语意信息、detection&soft。其他心得见开头啦~

若有不对,欢迎指正!

0 0
原创粉丝点击