Github源码:DenseCap

本篇博文是对论文DenseCap的源码实现,作者是斯坦福的Justin Johnson
项目地址:https://cs.stanford.edu/people/karpathy/densecap/
源码地址:https://github.com/jcjohnson/densecap
论文地址:http://arxiv.org/abs/1511.07571

注意事项:源码是15年写的,所以使用的是比较老版本的cuda和cudnn(8.0 v5.1),并且作者也没有在继续更新代码了,所以如果你想成功运行起来的话,尽量不要用太高版本的cuda,否则可能会出现文件丢失错误(libcudnn (R5) not found in library path.)

安装

安装以下依赖:

1
2
3
4
5
6
$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

(可选)安装GPU相关依赖(如果你不使用GPU跑代码,可以不装这里)

1
2
3
$luarocks install cutorch
$luarocks install cunn
$luarocks install cudnn

下载预训练模型

在命令行中键入下面的指令,运行脚本下载预训练模型(注意,下面的脚本文件在github上的项目代码里,所以你要先把github上的源代码下载下来,然后进入到项目目录里面)

1
$sh scripts/download_pretrained_model.sh

用图片来测试模型

源码中自带了一张大象的图片,你可以用下面的指令来对大象图片进行测试,如果你想测试自己的图片,把图片放到项目中的imgs文件里,然后修改指令后面的图片名称为你自己图片的名称就可

1
$th run_model.lua -input_image imgs/elephant.jpg

如果你没有GPU,记得要加上-gpu -1指令来告诉模型在cpu上指令(CPU上的指令速度较慢,我自己的执行情况是:GTX980Ti:0.3s 酷睿i5/7:5~10min)

以上指令会生成vis/data文件夹,这就是模型的运行结果,可以用下面的方式查看结果,

1
2
$cd vis
$python -m SimpleHTTPServer 8181(或者python -m http.server 8181)

然后,在浏览器中打开http://localhost:8181/view_results.html.

当然,如果你想一次运行数张图片,可以使用下面的指令,该指令会将指定路径下的图片全部执行

1
$th run_model.lua -input_dir /path/to/my/image/folder

问题:

我遇到了以下问题,这里列出我自己的解决方法,如果你还遇到了其他不同的问题,可以留言,我会尽快答复你

问题1:cutorch问题
提示找不到cutorch,或者其他什么相关的错误

解决办法:重新安装cutorch

1
$luarocks install cutorch

不幸的是,这个解决方法对我并没有用,我最后发现是因为代码运行的cutorch版本是5.1,而由于此时我安装了高版本的cuda(9),所以在使用上面的指令安装时,安装的是cutorch 5.2,所以提示找不多5.1的cutorch,最后,我重新换回了的cuda8.0,并重新安装cutorch,解决了问题,切换cuda版本的方法可以看这里:https://blog.csdn.net/ksws0292756/article/details/80120561

问题2:libcudd.5.so.5 找不到
主要原因还是cuda和cudnn的版本问题,我切换了cuda和cudnn的相关版本,换到cuda8.0和cudnn_v5.1以后, 解决了问题