前言
caffe是一个用卷积神经网络来做图像识别的好框架,我近来要学习图像检测和图像识别,就想着要装一下这个利器以便于学习和研究。万事开头难阿,安装配置caffe可花了我不少时间,其中坎坷,不尝试一下是不会明白的。
没有一个过来人的指点,就少不了磕磕绊绊,一来是网上的资料虽然丰富,但硬件配置和软件版本却是各不相同,想照着人家的教程一步步跟着做也是对错难料阿;二来呢是网上的资料都只是说起然而未解释何以然,出了问题不知该如何解决,看到error提示也不知其理,故现将头几日所遇之坑做一记录,已备后日自己或是他人能避而幸免。
不过,我可不是写安装的流程阿,只是将一些其中的问题点出来,所以本文适合在安装caffe之前看看,了解坑的位置,具体的操作在网上搜索即可。
与caffe相关的几个软件、包
caffe是一个C++写的框架,如果不考虑加速,便捷开发,以及某些专用库的使用,仅仅是想跑一跑单纯的caffe的话是挺简单的,也会比较容易搭建;可是对于要做学习和研究的话,单纯的caffe还是受到了诸多的限制,比如对于大量的图片处理,计算量相当大,一台笔记本的CPU跑起来是很弱的。以我的笔记本配置,在单CPU模式下训练caffe例子中的MNIST,花了二十多分钟,而利用GPU跑的话,可以减一半的时间,用大概8分钟就够了,要是再有cuDNN这个加速库的话,那速度就该更快了,无奈我的GPU版本太low了,不支持cuDNN,可惜阿。
前面说的是运行速度的问题,再谈谈开发的问题,单纯的caffe是C++写的,有的是C++的接口,可以有命令行的操作界面,当然其中还有python和matlab的接口,可以用python和matlab开发,而且caffe的某些功能可能调用了matlab的库,以及OpenCV的库,所以有了这些外加的软件和库的帮助,用caffe学习会更加便利。当然这些是可选项,不安装也可以用caffe。
点坑指路
运行模式
首先要说的是关于硬件的问题,没有显卡的话就不需要废话了,直接单CPU模式即可,也不用安装CUDA和cuDNN这些个麻烦玩样。如果是有GPU的,那就可以用GPU加速了,可是也不要高兴的太早了,要是遇到类似我的GT630M这样的显卡,那也只能有GPU计算而不能用cuDNN加速。查看cuDNN的用户手册可以发现,要用cuDNN就需要兼容性3.0以上版本的GPU才能用,所以,害我把CUDA和cuDNN的多个版本一个个试过来都没用,是天生没这本事的玩样,再怎么折腾也是白搭。
由此可知,跑程序可以有三种情况:单CPU,GPU以及cuDNN三种,对应到caffe的配置文件,就需要确定解除哪几句话的注释。现在看看配置文件中的代码如下:
# cuDNN acceleration switch (uncomment to build with cuDNN).
# USE_CUDNN := 1
# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1
如果是单CPU模式,那么就把CPU_ONLY前面的#去掉,此时还不够,在‘/caffe目录/examples/某个实例’这个目录下的例子代码中找到solver.prototxt文件,在文件的最后,有如下代码:
# solver mode: CPU or GPU
solver_mode: GPU
每个这样的文件后,都要把solver_mode中的GPU改成CPU。
如果是GPU模式,那就不修改caffe配置文件中的这两项,如果是cuDNN模式就把USE_CUDNN前面的#去掉。
编译问题
在ubuntu系统中,经常要用到make命令,用来编译库文件。在下载安装CUDA或是caffe的过程中,都少不了要用make命令,网上的很多教程也都讲了,要编译得快一点,就用命令make -j,可是我每次跑这个命令,电脑都要死机,因为-j是让cpu进程尽可能利用,并发运行,可是也许是造成思索了,每次都要死机。我在网上搜索了一下,发现也有人遇到类似的问题,这可能也cpu型号以及make命令有关系,下次要用make编译快一点,就用make -j8命令,至于原因嘛,我也是不太清楚。
在修改了配置文件需要重新编译时,输入make all -j8 会报错显示找不到命令,只是就需要现make clean一下,将以前的先给清了再重新编译。
其他小问题
下载matlab花了我好几天的功夫,一来是因为大,二来是文件传输易出错。刚开始我是在ubuntu上用浏览器直接下载的,可是总会在下到一半的时候出错,可能是文件太大,用浏览器不行,那我就换用uget来下载,可是结果依旧如此,总会停在半道上,无奈只好先到windows上先用迅雷下好,再传到ubuntu上,结果,复制的过程却出错了,不知道是不是因为大文件在不同的文件系统间传输有其他要求,最后用windows上的百度云下好之后传到ubuntu上这才结束,嗨。
在配置文件Makefile.config中,一定要看清楚哪些是取消注释就可以启动功能,哪些是注释掉才启动功能的,要是一时看错,那以后的错误就有得改了。
注:在跑例子程序的时候要注意了,很多的.sh文件在运行的时候是要在caffe的根目录下跑的,要是跑到example的目录里面运行.sh文件就会跑错显示找不到什么文件或是目录,因为那些的.sh文件中写的命令以当前目录为caffe根目录写的。
总结
事后已有几日,现今回想,好多问题其实都是一点就通的,无奈无人指路,自己也懵懂随处乱撞,才至如此,但凡有问题,总还是该细思的,希望我的木脑袋别总僵着。其他问题,日后出现再来补记。