基於Windows10 x64+visual Studio2013+Python2.7.12環境下的Caffe配置學習


本文在windows下使用visual studio2013配置關聯python(python-2.7.12.amd64.msi)的caffe項目,如果有耐心的人,當然可以自己去下載caffe項目自己進行編譯,由於我比較懶,所以這里我利用微軟自己移植的caffe進行部署,就不嘗試編譯官方的caffe(聽說自己編譯需要解決各種坑),微軟移植的解決方案編譯確實很方便,解決一些引用就ok了。
 
(一)Caffe微軟官方GitHub
通過GitHub管理項目非常方便,可以自己通過VS團隊資源管理器進行鏈接代碼,牛人修改里面的東西也可以提交上去。當時我這里是直接下載caffe-master.zip的包的方式,然后直接解壓出來,可以看到里面有28個文件,共包含16個項目:

(二)項目編譯前的步驟:

(1)設置配置文件

在 .\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進行自動獲取,非常方便!

為了便於在訓練模型時減少輸出信息,建議去\caffe-master\caffe-master\src\caffe\layers\data_layer.cpp文件,將如下打印信息的代碼用"//"注釋掉:

DLOG(INFO) << "Prefetch batch: " << batch_timer.MilliSeconds() << " ms.";
DLOG(INFO) << "     Read time: " << read_time / 1000 << " ms.";
DLOG(INFO) << "Transform time: " << trans_time / 1000 << " ms.";

(2)下載相關軟件

CUDA

下載 CUDA Toolkit 7.5 (https://developer.nvidia.com/cuda-toolkit)。如果你電腦沒有NVIDIA的獨立顯卡,那么只能選擇用CPU進行編譯,就不需要安裝CUDA,去配置文件 .\windows\CommonSettings.props 設置<CpuOnlyBuild>false</CpuOnlyBuild> ,同時設置 <UseCuDNN>false</UseCuDNN>

cuDNN

下載 cuDNN v4 或者 cuDNN v5 (https://developer.nvidia.com/cudnn)。 解壓下載的文件到 %CUDA_PATH% (這個路徑是CUDA安裝時默認設置的一個環境變量路徑,通過【系統】-》【高級設置】-》【環境變量】就可以找到)。當然如果你沒下載CUDA,也可以直接設置<UseCuDNN>false</UseCuDNN>

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>,我以前顯卡是650所以只能設置低運行速度的:compute_30 和sm_30(這個根據你自己的顯卡計算能力確定, 注意CUDA7.5已經不支持計算能力小於30的顯卡了),后來我換成GTX1080,采用compute_52 和sm_52,具體需求見下表:
GPU Computer Capability
GTX660, 680, 760, 770 compute_30,sm_30
GTX780, Titan Z, Titan Black, K20, K40 compute_35,sm_35
GTX960, 970, 980, Titan X compute_52,sm_52

 

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

(三)項目編譯

用VS2013,在caffe-master\windows目錄下打開caffe.sln,進去后如下圖(共16個項目):

其中capthaTest是我測試caffe進行驗證碼識別的python項目。編譯時可以直接右鍵【解決方案caffe】進行生成,當然這會報很多錯誤,都是些資源文件引用問題,通過一個個項目單獨編譯都可以很快解決。因為我這里只用到其中幾個項目,所以我編譯的順序是:

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,如果顯卡安裝不是默認路徑也相應把C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include和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,如下圖:

 

如果這個編譯時出現:

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

等無法解析外部符號等問題,說明C++編譯器在調用python.exe時出錯了,我遇到這個坑,解決了很久,具體原因我也不清楚,猜測是因為編碼問題導致的,因為我下載的python有問題,而我同事的沒問題,最終我把他所有的python文件拷貝覆蓋我這里的,最終才算ok!

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

如果用C編寫Python擴展找不到Python27_d.lib,這是一個python版本問題,網友給的兩種解決方案
方法一:直接安裝debug版本的python27
方法二:
1.將python安裝目錄下libs目錄里的python27復制一份並命名為python27_d.lib
2.修改include目錄下的pyconfig.h,用/**/將#define Py_DEBUG注釋掉

(4)其他項目我想應該也是這種添加模式,應該問題不大

 (四)編譯完成后檢查

如果編譯成功了,會在caffe-master同路徑下生成NugetPackages文件夾,同時在caffe-master文件夾下生成Build文件夾

(1)NugetPackages里面內容

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

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

(3)編譯成功后,將caffe-master\caffe-master\Build\x64\Debug\pycaffe路徑下的caffe文件夾拷貝到python的site-packages下面(也可設置PYTHONPATH指向caffe文件夾),然后用python測試能不能正常import caffe,如果沒報錯說明一切OK。我這里引用時遇到一個問題AttributeError: 'module' object has no attribute 'bool_',追蹤錯誤堆棧發現如下:

 原來是import io出了問題,caffe文件夾里面也有一個io.py,而系統要求的是numpy里面的io.py,所以沒有bool_這個模塊,解決辦法:

1、不要在caffe目錄下打開python.exe,或者你一定要在此目錄打開,那么請把caffe文件夾移出site-packages路徑,並配置環境變量,變量名=PYTHONPATH,值=caffe包的路徑

2、如果在VS2013項目里面,請刪除References下面的_caffe.pyd引用,如下圖:

(下面一篇文章將詳細介紹利用caffe識別中文驗證碼的內容:卷積神經網絡(CNN)學習算法之----基於LeNet網絡的中文驗證碼識別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM