image caption初探

看图说话怎么玩


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

2、基础模型框架

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


该作者使用的数据集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

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


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

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

input_seq = {<BOS> 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. <BOS> } #长度不够51补0

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

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

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

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

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

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






  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值