图片描述(image cpationing) 源码实现——让计算机用简短的句子描述一张图片

自动生成图片描述:NeuralTalk2

一、基本信息

NeuralTalk2是斯坦福计算机视觉人工智能实验室的一个项目,利用循环神经网络(RNN)和卷积神经网络(CNN)来描述图片内容,NeuralTalk2 比第一版训练速度更快(使用了GPU),并且具有更好的性能表现。
本篇博客注重该项目的源码实现部分,论文解读部分后续会上传。下面是该项目是一些资源连接

官网
http://cs.stanford.edu/people/karpathy/deepimagesent/
论文
Deep Visual-Semantic Alignments for Generating Image Descriptions
Github源码
https://github.com/karpathy/neuraltalk2

二、源码实现

1.环境及配置要求(建议)

  • Linux系统(我用的是Ubuntu 16.04-LTS)
  • GPU图形处理器(我的是GTX-980Ti,如果没有,也可以运行cpu版代码)
  • python(2或3都可以,我用的是3)
  • CUDA和cuDNN_v5.1(如果是其他版本的,可以看后文的cudnn多版本共存部分)
  • …(剩余环境依赖在后面需要用到的时候慢慢装)

2.安装依赖和各种包

由于测试代码部分由lua脚本语言写成,所以我们需要安装Torch,在Ubuntu下,利用如下指令完成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  #如果你用的是zsh,就输入source ~/.zshrc,ubuntu默认为bash

想要了解有关Torch的跟多信息,可以点击http://torch.ch/查看相应安装文档。
Torch安装好以后会自带LuaRocks,我们需要用它来安装一些必要的包:

$ luarocks install nn
$ luarocks install nngraph 
$ luarocks install image 

接着,因为我们要加载和保存json文件,所以我们还需要cjson库,安装方法如下

$ git clone https://github.com/mpx/lua-cjson.git
$ cd lua-cjson
$ luarocks make

其他安装方法可以查看官方安装文档:https://www.kyne.com.au/%7Emark/software/lua-cjson-manual.html

由于NeuralTalk2默认是采用GPU实现的,所以必须确保你的系统上已经正确安装了对应GPU的NVIDIA驱动,以及CUDA开发者工具包和cuDNN(建议版本CUDA7.5或CUDA8、cuDNNv5.1,安装方法可以看这篇文章的CUDA安装部分http://blog.csdn.net/ksws0292756/article/details/79179286
注意,如果你之前已经安装了NVIDIA和CUDA,但是你的cuDNN版本不是v5.1,而是更高版本时(我预装版本是v6.0),就需要再去下载cuDNNv5.1,下载地址是:https://developer.nvidia.com/rdp/cudnn-download#a-collapseTwo(下载需要登录nvidia帐号)
下载好以后,有两种方法,一种是删掉原先的cuDNN版本,重新安装cuDNNv5.1版本,另一种是添加新的环境变量,使两种版本共存,操作如下:

方法一:删除原来版本

$ sudo rm -f /usr/local/cuda/lib64/libcudnn* #强制删除libcudnn相关文件
$ sudo rm -f /usr/local/cuda/include/cudnn.h #/强制删除cudnn头文件
#注意,上面的两处删除路径是cuda的默认路径,具体删除时根据你自己的路径来删除

$ cd /Downloads/cuda #将下载的cuDNN解压,得到名为cuda的文件夹,进入
#添加cudnn到cudn库
$ sudo cp include/cudnn.h /usr/local/cuda/include/
$ sudo cp lib64/libcudnn* /usr/local/cuda/lib64/
#修改添加到cuda库的cudnn权限
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h 
$ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

方法二:与原来版本共存

#分别在lib64和include文件夹下面建立一个空文件夹,假设取名cudnn_v5.1
$ cd /usr/local/cuda/lib64
$ sudo mkdir cudnn_v5.1
$ cd /usr/local/cuda/include
$ sudo mkdir cudnn_v5.1

#然后进入到cudnn_v5.1解压出的cuda文件夹内,将相关库文件拷贝至刚才创建的文件夹
#添加cudnn到cudn库
$ sudo cp include/cudnn.h /usr/local/cuda/include/cudnn_v5.1
$ sudo cp lib64/libcudnn* /usr/local/cuda/lib64/cudnn_v5.1
#修改添加到cuda库的cudnn权限
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h 
$ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

接着,打开bashrc文件,添加环境变量

$ gedit ~/.bashrc # 如果你用的是zsh,就改成~/.zshrc

在文件中加上下面一行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64/cudnn_v5.1

这里写图片描述

安装完驱动和CUDA工具包等以后,再安装下面的cutorch包和cunn包

$ luarocks install cutorch
$ luarocks install cunn

接着,安装cudnn.torch,在安装cudnn.torch之前,先确认你的电脑已经进行了如下配置

  • 安装了v5.1版本的cuDNN
  • 安装了7.0以上版本的CUDA
  • 将放到了环境变量所包含的路径当中($LD_LIBRARY_PATH) ,具体方法参见安装cuDNN的教程

然后,输入下面的指令建立Torch链接:

$ git clone https://github.com/soumith/cudnn.torch.git
$ cd cudnn.torch
$ luarocks make cudnn-scm-1.rockspec

为了能够训练你自己的模型,你还需要安装loadcaffe

$ sudo apt-get install libprotobuf-dev protobuf-compiler
$ CC=gcc-5 CXX=g++-5 luarocks install loadcaffe 
#如果你的系统不是Ubuntu16.04,则只需要luarocks install loadcaffe即可

由于需要使用hdf5文件来存储预处理数据,所以还需要安装torch-hdf5 和 h5py,
安装torch-hdf5

$ sudo apt-get install libhdf5-serial-dev hdf5-tools
$ git clone https://github.com/deepmind/torch-hdf5
$ cd torch-hdf5
$ luarocks make hdf5-0-0.rockspec LIBHDF5_LIBDIR="/usr/lib/x86_64-linux-gnu/"

安装h5py
对于Anaconda/MiniConda,可以使用

$ conda install h5py

对于Canopy,可以使用

$ enpkg h5py

也可以使用pip安装

$ pip install h5py

以上就安装完了所有的依赖,如果在上面的安装步骤中都没有出错的话,基本上就可以将代码成功的跑起来了(作者吐槽:依赖确实很多,但是这也是没办法的事情)

3.测试运行

为了能快速看到代码运行的结果,我们这里就直接使用作者已经训练好的模型(如果自己训练,大概需要2~3天的时间),点击下面的链接下载:cs.stanford.edu/people/karpathy/neuraltalk2/checkpoint_v1.zip
下载好以后,解压到neuraltalk2项目文件夹里面(也可以解压到别处,只是解压到这里比较方便),然后,运行下面的指令:

$ th eval.lua -model /path/to/model -image_folder /path/to/image/directory -num_images 10 

这里-model后面的路径代表模型路径(可以是相对路径,也可以是绝对路径),-image_folder后面的路径是你想要测试的图片的文件夹路径,-image_folder后面的数字代表图片的数量,如果想要测试所有图片,就输入-1

具体用法如下:

$ cd ~/Works/NeuralTalk2/neuraltalk2 #进入到neuraltalk2项目文件夹,具体路径看你自己的存放位置
$ th eval.lua -model model_id1-501-1448236541.t7 -image_folder ~/Works/NeuralTalk2/pics -num_images 4
$ python -m http.server #如果你使用的是python2,则用`python -m SimpleHTTPServer`指令启动服务器

最后,在你的浏览器中访问localhost:8000就可以看到程序的运行结果啦,下面是我的运行结果:
这里写图片描述

如果你想训练自己的神经网络模型,可以参考github源码上面的介绍,在这里就不多说明了。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值