詳細教程:window下安裝Caffe深度學習框架!(同時安裝pycaffe)

第一步.假若你的電腦有NVIDIA的GPU,想要用它來訓練神經網絡,需要下載安裝CUDA

下載地址:https://developer.nvidia.com/cuda-downloads

我這裏以win10、 64位,安裝的是cuda8.0,你也可以安裝其他版本(高於7.5版本):


一直next安裝即可!裝好之後把CUDA安裝目錄下的bin和lib\x64添加到Path環境變量中。

 

第二步.接着還需要安裝對應版本cuDNN

1.下載地址(需要註冊下載):https://developer.nvidia.com/rdp/cudnn-download

2.解壓,把解壓出來的中bin,include,lib中的文件分別拷貝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0路徑下的對應文件夾裏面!




3.C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0\extras\CUPTI\libx64裏面的cupti64_80.dll複製到C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin路徑下,如下圖所示:


這樣就把使用GPU的環境配置好了!!!注意:cuda安裝好後,它的環境變量同時也被自動設置好了,無需自己手動設置。


配置好GPU驅動後,接下來,我們就可以開始安裝Caffe

 第一步Microsoft官方Github上下載Caffe的源碼壓縮包。微軟移植了Caffe,windows下面做了些調整,使得我們的安裝配置會比較簡單一點。

下載地址:https://github.com/Microsoft/caffe


 

第二步安裝

1.   經過上述步驟,我假設你的GPU cuda驅動已經正確安裝。解壓已經下載好的caffe源碼壓縮包windows-caffe-master.zip


進入解壓的得到的windows-caffe-master文件夾。將之前安裝cudnn時用到的整個cuda文件夾複製一份到windows-caffe-master文件夾。

 

         

     打開caffe-master文件夾,可以看到有一個windows文件夾,然後繼續打開windows文件夾,看到裏面有一個CommonSettings.props.example文件,複製出來一份,並改名字爲CommonSettings.props


VS2013打開本文件夾下的Caffe.sln,如下圖:


 

首先設置libcaffe爲啓動項目!

可能大家會看到提示libcaffe沒有加載成功。主要原因在於propos裏面的默認設置cuda版本是7.5,而如果你裝的是8.0(或其他),就出現了衝突!

解決辦法很簡單,打開CommonSettings.props文件,找到<CudaVersion>,將裏面的版本改爲你的版本(比如我這裏裝的是8.0)。然後關閉vs工程,重新打開caffe.sln


還有一個原因是vs2013的安裝路徑中缺少 CUDA 8.0.props (和CUDA 8.0.targets),

其實 CUDA 8.0.props(和CUDA 8.0.targets就在cuda的安裝目錄下,我的cuda安裝路徑如下:

C:\ProgramFiles\NVIDIA GPU ComputingToolkit\CUDA\v8.0\extras\visual_studio_integration\MSBuildExtensions

把該路徑下所有文件全部拷貝到vs2013安裝路徑下即可!

我的vs2013安裝路徑如下:

C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations

做了上面的工作,libcaffetestall的加載就應該都不會再有錯誤提示了!


 2.打開CommenSetting.probs.<CuDnnPath>那裏把cuda文件夾所在路徑填進去。

(比如我這裏是把從cudnn-8.0-windows10-x64-v5.1.zip解壓出的cuda文件夾,放在了D:\caffe_GPU下,所以這裏我就填寫D:\caffe_GPU) 




此時,我們可以開始準備編譯項目了!我這裏選擇編譯類型爲release,x64


 打開libcaffe屬性設置,關閉視警告爲錯誤(即設置爲No)如果不設置的話,在編譯boost庫的時候會由於文字編碼的警告而報錯!!!

然後就開始編譯生成(ctrl+F5),注意我們這時候首先編譯生成的是libcaffe !!!

在編譯生成的前期階段,你可能會發現Visual Studio很卡,這是因爲在安裝一些第三方庫(opencv,boost之類的,MicroSoft用Nuget集成在了這一步)!

之後會發現caffe-master目錄下自動多了一個文件夾NugetPackages!

注意:之所以選擇微軟官方的版本,是因爲在編譯過程中會自動下載一些依賴庫,不用手動選擇,所以非常簡單方便.。


注意:在libcaffe的編譯生成過程中,可能會出現以下報錯:



解決方案:

在路徑NugetPackages/OpenCV.2.4.10/build/native/中找到OpenCV.props,打開作如下修改後保存!


等了一段時間後,libcaffe項目終於成功生成了!在我們的caffe-master路徑下就會自動出現一個名叫Build的文件夾!

                                             

 進入Build\x64\Release

以後編譯成功和運行需要的文件都會存放在這個Build\x64\Release下面。



       接下來,可以選擇更多的項目來編譯。類似地,我們接下來也可以只選擇caffe項目(C++接口的caffe)和convert_mnist_data項目來編譯,同樣的要注意配置成release和x64,還有關閉視警告爲錯誤(即設置爲No))。然後類似的build (ctrl+f5),這樣在Build\x64\Release下面就會多出caffe.exe和convert_mnist_data.exe(因爲下面測試mnist數據集要用到,所以先編譯出來)。還有一些其他的文件需要的時候再編譯(比如pycaffe, matcaffe) (同樣的要注意release和X64,還有關閉視警告爲錯誤(即設置爲No))


測試安裝好的Caffe

1.    在這個地址下載Mnist數據集(    其實國內網站也有很多下載,比如CSDN):

http://yann.lecun.com/exdb/mnist/

下載完後解壓得到對應的四個文件,這四個文件不能直接用於caffe的訓練和測試。需要利用編譯生成的convert_mnist_data.exe把四個文件轉換爲caffe所支持的leveldb或lmdb文件。

所以我們先把下載好的四個文件放到caffe根目錄下的data\mnist文件夾下。

第一步:在caffe-windows安裝的根目錄下,新建一個mnist_data_convert.bat文件,用來將原始的mnist數據轉換成caffe能讀入的lmdb格式,並在文件中添加以下命令:

Build\x64\Release\convert_mnist_data --backend=lmdbdata/mnist/train-images.idx3-ubyte data/mnist/train-labels.idx1-ubyteexamples/mnist/mnist_train_lmdb

Build\x64\Release\convert_mnist_data --backend=lmdbdata/mnist/t10k-images.idx3-ubyte data/mnist/t10k-labels.idx1-ubyteexamples/mnist/mnist_test_lmdb

Pause

 

如下圖所示:

 


保存並雙擊運行mnist_data_convert.bat文件,就會將原始的mnist數據轉換成caffe能讀入的lmdb格式!


第二步:開始測試利用mnist訓練lenet網絡,在caffe-windows根目錄下新建一個mnist_test_run.bat.bat文件,在文件中添加:

Build\x64\Release\caffe.exe  train--solver=examples/mnist/lenet_solver_adam.prototxt

pause 

保存並雙擊運行,caffe開始用mnist數據集訓練lenet網絡。表明Caffe框架安裝成功!!!


 

 

附錄

Pycaffe安裝教程(gordon2018.5.23):

1.  因爲pycaffe基於python2.7,所以我們要在在已有Anconda3環境下安裝python2虛擬環境:

安裝Anaconda3後,自帶Python3.5,但我們有時候還需要一個Python2.7來執行一些老的腳本程序,此時可以給Anaconda3再創建一個新的獨立的python2.7的環境。調出Anaconda3的命令行工具AnacondaPrompt。如下圖所示,執行命令:

$ conda create -n py2 anacondapython=2.7 


1.  其中py2就是你的新的python2.7環境的名稱,接下來提示你是否安裝一大堆的包!全部選擇yes!安裝成功界面如下:

如何使用python2.7環境?命令如下:

Windows: activatepy2

Linux and Mac OS X: source activate py2

如何結束python2.7環境:

Windows: deactivate

Linux and Mac OS X:source deactivate 

想要刪除指定路徑下的虛擬環境,使用如下的命令:

conda remove--prefix=D:\Anaconda3\envs\py2 –all


3.python2虛擬環境是安裝在D:\Anaconda3\envs\py2目錄下的!我們現在來編譯pycaffe。首先需要確認配置文件CommonSettings.props的參數中第13、48行已修改,如下:

 <PythonSupport>true</PythonSupport>

<PythonDir>D:\Anaconda3\envs\py2</PythonDir>



4.設置編譯方式爲release,x64,設置pycaffe爲啓動項目,設置“將警告視爲錯誤”爲!!!設置ctrl+f5開始生成!


 

編譯完成以後,會生成一個:caffe-master\caffe-master\Build\x64\Release\pycaffe文件夾,進入以後如下圖所示:


接着將那個caffe文件夾複製到python2虛擬環境根目錄下:

D:\Anaconda3\envs\py2\Lib\site-packages

1.     最後,打開AncondaPrompt,切換到Python2環境(activatepy2

),然後就可以嘗試:import caffe

 

出現報錯!ImportError:No module named google.protobuf.internal

直接在python2虛擬環境下執行pip install protobuf即可!

模塊安裝完成以後,再import caffe,就OK了。

 

安裝完pycaffe後,可以複製下面的代碼,測試一下!

(下面代碼主要是導入caffe安裝目錄下提供的一個預訓練好的模型bvlc_reference_caffenet.caffemodel,它支持1000個分類,用它來預測一張圖片是什麼類別,可以找一隻貓來試一下!!!synset_words.txt文件時imagenet1000個分類所對應的名稱,沒有的話網上找一個就行了,到處都是

#python2環境默認的是ascii編碼, python3默認的是utf-8編碼。

import sys

print sys.getdefaultencoding()

default_encoding ='utf-8'

if sys.getdefaultencoding()!= default_encoding:

    reload(sys)

    sys.setdefaultencoding(default_encoding)  

print sys.getdefaultencoding()

 

import caffe

import numpy as np

deploy='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/deploy.prototxt'#deploy文件

caffe_model='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'

img='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/peacock.jpg'    #隨機找的一張待測圖片

labels_filename='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/synset_words.txt'  #類別名稱文件,將數字標籤轉換回類別名稱

net = caffe.Net(deploy,caffe_model,caffe.TEST)   #加載modelnetwork

print"load caffemodel ..."

#圖片預處理設置

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})  #設定圖片的shape格式(1,3,28,28)

transformer.set_transpose('data',(2,0,1))    #改變維度的順序,由原始圖片(28,28,3)變爲(3,28,28)

#transformer.set_mean('data',np.load(mean_file).mean(1).mean(1))    #減去均值,前面訓練模型時沒有減均值,這兒就不用

transformer.set_raw_scale('data',255)    # 縮放到【0255】之間

transformer.set_channel_swap('data',(2,1,0))   #交換通道,將圖片由RGB變爲BGR

im=caffe.io.load_image(img)                   #加載圖片

net.blobs['data'].data[...]= transformer.preprocess('data',im)      #執行上面設置的圖片預處理操作,並將圖片載入到blob

#執行測試

out = net.forward()

labels = np.loadtxt(labels_filename, str, delimiter='\t')   #讀取類別名稱文件

prob= net.blobs['prob'].data[0].flatten()#取出最後一層(Softmax)屬於某個類別的概率值,並打印

print prob

order=prob.argsort()[-1]  #將概率值排序,取出最大值所在的序號

print'the class is:',labels[order]   #將該序號轉換成對應的類別名稱,並打印

 

 


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