Tensorflow实现:做自己的图像描述(附源码和数据)

Image Caption是一个融合计算机视觉、自然语言处理和机器学习的综合问题,它类似于翻译一副图片为一段描述文字。该任务对于人类来说非常容易,但是对于机器却非常具有挑战性,它不仅需要利用模型去理解图片的内容并且还需要用自然语言去表达它们之间的关系。除此之外,模型还需要能够抓住图像的语义信息,并且生成人类可读的句子。
简单理解为:为图片生成描述语言,输入为一张图片,输出为客观描述图片的句子。
研究难点与挑战: 
(1)多模态理解与推理,包括:图片(捕捉真实世界的原始刻画);自然语言(代表更高一级的抽象) 
(2)复合理解与推理,包括:多个元素(物体、动作、场景、事件等);多步、迭代过程
论文:Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge. 
全文: http://arxiv.org/abs/1609.06647
效果举例:

原图:

Tensorflow实现:做自己的图像描述(附源码和数据)_第1张图片

描述生成结果:

  0) a group of young men standing next to each other . (p=0.002236)
  1) a group of people standing next to each other . (p=0.001442)

  2) a group of young men standing next to each other on a field . (p=0.000307)

Tensorflow实现:做自己的图像描述(附源码和数据)_第2张图片

 

原图:

Tensorflow实现:做自己的图像描述(附源码和数据)_第3张图片

生成评论:

Captions for image h6.jpg:
  0) a woman standing next to a red and white umbrella . (p=0.000036)
  1) a woman standing in the middle of a river with a red umbrella . (p=0.000002)
  2) a woman standing next to a red and white umbrella (p=0.000002)

这个描述的伞问题比较大,

Tensorflow实现:做自己的图像描述(附源码和数据)_第4张图片

 

代码Github链接:https://github.com/HqWei/Image_Caption_Generation

这个程序实际是复现文章 Show and Tell:

网络结构:

左边为在ILSVRC-2012-CLS图像分类数据集上预先训练的Inception v3的CNN模型,右边为LSTM

Tensorflow实现:做自己的图像描述(附源码和数据)_第5张图片

Show and Tell 模型是 编码器-解码器(encoder-decoder) 神经网络的一个案例。它首先将图像“编码”成一个固定长度(fixed-length)的向量表示,然后将此向量表示“解码”成自然语言描述。

图像编码器(encoder)是一个深度卷积神经网络。这个类型的网络被广泛应用于图像任务,同时也是目前最先进的(state-of-the-art)目标识别与目标检测技术。我们选择的网络是在 ILSVRC-2012-CLS 图像分类数据集上预先训练的 Inception v3 图像识别模型。

解码器(decoder)是一个长短期记忆(LSTM)网络。这个类型的网络常用于序列建模任务,如语言建模和机器翻译。在 Show and Tell 模型中,LSTM网络被训练成基于图像编码(image encoding)的语言模型。

说明文字中的单词用嵌入模型(embedding model)表示。词汇中的每个单词都与训练过程中学到的固定长度向量表示相关联。

相关链接:https://blog.csdn.net/darkrabbit/article/details/81639829

你可能感兴趣的:(Image,caption)