admin 管理员组文章数量: 887017
Ubuntu 15.04 + CUDA7.5 + Caffe 配置笔记
一、Ubuntu 安装
安装Ubuntu 15.04x64 + Win7x64 双系统,让二者在启动引导上相互隔离, 删除Ubuntu时不至Win7躺枪,就必须讲究安装方法。
最easy的就是使用EasyBCD安装。这可以将Ubuntu的启动引导(Grub2)安装在其自己的boot分区,而Win7的启动引导则安装在C盘或其保留分区,相互隔离,不存在用Ubuntu引导Win7启动的问题,重装和卸载互不影响。这个策略非常干净。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
那么,问题来了,如果你主板比较新,使用的是 "UFEI启动 + GPT磁盘" 这个组合,那么使用EasyBCD就有问题,如下所述.
问题始于,万恶的windows推出一个称之为UFEI的东东,美其名曰:大一统安全启动引导接口!!此接口位于主板和系统之间,用于启动时进行软硬件对接,即在主板上加载系统内核,以及向系统内核注册硬件。电脑一启动,操作系统必须向主板出示一个安全密钥,主板才会加载这个系统,可用于杜绝boot病毒,从Win8开始这个标准开始执行。。。 然就坑了Ubuntu等一大批Linux系统,因为这些系统必须向MS购买密钥。。。但是!!为了防止被诉垄断,微软要求所有主板厂商必须在提供UFEI的同时,以这样或那样的方式提供传统的BISO启动。。。微软关上了一扇门,上帝打开了一扇窗 .,美帝的反垄断大法果然强。。。
因此,新型的主板上一般都能找到禁止UFEI,以及打开BIOS的办法,各家主板不一样。
启动方式: UFEI or Legacy BIOS
不用UFEI的原因是,EasyBCD 2.3 目前还无法在ufei中注入Ubuntu的grub2启动,所以在UFEI引导下安装的Win7,当安装完EasyBCD后,软件会提示:注意到你正在使用ufei,EasyBCD的许多特性都无法使用!而屏蔽ufei,在BIOS下重装win7之后,EasyBCD一切正常。这样后面安装ubuntu时,EasyBCD才能在其boot分区上注入grub2启动引导程序。
....不用UFEI的另一个好处时,不会在Win7的保留分区内额外生成一个ufei文件夹,从而可以用DsikGenius为win7的这个保留分区分配盘符使其可见,激活win7就十分Easy了....
....若非要用ufei就要用其他方式解决双系统隔离的问题,但百度之后发现都比较繁琐 。
关掉UFEI的办法看主板什么类型,我的华硕Z170-AR/-P,进入高级设置,启动页面,打开CMOS选项设定为仅Legacy,打开安全选项设定操作系统为others。
....重启,插启动U盘,启动选项里面彻底不见了UFEI字样,,说明UFEI被成功屏蔽!!
....装完Win7之后,用DiskGnius查看隐藏分区,其中无ufei文件夹,只有boot文件夹,OK!
分区表类型: GPT or MBR
....GPT可以管理大于1.8T以上的磁盘,MBR不行,所以单盘超限的另寻解决办法。
用Win7光盘在裸机上装完系统之后,启动方式+分区表 被默认处理为 UFEI+GPT 这样的组合。可以用Diskgnis查看Win7隐藏分区,隐藏分区中有个ufei文件夹,然后点各个磁盘查看信息,分区表类型都为GPT,这说明是UFEI+GPT的组合。
....进入按上步用BIOS安装的Win7之后,打开DiskGnius可转换各GPT盘为MBR盘。但注意:不能直接转换系统所在的C盘,因为会导致系统引导丢失,还有可能整坏硬盘。解决办法是“腾笼换鸟”,在另一个已经转换为MBR的空闲盘上用硬盘安装的方式先安装一个Win7上去,然后重启进入这个新系统;再用DISK转换原来的系统C盘为MBR,再用硬盘安装方法在C盘装上Win7,装完之后进入C盘Win7,删掉掉刚才空闲盘的那个临时Win7即可。。。
....好消息是:在非系统盘上用DISK转换GPT为MBR时,不会格式化磁盘,所以数据仍然在
....之所以要转换成MBR是因为装Ubuntu出问题,啥问题忘了,不转换应该也有解决办法。。
OK! 这样就得到了 BIOS启动 + MBR磁盘 + Win7×64系统 的经典组合!!可以开始安装 Ubuntu了。。。。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下载Ubuntu 15.04 64位
下载UltraISO制作启动U盘
在Win7某盘下压缩出 300G~500G 空间,不新建分区、使其空闲
重启进入BIOS,选择U盘启动
开始安装》》。。。
分区:/ 90G~120G , /boot 200M~400M , swap 内存大小左右 ,/home 剩余
分区顺序按此方式、且全部设定为逻辑分区,其他方式也可但发现容易出问题........
注意::分区完成之后,安装开始之前,切记要在下方的启动器安装选项(boot installer)上,手动选择,将启动器安装到你的上述boot分区中,否则默认的话就是用ubuntu引导win7了
....另外::若需重装ubuntu的时候,要进入Win7重新删除四个分区,格式化该盘,使其空闲。进入安装界面后,还要改变上述分区的相对大小,不然ubuntu会一直卡在creating ext4 ... 安装不下去。
....另外::若上述办法还是继续卡在creating ext4上,则在Win7下重新格式化该区,并预先分好4个区的大小,进入Ubuntu安装界面后,将四个对应分区挂载上去即可,可顺利安装......
....另外::重装Ubuntu之后,进入Win7,用EasyBCD删掉上次的grub2启动,重新建一个即可
....但是::这样还是有可能会碰到安装进度条卡在 creating etx4...这里,百度了好久没找到办法,我在这都卡疯了。看到的有解决办法,还请留言分享下啊*&……*&*&
最好选择英文安装,方便安装caffe相关软件时路径全英文,进入之后再安装中文包和fcitx中文输入法....
最好断开网络安装,否则会下载语言包和更新/.///
等待安装完成,系统提示:重启电脑
重启之后会直接进入Win7,这时打开EasyBCD,在刚才的boot目录上添加linux的gub2启动。
OK !!
重启之后,界面出现系统选择 ......... 进入ubuntu ..................
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
进入系统之后,
打开终端,右击桌面,
设定root用户密码,sudo passward
修改apt-get源为阿里云,sudo gedit /etc/apt/sources.list
遇到自动推送的系统更新,不要同意,也不要不同意,直接x掉!
语言设置中安装中文包,自带fcitx拼音输入法
注意不要用中文替换原英文文件夹,
开始caffe安装 。。。
二、CUDA 安装
CUDA 安装会出各种奇妙问题,显卡、系统各不一样,所以虽然问题的表现形式一样,但解决办法可能不一样,因为驱动跟硬件紧密相关,在软件层面很难统一解决,所以多百度几种方法试吧。。。 CUDA的官方安装文档,小白的一大原罪就是不喜官方资料,想偷懒结果还绕了个大弯……*&*%!!!2.1 关闭xWindow,开启tty1
安装cuda的同时会安装显卡驱动,因此要进入ubuntu的纯字符界面才行 。 方法是 ctrl + alt + F1 进入tty1,登录, 输入init 3,进入纯字符界面。 可以按ctrl+alt+F7验证,无法返回xWindow了,说明关闭成功。 再次 ctrl + alt + F1 返回tty1。 输入startx , 会再次恢复启动xWinow。 ctrl+atl +f7 即可进入。 如果 init 3 & startx 不行,可以用 sudo service lightdm start/stop 命令。 如果中间哪一步卡住了,强制重启,再试一次,仍然不行说明有问题。 注意,关闭xWindow后,切换到xWin时应该只显示一行219的版本号,没有[ok]start lightdm maneger之类的。 否则,后续安装会有错误。 —————————————————————— 如果上面这个操作,完全没问题,OK,可以开始CUDA安装了 —————————————————————— 但我这遇到问题: 安装cuda前,进入tty1黑屏,返回xWindow正常. 。。。 安装cuda后,登陆xWindow异常,进入tty1正常 。 。。 安装cuda中,爆出“ Error: can't xxx kernel xxx ”。。。 方法一:网上有用sudo stop lightdm关闭xWindow的,但是需要自己生成和修改xorg文件,ubuntu15.04安装完默认是没有这玩意的。参考好多博客后,没弄成,非常不适合linux新手。 方法二:还有用stop gdm的,gdm是相对于lightdm的另一套xWindow,现在不流行了,所以默认没安装上,需要自己 apt-get install gdm,然后从lightdm切换到gdm。在gdm下可用sudo gdm stop, 来关闭xWIndow。这个的好处是不用修改xorg文件。但这个也有点问题,忘了。 方法三:浪费一天google来的,非常简单,原文中这个办法用来解决“装完nvidia驱动,重启后卡在登陆界面,无法进入xWindow”这个问题的。在我这是被用来解决“装nvidia驱动或cuda前,进入tty1黑屏”这个问题。 方法流程如下:[python] view plain copy
- cd /etc/default
- sudo cp grub grub.bk #备份
- sudo gedit grub
- GRUB_CMDLINE_LINUX="nomodeset" #修改
- sudo update-grub #更新grub
- sudo reboot #重启
重启之后,发现桌面分辨率掉到渣,说明奏效了。。 先登陆 xWindow, 尝试切换到 tty1,果然成功刷出登陆提示,tty1黑屏的问题解决! 可以验证下, xWindow 和 tty1 是否可毫无障碍的 反复自由 切换。。。验证OK! 接下来就可关闭xWindow,只使用tty1了。 登陆tty1→输入 init 3 /或者 sudo service lightdm stop→xWindow被关闭,→可能会卡屏,ctr+alt+f1 就可以了。。 可以验证下, ctr+alt+f7 打开xWindow 失效,显示且只显示一个版本号 。。。验证OK! 可以安装cuda了 !!!
方法四: 本文是单显卡titanx,按方法三第一天装完cuda正常,装opencv时出问题,因此第二天重装按方法三再整,结果出了新问题 。安装完cuda后,无法正常登陆xWindow,只能进入tty1。 重新整了好多次无果! 最后在cuda的官方安装教程中,发现方法四~~~终于成功~~~ 操作如下: #打开终端 [python] view plain copy
- lsmod | grep nouveau #验证 有输出说明noveau驱动正常
- cd /etc/modprobe.d
- sudo gedit balcklist-nouveau #写入以下2句保存
- blacklist nouveau
- options nouveau modset=0
- sudo update-initramfs -u #更新init
- sudo reboot #重启,发现分辨率掉渣
- lsmod | grep nouveau #验证,无输出说明屏蔽noveau成功
此时再次尝试,进入tty1,无黑屏bug。再返回xWindow,也无障碍。
在tty1下,sudo service lightdm stop. → xWindow被关闭!
可以验证,ctr+alt+f7返回xWindow时,只显示一版本号。
在tty1下, sudo service lightdm start. → 打开xWindow成功!
可以验证,ctrl+alt+f7成功返回xWindow.
再重启后,仍可循环切换,完美关闭或打开xWindow。
说明终于完美实现了 字符终端和图形终端的切换。
开始安装cuda~~~~~~~
方法五:本文另一台式机,GTX970单显卡,按照上述方法三和方法四安装cuda,安装之前能正常切换tty1和xWindow。 但是,安装之后,竟然就进不去xWindow了,一直卡在登陆界面,输入密码死循环!!而在安装过程中曾爆出一个“ Error: can't return kernel xxx” ,据查,这个是安装驱动的时候需要linux 内核参与编译。在tty1下验证显卡驱动是否存在,ls /proc/drivers/nvidia, 无任何输出,说明显卡驱动确实没写进去。 最后的解决办法如下:
1.完全重装ubuntu15.04
2.未降级gcc/g++-4.9到gcc/g++-4.7
(这个是导致产生kernel错误的原因。)
3.未更换阿里源,使用系统自带的apt源。
(这个估计更换后无影响,因为我后面安装opencv时为加快速度,还是换成阿里源了)
(cuda安装过程中会自动验证kernel的版本信息,阿里源只是原生源的镜像,差异有一点点,但kernel-header应该是一致的,另一台titanx的就在阿里源下安装的cuda).
4.弹出系统升级提示时,不要接受,也不要拒绝,直接x掉。
据我推断,接受升级肯定会修改内核,但拒绝升级坑能也会!!。 (最有可能是这个原因)
5.官方安装指导的 pre-installation中,需要验证系统类型x86_64,以及更新kernel-header,这些都没做。
因为ubuntu15.04_x86_64安装完,默认是最新的kernel-header.
6.按方法三,修改GRUB_CMDLINE_LINUX="nomodeset",并sudo update-grub,再重启!
7.分辨率掉渣,进入tty1, sudo service lightdm stop 关闭xWindow.
注意验证下,返回xWindow时,显示且仅显示一行219版本号,说明才是彻底关闭了。
8.开始安装cuda。
终于进入油意义的第一步!! ----------------------
2.2 安装cuda 7.5
预先下载并拷贝cuda7.5_linux_64_.deb安装包到home下。 关于是否要先独立安装nvidia驱动的问题,本人尝试几次重装都失败了,无法打开内核什么的。。 因此直接cuda走起,安装cuda的时候会自动安装驱动。。。 安装过程中要编译,因此先对gcc和g++进行降级,至-4.7版本。 后面安装各种包都要用到gcc, 所以一开始降级可让全部软件包的安装都比较一致。降级方法参见欧新宇。进入tty1,关闭xWindow,开始安装 [html] view plain copy
- cd ~
- sudo dpkg -i install cuda---x-x-x.deb
- sudo apt-get update
- sudo apt-get install -y cuda
等待安装完成 》》》》 注意:安装的过程中,可能会刷出ERROR,卸载掉或重装来过...... 重启:sudo reboot!
配置cuda bin & lib 目录
[python] view plain copy
- cd /etc
- sudo gedit profile #写入以下2句保存
- PATH=/usr/local/cuda/bin:$PATH
- export PATH
- source /etc/profile #立即生效
[python] view plain copy
- cd /etc/ld.so.conf.d
- ls
- sudo cp xxx.conf cuda.conf #xxx替换成ls出的随便哪个文件
- sudo gedit cuda.conf #编辑
- /usr/local/cuda/lib64 #写入并保存
- sudo ldconfig -v #立即生效
- nvcc --version #验证
注意:此处可先重启电脑,不重启就要在这个终端内继续,不更换新的终端窗口。 因为上面的立即生效是针对当前终端这个shell的,不是整个系统,只有重启才能应用到整个系统。 可以验证,在不重启时,另开一终端,nvcc --version 是无输出的。
2.3 安装cuda sample
[python] view plain copy- cd /usr/local/cuda/samples
- sudo make all -j8 #编译
- cd ./bin/x86_64/linux/release #验证
- ./deviceQuery #刷出显卡信息 则成功
2.4 安装cudnn-v4
由于是cuda7.5 所以安装 cudnn-v4.0比较好 下载 cudnn-7.0-linux-x64-v4.0-prod.tgz 放到home下[plain] view plain copy
- tar zxvf cudnn-7.0-linux-x86-v4.0-prod.taz
- sudo cp include/cudnn.h /usr/local/include
- sudo cp lib64/libcudnn.* /usr/local/lib
- sudo ln -sf /usr/local/lib/libcudnn.so.7.0.64 /usr/local/lib/libcudnn.so.7.0 #建立链接
- sudo ln -sf /usr/local/lib/libcudnn.so.7.0 /usr/local/lib/libcudnn.so
- sudo ldconfig -v
重启 .......
三、Matlab 安装
Matlab安装简单,参见欧新宇。
注意拷贝matlab至home文件夹时,使用欧的挂在方法,sudo cp 之后,安装时出现权限不足,且无法更改?
网上找的链接: http://pan.baidu/s/1c0jaEek 密码: cjvg
安装完成之后,Home下的Matlab文件夹即可删除。
四、BLAS 安装
BLAS可选MKL和altas,安装简单。 mkl-2016下载和安装参见欧新宇。 注意mkl只能安装一次!! 如果没有mkl,就安装默认的 altas ! 本文前后2台电脑,分别安装了mkl 和 altas,都OK!. 后面都以安装altas的电脑为例: [python] view plain copy- sudo apt-get install libatlas-base-dev
五、OpenCV安装
OpenCV大部分使用 Install_OpenCV_Master这个方法,但这个安装过程比较混乱,可以打开安装脚本看看, 各种依赖包装了卸、卸了装,反反复复好几次,而且装完之后与ffmpeg这个包有关的地方全部报错,导致OpenCV安装不完整,后面的caffe编译也出错!! 坑了2天终于找到了救星>>>>> xuezhisdc. 在Home下新建文件夹OpenCV,再于其中新建5个sh文档, 拷贝救星给出的各个shell到这几个文档中保存。 安装过程中把OpenCV拷贝到 /usr/local目录下,(与cuda和matlab看齐,好看好管理×××),, 本文是cuda7.5,所以使用比较新的 opencv3.0与之搭配,不容易出莫名奇妙的bug,3.0的shell可仿照2.4.11那个改一下×××× 依次运行 1 2 3 4 5 五个shell ........直到安装完成,且无bug报错! 注意:安装过程全程联网,而且网速不能太慢,否则下载的包会有损失。 本文安装过程中,下载的 3rdparty中的ICV组件始终报错!! MD5不匹配!! 最后打开脚本文件找到下载地址,手动下载ICV后放到对应目录下。。。终于通过!! 出错后,可以重新来过,会覆盖掉前次的,我安装了好几次~~ 脚本安装和编译的好处就在于,碰到问题立马停止,能精准定位错误源~~~~~ 所以出错之后,可研究下 Error Information ~~~~~~~六、Python安装
安装Pyhton主要是为caffe的pycaffe接口提供一个python环境。Python被其他软件广泛依赖,在安装这些软件的时候可能已经安装过了,而且同一个包的版本还不太一致。 ---------------这导致非常混乱----------比如,: 安装前面 opencv的时候就需要 numpy 和 scipy,在那里已经安装过了! 但安装此处的Python环境的时候,会再被安装一次! 然后面安装caffe的时候,还会被再安装一次! 好多cafee安装教程上都是装了又装,不知道多少次。。 --------------------------------------------- 但幸好,Ubuntu 的 apt-get 能够自动管理各种版本,以及依赖关系,方法是检查版本号,若最新则跳过!! “xxx is already the newest version” 但尽管如此,caffe官方还是裂墙推荐 :Python包管理神器----> Anaconda !!! 本文在2台电脑上试了下2种方案都可通过。。
6.1 Anaconda 方案
下载 Anaconda2-4.1.0-Linux-x86_64.sh Anaconda很多博文都安装在/Home/usrname目录下,这样吧/目录的空间都浪费了,因此本文安装到/usr/local 这与 Matlab / CUDA / OpenCV 保持风格一致,比较赏心悦目。。 用Chrome下载Ananconda,放到/home下,开始安装。[python] view plain copy
- python --version #验证下原生python版本
- md5sum Anaconda2-4.1.0-Linux-x86_64.sh #验证md5
- sudo bash Anaconda2-4.1.0-Linux-x86_64.sh #安装
安装中间,会提示是否安装在/home/xx/ananconda2目录下,或于下方输入自定义路径,输入:/usr/local/Anaconda 安装末尾,会提示是否在 /home/xx/.bashrc 中创建bin目录,yes!
安装之后,开始配置Anacoda的路径。
在全局变量中配置其lib&bin路径! [python] view plain copy
- sudo gedit /etc/profile
- export PATH=/usr/local/anaconda2/bin:$PATH" #写入并保存
- source /etc/profile #立即生效
- sudo gedit /etc/ld.so.conf
- /usr/local/anaconda2/lib #追加一行,写入此路径,并保存
- sudo ldconfig -v #立即生效
- cd ~ #xx用户目录
- sudo gedit .bashrc #找到anconda写在此文件最后的路径,并拷贝。
- sudo su #获取root权限
- cd ~ #root用户目录
- sudo gedit .bashrc #将刚才拷贝的路径,添加到最后保存
conda --version # 验证
conda list # 列出 conda安装的所有Python包
python --version # conda-python 生效 ,原生的Python被屏蔽
6.2 原生Python方案
也可使用原生Python方案,再继续往Unbuntu的python中添加三方包就可以,如下
[python] view plain copy- sudo apt-get install -y python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags cython ipython
安装过程中,大部分都会提示 “scuceessfly installing xxx....”,
python-pandas 貌似有个小错,没管了。。。直接继续后面,貌似不影响!
七、安装google-glog
这个简单,参见欧新宇八、安装 其他依赖项
这里主要是caffe用到的9个小软件: protobuf leveldb lmdb snappy opencv boost hdf5 gflag google-glog 好多博文在最最开始就安装这些小软件,流程比较混乱,建议放在大块头后面安装,流程比较清晰。 [python] view plain copy- sudo apt-get install -y build-essential # basic requirement
- sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler #caffe requirment
九、Caffe 安装 & 编译
Caffe下载,解压至Home目录下。
如本文目录为:/home/xx/caffe-master 。
xx为用户名,home目录默认是当前用户的家目录,所以中间是有用户名的。
进入caffe-master, 右击,在T终端中打开文件夹,然后 pwd命令 ,可以查看当前完整目录。
配置各种路径的时候,最方便是这个办法,直接鼠标找到文件夹,右击在T终端中打开,pwd 出当前目录,复制之!!
9.1 安装pycaffe的依赖包
若在6.2中,使用原生Python安装的
进入根目录的 python文件夹,打开终端执行:
[此需]
sudo su #切换至root
[python] view plain copy
- pip --version #验证pip是否已经安装,默认是没有的
- sudo apt-get install pip #安装
- cd /home/xx/caffe-master/python
- for req in $(cat requirements.txt); do pip install $req; done
若在6.2中,使用Anaconda方案的
事实上,requirements.txt中的绝大部分包,已经在Anaconda中了,可如下验证 [python] view plain copy
- conda list | grep xxx
xxx取requirements.txt中每一行包名字的几个连续字符,注意要小写,比如cython, num, level,gfl等等
经过验证,发现只有 leveldeb 和 python-gflags 等3个无输出,说明没安装。
此时新建一个txt,如req.txt,将requirements.txt 中的内容拷贝进去,别的全删,只留下上面3个无输出的。
然后执行如下:
- sudo su # 必须切换至root
- cd /home/xx/caffe-master/python
- for req in $(cat req.txt); do pip install $req; done #用req.txt替换requirements.tx
**** 注意,本文是将anaconda安装到了usr/local 下,当前用户是无法更改Anacoda的。 **** 因此只要涉及到anaconda的写入和删除都需要root权限,或者sudo执行,此处sudo不合语法,只能root. **** 安装中,pip 会在 Anacoda的sit-package文件夹中写入第三方Python包。
当然,如果不想这么麻烦,则无需验证,直接执行如下,已安装的会被跳过。 [python] view plain copy
- sudo su #切换至root
- cd /home/xx/caffe-master/python
- for req in $(cat requirements.txt); do pip install $req; done
可见,Anaconda 可以更灵活更完备的处理Python的各种版本,以及各种包,这就是caffe列强推荐的原因。 建议使用Anaconda,越到后面越方便,而且理得清。
9.2 配置Makefile.config
此文件中全部都是关于 CUDA cudnn BLAS Matlab python hdf5 opencv 这7个部分的路径信息。
--------------------------------------------------------
那我么先检查下这些软件都安装在啥地方。。
CUDA 默认安装,位于/usr/local/cuda-7.5 /usr/local/cuda是其链接
Matlab 默认安装,位于/usr/local/MATLAB/R2014a
BLAS 默认安装,mkl位于/opt/intel,altas default
hdf5 默认安装,位于/usr/lib/x86_64-linux-gnu/
OpenCV 默认安装,位于usr/local下
注意OpenCV被打散在 usr/local/include/xxx.h /usr/local/lib/xxx.lib /usr/share/opencv/samples这三个目录下
Python
如果不用anaconda则是系统默认自带,目录到处都有,不用管了。。
如果是Ananconda 则在这个文件夹下,/usr/local/ananconda2/lib /usr/local/anaconda2/bin
前面每步在安装完上述软件后,已经对其路径信息进行了配置,在以下3个文件中
/etc/ld.so.conf.d /etc/ld.so.conf /etc/profile
-----------------------------------------------------------------------
现在即可按照上述信息配置Makefile.config
- cd ~/caffer-master
- sudo cp Makefile.config.example Makefile.config
- sudo gedit Makefile.config
1. 去注释 USE_CUDNN=1 2. 加注释 # CPU_ONLY:=1 3. 修改BLAS BLAS = altas & mkl(maybe) 4. 配置 python & matlab [python] view plain copy
- ## 原生python
- PYTHON_LIB :=/usr/local/lib #原生python选择
- PYTHON_INCLUDE := xxxxx #原生python默认
- ## Ananconda
- # 先注释掉原生python路径
- AanacondaHome=/usr/local/ananconda2 # path to your anaconda
- PYTHON_LIB :=$(AanacondaHome)/lib
- PYTHON_INCLUDE := $(AnacondaHome)/xxxx #默认,但注意把Anaconda三行的注释符#全去掉,否则编译caffe报错找不到Python.h
- MATLAB_DIR :=/usr/local/MATLAB/R2014a
5. 补充hdf5路径,红色 # what ever else you find, you can add it to here --------- INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
6. 启用OpenCV3.0.0
去注释:OPENCV_VERSION=3
lib&bin路径已经在上面5.中做了配置:usr/local/include & usr/local/lib
使用OpenCV3.x需要额外修改 Makefile文件,现在版本的caffe已经对Makefile做了修改,因此不用手动修改也可。
在Makefile文件中查找“Derive include and lib directories”一节,
修改“LIBRARIES +=”的最后一行,增加 opencv_imgcodecs,
修改之后为: LIBRARIES += opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
最终的完整Makefile.config如下>>>>
[python] view plain copy
- ## Refer to http://caffe.berkeleyvision/installation.html
- # Contributions simplifying and improving our build system are welcome!
- # cuDNN acceleration switch (uncomment to build with cuDNN).
- USE_CUDNN := 1
- # CPU-only switch (uncomment to build without GPU support).
- # CPU_ONLY := 1
- # uncomment to disable IO dependencies and corresponding data layers
- # USE_OPENCV := 0
- # USE_LEVELDB := 0
- # USE_LMDB := 0
- # uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
- # You should not set this flag if you will be reading LMDBs with any
- # possibility of simultaneous read and write
- # ALLOW_LMDB_NOLOCK := 1
- # Uncomment if you're using OpenCV 3
- OPENCV_VERSION := 3
- # To customize your choice of compiler, uncomment and set the following.
- # N.B. the default for Linux is g++ and the default for OSX is clang++
- # CUSTOM_CXX := g++
- # CUDA directory contains bin/ and lib/ directories that we need.
- CUDA_DIR := /usr/local/cuda
- # CUDA architecture setting: going with all of them.
- # For CUDA < 6.0, comment the *_50 lines for compatibility.
- CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
- -gencode arch=compute_20,code=sm_21 \
- -gencode arch=compute_30,code=sm_30 \
- -gencode arch=compute_35,code=sm_35 \
- -gencode arch=compute_50,code=sm_50 \
- -gencode arch=compute_50,code=compute_50
- # BLAS choice:
- # atlas for ATLAS (default)
- # mkl for MKL
- # open for OpenBlas
- BLAS := atlas
- # Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
- # Leave commented to accept the defaults for your choice of BLAS
- # (which should work)!
- # BLAS_INCLUDE := /path/to/your/blas
- # BLAS_LIB := /path/to/your/blas
- # This is required only if you will compile the matlab interface.
- # MATLAB directory should contain the mex binary in /bin.
- MATLAB_DIR := /usr/local/MATLAB/R2014a
- # NOTE: this is required only if you will compile the python interface.
- # We need to be able to find Python.h and numpy/arrayobject.h.
- # Anaconda Python distribution is quite popular. Include path:
- # Verify anaconda location, sometimes it's in root.
- ANACONDA_HOME := /usr/local/anaconda2
- PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
- $(ANACONDA_HOME)/include/python2.7 \
- $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
- # We need to be able to find libpythonX.X.so or .dylib.
- PYTHON_LIB := $(ANACONDA_HOME)/lib
- # Uncomment to support layers written in Python (will link against Python libs)
- # WITH_PYTHON_LAYER := 1
- # Whatever else you find you need goes here.
- INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include
- LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
- # Uncomment to use `pkg-config` to specify OpenCV library paths.
- # (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
- # USE_PKG_CONFIG := 1
- # N.B. both build and distribute dirs are cleared on `make clean`
- BUILD_DIR := build
- DISTRIBUTE_DIR := distribute
- # Uncomment for debugging. Does not work on OSX due to https://github/BVLC/caffe/issues/171
- # DEBUG := 1
- # The ID of the GPU that 'make runtest' will use to run unit tests.
- TEST_GPUID := 0
- # enable pretty build (comment to see full commands)
- Q ?= @
7.3 编译caffe
[python] view plain copy- make all -j8
- make test -j8
- make runtest -j8
7.4 编译pycaffe & matcaffe
[html] view plain copy- make pycaffe -j8
- make matcaffe -j8
- make destribution #发布,可不执行
编译完成之后,需设置python环境变量,将caffe配置为Python或Anaconda的一个包。
办法是将caffe/python路径,或者caffe/destribution/python路径添加到python环境变量中.
下面的路径只添加一个,本文用destribution这个
[python] view plain copy
- sudo gedit /etc/profile
- #PYTHONPATH=/home/xx/caffe-master/python:$PYTHONPATH #写入,2选1
- PYTHONPATH=/home/xx/caffe-master/destribution/python:$PYTHONPATH #写入,2选1
- export PYTHONPATH
最后的profile如下:
[python] view plain copy
- #接上原有文本#
- #CUDA
- PATH=/usr/local/cuda/bin:$PATH
- export PATH
- #Anaconda
- export PATH="/usr/local/anaconda2/bin:$PATH"
- #Caffe
- #LD_LIBRARY_PATH=/home/xx/caffe-master/build/lib:$LD_LIBRARY_PATH
- LD_LIBRARY_PATH=/home/xx/caffe-master/distribute/lib:$LD_LIBRARY_PATH
- export LD_LIBRARY_PATH
- #Pycaffe
- #PYTHONPATH=/home/xx/caffe-master/python:$PYTHONPATH
- PYTHONPATH=/home/xx/caffe-master/distribute/python:$PYTHONPATH
- export PYTHONPATH
- #Matcaffe
- LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD
- export LD_PRELOAD
→→ 测试matcaffe
运行 caffe-master/matlab/demo/classification_demo.m
需要提前下载个berkely.caffemodel到caffe-master/models的对应文件夹下。
刷出一连串得分数字,显示测试成功!
*******补充!如果在运行classcifcation_demo时出错:
Invalid mex: xxxxxxxx “libstdc++ , GLIBCXX-versionxxx不存在” xxxxxxx
则是因为matlab自带的gcc版本较低,而编译matcaffe并生成caffe_.mexa64时的gcc版本较高,
从而编译时标准c++库和运行时标准c++库不一致,导致的。
办法是添加路径,让matlab运行时引用系统gcc,而非自带gcc。
修改方法:
sudo gedit /etc/profile
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD #加入此句 保存
source /etc/profile
然后在此终端窗口内,打开matlab,运行其demo,则错误消失。
或者重启,让预加载路径彻底生效,打开matlab,运行demo,错误消失。
→→ 测试pycaffe
在Python中导入caffe,进行验证。
现在可以看到 Python 2.7成为Ananconda下的一个包,caffe又成为Python的一个包。
八、Cifar10数据集测试
[python] view plain copy- cd ~
- cd caffe-master
- sh data/cifar/get_cifar10_data.sh #获取源数据
- sh examples/cifar/creat_cifar10_data.sh #创建LevelDB
- sh examples/cifar/train_quick.sh #训练
九、使用Pycaffe
第7步,导入caffe.draw时,出错,百度下原因是缺了2个python包。pydot & graphviz 。 在原生python中,安装如→XXX 在Anaconda中安装如下: 由于此处sudo命令不合语法,只能使用root权限,安装命令如图:打开终端,输入 spyder, 即可开启Anaconda集成的ython IDE.。 原生Python的可在软件中心下载Spyder. Spyder开启可能会卡出去,多开几次就OK。 新建目录 /home/xx/Spyder/mnist, 床建以下pycaffe训练文件: 首先要按照上面cifar的方法,去mnist下获取源数据,并创建数据文件LevelDB. 其次要自己设定训练参数到mnist_lenet_solver.prototxt文件 [python] view plain copy
- # -*- coding: utf-8 -*-
- """
- Created on Tue Jul 5 18:30:56 2016
- @author: xx
- """
- # 导入caffe
- import caffe
- from caffe import layers as L
- from caffe import params as P
- # 载入数据
- dataDir = '/home/xx/caffe-master/examples/mnist'
- # 设计网络
- def lenet(lmdb,batch_size):
- n = caffe.NetSpec()
- n.data, n.label = L.Data(batch_size = batch_size,
- backend = P.Data.LMDB,source=lmdb,
- transform_param = dict(scale=1./255),ntop=2)
- n.conv1 = L.Convolution(n.data, kernel_size=5,
- num_output=20, weight_filler=dict(type='xavier'))
- n.pool1 = L.Pooling(n.conv1, kernel_size=2,
- stride=2, pool=P.Pooling.MAX)
- n.conv2 = L.Convolution(n.pool1, kernel_size=5,
- num_output=50, weight_filler=dict(type='xavier'))
- n.pool2 = L.Pooling(n.conv2, kernel_size=2,
- stride=2, pool=P.Pooling.MAX)
- n.ip1 = L.InnerProduct(n.pool2, num_output=500,
- weight_filler=dict(type='xavier'))
- n.relu1 = L.ReLU(n.ip1, in_place=True)
- n.ip2 = L.InnerProduct(n.relu1, num_output=10,
- weight_filler=dict(type='xavier'))
- n.loss = L.SoftmaxWithLoss(n.ip2, n.label)
- return n.to_proto()
- # 保存网络
- modelDir = '/home/xx/Spyder/mnist'
- with open(modelDir+'/mnist_lenet_train.prototxt','w') as f:
- f.write(str(lenet(dataDir+'/'+'mnist_train_lmdb',64)))
- with open(modelDir+'/mnist_lenet_test.prototxt','w') as f:
- f.write(str(lenet(dataDir+'/'+'mnist_test_lmdb',100)))
- # -------------------------
- # 设计 solver
- # modelDir/mnist_lenet_solver.prototxt
- # ------------------------
- # 训练网络
- caffe.set_device(0)
- caffe.set_mode_gpu() # or cpu
- solver = caffe.SGDSolver(modelDir+'/'+'mnist_lenet_solver.prototxt')
- solver.solve()
绘制此lenet的网络结构如下。 [python] view plain copy
- # -*- coding: utf-8 -*-
- """
- Created on Tue Jul 5 20:30:20 2016
- 绘制网络结构
- @author: xx
- """
- # 导入 draw
- import caffe
- import caffe.draw
- from caffe.proto import caffe_pb2
- from google.protobuf import text_format
- # 模型
- model_path = '/home/xx/Spyder/mnist/mnist_lenet_train.prototxt'
- # 读取模型
- net = caffe_pb2.NetParameter()
- text_format.Merge(open(model_path).read(),net)
- # 输出
- pic_path = '/home/xx/Spyder/mnist/lenet_pic.png'
- # 排列方式
- rankdir = 'LR' # LR TB RL BT
- # 绘制网络
- print('Drawing net to %s' % pic_path)
- caffe.draw.draw_net_to_file(net,pic_path,rankdir)
- print('Done!')
使用caffemodel对任意图片分类 需要到caffe model zoon 下载 bvlc_reference_caffenet.caffemodel [python] view plain copy
- # -*- coding: utf-8 -*-
- """
- Created on Tue Jul 5 22:16:37 2016
- 使用caffemodel进行分类
- @author: xx
- """
- import caffe
- #caffemodel 文件
- modelDir = '/home/xx/caffe-master/models/bvlc_reference_caffenet/'
- model = modelDir + 'bvlc_reference_caffenet.caffemodel'
- #deploy文件
- deploy = modelDir + 'deploy.prototxt'
- #GPU模式
- caffe.set_mode_gpu()
- net = caffe.Net(deploy,model,caffe.TEST)
- #数据预处理配置
- #config infomation from deploy
- #top: "data"
- #input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
- #输入尺寸
- transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape}) #data form deploy
- #维度调整 HWK-KHW python读取为HWK
- transformer.set_transpose('data',(2,0,1))
- #值阈调整 python读取图片为[0,1]
- transformer.set_raw_scale('data',255)
- #通道调整 RGB-BGR caffe与opencv一致为BGR,而原图为RGB
- transformer.set_channel_swap('data',(2,1,0))
- #尺寸调整 第0维可任意改变
- net.blobs['data'].reshape(10,3,227,227)
- #加载测试图片
- pic = '/home/xx/Spyder/mnist/dog.jpg'
- img = caffe.io.load_image(pic);
- #分类预测
- net.blobs['data'].data[...] = transformer.preprocess('data',img)
- out = net.forward()
- pridects = out['prob'] #prob form deploy
- predict = pridects.argmax()
- print predict #输出265
- net.meta.classes.description(265)
- ns =
- 'Cardigan, Cardigan Welsh corgi' # 羊毛衫、羊毛衫威尔士柯基犬
版权声明:本文标题:Ubuntu 下Caffe的安装过程 -- 之一 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729036449h1309812.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论