image caption, 或者说叫image story teller,就是用一句话把一张图片的内容描述出来。
比较先进的是以下这篇论文所描述的方法:
Vinyals, Oriol, et al. "Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge". In IEEE Transactions on Pattern Analysis and Machine Intelligence, 2016. [pdf]
它采用一个CNN+LSTM的架构。CNN将一张图片映射为一个固定维数的向量,维数和LSTM中词的词嵌入维数相同,然后和LSTM中的序列一样,参与最终句子生成概率的预测。文中将CNN的映射看作LSTM的第-1层。所以整个模型的目标就是:已知当前图片作为输入的情况下,使描述图片的句子的概率最大。算法细节详见论文。
下面这个github项目是上面论文架构的tensorflow版本的实现:
Tensorflow-im2txt: https://github.com/tensorflow/models/tree/master/im2txt
后来Google Brain团队用这个方法参加了 2015 MSCOCO竞赛,和MS的团队并列第一。在models目录下有好多其它的tensorflow项目,咱们需要的是im2txt项目,但是使用时要把整个models目录都git clone下来。以上github链接中有详细的环境构建、构建训练数据以及训练模型的方法,下面简要叙述。
首先是环境的配置,要安装tensorflow1.0或更高版本,安装tensorflow的时候出现了好多错误,最终是在python的virtual env中安装成功的,具体安装方法可以参考tensorflow官方文档。然后要安装nltk和nltk data,安装nltk data的时候如果使用自带的接口下载,速度极慢,所以可以自行下载nltk然后导入。