因为图像处理的需要,最近给新电脑上了一波Ubuntu16.04和Caffe.Caffe的各种依赖确实有点麻烦,对于依赖缺少的处理也非常不友好。大概是断续花了两个星期的时间算是装完了,把各种坑总结一下。
先给几个比较详尽的安装编译教程。Caffe官网、欧老师的博客、autocyz的博客,都非常详细。这里主要不是讲教程,总结一下自己碰到的各种问题和解决的办法。
第一次编译是在Ubuntu14.04上尝试的。在Makefile.config里面改了CPU only,然后禁用了CUDA.第一次编译因为不是很熟悉,atlas、cblas还有hdf5都是手动下载自行编译执行的。atlas和cblas被放到了自己的文档下,需要重新改路径。在/caffe/cmake/Modules里面有Find各种依赖的cmake文件,改这些文件里的search路径可以自定义搜索的路径,就可以找到装到其他目录下的依赖程序了。
14.04的hdf5下载完了以后是没有/serial文件夹的,但是在caffe的搜索路径里又会提到。
cp -r hdf serial
我尝试了一下以上直接复制头文件的文件夹的方法,居然可以。非常意外。
但是之后以为缺少CUDA一直报错,哪怕是开了CPU only也不行。所以换了16.04上CUDA8再进行编译了。
接下来是CUDA8的安装过程。
对了,由于没有装nvidia驱动而使用nouveau驱动的缘故,刚刚装完16.04的机子可能会进不去gnome界面。在grub引导界面按e进入引导设置,在quiet splash $vt_handsoff
处将$handsoff
改为nomodeset
就可以进入了。但是如果要装cuda,就先不要这么快装nvidia驱动。
在这里下载CUDA.下载完了的cuda还不能一下跑,最重要的是会提醒你还有未关闭的x server.在全部关闭以后,发现最后的x server居然是桌面。这就比较难搞了。
sudo service lightdm stop
关掉图形桌面,然后ctrl+alt+f1进入tty1,登录,运行下载的驱动脚本,跟着步骤走,CUDA就装完了。如果因为CUDA依赖英伟达驱动而不能安装,那就先nomodeset进入系统安装驱动,然后再停止图形界面工作。在装完CUDA以后如果不能进入系统就先尝试nomodeset;如果进入了出现了循环登录的问题,在这里可以找到方法:TriLoo的博客;尝试一下这里的指导:白菜菜白的博客。
CUDA装完然后就是opencv了。偷偷告诉大家,前几天最新的opencv3.3加入了dnn模块,在程序中直接加入dnn.h头文件就可以用了。而且,这个模块是0依赖的,zero dependencies.我看了一下文档,似乎是可以用训练好的数据结果,但还不能自行训练?总之,是非常友善啦。远了。
opencv的安装我就不多说了,可以看我博客里的另一篇文章:Opencv安装手记。opencv3.3的ippicv硬件加速模块for linux的部分暂时还没有人放在国内的网站上,但是之前几个版本的ippicv模块都已经有人放到国内网站上了,sourceforge上也能下。希望有人能尽快放上来吧。
opencv安装完,就可以准备caffe了。首先是各种依赖:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
(说句题外话,ubuntu17.04开始安装caffe只要两条代码就可以了:sudo apt install caffe-cpu 和sudo apt build-dep caffe-cpu,cuda同理。机器学习普及丧心病狂。)
然后make all -j8不提。讲讲各种问题。
首先是python依赖的问题。根据官网上for过去一个个模块的更新网速又慢,还疯狂报错。这里建议大家用anaconda,记得下anaconda2.7的版本,然后在Makefile.config里自己设定python_path到anaconda2的路径。
然后是hdf5路径的问题:MD_learning的博客.小问题。
如果之后又报缺少-lopencv_imgcodecs的问题,那就要看自己generate的libopencv_imgcodecs.so的位置了。不出意外,这个库是在你生成的opencv源文件夹里/opencv-3.2.0/build/lib(build文件夹是我在编译opencv源码时创建来放源文件的,是编译的时候自己创建的)。Makefile.config有一个
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
把${你的opencv3.2.0路径}/opencv-3.2.0/build/lib添加到LIBRARY_DIRS中即可。
似乎是各种装错了的装到别的地方的库都可以加到这里。
然后,还有可能会报各种“未定义XXXXX”的错。出这个错,首先是看自己的依赖安装的完全不完全,有没有漏装的。如果没有,那就
sudo su root
用管理员身份运行吧(居然连这个都忘了)
17-9-29更新
又重新跑了一遍py-faster-rcnn ubuntu16.04上有个很奇葩的错误:libprotobuf-dev给用户装了,root用户却用不了。然后在安装中如果报了没有protobuf的错就要切回普通用户;然后又回到root继续装。这很玄学。其次是make pycaffe缺少Python.h的问题,这个easy:把pwd/anaconda2/include/python2.7放进Makefile.config里的有个include,就好了
了解Makefile文件的写法对于读懂安装过程有很大帮助。有时候问题可能还要在Makefile中去进行更改。
只是一个自己的问题的汇总。还希望各位不吝赐教!