图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)

文章目录

        • NIC
        • LSTM
        • Coding
        • Beam Search

NIC

图片标题生成器是基于CNN+LSTM的一种神经网络系统,以文献《Show and Tell: A Neural Image Caption Generator》为参考,作者构造了一种叫做NIC(Neural Image Caption)神经网络系统,以CNN提取图片特征,最后一个隐藏层(hidden layer)作为LSTM的输入。图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第1张图片
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第2张图片

LSTM

LSTM(Long Short-term Memory)是一种特殊的RNN(Recurrent Neural Network).

最后达到的效果是对于任意一张图片,可以生成对应的一句话标题。
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第3张图片
有关这篇文献的实现在GitHub上有很多,有一些基于MSCOCO数据集,有一些基于Fliker8k或者Flikr39k数据集,MSCOCO数据集的train、valid、test图片都要远多于另外两个。本文我们采用数据集Fliker8k实现。

Coding

environment
tensorflow 

这份代码把 train and val 放在一起,由于数据集较小,训练比较容易一点。
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第4张图片
config文件用来调整各种参数,由于train总共6000张图片,原始配置是epoch= 20,batch_size = 64,batch_size(批大小)与显存有关,batch_size越大训练速度会加快,但是很耗费显存,batch_size越小会很耗时间。实际情况下我们按自己的需要来确定批大小。
本次我们使用batch_size = 10,所以6000张图片,需要处理600次。

Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 16:05:27) [MSC v.1900 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.

IPython 5.8.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
600/600 [==============================] - 4547s 8s/step - loss: 1.6872 - val_loss: 3.3624
  0%|          | 0/1000 [00:00<?, ?it/s]
Epoch 00020: val_loss did not improve from 3.13169
Model trained successfully. Running model on validation set for calculating BLEU score using BEAM search with k=3
100%|██████████| 1000/1000 [30:41<00:00,  1.84s/it]
BLEU Scores :
A perfect match results in a score of 1.0, whereas a perfect mismatch results in a score of 0.0.
BLEU-1: 0.586872
BLEU-2: 0.328000
BLEU-3: 0.221105
BLEU-4: 0.107791

图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第5张图片
训练完成后,在model_data文件夹下会产生一系列HDF5文件,此时我们可以打开test.py文件,测试最终的效果。
生成的图片和原始图片都在test_data文件夹内。
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第6张图片
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第7张图片

图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第8张图片
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第9张图片

Beam Search

Beam Search(集束搜索)是一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。这样减少了空间消耗,并提高了时间效率,但缺点就是有可能存在潜在的最佳方案被丢弃,因此Beam Search算法是不完全的,一般用于解空间较大的系统中。
图片标题生成器(literature:Show and Tell: A Neural Image Caption Generator)_第10张图片
Beam Search 等于1的时候就退化到了贪心算法,在BLEU指标上贪心的Beam Search要比Beam Search = 20时评分低2个BLEU点。

We used the BeamSearch approach in the following experiments, with a beam of size 20. Using a beam size of 1 (i.e.,greedy search) did degrade our results by 2 BLEU points on average.

https://www.cnblogs.com/sddai/p/10552592.html

项目所用代码链接
https://download.csdn.net/download/weixin_46530492/13986124

你可能感兴趣的:(TensorFlow,python,深度学习,tensorflow,计算机视觉,算法)