天天看点

Image Caption浅谈(1)

引言

image caption,任务描述就是输入一张图片,输出关于这种图片的自然语言描述,是一种结合了CV和NLP的任务,相对于传统的目标检测,分割,这项任务无疑更具有挑战性,因为算法不仅需要检测到物体,还需要理解物体之间的关系,然后用自然语言描述出来。

seq2seq模型

在正式介绍image caption之前,需要谈谈机器翻译领域大名鼎鼎的seq2seq模型,思考这样一个问题,在翻译的时候,不同语言表达同样意思的时候,可能长度不一致,那么翻译模型如何解决这个问题呢? seq2seq打破了固定输入输出的模型,seq2seq模型是以编码(Encode)和解码(Decode)架构方式。Encoder通过学习输入,将其编码成一个固定大小的状态向量S,继而将S传给Decoder,Decoder再通过对状态向量S的学习来进行输出。具体实现就是用RNN(LSTM)对输入进行编码,得到固定长度的状态向量,再用RNN(LSTM)进行解码,框架如下图所示

Image Caption浅谈(1)

图中每一个box代表一个RNN(LSTM),上图已经是RNN在时间维度上展开的效果。整个过程可以抽象的描述为:

Image Caption浅谈(1)

具体关于seq2seq的详细内容这里不再啰嗦,有兴趣可以查阅相关的资料。

NIC(Neural Image Caption)模型

在seq2seq的启发下,google在2014年提出nic模型,nic模型可以说是encode-decode模型应用在image caption的开山之作,这个模型其实相对于seq2seq模型改动非常小,在seq2seq模型中输入的是自然语言然后用rnn编码,image caption中输入的是图片,只需要把模型的输入变成用CNN对图片进行编码。如下图:

Image Caption浅谈(1)

因为是google谷歌提出的,所以CNN用的自己的inception,在NIC的做法中,是把softmax之前的那层向量作为状态向量,传入lstm进行解码,在解码过程中,图像特征只是在最开始的时候输入,这是因为如果在每个时间节点都出入图像特征,容易把图像的噪声方法,也可能造成过拟合。

训练

在训练过程中 S0 S 0 是每个时刻要出入lstm的标记caption(groud truth)的one-hot编码,维度是词汇表的长度,需要通过Word embedding把 S0 S 0 映射到和图像特征同一维度, We W e 为Word embedding矩阵。每个时刻的输出由当前时刻lstm的隐状态决定。然后和当前时刻groud truth做对数似然损失。

测试

在测试的时候有2两种策略:

1当前时刻的输出作为下一时刻的输入。(这种方式就是一种贪心算法啊,每个时刻都取可能性最大的那个词)

2beamsearch,就是生成第1个词的时候,选择概率最大的2个词,假设为a,c,那么当前序列就是a,c;生成第1个词的时候,选择概率最大的2个词,假设为a,c,那么当前序列就是a,c;后面会不断重复这个过程,直到遇到结束符为止。最终输出2个得分最高的序列。

参考

1.Show and Tell: A Neural Image Caption Generator

2.https://www.cnblogs.com/Determined22/p/6910277.html

继续阅读