https://blog.csdn.net/flygeda/article/details/78638824
本文主要是對近期參考的網上各位大神的博客的總結,其中,從安裝系統到跑通程序過程中遇到的各種問題,筆者會詳細分析,有一些問題在網上都查不到。這些環境配置上的坑希望以后不要再踩到
一、安裝Ubuntu 16.04雙系統
原文是“簡書”上的大神的帖子,非常詳細,筆者完全按照文章的步驟安裝的,並沒有遇到問題 : Win10和Ubuntu16.04雙系統安裝詳解;
Ubuntu鏡像官網下載,Ubuntu中國下載地址,Ubuntu百度雲下載:鏈接:http://pan.baidu.com/s/1o7UgBCu 密碼:vr90;
UltraISO刻錄軟件:直接百度即可得到下載地址
二、安裝nVidia驅動,配置cuda,cudnn運行環境
原文主要參考"linux公社"的大神的帖子:Ubuntu 16.04 安裝配置Caffe 圖文詳解
筆者的硬件配置:core i5,16G arm,GTX1080 Ti;因此選擇 cuda 8.0+cudnn 6.0
下面是筆者的安裝過程
1.安裝相關依賴項
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
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
1
2
3
4
如果安裝錯誤,重新運行代碼即可,保證網絡暢通
2.安裝NVIDIA驅動
(1)查詢NVIDIA驅動
首先去官網 http://www.nvidia.com/Download/index.aspx?lang=en-us,查看適合自己顯卡的驅動並下載:
驅動文件后綴名應當是以.run結尾的。我們要把這個文件移動到home目錄下,原因是下面我們要切換到文字界面下,如果放到~/下載 下面,我們沒有辦法進入下載這個目錄(沒有中文輸入法,且中文全部是亂碼)
我的顯卡型號是GTX1080 Ti,系統是linux 64位,按照要求選擇后點擊search.,點擊下載就好了。
我下載后的驅動文件是:NVIDIA-Linux-x86_64-384.98.run
(2)安裝驅動
在終端下輸入: sudo gedit /etc/modprobe.d/blacklist.conf
輸入密碼后在最后一行加上 blacklist nouveau . 這里是將Ubuntu自帶的顯卡驅動加入黑名單。
在終端輸入: sudo update-initramfs -u
重啟電腦~ 這里要尤其注意,安裝顯卡驅動要先切換到文字界面,(按Ctrl+Alt+F1~F6).所以,啟動電腦后,先進入文字界面。
然后,輸入命令 sudo service lightdm stop
現在可以安裝驅動了,先進入家目錄 cd ~ ,然后: sudo ./NVIDIA-Linux-x86_64-384.98.run,按照提示一步步來~
完成后,再次重啟電腦。
安裝完成之后輸入以下指令進行驗證: sudo nvidia-smi,若列出了GPU的信息列表則表示驅動安裝成功。如下圖:
3.安裝CUDA
CUDA是NVIDIA的編程語言平台,想使用GPU就必須要使用cuda。 (1)下載CUDA 首先在官網上(https://developer.nvidia.com/cuda-downloads)下載CUDA,選擇自己合適的版本
sudo chmod 777 cuda_8.0.44_linux.run
sudo ./cuda_8.0.44_linux.run
注意:執行后會有一系列提示讓你確認,但是注意,有個讓你選擇是否安裝nvidia驅動時,一定要選擇否: Install NVIDIA,因為前面我們已經安裝了更加新的驅動了,所以這里不要選擇安裝。其余的都直接默認或者選擇是即可。
(3)環境變量配置
打開~/.bashrc文件: sudo gedit ~/.bashrc 將以下內容寫入到~/.bashrc尾部:
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(4)測試CUDA的samples
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make
sudo ./deviceQuery
如果顯示一些關於GPU的信息,則說明安裝成功。
4.配置cuDNN cuDNN是GPU加速計算深層神經網絡的庫。 首先去官網 https://developer.nvidia.com/rdp/cudnn-download 下載cuDNN,需要注冊一個賬號才能下載。
下載cuDNN6.0 之后進行解壓:
sudo tar -zxvf ./cudnn-8.0-linux-x64-v6.0.tgz
進入cuDNN6.0 解壓之后的include目錄,在命令行進行如下操作: 復制頭文件
cd cuda/include
sudo cp cudnn.h /usr/local/cuda/include
再將進入lib64目錄下的動態文件進行復制和鏈接:
cd ..
cd lib64
sudo cp lib* /usr/local/cuda/lib64/
復制動態鏈接庫
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.6
生成軟銜接
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6
生成軟鏈接
sudo ln -s libcudnn.so.6 libcudnn.so
5.安裝opencv3.2 從官網(http://opencv.org/downloads.html)下載Opencv,並將其解壓到你要安裝的位置,假設解壓到了/home/opencv。
安裝前准備,創建編譯文件夾:
cd ~/opencv
mkdir build
cd build
1
2
3
配置:
sudo apt install cmake
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
1
2
編譯:
sudo make -j8
-j8表示並行計算,根據自己電腦的配置進行設置,配置比較低的電腦可以將數字改小或不使用,直接輸make。
安裝: 以上只是將opencv編譯成功,還沒將opencv安裝,需要運行下面指令進行安裝:
sudo make install
** 三、安裝Anaconda**
python好用,但是python不同版本和各種包管理很讓人頭疼。Anaconda是一個python的一個包裝,它將一些python常用的package打包,方便pythoners直接使用。不但如此,他還有自己的安裝方式conda,這里有提供各種pip里面找不到的包。
anaconda安裝參照官網下載安裝即可https://www.anaconda.com/download/,傻瓜式安裝非常方便
安裝之后再命令終端輸入
$ python
Python 2.7.14 |Anaconda custom (64-bit)| (default, Oct 16 2017, 17:29:19)
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
1
2
3
4
5
出現上述信息,說明安裝成功
** 四、下載faster-rcnn,編譯caffe**
1、GitHub上下載faster-rcnn:https://github.com/rbgirshick/py-faster-rcnn,並下載對應的caffe
按照下圖中的文件結構,配置本地的faster-rcnn工程。
2、下面配置caffe,這里參考的是“Linux公社”的大神的帖子:http://www.linuxidc.com/Linux/2016-12/138870p2.htm
(1)進入caffe-faster-rcnn目錄 (2)因為make指令只能make
Makefile.config文件,而Makefile.config.example是caffe給出的makefile例子,因此,首先將Makefile.config.example的內容復制到Makefile.config:
sudo cp Makefile.config.example Makefile.config
(3) 打開並修改配置文件: sudo gedit Makefile.config 打開Makefile.config文件
根據個人情況修改文件:
a.若使用cudnn,則將
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
b.若使用的opencv版本是3的,則 將
#OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3
c.若要使用python來編寫layer,則 將
#WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1
d.重要的一項 : 將 # Whatever else you find you need goes here. 下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改為:
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
這是因為Ubuntu16.04的文件包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改這一路徑.
(4)修改makefile文件 打開makefile文件,做如下修改:
將:
NVCCFLAGS +=-ccbin=$(CXX)-Xcompiler-fPIC $(COMMON_FLAGS)
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
(5)編輯/usr/local/cuda/include/host_config.h
將其中的第115行注釋掉: 將
# error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改為
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
3、配置完成后,下面進行編譯。直接編譯會出現編譯錯誤,這是因為faster-rcnn默認的caffe支持的cudnn版本是V4,而想用1080Ti顯卡,必須使用cuda7.5+cudnn5.0以上版本,因此編譯caffe會出現版本不兼容而導致的函數參數不對應的錯誤。這種情況參考博文:http://blog.csdn.net/u010733679/article/details/52221404,
筆者是用的手動修改的方式,下載最新的caffe:https://github.com/BVLC/caffe,
用最新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:
make -j8 && make pycaffe
1
到此,環境配置結束。下面筆者會介紹使用faster-rcnn訓練自己的網絡,並詳細講解遇到的坑。
** 五、制作數據集,運行faster-rcnn**
使用faster-rcnn最麻煩的一步就是制作數據集。這里參考兩篇博文:
Faster-RCNN+ZF用自己的數據集訓練模型(Python版本)
py-faster-rcnn算法caffe配置,訓練及應用到自己的數據集
兩篇博文使用不同的網絡 ZF 和 VGG16,但是制作數據集是相通的。筆者使用VGG16網絡,按照下圖的文件結構進行修改。
VGG16初始化網絡百度雲盤:鏈接:http://pan.baidu.com/s/1i49f47j 密碼:x1i2
#下面說說我遇到的bug
1、
[cudnn_conv_layer.cpp:53] Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR
這個錯誤是cudnn內部錯誤,當時困擾了筆者好久,再網上搜索,解決的方法不盡相同。
(1)修改caffe中的makefile.config,將 USE_CUNDD := 1改為 #USE_CUDNN := 1。這意味着運行代碼將不使用gpu加速。但是運行深度神經網絡不可能不使用gpu加速,筆者測試過神經網絡在cpu和gpu下運行的速度,后者大概比前者快了100多倍,不使用gpu加速,運行時間太長,不現實。
(2)gpu加速性能不夠,顯存溢出。這個解釋對於筆者來說不可能,1080Ti運行faster-rcnn是完全足夠的。后期解決bug后的運行過程中,顯存只用掉了3.3G,遠遠沒達到1080Ti的11G的上限。
(3)caffe編譯錯誤,筆者make clean,並重新編譯caffe,編譯過程一路通暢,然而還是不能解決問題。
(4)使用sudo超級用戶命令運行,完全解決了這個問題。筆者之前沒有使用anaconda,因此sudo運行時會出現系統找不到路徑的錯誤。因此建議安裝anaconda使用python,在sudo下運行完全沒有問題,非常方便。
2、
Traceback (most recent call last):
File "./tools/train_net.py", line 112, in <module>
max_iters=args.max_iters)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 161, in train_net
model_paths = sw.train_model(max_iters)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 102, in train_model
self.solver.step(1)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/rpn/proposal_target_layer.py", line 66, in forward
rois_per_image, self._num_classes)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/rpn/proposal_target_layer.py", line 191, in _sample_rois
_get_bbox_regression_labels(bbox_target_data, num_classes)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/rpn/proposal_target_layer.py", line 127, in _get_bbox_regression_labels
bbox_targets[ind, start:end] = bbox_target_data[ind, 1:]
TypeError: slice indices must be integers or None or have an __index__ method
1
2
3
4
5
6
7
8
9
10
11
12
13
14
這個bug原因是numpy版本過高造成的,可以降低numpy的版本至1.11.0.
或者修改代碼,強制int類型轉換,參考博文:http://blog.csdn.net/mydear_11000/article/details/70241139
3、
Traceback (most recent call last):
File "./tools/train_net.py", line 112, in <module>
max_iters=args.max_iters)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 157, in train_net
pretrained_model=pretrained_model)
File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 51, in __init__
pb2.text_format.Merge(f.read(), self.solver_param)
AttributeError: 'module' object has no attribute 'text_format'
1
2
3
4
5
6
7
8
解決方法有兩個
(1) 安裝 sudo pip install protobuf==2.5.0.經筆者測試沒有效果
(2) 直接在/home/xxx/lib/fast_rcnn/train.pyi的頭文件導入部分加上
import google.protobuf.text_format,經筆者測試完美解決。
到此為止,筆者終於能夠開心的運行深度神經網絡啦~
---------------------
作者:羿達
來源:CSDN
原文:https://blog.csdn.net/flygeda/article/details/78638824
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
可能出現的問題:https://blog.csdn.net/jmt330/article/details/78568876
caffe編譯成功,但在編譯caffe-fast-rcnn時報錯,也就是說我的電腦新裝的caffe和cuda,cndnn的版本是對應的。並且,在注釋掉cudnn時,caffe-fast-rcnn的編譯不出錯。因此考慮作者發布的源碼中caffe的版本較低,於我的7.0cudnn版本不匹配,因此需要對caffe-fast-rcnn中涉及cudnn的文件全部替換為原先可以成功編譯的caffe文件。
以下是
jinggegebuaa
http://blog.csdn.net/keyanxiaocaicai/article/details/68488944
給出的解決方法:
當當當 把caffe里面的所有與cudnn相關的.h 和.cpp 替換成能用cudnn 編譯過的caffe
需要替換的cudnn有:
第一部分:
caffe-my/include/caffe/util 下面的cudnn.hpp
對應的cpp 文件為:caffe-my/src/caffe/util 下面的cudnn.cpp
第二部分:caffe-my/include/caffe/layers下面
同樣的對應的cpp 文件為:
---------------------
作者:yes蔣淼淼
來源:CSDN
原文:https://blog.csdn.net/jmt330/article/details/78568876
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
錯誤:AttributeError: 'module' object has no attribute 'text_format'
https://blog.csdn.net/qq_33202928/article/details/72526710
最近在學習 faster rcnn ,本來環境已經配置好,已經跑完自己的程序,運行良好,后來安裝了tensorflow,然后重新使用 faster rcnn 進行訓練的時候居然出錯了,我很納悶,期間沒有卸載或者修改配置文件啊,怎么會這樣?
問題:
pb2.text_format.Merge(f.read(), self.solver_param) AttributeError: 'module' object has no attribute 'text_format'
經過google之后發現是protobuf的本版發生了變換,之前在配置caffe的時候手動安裝了protbuf,版本是2.5.0,后來安裝了tensorflow 我回憶了一下,protobuf的版本貌似是發生了變換。
所以解決辦法:sudo pip install protobuf==2.5.0
剛才又發現一個新的解決方法:
在文件./lib/fast_rcnn/train.py增加一行import google.protobuf.text_format 即可解決問題
---------------------
作者:火腿腸的幸福生活
來源:CSDN
原文:https://blog.csdn.net/qq_33202928/article/details/72526710
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!