论文链接:https://arxiv.org/pdf/1411.4555.pdf
代码链接:https://github.com/karpathy/neuraltalk & https://github.com/karpathy/neuraltalk2 & https://github.com/zsdonghao/Image-Captioning
主要贡献
在这篇文章中,作者借鉴了神经机器翻译(Neural Machine Translation)领域的方法,将“编码器-解码器(Encoder-Decoder)”模型引入了神经图像标注(Neural Image Captioning)领域,提出了一种端到端(end-to-end)的模型解决图像标注问题。下面展示了从论文中截取的两幅图片,第一幅图片是NIC模型的概述,第二幅图片描述了网络的细节。NIC网络采用卷积神经网络(CNN)作为编码器,长短期记忆网络(LSTM)作为解码器。
实验细节
- 在文章中,作者提出使用在图像分类任务(Image Classification Task)中预训练好的Inception v2作为编码器,将其最后一个隐藏层提取到的特征作为解码器隐藏层的初始状态。但是,在官方给出的源码neuraltalk中,作者使用了预训练好的VGG16作为了编码器,将Layer FC-4096提取到的特征作为了LSTM隐藏层的初始状态(详见neuraltalk/py_caffe_feat_extract.py line160)。在官方给出的源码neuraltalk2中,同样使用了VGG16作为编码器提取图像特征(详见neuraltalk2/train.lua line27)。在zsdonghao对该方法的TensorFlow实现中,使用了Inception v3作为编码器(详见zsdonghao/Image-Captioning/inception_v3(for TF 0.10).py)。
Hence, it is natural to use a CNN as an image “encoder”, by first pre-training it for an image classification task and using the last hidden layer as an input to the RNN decoder that generates sentences.
An “encoder” RNN reads the source sentence and transforms it into a rich fixed-length vector representation, which in turn in used as the initial hidden state of a “decoder” RNN that generates the target sentence.
- 在文章中,作者提出使用随机梯度下降(Stochastic Gradient Descent)训练网络。在官方给出的源码neuraltalk2中,作者给出了多种训练网络的优化器及其参数(rmsprop,adagrad,sgd……详见neuraltalk2/misc/optim_updates.lua)。zsdonghao/Image-Captioning使用SGD训练网络,初始学习率2.0,学习率衰减因子0.5,学习率下降后每一代的数量8.0。
It is a neural net which is fully trainable using stochastic gradient descent.
- 在文章中,作者提出按最大似然训练模型参数。在zsdonghao/Image-Captioning中,作者使用了tensorlayer.cost.cross_entropy_seq_with_mask()(详见zsdonghao/Image-Captioning/buildmodel.py line665)。
The model is trained to maximize the likelihood of the target description sentence given the training image.
- 在neuraltalk2中,LSTM层的输入(Embedding层的输出)向量维度和LSTM隐藏层的向量维度均设置为512。zsdonghao/Image-Captioning的设置相同。
- 在zsdonghao/Image-Captioning中,作者将vocabulary_size设置为12000。
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者及原文出处!