Image caption——图像理解——看图说话

时间:2024-03-26 22:04:02

    本文章没有太多公式,仅仅讲述个人理解,主要怎对入门人士。文中定有许多错误,希望大家能相互交流。

    Image caption顾名思义,即可让算法根据输入的一幅图自动生成对应的描述性文字。有点类似于看图说话的感觉,此次我想讲的主要是自2015年出现的encoder-decoder这一些列模型以及他们的变体。纵观整个image caption的发展史,它们是层层推进,通过解决不同的问题,逐步完善技术发展。


1.任务综述以及早期做法

Image caption——图像理解——看图说话

    图像理解可以认为是一种动态的目标检测,由全局信息生成图像摘要。早先的做法例如《Baby Talk》,《Every picture tell a story》等都是利用图像处理的一些算子提取出图像的特征,经过SVM分类等等得到图像中可能存在的目标object。根据提取出的object以及它们的属性利用CRF或者是一些认为制定的规则来恢复成对图像的描述。这种做法非常依赖于1)图像特征的提取2)生成句子时所需要的规则。自然而然这种效果并不理想。

参考文献:

[1]Kulkarni, Girish, et al. "BabyTalk: Understanding and Generating Simple Image Descriptions." IEEE Conference on Computer Vision and Pattern Recognition IEEE Computer Society, 2011:1601-1608. 

[2]Farhadi, Ali, et al. Every Picture Tells a Story: Generating Sentences from Images. Computer Vision – ECCV 2010. Springer Berlin Heidelberg, 2010:15-29.


2.Neural Talk 和 Show and Tell

    在show and tell出现之前,利用RNN做机器翻译实际上已经取得了非常不错的成果。常用的做法是利用编码器RNN读入源语言文字生成中间隐层变量,然后利用解码器RNN读入中间隐层变量,逐步生成目标语言文字。当然,这里的RNN可能是LSTM或者是GRU等其他变体。

    受到这种启发,google团队则将机器翻译中编码源文字的RNN替换成CNN来编码图像,希望用这种方式来获得图像的描述。从翻译的角度来看,此处源文字就是图像,目标文字就是生成的描述。

    Image caption——图像理解——看图说话

通过预训练的InceptionNet提取图像的特征,然后将softmax前一层的数据作为图像编码过后的特征,传入LSTM。在这个图中少了一个图像嵌入矩阵,为了输入匹配,图像特征V还要乘以一个Wi,从而在维度上等于We*S。同样,图中在P1-Pn的位置少了一个输出变换矩阵Wo,要将中间变量转换成目标文字。

李飞飞的NeuralTalk同样如此,只是使用的是VGG+RNN,她们还做了一个工作就是利用片段图像生成局部区域的描述。这个工作主要是结合RCNN,将RCNN最后要输出的分类改成输出对object的丰富语义描述。做法等都同上,由于她们这个数据库是找AWS人工标记的也没有开源,暂时还复现不了。

Image caption——图像理解——看图说话

关于仿真:去年年底我写了一个neuraltalk的tensorflow版本,也跑过官方给的neuraltalk1,如果仅利用Flickr8k或者Flickr30k的数据,感觉很难跑出来论文中的结果,完全正确的图片并不多。这可也能是我调参技巧不够的问题。

小结:两者几乎同时提出来的这种encoder-decoder框架对后人做图像理解提供了一条鲜明的道路,接下来的几年在MSCOCO的leader board上几乎都是基于这种框架拿第一。这种做法也有很明显的缺点,比如图像特征仅仅只在开始的时候以bias的形式传入RNN,只关注了全局特征,模型也是学习到了一种模板然后再往里面进行填词等等。

参考文献:

[3]Karpathy, Andrej, and F. F. Li. "Deep visual-semantic alignments for generating image descriptions." Computer Vision and Pattern Recognition IEEE, 2015:3128-3137. 

[4]Vinyals, Oriol, et al. "Show and Tell: Lessons Learned from the 2015 MSCOCO Image Captioning Challenge." IEEE Transactions on Pattern Analysis & Machine Intelligence 39.4(2016):652-663.


3.gLSTM 和 att-LSTM

前者解决了图像仅在开始时传入LSTM的问题,后者则解决了仅传入全局特征的问题。

gLSTM我就不多说了,文章一共提出了3中方式,最终的目的就是让图像特征能参与每一个单词生成。


Image caption——图像理解——看图说话

att-LSTM则是非常有意思。别人都用全局图像信息作为图像特征,提取出的4096-d特征都是编码过后的,没有人能说得清每一个维度代表着什么。att-LSTM则是通过图像多标签分类来提取出图像中可能存在的属性。这些属性则是根据字典中出现频率最高的一些单词所组成的。利用手工剔除非法字符,合并不同时态,单复数形态的方式,认为的剔除噪声。剩下的就和之前一样,将att传入LSTM的偏置。具体看图,很明显。

Image caption——图像理解——看图说话

关于仿真:没有时间手动合并字典等操作(捂脸Image caption——图像理解——看图说话,其实就是自己懒),没做仿真

参考文献:

[5]Jia, Xu, et al. "Guiding Long-Short Term Memory for Image Caption Generation." (2015). 

[6]Wu, Qi, et al. "What Value Do Explicit High Level Concepts Have in Vision to Language Problems?." Computer Vision and Pattern Recognition IEEE, 2016:203-212.


4.show attend and tell

这篇cvpr2016文章的名字就是呼应2015的show and tell。其中最大的改进就是增加了attention机制,一口气解决了上面两个人分别解决的问题。文章提出了两种attention的方式,但是我感觉用soft-attention就够了,还方便理解。先上图

Image caption——图像理解——看图说话

不同于以往采用全连接层作为图像特征,这次是直接使用卷积层conv5_3作为特征。特征图大小通常为7*7*512(VGG),每个时刻传入LSTM的则是上一时刻的状态c,h以及加权过后的卷积层特征。attention在这里的作用就是做加权用的,对应不同的加权方式分为了两种。

借用https://blog.csdn.net/shenxiaolu1984/article/details/51493673 的一个图

Image caption——图像理解——看图说话

可以看到,不再使用全连接层代表图像,而是卷积层a的加权得到z来代表不同时刻的图像。论文同时做了一个可视化,这个也很有意思。

Image caption——图像理解——看图说话

关于仿真:githbu上有tensorflow的部分代码,我用VGG16提的特征然后跑的,但是感觉还是跑不出来论文BLEU-4这个指标,但是确实比NeuralTalk跑出来的结果好很多。

小结:加入了attention之后更加符合人眼直观感受,图中的object可以对应上生成描述中的名词了。然而缺点还在1)每个词都会对应一个图像区域,但有些介词动词等并不能对应实体,但这里强行对应图像中的某些区域有些不合常理。2)attention是基于卷积层7*7的加权,这对应到图中略显得有些模糊,而且不能准确定位的图中对应区域。

参考文献:

[7]Xu, Kelvin, et al. "Show, Attend and Tell: Neural Image Caption Generation with Visual Attention." Computer Science (2015):2048-2057.


5.Knoing when to look:

这篇文章主要解决了上述第一个问题,提出了一种自适应性的attention机制,使得模型可以自己决定生成单词的时候是根据先验知识(模板)还是根据图像中区域。模型整体思路

Image caption——图像理解——看图说话

其中和show and tell最主要的不同在于它attention机制,如下图:

Image caption——图像理解——看图说话

作者利用的是ht而不是ht-1来决定看哪里,同时认为ct是ht的残差结构。

具体可以参考这个:https://blog.csdn.net/sinat_26253653/article/details/79416234

中文版解释,写的很好

[8]Lu, Jiasen, et al. "Knowing When to Look: Adaptive Attention via A Visual Sentinel for Image Captioning." (2016):3242-3250.


6.SCA-CNN

前面所有人做的工作都是在解码器RNN上做文章,然而CNN也是不可忽略的一个重点。

文章主要是利用卷积层不同通道做attention,同时还利用了spatial attention机制,先来张图

Image caption——图像理解——看图说话

Image caption——图像理解——看图说话

由于卷积层不同通道所代表的信息不一样,比如Fig.1中cake经过卷积之后,并不是在所有卷积通道中都有响应,而是在特定的通道中出现了,提取出这些特定的通道,然后用spatil attention来处理(Fig.2中)得到最后的特征图。直观的角度来说,选取通道是决定看什么,spatial attention则是决定看哪里。最后得到的X显然比V的特征更具有纯粹性和代表性。

参考文献:

[9]Chen, Long, et al. "SCA-CNN: Spatial and Channel-wise Attention in Convolutional Networks for Image Captioning." (2016):6298-6306.


7.Neural baby talk 和 bottom-up and top-down

这两篇文章应该是2018cvpr的,只看了个大概,还没有仔细研读。

两者的共同点都是利用了object detection技术,首先提取出图像中可能的物体,再进行描述生成。

很早以前的做法所获得图像描述往往都是和图像很相关,但是不流畅。而利用深度学习之后,生成的描述变得越来越流畅,但是相关性却大打折扣。

放两张论文的方法图,具体的等我看完了再更。

Image caption——图像理解——看图说话Image caption——图像理解——看图说话

参考文献:

[10]Lu, Jiasen, et al. "Neural Baby Talk." (2018).

[11]Anderson, Peter, et al. "Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering." (2017).



转载自[Image caption——图像理解——看图说话综述(2015-2018)]https://blog.csdn.net/m0_37731749/article/details/80520144)