ubuntu16.04配置py-faster-rcnn
在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作為基礎配置存在,也可用于其他開源代碼庫的配置參考。也包括不識別網卡的問題。
具體步驟如下:
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 modprobe.d/blacklist.conf在文件末尾追加如下內容:
blacklist nouveau4 安裝cuda
安裝cuda的.run文件。需要在tty終端下、lightdm進程關閉的情況下安裝,并且使用override模式、不安裝cuda自帶的顯卡驅動
先按Ctrl+Alt+F1切換到tty1;然后執行以下命令:
sudo init 3 sudo service lightdm stop sudo sh ./cuda_7.5.18_linux.run --override接下來會提示很多內容,首先是按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 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 ld.so.conf.d/cuda.conf輸入如下內容:
locallib64更新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打開配置文件并填入配置:
清空內容,并復制粘貼如下內容:(或者手動訪問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-352or 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 stopsudo 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 reboot10 安裝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.so11 裝一些用于提升開發效率的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)"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-rcnn15 編譯代碼
先編譯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:
然后通過瀏覽器訪問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_format
需要在lib/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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 彻底解决 libhdf5_hl.so.1
- 下一篇: conda 安装软件