跑一個RCNN的代碼需要配Caffe+MATLAB2014a,走了不少彎路,花了不少時間。在此做個筆記,以供分享。
配置:
Ubuntu 14.04 + MATLAB 2014a + CUDA 6.5
一、安裝gcc 4.7
Ubuntu14.04自帶的gcc版本是4.8,MATLAB2014a支持的最高版本爲4.7x。因此,需要安裝gcc4.7,並給gcc降級
在終端執行gcc 4.7的安裝命令:
sudo apt-get
update
sudo apt-get install gcc-4.7 g++-4.7 g++-4.7-multilib gcc-4.7-multilib
在終端執行以下系統gcc降級命令(其中數字越大,表示優先級越高):
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.7 100
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.8 50
驗證gcc-4.7是否安裝併成爲系統的默認版本:gcc -v
也可以將以上命令寫入一個shell文件中,執行shell腳本。
二、安裝MATLAB2014a
四、安裝Caffe
4.1 下載
4.2 安裝庫依賴:
sudo apt-get install
libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
4.3 將Caffe目錄下的Makefile.config.example修改爲Makefile.config並且修改其中關於MATLAB和CUDA的設置:
CUDA_DIR := /usr/local/cuda-6.5
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
MATLAB_DIR := /usr/local/MATLAB/R2014a
注:其中CUDA >= 6.0時,CUDA_ARCH 需要做如上設置。
4.4 build Caffe
make -j 4
make -j 4 matcaffe
以上4表示採用4核。
題外:
若想在shell上測試Caffe的例子,可在Caffe目錄下做如下編譯:
make test
make runtest
並在終端執行:
cd caffe-master
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh
如果想要跑rcnn的代碼,那麼需要配置liblinear-1.94,主要步驟如下:
1、修改lliblinear-1.94/matlab目錄下的Makefile文件,設置MATLAB的路徑
2、在終端make:先在liblinear-1.94目錄下make,再在liblinear-1.94/matlab目錄下make
報錯及處理:
1 報錯:close未聲明
處理:添加 #include "unistd.h" 到Network.cpp裏
PS:
跑cnn代碼時要注意batch size不要過大。
本想用CUDNN跑代碼的,無奈下載不了,只能暫時放棄。
參考:
How to setup Caffe to run Deep Neural Network