一行命令实现看图说话

1.项目介绍

大家好,我是ai-xlab的创始人覃秉丰,这次给大家介绍一个google的深度学习模型im2txt,这个模型的作用跟它的名字一样,image-to-text,把图像转为文字,也就是图片描述。

这个模型是使用 2015 MSCOCO Image Captioning Challenge的数据集训练出来的。

论文链接:

http://arxiv.org/abs/1609.06647

项目参考:

https://github.com/tensorflow/models/tree/master/research/im2txt

我对原始google的项目做了很多简化,减少了项目前期准备,优化了效果展示。

im2txt模型是一个深度神经网络模型,可以实现如下图像描述的效果:

对于生活中常见的一些场景,它还是可以比较正确地描述出图片中的情况。

该模型是一个encoder decoder模型。

encoder是编码器,它是一个CNN模型,常用于图像识别,目标检测等领域。各种常见的卷积网络都可以,比如,VGG,Inception,ResNet等等。

这里我们用的是使用 ILSVRC-2012-CLS数据集训练出来的Inception-V3模型。把图片输入Inception-V3中,可以得到一个固定长度的向量,这个向量可以看成是从图像中提取出来的特征。

decoder是解码器,它是一个LSTM模型,常用于语言模型或机器翻译等领域。我们把encoder中输出的固定长度的向量输入到decoder中,获得关于图像的描述。如下图所示:

图中的 表示图像的描述,每个s代表一个词,图中的 是每个词的词向量,比如word2vec。输出的 表示LSTM模型预测句子中的下一个词所对应的概率分布。表示正确词的对数似然估计。

2.环境准备

我的实验环境为:

Python-3.6

Tensorflow-1.12

其他版本的软件基本上也适用。

Python的安装建议使用Anaconda:https://www.anaconda.com/download/#macos。

Tensorflow的安装在Anaconda安装完以后使用命令:pip install tensorflow安装。

3.模型准备

因为github上放模型不方便,所以训练好的模型我存放在我的百度云盘上,大家可以通过云盘下载。

链接:

https://pan.baidu.com/s/1nYlWBoOQjzgP5-GYfutMQA

密码:khtx

模型下载好之后解压,然后把几个模型相关的文件存入项目文件夹的根目录中的model文件夹中,如下图:

4.运行模型

im2txt文件夹中是项目主要程序

images文件夹中是需要测试的图片

model文件夹中是训练好的模型

img2txt.py是可以直接执行的python文件

img2txt.ipynb是jupyter文件,推荐使用

显示看图说话只需要执行一行命令,在项目文件根目录执行:

python img2txt.py

或者用jupyter打开img2txt.ipynb,在jupyter中运行可以更方便查看运行结果。

5.运行效果

我随机找了一些照片来测试,其中包含一张我养的猫的照片。

图片的标题为模型给出的预测结果。

这张照片识别效果还是很好的,正确描述了图片中的主要物体鸟,并且正确识别了鸟的数量两只,图片的背景水也识别出来了。

我家的猫,模型给出的描述是“一张猫的特写图片,一只猫躺在沙发上”,描述基本上也算是比较正确。

预测结果是“一个年轻的男孩在草地上踢足球”,这个描述完全正确。

预测结果是“一个男人在冲浪板上冲浪”,描述也比较正确。

上面都是一些好的结果,当然也会很多识别不好的结果,比如下面这些:

预测结果为“一个女人穿着粉红色的雨伞站在人行道上”。

因为模型本身没有日常的生活常识,所以它不知道人是不会穿着粉红色雨伞在身上的。同时它对动作的描述不够准确,这个人穿着芭蕾舞裙,并且她是在跳舞。

预测结果为“水上冲浪板上的人”。

这次模型的预测结果就错得离谱了。

因为图中没有人,也没有冲浪板。

我们看到这幅图第一感觉应该是被图中漂亮的极光所吸引。不过模型还不具备欣赏美景的能力,所以它的没有注意到天上绿绿的光,和漫天星空,它只看到了这个石头有点像人,石头旁边的陆地有点像冲浪板。

总的看来,这个模型可以比较好的识别比较简单的场景的。不过由于它不具备推理能力,没有生活常识,欣赏能力,所以一些复杂情况的图片它就不能很好的判断了。

6.视频描述

既然AI可以做图像描述,那么视频描述肯定也是可以的。

video2txt.py是可以直接执行的python文件,可以传入一个视频并生成一个带有描述的新的视频。

video2txt.ipynb是对应的jupyter文件。

我找到星爷的经典电影大话西游来做测试,我们理想的效果应该是:

但实际上是:

很显然AI现在还看不懂电影,大家纯属娱乐就可以。

视频:

完整项目代码可以到我的github下载:https://github.com/Qinbf。喜欢的朋友,记得starfollow哦。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181129G086OQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券