初次接触Captioning的问题,第一印象就是Andrej Karpathy好聪明。主要从他的两篇文章开始入门,《Deep Fragment Embeddings for Bidirectional Image Sentence Mapping》和《Deep Visual-Semantic Alignments for Generating Image Descriptions》。基本上,第一篇文章看明白了,第二篇就容易了,研究思路其实是一样的。但确实,第二个模型的功能更强大一些,因为可以生成description了。

Deep Fragment Embeddings for Bidirectional Image Sentence Mapping:

这篇论文发表在14年的NIPS上,主要解决的问题集中在retrieval的问题,没有生成description。还是先介绍一下模型吧,以下这张图其实可以完全概括了

输入的数据集每一个样例由一张图片,五个manual句子描述。

对于句子的处理,主要是处理单词之间的关系。类似于上图右边,解析出单词之间的依赖关系,叫做triplet ,R就是关系,而w1,w2就是单词的representation,是1-of-k的,通过以下的关系把triplet映射到一个非线性的空间,

s是h维的向量特征向量,f是一个激活函数,是对应的关系的矩阵,但它是需要学习的参数。是通过训练得到的固定的参数矩阵,至于怎么得到的,我没有看过索引的论文,而源代码读入的数据直接使用了,我就没有仔细研究。激活函数论文里使用了ReLU,而公开的源代码里提供了很多其他类型的函数,然而并没有试跑过。那为什么需要激活函数呢?我猜想大概是(未探究过正确与否)非线性的特征会有更好的拟合效果吧,联想到了深度学习里的激活函数。

对于图片的处理。使用RCNN,提取top 19个Region和一张全图作为特征。这里主要是提取最后一层的4096维的向量作为特征表示,经过以下式子映射到h维的特征空间中。RCNN网络结构可以进行微调,也可以不微调。在这里,需要学习的参数是

计算Image Fragment 和 sentence Fragment的相似度主要对两个特征向量进行内积运算。这就很粗暴了。这样计算相似度,看起来似乎不太妥当,因为每一个图片Region的向量貌似并不能找到一个标准,至少相似度作为一种距离,这里好像并没有单位吧。但是,假如认为v和s在同一个特征空间的话,那么,一切都很顺其自然了,因为内积不就是夹角吗?还记得怎么定义希尔伯特空间的吗?

恩,对于两个模态的学习,找到一种方法把他们映射到同一特征空间非常重要。

最后一步就是定义损失函数了,这里加了一个正则化项,我看了代码对正则化怎么搞的理解又加深了,

现在,怎么使得语义上使对应的fragment的变得相似很重要,这自然是通过学习参数了。AK首先用一种简单的方法,定义alignment目标函数为

当两种fragment出现在同一image-sentence pair中时,注意是image-sentence pair,就把y置为1,否则为 -1。是一个normalize项,具体可以看代码怎么实现的。通过这样简单的设置,不就使得当两种fragment出现在同一image-sentence pair中时,相似度朝着大于1的方向发展,否则朝着小于-1的方向发展了吗?因为式子前面有1减去,而且是一个max和0比较的。

但是,两种fragment出现在同一image-sentence pair中不代表他们就是相对应啊。注意,以下相当于提升性能吧,因为即便没有以下的multiple instance learning也是可以有结果的。因为,AK想到了一种方法,通过有约束的不等式求解,目标函数自然还是最小化了,得到

这称为mi-SVM。太厉害了,他是怎么知道有这种方法的呢?限制条件要求参数y至少有一个值为+1。论文中使用了一种启发式求解的方法,毕竟直接优化看起来还是很难的,具体的求解过程是对于y的值设置为,如果没有+1,就把内积最大的对应的y设为+1。

另外定义了一个global目标函数。首先计算整张图片和sentence的相似度,n是一个平滑项

Global目标函数主要与image和sentence对应的相似度作为比较。通过与所在的行和列比较,使得目标函数朝着令匹配的比不匹配的 的方向优化。

最后优化时,使用的求导的链式法则。整个优化的过程使用SGD的方法。总的来说,是参数的学习使得两种模态的信息可以对应起来。

实验评估的方法,实验数据集是随机选出句子与对应的图片。通过计算,并在每一个句子对进行排序,看最匹配图片的 出现在序列的位置,定义一个R@K,K代表位置,即在位置K以前出现最匹配图片的百分比,通过对此比较评估Retrieval的性能。

作者Andrej Karpathy的代码,我看的时候自己加了注释,放在这里共享吧,希望对你有点帮助吧。http://pan.baidu.com/s/1i5M8xk5

Deep Visual-Semantic Alignments for Generating Image Descriptions:

这篇论文相对于上一篇Deep Fragment Embeddings for Bidirectional Image Sentence Mapping,是可以生成description了,而且retrieval也得到了提升。这里,句子中提取的不再是dependency,而是首先对于每一个单词都生成一个特征向量,这是通过双向的RNN(BRNN)生成的,因为RNN它其实包含了上下文的信息,所以认为是与整个句子的语义相关。是1-of-k的向量。RNN的函数如下

对于图片,依然使用的是RCNN的模型。而且,对于image和sentence对应的相似度计算方法也有所改变,,整个模型变成如下

以上模型通过训练之后,学习到的只是word与image的region的对应关系,这可能会使得邻近的单词(它们可能相关)被对应到不同的label中。这里作者通过使用马尔科夫随机场来输出最佳的每个word对应的region的序列。马尔科夫随机场对应的势函数为。而是能量函数,注意前面是负值,要使得最后序列的概率最大,则能量函数应该尽量小。所以,这里定义的能量函数的条件为,使用的是链式条件随机场的形式

对于后面一项,当两个前后的word分配同一个标注的时候,希望能量函数为0(即尽量小),否则为。但是对于第一项……暂时还没想明白,可能认为是固有的属性,所以直接加入。当越大,意味着如果希望能量函数越小,分配到同一个box的连续的word会趋向于更多。

以上其实解决的是latent alignment的问题。

之后,通过使用generator的RNN的生成captioning,这个比较容易理解,模型为

具体的计算过程为

其中输入的单词是,而不是。其实这里我的疑问是,不输入第一部分生成correspondence的意义在哪里呢?仅仅是为了alignment?感觉挺奇怪的……

【CV论文阅读】Image Captioning 总结的更多相关文章

  1. 【CV论文阅读】Deep Linear Discriminative Analysis, ICLR, 2016

    DeepLDA 并不是把LDA模型整合到了Deep Network,而是利用LDA来指导模型的训练.从实验结果来看,使用DeepLDA模型最后投影的特征也是很discriminative 的,但是很遗 ...

  2. 【CV论文阅读】Unsupervised deep embedding for clustering analysis

    Unsupervised deep embedding for clustering analysis 偶然发现这篇发在ICML2016的论文,它主要的关注点在于unsupervised deep e ...

  3. 【CV论文阅读】生成式对抗网络GAN

    生成式对抗网络GAN 1.  基本GAN 在论文<Generative Adversarial Nets>提出的GAN是最原始的框架,可以看成极大极小博弈的过程,因此称为“对抗网络”.一般 ...

  4. 【CV论文阅读】+【搬运工】LocNet: Improving Localization Accuracy for Object Detection + A Theoretical analysis of feature pooling in Visual Recognition

    论文的关注点在于如何提高bounding box的定位,使用的是概率的预测形式,模型的基础是region proposal.论文提出一个locNet的深度网络,不在依赖于回归方程.论文中提到locne ...

  5. 【CV论文阅读】Detecting events and key actors in multi-person videos

    论文主要介绍一种多人协作的视频事件识别的方法,使用attention模型+RNN网络,最近粗浅地学习了RNN网络,它比较适合用于处理序列的存在上下文作用的数据. NCAA Basketball数据集 ...

  6. 【CV论文阅读】Dynamic image networks for action recognition

    论文的重点在于后面approximation部分. 在<Rank Pooling>的论文中提到,可以通过训练RankSVM获得参数向量d,来作为视频帧序列的representation.而 ...

  7. 【CV论文阅读】Rank Pooling for Action Recognition

    这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...

  8. 【CV论文阅读】Two stream convolutional Networks for action recognition in Vedios

    论文的三个贡献 (1)提出了two-stream结构的CNN,由空间和时间两个维度的网络组成. (2)使用多帧的密集光流场作为训练输入,可以提取动作的信息. (3)利用了多任务训练的方法把两个数据集联 ...

  9. 【CV论文阅读】YOLO:Unified, Real-Time Object Detection

    YOLO的一大特点就是快,在处理上可以达到完全的实时.原因在于它整个检测方法非常的简洁,使用回归的方法,直接在原图上进行目标检测与定位. 多任务检测: 网络把目标检测与定位统一到一个深度网络中,而且可 ...

随机推荐

  1. greenplum4.3.8.2安装

    GREENPLUM总体结构:   数据库由Master Severs和Segment Severs通过Interconnect互联组成. Master主机负责:建立与客户端的连接和管理:SQL的解析并 ...

  2. 仿陌陌的ios客户端+服务端源码

    软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...

  3. 洛谷 P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...

  4. eclipse自动为变量生成Get/Set函数

    启动Eclipse,打开demo工程.如图:   假定为成员变量test生成Get/Set函数. 光标定位到该成员变量,如图:   右键选择“source”-“Generate Getters and ...

  5. H5 canvas pc 端米字格 写字板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. jekyll 将纯文本转化为静态网站和博客 静态网站生成器

    jekyll 将纯文本转化为静态网站和博客 静态网站生成器 这个貌似对windows 支持不是很好~ 但是有支持,官方说不建议使用

  7. getQueryString(option)的用法

    //页面参数接收1.function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...

  8. Spring 实现 IoC

    理解 “ 控制反转(IoC)”   控制反转(IoC):用白话来讲,就是由 Spring 容器控制程序中类与类之间的关系,而非传统实现中,由程序代码直接操控.这也就是所谓 “控制反转” 的概念所在:控 ...

  9. [Python3网络爬虫开发实战] 6-Ajax数据爬取

    有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有.这是因为requests获取的都是 ...

  10. JavaScript之作用域和闭包

    一.作用域 作用域共有两种主要的工作模型:第一种是最为普遍的,被大多数编程语言所采用的词法作用域,另外一种叫作动态作用域: JavaScript所采用的作用域模式是词法作用域. 1.词法作用域 词法作 ...