Tensorflow和Caffe是機器學習初學者常用的2種深度學習框架。相對于Tensorflow有簡單的python pip一鍵安裝包,Caffe的安裝更考驗開發者的計算機編譯水平,需要自己下載源碼編譯。盡管caffe的配置教程網上很多,但是網上caffe的各個分支版本也很多,所以初學者在編譯時總是會碰到各種奇怪的問題。本文會針對初學者常用的Windows* + Intel CPU的平臺上安裝配置Caffe做一個較為完整的總結。
Caffe的各個版本簡介
官方版本:伯克利BVLC(Berkeley Vision And Learning Center) 版
https://github.com/BVLC/caffe
這個是Caffe的主版本,由伯克利大學維護。其他所有的Caffe版本都是由這個版本分支出去的。這個版本Caffe可以編譯出Linux和Windows*版本,支持Nvidia的CUDA加速,但是對CPU的優化不好,而且有關安裝和配置的文檔很少。從這個版本編譯Caffe,需要很強的自我學習和解決問題能力。
微軟的Windows*版本
https://github.com/Microsoft/caffe
微軟自己維護的一個版本。這個版本簡化了Caffe在Windows*下的步驟,自帶了一個VS的Solution項目。這個版本同樣支持基于CPU和CUDA的算法實現。
Intel Caffe優化版
https://github.com/intel/caffe
Intel維護的版本,這個版本優化了Intel CPU的實現算法,同時提供對Intel Xeon CPU多核和多節點的支持。這個版本里有些算法庫對Windows*支持不太好,所以這個分支編譯出的Caffe主要還是運行在Linux的服務器平臺上做訓練工作。
Intel clCaffe 核顯OpenCL優化版
https://github.com/01org/caffe
Intel維護的另一個版本,相對于官網BVLC Caffe上的OpenCL分支,優化了基于Intel 核顯GPU的OpenCL加速算法。這個版本同時支持Windows* 和Linux平臺,適合在有Intel核顯的CPU上做一些推理(Inference)場景的工作。
BVLC caffe的編譯
安裝編譯所需要的軟件
配置Windows*的環境變量
為了避免等會CMAKE生成編譯腳本的時候找不到一些依賴關系,有的沒的路徑都加一些,包括Cmake, Git, Ananconda以及Python的路徑。
Checkout 官網Caffe的代碼
運行以下代碼,用git從官網caffe上下載Windows*分支。
git clone https://github.com/BVLC/caffe.git cd caffe git checkout windows
修改caffe源碼代碼里的一些編譯參數
if !PYTHON_VERSION! EQU 2 ( set CONDA_ROOT=C:\Miniconda-x64 ) :: Set python 3.5 with conda as the default python if !PYTHON_VERSION! EQU 3 ( set CONDA_ROOT=C:\Miniconda35-x64 ) set PATH=!CONDA_ROOT!;!CONDA_ROOT!\Scripts;!CONDA_ROOT!\Library\bin;!PATH!
然后根據Windows*環境設置下圖中紅色方框的部分
1. 編譯器是VS2015,設置MSVC_VERSION=14
2. 不需要NINJA來編譯,設置WITH_NINJA=0
3. 沒有NVDIA GPU,設置CPU_ONLY=1
4. Python版本為3.X,設置PYTHON_VERSION=3
5. 需要pyCaffe支持,設置BUILD_PYTHON=1
如果希望使用自己編譯VS2015加python3.6的caffe-builder,除了要加入上段說到的2行修改外,還需要注釋掉下圖中WindowsDownloadPrebuiltDependencies.cmake的下圖所示的綠色部分,這部分代碼是負責從網上下載依賴包并且解壓縮到本地目錄的。同時要把caffe-builder編譯出的libraries目錄拷貝到C:\Users\[user name]\.caffe\dependencies這個目錄下。(具體caffe-builder的編譯,將在本文第3節詳細介紹)
開始編譯
在caffe的目錄下輸入scripts\build_win.cmd
開始編譯,一切順利的話,大約10分鐘后就編譯好了
驗證一下編譯的結果
接下來運行一下caffe項目自帶的examples里的00-classification的代碼來驗證一下caffe是否能夠正常運行
打開anaconda的命令行,進入caffe的examples目錄,運行jupyter notebook
在打開的notebook中打開caffe自帶的例子 00-calssification.ipynb
這是用一個訓練好的Caffe模型來預測動物圖片的例子,圖片默認是使用Caffe項目里examples\image\cat.jpg。
一路Shift+Enter運行下去,看到第8步predicted輸出
predicted class is: 281
第9步輸出
output label: n02123045 tabby, tabby cat
預測結果是貓,說明caffe已經正確編譯而且能運行了。
大功告成,開始你的Caffe學習之旅吧
Caffe依賴庫Caffe Builder的編譯
主要介紹怎么編譯Caffe-Builder項目
安裝編譯所需要的軟件
編譯軟件的需求同2.1部分
配置Windows*的環境變量
環境變量的配置同2.2部分
下載Caffe-Builder源碼
Caffe-Builder的開源項目位于 https://github.com/willyd/caffe-builder
目前最新的release為1.1版,可以從這里下載最新的release 1.1.0版的源碼
https://github.com/willyd/caffe-builder/releases
修改caffe-builder源碼代碼里的一些編譯參數
修改主要基于2個方面:
首先在Windows*下Ninja編譯系統不容易配置好,所以這里選擇了Visual Studio 2015作為編譯器。修改build_v140_x64.cmd,將紅色部分的’Ninja’改為’Visual Studio 14 2015 Win64’
其次是這個Release 1.1.0發布有點時間了,caffe-builder很多依賴的開源項目都搬家或者版本更新了,需要做相應的修改。
1) 修改packages\protobuf\CmakeLists.txt
將圖中所示部分protobuf包的Hash值從原來的
14a532a7538551d5def317bfca41dace
修改為
39d6a4fa549c0cce164aa3064b1492dc
2) 修改packages\hdf5\CmakeLists.txt
將圖中所示部分的URL從https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.16/src/CMkae-hdf5-1.8.16.zip 修改為 https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.16/src/CMkae-hdf5-1.8.16.zip
編譯
進到caffe-builder-1.1.0目錄下,運行build_v140_x64.cmd開始編譯
屏幕輸出
最終編譯生產的caffe依賴庫文件放在build\libraries目錄下,你可以將這個libraries目錄拷貝到caffe所需要的目錄下。
小結
主要介紹了官方BVLC Caffe在Windows*下的編譯設置過程。BVLC Caffe提供CPU和Nvidia GPU版本的實現,但是在實際學習工作中,初級開發者的電腦平臺通常不會裝備昂貴的Nvidia顯卡,而CPU版本的Caffe因為執行效率不高,只能用來做一些小型的”玩具”實驗項目。
深度學習這么火,對于有幸從事機器學習的我而言激動不已,無奈caffe安裝較為繁瑣,加之硬件條件的限制,使得自己不得不對其望而卻步。不過google的一款深度學習框架tensorflow安裝較為簡單,在Windows下之間pip install tensorflow即可完成安裝,然后在eclipse中進行基于tensorflow的開發了。本人先從簡單的開始,先在windows下安裝tensorflow并進行學習,用其做了幾個VGG、CNN、驗證碼識別等幾個簡單例子后,對其差不多已經了解,故而這幾天想轉戰caffe。
本人選擇使用ubuntu14.04,因為其穩定,而且遇到錯誤在網上的解答也比較多,整個安裝過程不到一天時間(安裝很簡單,主要是安裝或者編譯過程花的時間比較長),也沒有遇到什么大的錯誤,整體而言很順利,主要是參考了http://www.th7.cn/system/lin/201605/165973.shtml這篇博客。寫的比較詳細,不過其部分代碼一步到位,會導致出錯,本人根據安裝經驗重新進行整理,部分安裝步驟根據該博客來的,只是對出錯的地方進行了修改。希望幫助大家早日安裝好。
1、安裝vm虛擬機,ubuntu的安裝鏡像地址共享給大家http://pan.baidu.com/s/1jIBjPuY ,安裝完后首先確保虛擬機可以上網!!!
2、打開終端安裝必要的環境,依次執行如下命令:
sudo apt-get update #更新軟件列表 sudo apt-get upgrade #更新軟件 sudo apt-get install build-essential
3、去英偉達官網下載,網址如下:https://developer.nvidia.com/cuda-downloads
(不要在Windows下載后在復制到虛擬機,直接在虛擬機打開網頁后收入網址進行下載)
4、下載完后,進入下載目錄執行:
sudo sh cuda_7.5.18_linux.run#(cuda_7.5.18_linux.run是下載的文件名)
5、第四步的安裝過程比較長,安裝過程會顯示最終用戶許可協議(EULA),很長,可以按‘q’退出閱讀,然后安裝的時候不要安裝顯卡驅動,具體如下:
6、安裝完后進行執行:
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/lib' >> ~/.bashrc source ~/.bashrc
7、安裝相關庫:
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev protobuf-compiler gfortran libjpeg62 libfreeimage-dev libatlas-base-dev git python-dev python-pip libgoogle-glog-dev libbz2-dev libxml2-dev libxslt-dev libffi-dev libssl-dev libgflags-dev liblmdb-dev python-yaml sudo easy_install pillow 或者 pip3 install pillow
8、下載caffe
cd ~ #進入主目錄 git clone https://github.com/BVLC/caffe.git
然后在當前目錄下就會看到下載的caffe,通過ls命令查看。
9、安裝python支持(該過程持續時間很長,我安裝的時候參考的博客把第三和第四行代碼合并為一行,執行執行會出錯。大家按照我的一行一行代碼執行就行)
cd caffe cat python/requirements.txt | xargs -L 1 sudo pip install sudo ln -s /usr/include/python2.7/ /usr/local/include/python2.7 sudo ln -s /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ /usr/local/include/python2.7/numpy
10、修改Makefile.config
cp Makefile.config.example Makefile.config
然后用vi或者其他編輯器修改Makefile.config文件,找到 # CPU_ONLY:=1這一行,把這一行前面的注釋 。然后在找到PYTHON_INCLUDE,把原來的/usr/lib/python2.7/dist-packages/numpy/core/include改為/usr/local/lib/python2.7/dist-packages/numpy/core/include即可。
GPU版本:
USE_CUDNN :=1
USE_OPENCV :=1
USE_LMDB :=1
USE_HDF5 :=1
CPU版本:
CPU_ONLY :=1
最后設置cv2:
OPENCV_VERSION :=3 (我是3.3版本,所以寫3,如果是2.x版本則寫2即可)
如果使用編譯的cv2則如下打開注釋
USE_PKG_CONFIG :=1
使用python接口:
WITH_PYTHON_LAYER :=1
11、編譯caffe(編譯時間相對比較長,一行一行執行就好,我在編譯的時候出錯,如果出錯,執行make clean,然后在從頭開始重新編譯)
make all -j2 #2代表啟用2各線程同時編譯 make test make runtest make pycaffe make distribute
如果編譯過程報錯:AR -o .build_release/lib/libcaffe.aLD -o .build_release/lib/libcaffe.so.1.0.0/usr/bin/ld:
cannot find -lhdf5_hl/usr/bin/ld: cannot find -lhdf5collect2: error: ld returned 1 exit statusMakefile:572:
recipe for target '.build_release/lib/libcaffe.so.1.0.0' failedmake: *** [.build_release/lib/libcaffe.so.1.0.0]
Error 1
則:然后修改Makefile 文件(注意不是Makefile.config) 將里面的
LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改為LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
Makefile文件修改
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) 替換為: NVCCFLAGS +=-D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改為:
LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
修改Makefile.config文件
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
如果遇到錯誤,在makefile中將.build_release/tools/extract_features.bin or build_release/tools/convert_imageset.bin error
LIBRARIES +=boost_thread stdc++
修改:
LIBRARIES +=boost_thread stdc++ boost_regex
or
LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
在最后hdl5后面添加opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs boost_regex即可
在make pycaffe的時候可能報錯如下:
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory
compilation terminated.
Makefile:504: recipe for target 'python/caffe/_caffe.so' failed
make: *** [python/caffe/_caffe.so] Error 1
解決辦法:
執行如下命令sudo apt-get install python-numpy,然后再試,如果還是不行就進入python命令行,輸入如下:
python
import numpy as np
np.get_include()然后就會看到如下輸出:
'/usr/local/lib/python2.7/dist-packages/numpy/core/include',然后打開Makefile.config文件,找到PYTHON_INCLUDE,將/usr/lib/python2.7/dist-packages/numpy/core/include這行代碼改成和剛剛命令行輸出一樣,然后重新編譯執行.重新編譯前先make clean,然后從頭make all -j8開始編譯.
這時候cd 到caffe 下的 python 目錄,試試caffe 的 python wrapper安裝好沒有:
python import caffe
如果不報錯,那就說明安裝好了。
測試:
cd $CAFFE_ROOT ./data/mnist/get_mnist.sh ./examples/mnist/creat_mnist.sh ./examples/mnist/train_lenet.sh
到此安裝完成,現在就可以開心的玩深度學習了!!!喜歡的朋友可以點擊關注哦