Image Caption(看图说话,图像字幕)任务简介+neu
一. Image Caption任务简介
1.传统的计算机视觉任务
深度学习在图像领域取得了爆炸式的发展,这些任务的正确率直逼人类水平,可是:
2.计算机已经理解图像了吗?
这是faster-rcnn的一个目标检测结果,看似结果非常好,可是当我们把这张照片输入到一个计算机里时,它能告诉我们的只是:“这是马,这是人,这是狗”,这远远没有达到计算机已经理解图像这一个判断。我们希望的是,当输入这一张照片时,计算机能够告诉我们:“一个人骑在一匹马上,他的狗坐在马前面”。我们甚至希望计算机在看到这幅图片后能够说出下面这段话:“在一个阳光明媚的下午,一个穿着蓝色衣服的年轻小伙坐在一匹健壮的马上,他的爱犬坐在马的前面,他们相互对望着,看起来非常开心”。这样才能勉强说计算机已经理解了图像。
3.Image Caption涵义
(图像标注 图像字幕 看图说话)
本质是视觉到语言(Visual-to-Language,即V2L)的问题
这张照片是一年级看图说话的作业,上面的描述:”图上是什么时候?都有谁?在哪里?在干什么?在说什么?“ 正好对应了image caption任务的要求:根据图像给出能够描述图像内容的自然语言语句。这对人类来说实在是一个小儿科的任务,但是在计算机视觉领域却不能不说是一个挑战。因为这需要在两种不同形式的信息(图像信息到文本信息)之间进行“翻译”。
4.Image Caption 当前水平
和人类水平描述差距仍然明显!
关于image caption这个topic阶段性文章
• Explain Images with Multi modal Recurrent Neural Networks, Mao et al.
•Deep Visual-Semantic Alignments for Generating Image Descriptions,Karpathy and Fei-Fei
•Show and Tell: A Neural Image Caption Generator,Vinyalset al.
•Long-term Recurrent Convolutional Networks for Visual Recognition and Description,Donahue et al.
•Learning a Recurrent Visual Representation for Image Caption Generation, Chen and Zitnick
5.Image Caption 实际应用
图像标注问题如果能够得到很好的解决,那么价值是显而易见的
图像检索(更细粒度的搜索)
视力受损人士的生活辅助(计算机成为另一双眼睛)
6.Image Caption数据集
1. Microsoft COCO Caption数据集
• 原COCO数据集中约330,000张图像,人工地为每张图像都生成了至少5句标注,标注语句总共超过了约150万句
• MS COCO C5/C40
2. Flickr8K和30K
• 图像数据来源是雅虎的相册网站Flickr
• 数据集中图像的数量分别是8,000张和30,000张
3. PASCAL 1K
• 大名鼎鼎的PASCAL VOC challenge图像数据集的一个子集
• 20个分类,随机选出了50张图像,共1,000张图像
7.Image Caption评价标准
BLEU
• 图像标注结果评价中使用最广泛,设计初衷并不是针对图像标注问题,而是针对机器翻译问题
• 分析待评价的翻译语句和参考翻译语句之间n元组的相关性
二.Show and Tell: A Neural Image Caption Generator
1.摘要
• 对图像内容的自动描述是一个CV + NLP的AI问题
• 采用基于深度循环(recurrent)结构的生成模型,融合了近期在计算机视觉和机器翻译的前沿研究
• 模型学习的目标:给定训练图像,最大化其对应的目标描述语句的似然概率
• 结果:
BLEU-1 score指标
Pascal数据集:state-of-art:25分,该文59分,对比人类69分左右
Flicker30k: 56分提高到66分
SBU 19分提高到28分
2.introduction
• 这个任务比计算机视觉领域通常关注的图像分类、物体识别任务难很多
• 任务的目的:object detection+ object relation+ object attributes+object activity
• 同时expressed in natural language
• 除了视觉理解模型外,还需要一个语言模型
• 输入是图片I,训练的目标是最大化似然概率P(S|I),S是目标word序列S={S1,S2,…},Si来源固定词典
• 机器翻译:Encoder(RNN)+Decoder(RNN)
• 贡献:
end-to-end系统
state-of-art的sub-network的组合
NIC的效果超出state-of-art
3.model
• NIC类似于将image “翻译”成语言。最大化获得正确描述的条件概率(条件是给定input image)
• 是模型的参数,I是image,S是它对应的翻译结果
• S表示句子,所以长度没有限制,比较普遍的做法是使用chain rule计算联合概率
• 用RNN来model
4.LSTM
• 函数f的选择需要考虑它应对梯度消失和爆炸的能力
• LSTM的核心是memory cell c,对每个时刻的knowledge进行编码
• cell的行为是被门“gates”控制的
• 是否forget当前cell的值(forget gate f),
• 是否读取当前的输入(input gate i)
• 是否输出新cell的值(output gate o)
5.training
• Input: image I
• ground truth sentence:S=(S0 ,…, Sn)
• St是每个word的one-hot表示,维度等于词典的大小.
• 图片和words被映射到相同的空间,image通过CNN映射,words通过一个Word embedding We映射
• Loss是各个时刻上正确word的负log似然之和
• loss在全部参数(包含LSTM、CNN、We的全部参数)上寻求最小化
6.result
三.neuraltalk2测试
1.torch安装
$ curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash
$ git clone https://github.com/torch/distro.git~/torch --recursive
$ cd ~/torch;$ ./install.sh# and enter "yes" at the end to modify your bashrc
$ source ~/.bashrc
安装成功
2.依赖下载
sudo ~/torch/install/bin/luarocks install nn
sudo ~/torch/install/bin/luarocks install nngraph
sudo ~/torch/install/bin/luarocks install image
sudo ~/torch/install/bin/luarocks install hdf5
sudo ~/torch/install/bin/luarocks install loadcaffe
sudo ~/torch/install/bin/luarocks install cutorch
sudo ~/torch/install/bin/luarocks install cunn
(luarocks list命令查看是否安装所有需要的依赖)
3.代码模型
git clone https://github.com/karpathy/neuraltalk2(代码)
http://cs.stanford.edu/people/karpathy/neuraltalk2/checkpoint_v1.zip(模型)
th eval.lua -model model_id1-501-1448236541.t7_cpu.t7 -image_folder ./images/ -gpuid 1
4.结果
四.densecap 测试
1.依赖下载
luarocks install torch
luarocks install nn
luarocks install image
luarocks install lua-cjson
luarocks install https://raw.githubusercontent.com/qassemoquab/stnbhwd/master/stnbhwd-scm-1.rockspec
luarocks install https://raw.githubusercontent.com/jcjohnson/torch-rnn/master/torch-rnn-scm-1.rockspec
luarocks install cutorch
luarocks install cunn
luarocks install cudnn
2.代码模型
git clone https://github.com/jcjohnson/densecap(代码)
sh scripts/download_pretrained_model.sh(模型,可能下载很慢)
th run_model.lua -input_image imgs/elephant.jpg