Caffe在windows及ubuntu下多種形式的編譯

                                            Caffe庫編譯

一、windows下編譯

不得不吐槽一句,windows下編譯caffe要比ubuntu麻煩很多,稍不注意就是各種錯誤,時間久了重新編譯還會忘記,因此對於windows必須做好詳細的記錄。

Windows下caffe編譯來源主要有兩種:(1)官方BLVC以及微軟(Microsoft) (2)電子科大happynear的caffe-windows。

一)資源鏈接:

1)、官方caffe-windows

BLVC,Github:https://github.com/BVLC/caffe/tree/windows

Microsoft,Github鏈接:https://github.com/Microsoft/caffe

2)、國產Happynear的caffe-windows-ms

Github: https://github.com/happynear/caffe-windows/tree/ms

3)、mini-caffe: https://github.com/luoyetx/mini-caffe

4)、tiny-caffe(Mine): https://github.com/SyGoing/tiny-caffe

…還有很多其他DIY類型的Caffe,比如對於目標檢測的caffe-SSD、Faster-RCNN caffe和C3D-caffe等等,其實都是針對特定應用添加了自定義層。由於caffe官方對於其維護減少,很多新的層都是很多野生程序員添加,並形成各色caffe。

另一種歸類方式: Microsoft和happynear的caffe-wondws工程結構同宗,應該是happynear模仿Microsoft,然後DIY出自己的。

 

 

二)編譯

   1、編譯環境:

win10+cuda8.0+cudnn5.1(cudnn6.0)+opencv3.1+vs2015,cuda8.0、cudnn和opencv安裝隨便百度很多。

   2、編譯

   首先記錄一下官版BLVC-caffe的編譯過程,包括動態庫及靜態庫編譯,以及比較坑的python接口編譯。

   2.1 BLVC-caffe編譯

   默認已經安裝了vs2015、cuda8.0和cuddnn5.1,並且安裝好了Anaconda3和Anaconda2,這裏要記錄caffe的python2.7和python3.5兩種版本接口的編譯,python3.6的暫時還沒有嘗試,後續補上。PS:Anaconda安裝參考我的另一篇博客(比較完整):

 https://blog.csdn.net/ouyangfushu/article/details/79464276

從github上下載caffe,最好使用git,壓縮包有時候容易丟失文件。

   (1)git clone https://github.com/BVLC/caffe.git

   (2)cd caffe

   (3)git checkout windows

   (4)cd scripts.這一步比較容易出岔子,因爲我們需要根據自己需求配置build_win.cmd,這裏經常出錯。Notebook打開build_win.cmd,一般是修改這裏

 

 1)無python接口靜態庫及其可執行文件編譯

WITH_NIJIA=0、BUILD_PYTHON=0、BUILD_PYTHON_LAYER=0、CMAKE_SHARED_BUILD=0(1編譯動態庫,0編譯靜態庫),OK修改完以後,雙擊build_win.cmd。

期間會自動下載三方依賴庫libraries_v140_x64_py27_1.1.0.tar.bz2,有時候下載不成功,不要緊,百度雲盤:https://pan.baidu.com/s/1j1UDoqjzsAmv02bB72oDbQ

提取碼:zayb,然後放在C:\Users\你的用戶名\.caffe\dependencies\download下即可,然後再此雙擊buld_win.cmd.等待比較久編譯完成。   

2) 無python接口動態庫編譯

修改build_win.cmd的WITH_NIJIA=1、CMAKE_SHARED_BUILD=1,注意:需要安裝ninjia,win+R進入cmd命令窗口,

 conda install --yes ninja 或者pip install ninjia

雙擊build_win.cmd,等待編譯完成,此時會生成caffe.dll動態庫。接下來就是整理編譯好的庫作爲三方庫編寫caffe接口函數進行調用即可。具體參考:

https://blog.csdn.net/ouyangfushu/article/details/79546566

編譯好以後build文件夾下是這樣:

 

3)有Python2接口的靜態庫編譯

確保安裝了Anaconda2(環境變量中配置了,如果有多個版本則Anaconda2應該位於首位),修改build_win.cmd, CMAKE_BUILD_SHARED_LIBS=0、WITH_NINJA=0、PYTHON_VERSION=2、BUILD_PYTHON=1、BUILD_PYTHON_LAYER=1,修改完後這樣,同樣執行build_win.cmd.

 

4)有python3.5接口的靜態庫編譯

安裝了python3.5(Anaconda3的python3.5版本),下載這個版本Anaconda3-2.4.1-Windows-x86_64.exe即可,同樣安裝好重要的庫如protobuf,ninjia和numpy等,下面的命令一頓操作即可。

conda config --add channels conda-forge

conda config --add channels willyd

conda install --yes ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz

conda install --yes numpy scipy matplotlib scikit-image pip

pip install protobuf

接下來修改build_win.cmd如下圖:

  執行build_win.cmd,期間會自動下載libraries_v140_x64_py35_1.1.0.tar.bz2,

百度雲:https://pan.baidu.com/s/1Ete_kISilZrbkFgobuTsrA

提取碼:dt7r

放在C:\Users\你的用戶名\.caffe\dependencies\download下即可,然後雙擊build_win.cmd.完了嗎?  NO,問題來了……編譯過程中會提示找不到include_symbols.hpp,

解決方法:在編譯python2接口發現會在build/ caffe下生成:export.hpp和include_symbols.hpp,但是在編譯python3.5時卻少了include_symbols.hpp,解決辦法比較取巧:等build_win.cmd失敗後,把原來編譯python2版本接口的include_symbols.hpp拷貝到這個目錄下,vs2015打開build下的Caffe.sln,右擊BUILD_ALL生成解決方案即可成功。

  編譯好的python接口,caffe目錄下

   回到caffe根目錄下,拷貝python文件下的caffe文件夾到Anaconda3\Lib\site-packages文件夾下。注意坑來了,cmd下無法包含import caffe 提示使用了python2.dll,原來這個文件夾下默認是python2.dll,不急【進入編譯的build目錄下,(1)將install/bin/下的文件拷貝到caffe文件夾(caffe根目錄下的python/caffe)下,刪除python27.dll,(2)拷貝build\lib\Release下_caffe.pyd到caffe文件夾(caffe根目錄下的python/caffe),然後再複製到Anaconda3\Lib\site-packages下即可】。

 

2.2  happynear的caffe-windows編譯

   截止2018.12.28,該版本caffe支持cuda9.0,依賴boost1.65.但是貌似編譯有問題。因此還是在cuda8.0下編譯,boost依舊是1.61版本(下載好源碼以後需要稍作修改,三方依賴庫依然使用老版本的)。

   這個版本比較符合常規編譯,作者提供好了編譯的工程,不用BLVC那麼麻煩(類似微軟的caffe)。進入官網https://github.com/happynear/caffe-windows/tree/ms,準備工作下載三方依賴庫。

百度網盤:https://pan.baidu.com/s/1_0SSmGHuFyYPO4Qj7XaDOQ

提取碼:4dax

1、git clone https://github.com/happynear/caffe-windows.git

2、進入caffe-windows/windows下,將三方依賴庫壓縮包thirdparty.zip解壓到thirdparty目錄下。CommonSettings.props.example文件去掉.example。Notebook打開CommonSettings.props

3、GPU靜態庫編譯

在這裏只編譯C++庫,UseNCCL、PythonSupport、MatlabSupport和MXNetSupport設置爲false。由於要編譯cuda8.0的版本,而原版本支持cuda9.0,所以需要改一下libcaffe文件夾下的libcaffe.vcxproj。打開,第37行和470行,如果是這樣則不需要修改,如果指明是cuda9.0則需要改成

Cuda8.0.

  接下來就可以開始編譯了,打開工程Caffe.sln,編譯模式修改爲

  工程目錄如下:

首先編譯libcaffe,然後再編譯整個解決方案。

4、編譯動態庫

右鍵licaffe,擴展名改爲.dll,配置類型改爲動態庫。如圖

   在caffe.pb.h中添加宏定義以導出的proto類型,便於在使用中調用時能正確是被層類型及相關參數。

#ifdef CAFFELIB_EXPORTS

#define CAFFELIB_API __declspec(dllexport)

#else

#define CAFFELIB_API __declspec(dllimport)

#endif

 

需要導出的類前面加CAFFELIB_API,在caffe.pb.h中需要添加的類有:BlobProto、LayerParameter、NetParameter

同樣在blob.hpp、common.hpp、layer.hpp、net.hpp中添加

#ifdef CAFFELIB_EXPORTS

#define CAFFELIB_API __declspec(dllexport)

#else

#define CAFFELIB_API __declspec(dllimport)

#endif

class LIBCAFFE Blob   --blob.hpp

class LIBCAFFE Caffe  -- common.hpp

class LIBCAFFE Layer  -- layer.hpp

class LIBCAFFE Net    --net.hpp

 

然後在libcaffe屬性中加入預定義宏如下:

然後編譯即可。需要注意的是編譯動態庫需要在屬性中重新配置cuda的包含目錄、庫目錄、鏈接庫,否則編譯不通過!會報找不到三方依賴。

  

將C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin下面的

這幾個文件複製到編譯Build\x64\Release下面,現在編譯就不會有問題。

2.3  mini-caffe編譯

這個版本的caffe編譯就比較簡單了,直接按照官方readme編譯即可,比較不容易出問題。

Github: https://github.com/luoyetx/mini-caffe

2.4 tiny-caffe編譯

   我的版本caffe,這是本人對happynear版本caffe精簡化的結果,去除很多冗餘依賴,僅僅依賴protobuf.

Github: https://github.com/SyGoing/tiny-caffe,閱讀readme就可以了。

二、Ubuntu下編譯

Ubuntu下編譯BLVC-caffe的教程較多,相比windows下編譯要簡單得多。cuda8.0、cudnn5.1或cudnn6.0、opencv3.1、相關三方依賴安裝完畢之後,只需要根據自己需求修改Makefile.config文件即可。

1、三方依賴

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-devlibhdf5-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

2、Makefile.config,爲了防止重新編譯又去查來查去,這裏配置好了一份

百度雲:https://pan.baidu.com/s/1MyaKk01hBWoNKbaDTnOzMA

提取碼:4txw

然後make all -j8完成編譯。

這個配置文件沒有編譯python接口,如果需要編譯python、matlab,則先確保自己安裝了python(Anaconda)或者matlab,然後配置文件中打開編譯python和matlab接口。

 

 

 

假設想要編譯mini-caffe、tiny-caffe、happynear-caffe。去官網查看readme,這裏不再贅述。 happynear的caffe-windows在ubuntu下編譯和BLVC的一樣。mini-caffe和tiny-caffe則更簡單。依賴就很少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章