ubuntu16.04配置py-faster-rcnn
2017-08-16 13:58
447 查看
在ubuntu16.04下编译安装了py-faster-rcnn。
如果你发现本文写的有不对或不清晰的地方,还请在文末留言指出,谢谢!
主要步骤包括:安装cuda/cudnn,换apt源,装开源显卡驱动,装caffe依赖的apt包和python包,下载py-faster-rcnn代码,编译代码。注意一点:不要用cuda安装包自带的显卡驱动,装好cuda后用apt-get装源里的最新驱动,否则很可能黑屏。
py-faster-rcnn代码默认使用cudnn3,本文安装的是cudnn5,是通过修改微量py-faster-rcnn所依赖的caffe代码做到的。
本文提供了步骤0~17,其中0~14作为基础配置存在,也可用于其他开源代码库的配置参考。也包括不识别网卡的问题。
具体步骤如下:
请在windows平台上,到nvidia官网去下载,开始下载后换迅雷下载以加速。
这里以cuda7.5为例进行安装
开机后grub界面按
3 拉黑
拉黑
在文件末尾追加如下内容:
先按Ctrl+Alt+F1切换到tty1;然后执行以下命令:
接下来会提示很多内容,首先是按
稍等片刻安装好cuda后,会提示要设定
然后按Ctrl+Alt+F7切换过去。
或者不用上面两个命令,用
在文件末尾追加这一行内容并保存关闭文件:
(如果你用zsh作为默认shell,那么上面这句会不起作用。sudo vim /etc/zsh/zshrc,这样编辑的是全局的zsh用的环境变量,文件末尾添加
在终端输入如下命令:
输入如下内容:
更新ldconfig:
这里可能遇到的一个问题是,cuda已经装好了,但是编译cuda的例程时失败,提示cuda的库链接不上。这在我的笔记本电脑上遇到过,关掉secure boot就好了,会有一个蓝框的提示。需要按照提示输入两次密码,然后重启,再输入密码(至少8位)
重启时候输入密码,会弹出一个蓝色的小框,选择change secure boot state,然后按照提示的位输入密码,比如提示第7位,那就输入先前设定的密码中的第7位。
以浙大源为例(也可以用阿里源),用gedit打开配置文件并填入配置:
清空内容,并复制粘贴如下内容:(或者手动访问http://mirrors.zju.edu.cn/,手动选定系统版本手动生成)
更新源:
这里可能遇到的坑是,有线网和无线网都无法连接,用
另外还有这个英文讨论帖,用hack的方式把Killer E2400的驱动模块打到内核中,没有尝试过,不确定是否可行。
根据命令执行结果,找到需要的nvidia显卡驱动版本号,比如我找到的是352,那就下载:
or you may find proper graphics driver for your card. For example, GTX1080Ti with
在打开的终端中输入下面命令:
继续更新文件链接:前面只拷贝了一个.so文件而不是全部,这是因为
安装
如果你发现本文写的有不对或不清晰的地方,还请在文末留言指出,谢谢!
主要步骤包括:安装cuda/cudnn,换apt源,装开源显卡驱动,装caffe依赖的apt包和python包,下载py-faster-rcnn代码,编译代码。注意一点:不要用cuda安装包自带的显卡驱动,装好cuda后用apt-get装源里的最新驱动,否则很可能黑屏。
py-faster-rcnn代码默认使用cudnn3,本文安装的是cudnn5,是通过修改微量py-faster-rcnn所依赖的caffe代码做到的。
本文提供了步骤0~17,其中0~14作为基础配置存在,也可用于其他开源代码库的配置参考。也包括不识别网卡的问题。
具体步骤如下:
0 下载cuda/cudnn
cuda用于调用显卡加速计算,py-faster-rcnn训练自己数据只能gpu模式因此cuda必须装;cudnn也用于加速可以不装但推荐安装。cudnn的版本要和cuda版本匹配,比如(cuda7.5, cudnn5.0)或(cuda8.0, cudnn5.1)的组合。强烈建议使用.run格式的cuda安装包。
请在windows平台上,到nvidia官网去下载,开始下载后换迅雷下载以加速。
这里以cuda7.5为例进行安装
1 编辑开机启动参数
这一步可选。有些台式机装好ubuntu重启后会黑屏,此时考虑本步骤。开机后grub界面按
e, 在"
linux"开头行行尾
single后添加参数
nomodeset,注意空格分隔各个参数;按F10使用临时修改参数启动ubuntu
2 下载cuda和cudnn
用U盘或者移动硬盘,拷贝从windows上迅雷下载好的cuda和cudnn到HOME目录下。HOME目录就是例如/home/chris或者
/home/rain这样的目录,是你打开“ubuntu的文件夹”后默认进入的目录
3 拉黑nouveau
拉黑nouveau这个显卡驱动,需要编辑配置文件并添加配置参数:按Ctrl+Alt+T打开终端,输入以下命令(
#开头的内容是注释不会被执行):
sudo gedit /etc/modprobe.d/blacklist.conf # 用gedit编辑器打开配置文件
在文件末尾追加如下内容:
blacklist nouveau
4 安装cuda
安装cuda的.run文件。需要在tty终端下、lightdm进程关闭的情况下安装,并且使用override模式、不安装cuda自带的显卡驱动
先按Ctrl+Alt+F1切换到tty1;然后执行以下命令:
sudo init 3 #关闭切换过来之前的图形界面 sudo service lightdm stop # 关闭lightdm进程 sudo sh ./cuda_7.5.18_linux.run --override # 安装cuda的run文件,注意要有--override参数表示强制安装。 cuda的版本号根据情况改变
接下来会提示很多内容,首先是按
q然后选择
accept,然后会问是否安装cuda安装包带的显卡驱动,当然是不装!(跳出的提示中选择
N),后续的各种提示都选'yes'或者默认值(比如cuda的样例程序安装位置等)
稍等片刻安装好cuda后,会提示要设定
PATH环境变量和
ldconfig的配置项。因为现在还是在tty1下面,不能用图形界面的东西,此时只能用vi和nano这两个很难用的编辑器,不妨先切回图形界面然后用gedit来设定
5 切换回图形界面
sudo init 5 service lightdm start # 忘了是否需要这一步了,执行即可,就算报错也没有关系
然后按Ctrl+Alt+F7切换过去。
或者不用上面两个命令,用
startx命令直接切换过去。
6 添加cuda用到环境变量和环境配置文件
开启终端(Ctrl+Alt+T),输入如下命令:sudo gedit /etc/profile # 打开配置文件
在文件末尾追加这一行内容并保存关闭文件:
export PATH=$PATH:/usr/local/cuda/bin # 这一行的cuda-7.5这个版本根据你的cuda版本而改变。这一行在系统环境变量PATH上追加了cuda的bin目录使得nvcc等命令能被在任意目录下调用
(如果你用zsh作为默认shell,那么上面这句会不起作用。sudo vim /etc/zsh/zshrc,这样编辑的是全局的zsh用的环境变量,文件末尾添加
export PATH=$PATH:/usr/local/cuda/bin)
在终端输入如下命令:
sudo gedit /etc/ld.so.conf.d/cuda.conf # 新建一个ldconfig的配置文件,是为了后续用gcc/g++编译的时候能够链接到cuda的库文件
输入如下内容:
/usr/local/cuda/lib64
更新ldconfig:
sudo ldconfig # 可选,其实不用做的
这里可能遇到的一个问题是,cuda已经装好了,但是编译cuda的例程时失败,提示cuda的库链接不上。这在我的笔记本电脑上遇到过,关掉secure boot就好了,会有一个蓝框的提示。需要按照提示输入两次密码,然后重启,再输入密码(至少8位)
重启时候输入密码,会弹出一个蓝色的小框,选择change secure boot state,然后按照提示的位输入密码,比如提示第7位,那就输入先前设定的密码中的第7位。
7 重启ubuntu系统
8 换apt源
要安装开源nvidia显卡驱动了,是用apt-get命令来安装,但是apt-get的默认源网速太慢,换一个离你地理位置近的源:以浙大源为例(也可以用阿里源),用gedit打开配置文件并填入配置:
sudo gedit /etc/apt/sources.list # 打开配置文件
清空内容,并复制粘贴如下内容:(或者手动访问http://mirrors.zju.edu.cn/,手动选定系统版本手动生成)
deb http://mirrors.zju.edu.cn/ubuntu xenial main universe restricted multiverse deb http://mirrors.zju.edu.cn/ubuntu xenial-security main universe restricted multiverse deb http://mirrors.zju.edu.cn/ubuntu xenial-updates main universe restricted multiverse deb http://mirrors.zju.edu.cn/ubuntu xenial-backports main universe restricted multiverse deb-src http://mirrors.zju.edu.cn/ubuntu xenial main universe restricted multiverse deb-src http://mirrors.zju.edu.cn/ubuntu xenial-security main universe restricted multiverse deb-src http://mirrors.zju.edu.cn/ubuntu xenial-updates main universe restricted multiverse deb-src http://mirrors.zju.edu.cn/ubuntu xenial-backports main universe restricted multiverse
更新源:
sudo apt-get update
这里可能遇到的坑是,有线网和无线网都无法连接,用
ifconfig只显示
lo这个本地回环的伪网卡。这可能是你的网卡过于奇葩了,比如我遇到msi(微星)主板+killer(杀手)E2400的网卡,ubuntu并不认它。通过手动编译安装
ndiswrapper并使用了一个tp-link的TL-wn726n外置无线网卡,得以上网。然后出现重启ubuntu后再次无法发现任何网卡,重启进入windows连接网络成功后重启进入ubuntu又好了。后续更新了内核,再次多次重启ubuntu都可以上网。很奇怪。
ndiswrapper下载地址
ndiswrapper原理是,加载网卡的windows驱动中的
.inf等文件中的信息,关于其原理和使用详细步骤的可以参考这一篇博客
另外还有这个英文讨论帖,用hack的方式把Killer E2400的驱动模块打到内核中,没有尝试过,不确定是否可行。
9 安装nvidia开源显卡驱动
先找到需要的显卡驱动版本,在终端输入cd /usr/local/cuda/samples grep "nvidia-3" -r ./
根据命令执行结果,找到需要的nvidia显卡驱动版本号,比如我找到的是352,那就下载:
sudo apt-get install nvidia-352
or you may find proper graphics driver for your card. For example, GTX1080Ti with
cuda_8.0.61_375.26_linux.run, should disable cuda installer's card driver(375.26) (which brings black screen after reboot), and replace that with nvidia-381 will be OK, via adding a ppa repo:
# first, make sure you have added nouveau to blacklist (/etc/modprobe.d/blacklist.conf or just create a new conf file under same folder, add add `blacklist nouveau`) sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo init 3 sudo lightdm stop sudo apt install aptitude aptitude search nvidia-3* # search proper driver package sudo apt install nvidia-381 # I choose 381. you may try newer version as well sudo reboot
10 安装cudnn
将下载下来的cudnn-7.0-Linux-x64-v4.0-prod.tgz 解压(先前已经放到/home/chris目录下了,打开文件夹用鼠标解压就可以),解压后得到名为
cuda的文件夹,只不过里面只包含
include和
lib目录,我们要做的就是把这两个目录放到cuda的安装目录(默认是
/usr/local/cuda)。不过因为默认的cuda安装目录需要sudo权限,直接用鼠标操作比较麻烦,不如命令行干脆,因此用命令行来操作。
在打开的终端中输入下面命令:
cd ~/cuda # 切换到cuda所在目录。 ~表示HOME目录,比如我的是/home/chris sudo cp include/cudnn.h /usr/local/cuda/include/ sudo cp lib64/{libcudnn.so.5.1.5,libcudnn_static.a} /usr/local/cuda/lib64/ # 把名字最长的.so文件和.a文件拷贝过去
继续更新文件链接:前面只拷贝了一个.so文件而不是全部,这是因为
/usr/local/cuda/lib64目录,是先前步骤6配置过的
/etc/ld.so.conf.d/cuda.conf目录中填入的路径,这个conf文件会被系统加载,表示以后编译代码时链接库会考虑从这个目录搜索库文件,也就是作为“辅助库目录”而存在。库目录要求,“大名”相同的文件(后面小版本不同而前缀相同),只能有一个普通文件存在而其他的作为软链接。那么继续更新软链接:
cd /usr/local/cuda/lib64/ # sudo rm -rf libcudnn.so libcudnn.so.5 # 如果先前没有安装过,则这一行忽略即可。 sudo ln -s libcudnn.so.5.0.18 libcudnn.so.5 # 这里的版本号请换成你实际的版本号 sudo ln -s libcudnn.so.5 libcudnn.so
11 装一些用于提升开发效率的apt包(可选,个人推荐):
sudo apt-get install vim zsh openssh-server
安装
zsh的主题插件
oh-my-zsh(可选,个人推荐):
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"[/code]12 装caffe依赖的apt包:
安装caffe和py-faster-rcnn所依赖的apt包(我用zsh+ohmyzsh,bash的话请去掉包含的"\")sudo apt-get install -y build-essential cmake git pkg-config libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev python-dev python-pip python-numpy python-scipy libhdf5-\* libgflags-dev python-opencv python-skimage python-yaml git sudo apt-get install -y --no-install-recommends libboost-all-dev13 安装pip包
先配pip源,比如阿里云源(或者豆瓣的也行):
在终端用gedit打开~/.pip/pip.conf文件:gedit ~/.pip/pip.conf
然后填入如下内容并保存、关闭gedit:[global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
然后用pip下载后续用到的python包(需要sudo权限因为要写入/usr/local等系统目录):sudo pip install protobuf cython easydict jupyter14 git下载代码
先配置FQ工具,比如ss。 然后为git配置sock5代理(这个步骤可选,目的是加速git下载):
在终端输入如下命令:git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks5://127.0.0.1:1080'
配置好后,用git下载代码python版faster-rcnn代码(只下载caffe也是OK的,依赖项都配置好了)mkdir -p ~/work && cd ~/work git clone --recursive https://github.com/rbgirshick/py-faster-rcnn[/code]15 编译代码
先编译lib目录下的代码
cd ~/work/py-faster-rcnn cd lib make
其次编译依赖的特定版本的caffe。
需要修改配置文件Makefile.config和Makefile,以及源码的更新
Makefile.config中需要修改的行:#使用cudnn USE_CUDNN := 1 #去掉不合适的cuda计算能力参数 CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \ -gencode arch=compute_52,code=sm_52 \ -gencode arch=compute_60,code=sm_60 \ -gencode arch=compute_61,code=sm_61 \ -gencode arch=compute_61,code=compute_61 # 开启PYTHON支持 WITH_PYTHON_LAYER := 1 # INCLUDE_DIRS路径上,追加/usr/include/hdf5/serial,因为hdf5这个包在ubuntu16.04换成hdf5/seiral这种用法了 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
其他项,比如atlas、anaconda的python等,看情况修改,不修改也OK。
Makefile中需要修改的行:# LIBRARIES变量,把hdf5的两个库名换掉,从hdf5_hl->hdf_serial_hl hdf5->hdf5_serial LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
(老版本的cuda可能需要下面这个修改,cuda8则不必:
找到第397行,NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)修改为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)(添加了-D_FORCE_INLINES参数
)编译caffe-fast-rcnn
需要先更新用到的caffe:原版py-faster-rcnn依赖的caffe比较老,不支持cudnnv5,那就更新下对应的源码。提供两种版本,方法1更简单些。
方法1:利用git修改cd caffe-fast-rcnn git remote add caffe https://github.com/BVLC/caffe.git git fetch caffe git merge -X theirs caffe/master
然后在合并之后注释掉include/caffe/layers/python_layer.hpp文件里的self_.attr(“phase”) = static_cast(this->phase_)
方法2:纯手工修改
用最新caffe源码的以下文件替换掉faster rcnn 的对应文件
include/caffe/layers/cudnn_relu_layer.hpp, src/caffe/layers/cudnn_relu_layer.cpp, src/caffe/layers/cudnn_relu_layer.cu
include/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cu
include/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp, src/caffe/layers/cudnn_tanh_layer.cu
用caffe源码中的这个文件替换掉faster rcnn 对应文件
include/caffe/util/cudnn.hpp
将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter
执行caffe的编译cd caffe-fast-rcnn make -j8 make pycaffe16 其他补充
尝试用anaconda提供的python替代系统的python,不过编译起来没有成功。装anaconda主要是能避免自己手动装一些python包,不过其实借助apt-get和pip,也都能很快装好的。
然后
开启一个notebook:jupyter-notebook
然后通过浏览器访问http://localhost:8888的形式(具体端口看你的命令提示),就可以使用notebook了。
另:如果编译caffe-fast-rcnn失败,但是依赖的环境和我提到的一致,那么不妨重新从git获取一份caffe的代码:cd ~/work/py-faster-rcnn rm -rf caffe-fast-rcnn git submodule update --init --recursive
然后重启电脑,更新src和include目录的代码,以及Makefile与Makefile.config,再编译,就可以了。17 其他问题
需要在
module object has no attribute text_formatlib/fast_rcnn/train.py中开头处,添加:import google.protobuf.text_format18 参考
http://blog.csdn.net/g0m3e/article/details/51420565
http://www.dongcoder.com/detail-184574.html
http://blog.nelsonliu.me/2017/04/29/installing-and-updating-gtx-1080-ti-cuda-drivers-on-ubuntu/
相关文章推荐
- ubuntu16.04配置py-faster-rcnn(CPU版)
- ubuntu16.04配置py-faster-rcnn
- Ubuntu16.04下跑通py-faster-rcnn的demo(基于caffe)
- py-faster-rcnn配置过程(ubuntu)
- py-faster-rcnn配置运行faster_rcnn_end2end—VGG_CNN_M_1024(Ubuntu14.04)
- Ubuntu16.04+caffe的安装和Py-faster-rcnn在CPU电脑的安装-2
- py-faster-rcnn配置运行demo.py(Ubuntu14.04),不成功的朋友请与我(lee)联系,后面附带邮箱
- py-faster-rcnn配置运行demo.py(Ubuntu14.04)
- faster-rcnn在ubuntu16.04环境下的超级详细的配置
- py-faster-rcnn配置运行demo.py(Ubuntu14.04),不成功的朋友请与我(lee)联系,后面附带邮箱
- ubuntu14.04配置py-faster-rcnn(GPU版本)
- AWS-G2-Ubuntu16.04下安装cuda,caffe和py-faster-rcnn
- py-faster-rcnn配置运行demo.py(Ubuntu14.04)
- py-faster-rcnn配置运行faster_rcnn_end2end—VGG_CNN_M_1024(Ubuntu14.04)
- ubuntu16.04+caffe安装和 py-faster-rcnn的CPU安装
- ubuntu16.04 cuda8.0 cudnn6.0 faster-rcnn配置
- Ubuntu16.04+GTX1070+cuda8.0+cudnn5.1配置faster-rcnn的方法
- py-faster-rcnn + opencv3.0.0 + ubuntu16.04配置(CPU模式)
- ubuntu14.04在cpu上配置caffe以及py-faster-rcnn环境(可在odroid上实现)