image caption初探

看图说话怎么玩

image caption初探_第1张图片

1、首先你需要一些有标题的数据集比如coco的image caption。Flickr8k数据集也不错。

2、基础模型框架

可以参考这个作者写的代码(初级):https://github.com/anuragmishracse/caption_generator

image caption初探_第2张图片

该作者使用的数据集vocab_size字典库的大小为8256. 模型的输入X的其中一部分是(224,224,3)的图像经过Vgg16(include top)后得到4096的张量,另外一部分是该图长度为40的caption。模型最后输出一个word(one-hot表示)。

该做法的几个细节:

在训练样本制作的过程中,input_seq 取值为该图像对应caption的任意长度的前k个word(不够40长度的补0)。输出只有一个预测值,即target_seq = word

我个人不太喜欢这样的做法,我的做法如下:

image caption初探_第3张图片

    在我的模型中caption的长度直接拉长到了51维(上面提到的模型是40维)图像部分基模型使用inception_V3. 最后的输出部分的shape为(None,51,13000)。具体训练样本制作的过程如下:

例如:caption = {a person on a skateboard and bike at a skate park.}

input_seq = { a person on a skateboard and bike at a skate park. }  #长度不够51补0

target_seq = {a person on a skateboard and bike at a skate park.  } #长度不够51补0

训练样本即为:X = [ img(299,299,3), input_seq ]         Y = [ target_seq ]

    这是训练部分。 但对于测试部分X没有input_seq怎么办?

设X[0] = [img(299,299,3), ""] 由X[0] 得到模型的预测结果P[0].

X[1] =  [img(299,299,3), " P[0][0]"], 由X[1] 得到模型的预测结果P[1].

X[2] =  [img(299,299,3), " P[0][0] P[1][1]"], 由X[2] 得到模型的预测结果P[2].

当P[k+1][k+1]==时停止对该img的预测。{P[0][0],P[1][1],...,P[k][k]}即为所求。






你可能感兴趣的:(image caption初探)