(最新教程)基於Windows7+visual Studio2013+Python2.7.12環境下的Caffe配置學習

塵封的記憶0發表於2016-12-04

剛剛進入深度學習的這個坑,聽說深度學習都用caffe這個框架,就馬不停蹄的去搭建caffe框架,結果搞了一個星期,在win7上配置的道路一波三折,在此,特寫本次部落格讓後面進坑的朋友少走點彎路,造福社會!!本文在windows下使用visual studio2013配置關聯python的caffe專案,看了很多很多教程,按照教程上面走還是各種錯,所以索性就去了Microsoft的Github上面,按照他的流程來走,因為是英文的,但是還是能勉強讀懂。Microsoft官網配置caffe的教程是這這個:https://github.com/Microsoft/caffe/blob/master/README.md

首先讓大家看看我的筆記本配置,很渣很渣,所以沒法用gpu,只能勉強的用意cpu。


(一)Caffe微軟官方GitHub
通過GitHub管理專案非常方便,可以自己通過VS團隊資源管理器進行連結程式碼,牛人修改裡面的東西也可以提交上去。當時我這裡是直接下載caffe-master.zip的包的方式,然後直接解壓出來,可以看到裡面有28個檔案,共包含16個專案:

(二)設定配置檔案

在 .\caffe-mastter\windows路徑下新建一個文字文件,重新命名為CommonSettings.props ,並複製.\windows\CommonSettings.props.example 檔案中的內容到 .\windows\CommonSettings.props。預設情況下windows編譯需要CUDA和cuDNN,當然你也可以在配置文件(.\windows\CommonSettings.props)中去修改為不用,直接將為true的配置設定為false即可。但是python預設情況下是不能使用的,我這裡需要用python進行caffe學習,所以就設定為true了。其他三方的庫,VS編譯時會通過NuGet進行自動獲取,非常方便!

(三)下載Python:

為了能使用python呼叫Caffe,需要在 .\windows\CommonSettings.props中設定<PythonSupport>true</PythonSupport>。如果本機沒安裝python,可以下載Miniconda 2.7 64-bit Windows installer,從官方網址:http://conda.pydata.org/miniconda.html選擇下載,預設配置路徑安裝即可。同時需要以管理員許可權安裝numpy、scipy、matplotlib、scikit-image、protobuf包,安裝命令如下:

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

注意:

(1)在你編譯通過後,需要將編譯好的 <caffe_root>\Build\x64\Release\pycaffe\caffe檔案複製到python的 <python_root>\lib\site-packages資料夾下面,這樣python中才能引用到caffe,不然會報錯。

(2)如果要用GPU計算,需要設定<CudaArchitecture>,我顯示卡是520所以只能設定低執行速度的:compute_30 和sm_30(這個根據你自己的顯示卡計算能力確定, 注意CUDA7.5已經不支援計算能力小於30的顯示卡了)

 (3)配置python安裝命令的時候,一定要記得是用管理員身份執行,否則會出現很多不必要的錯誤情況。

根據需要,我的配置如下圖:

(四)專案編譯:

用VS2013,在caffe-master\windows目錄下開啟caffe.sln,進去後如下圖(共16個專案):


編譯的順序是:

libcafffe->caffe->pycaffe->convert_imageset,每個專案編譯前都需要設定相應的引用路徑,這裡有兩種路徑,include路徑和libs路徑,詳細怎麼新增見下面。

(1)libcaffe在編譯前先設定資源引用路徑,點選專案右鍵-》屬性-》配置屬性-》c/c++,【附加包含目錄中】中加入python的include路徑,我這是D:\Python27\include,如下圖:

(2)caffe在編譯前先設定資源引用路徑,點選專案右鍵-》屬性-》配置屬性-》c/c++,【附加包含目錄中】加入python的include路徑,我這是D:\Python27\include,同時,在連結器中的【附加庫目錄】中加入python的libs路徑,我這裡是D:\Python27\libs,如下圖:

 

(3)pycaffe在編譯前先設定資源引用路徑,點選專案右鍵-》屬性-》配置屬性-》c/c++,【附加包含目錄中】加入python的include路徑和numpy的include路徑,我這裡分別是D:\Python27\include和D:\Python27\Lib\site-packages\numpy\core\include,同時,在連結器中的【附加庫目錄】中加入python的libs路徑和numpy的libs路徑,我這裡分別是D:\Python27\libs和D:\Python27\Lib\site-packages\numpy\core\lib,如下圖:

 


然後編譯,出現了很多不同的錯誤,下面我列舉下:

(1)

如果這個編譯時出現:

error LNK2001: 無法解析的外部符號 __imp_PyString_FromString
error LNK2001: 無法解析的外部符號 __imp_PyCallable_Check

error LNK2001: 無法解析的外部符號 __imp_PyObject_CallObject
error LNK2001: 無法解析的外部符號 __imp_Py_Initialize

error LNK2001: 無法解析的外部符號 __imp_Py_IsInitialized

error LNK2001: 無法解析的外部符號 __imp_PyImport_Import

error LNK2001: 無法解析的外部符號 __imp_PyModule_GetDict

error LNK2001: 無法解析的外部符號 __imp_PyDict_GetItemString

error LNK2001: 無法解析的外部符號 __imp_PyRun_SimpleStringFlags

error LNK2001: 無法解析的外部符號 __imp_Py_Finalize

解決的辦法,更改編碼


(2)如果有出現error C2220: warning treated as error - no object file generated 這樣的錯誤,右擊專案,屬性,在C/C++那裡把treat warning as error設為no,再重新編譯一次,就完成編譯了。

(3)找不到Python27_d.lib,這是一個python版本問題,建議去文章的前面看看Microsoft是怎麼配置python的

(4)報錯“error C2220: 警告被視為錯誤 - 沒有生成“object”檔案”,解決方法是用vs2013開啟這裡報錯的cpp,然後點選儲存即可。

(5)解決方案的16個專案中libcaffe和test_all沒有載入成功。不過不影響,先把編譯器切換到Release x64.然後點選本地windows偵錯程式,nuget會先下載安裝需要的一些庫檔案,下載完後後繼續編譯操作,中間可能會出現一些報錯 
在解決方案後中右擊每一個專案,屬性->C/C++,把“警告等級”調整為等級3,把“將警告視為錯誤”改成否。

(6)

設定一下執行項,解決方案'caffe'->屬性


或者下面直接單啟動專案是caffe也行,不過最好改一下,原因相信玩過VS的都清楚,如果是單啟動專案,那麼在你重新編譯工程的時候,只會執行次單啟動專案,其它專案不會執行,這就是為什麼很多人編譯以後發現Release或者Debug資料夾下只有caffe.exe而沒有conver_imageset.exe等可執行檔案的原因。

(7)libcaffe庫有問題,不識別什麼的,解決辦法,重新生成就可了

 (五)編譯完成後檢查

如果編譯成功了,會在caffe-master同路徑下生成NugetPackages資料夾,同時在caffe-master資料夾下生成Build資料夾,在編譯生成NugetPackages的資料夾的時候,我是開了VPn生成的,如果不開VPN,貌似時間比較久,幾個小時吧。至於其中原因,聽說NugetPackages這個被牆了,當然我也只是聽說,具體的不清楚

(1)NugetPackages裡面內容

一個都不能少,如果少了的話,可能是nuget通訊問題,多編譯幾次就下載完了。

 (2)Build資料夾下的內容,一定有caffe.exe檔案,不然說明沒編譯成功

(3)編譯成功後的介面是這樣的



不懂的可以加我的QQ群: 522869126(深度學習語音識別方向 


歡迎你的到來哦,看了博文給點腳印唄,謝謝啦~~

相關文章