Windows下用cpu模式跑通目標檢測py-faster-rcnn 的demo.py

關鍵字:Windows、cpu模式、Python、faster-rcnn、demo.pyhtml

聲明:原文發表在博客園,未經容許不得轉載!!!本篇blog過程已經多名讀者實踐驗證,有人反饋報錯TypeError:‘None Type‘ object has no attribute _getitem_‘,但拿本人編譯好的文件能夠跑通,對於此問題我沒去探究,評論區給出瞭解決辦法(nms函數cpu參數false改成true)。blog中除提到的下載連接外我還會給出網盤連接方便下載(連接失效,本人百度雲上傳次數受限沒法再上傳),包括個人整個工程的網盤連接。若是有些報錯解決不了可直接拿本人的相關文件替換,本篇blog具備較高的參考性。python

本人微軟版caffe工程     下載連接:http://pan.baidu.com/s/1o83DIl0 提取密碼:60zggit

本人py-faster-rcnn工程    下載連接:http://pan.baidu.com/s/1bpjby2N 提取密碼:t8ajgithub

原由:導師交待目標檢測有關論文的閱讀任務,建議我跑下demo.py(一個測試小程序,能夠讀入圖片及相關網絡模型,進而對圖片進行目標檢測)。可是,我這個小白哪會啊?以前配置caffe環境電腦藍屏重裝系統後就一直不敢再裝,後續實驗都是在實驗室有gpu的工做站上進行的。此次躍躍一試,原本配置的是gpu模式,到最後一步時,報了與cuda相關的錯,後來查詢電腦計算能力低於cudnn的最低要求,果斷放棄gpu模式,轉投cpu模式。可是網上真的沒有教程啊,或者說只有那種極其簡略的教程,debug也欲哭無淚,由於我源碼沒看多少。爲避免後來人少走彎路,我着手寫了這篇博客。本篇博客創建在做者沒讀過源碼的基礎上,因此不少解釋都是較爲粗糙可是實用的,咱們的目標只有一個:Windows下用cpu模式跑通demo.py。實際上不少人不建議我用cpu跑,傷機器,可苦了個人ThinkPad e431。當初買電腦由於不玩遊戲,因此買商務本,如今表示很後悔!小程序

通過:通過?很痛苦、很痛苦、很痛苦,尤爲是對一個啥也不會的小白來講更痛苦。不過在此過程當中,有負責任的導師的幫助,還有幸遇到一個同濟大神,他教會我不少東西!僅以此blog向他們致以崇高的敬意!windows

結果:固然是配好了gpu環境後發現本身顯卡計算能力不夠(配置gpu環境本篇不涉及,基本與cpu環境配置過程一致,只是要裝cuda、cudnn以及修改一些配置信息),因此從新配置了cpu環境並跑通了demo.py。網絡

特別感謝:俊傑哥(不想暴露他的信息)、導師、不染(QQ名)、rookie_cz(雖然他沒教我什麼,向他求助也不回我,但他的blog頗有份量,略表感謝)。app

適用對象:電腦上一切空白,沒搭過caffe環境的人,py-faster -rcnn從零開始的人。框架

1、  準備工做

下載Anaconda二、visual studio 201三、opencv庫以及notepad++編輯器

(1)下載Anaconda2.7(注意必定是2.7版本的,faster rcnn只支持Python 2.7)

下載連接:http://pan.baidu.com/s/1c11GaWC 提取密碼:ak6q

本人安裝了Anaconda windowsX64 2.7版原本配置python,安裝Anaconda2後須要下載必要的python庫,之因此選擇Anaconda是由於它在安裝時會自動安裝一些必要的計算庫。傻瓜式安裝過程,爲便於敘述的一致性,建議讀者與我放在相同的路徑下:D:\。

安裝完成後按理說是會自動將Anaconda2中Python.exe的路徑添加到系統環境變量中,最好是檢查一下,至於怎麼添加系統環境變量路徑,我也是百度解決的。看了path,果真是自動添加的。

Anaconda安裝完成後,打開cmd聯網狀態下敲入pip install protobuf回車再敲入pip install easydict回車,如圖所示,聯網狀態下下載兩個依賴包。若是這時敲pip list,能夠看到機器所裝的依賴包。由於我已經裝過一遍,因此會有以下staisfied顯示。

 

(2)下載visual studio 2013 文件太大,不提供網盤連接了,相信程序猿們通常都會下載,求助一個問題,怎麼把vs2013的背景色由黑色變成白色,導師遇到了這個困惑。知道的同窗麻煩留言。

(3)下載opencv圖形圖像處理庫2.4版本

安裝Opencv參考連接: http://www.cnblogs.com/chensheng-zhou/p/4895332.html

下載連接:http://pan.baidu.com/s/1jIdx6su 提取密碼:a69d

我是放在了D:\中,把D:\opencv\opencv\build\python\2.7\x64目錄下的cv2.pyd複製到D:\Anaconda2\Lib\site-packages目錄下供後面調用。

 

(4)下載notepad++

下載連接:http://pan.baidu.com/s/1kV0wbav 提取密碼:ozy7

一種文本編輯器,方便看打開文件的代碼,傻瓜式安裝。

2、  配置caffe環境 (cpu模式以及Python接口)

配置參考連接

http://blog.csdn.net/xierhacker/article/details/51834563 http://www.cnblogs.com/LaplaceAkuir/p/6445189.html

因爲我配置的是cpu環境,與它的大致過程差很少,但這兩篇blog是網上爲數很少講的比較清楚的配置caffe環境文章,貼出來僅供參考,具體以如下操做步驟爲準。

下載微軟版的caffe,編譯時它會自動在聯網狀態下下載第三方庫,操做起來相對簡單,這正是不選其餘版本caffe的緣由,下載連接:https://github.com/Microsoft/caffe

下載連接:http://pan.baidu.com/s/1kVDntFh 提取密碼:ff5n

    打開網址頁面以下,選擇右上角clone or download-----dowmload zip下載caffe壓縮包至電腦並解壓,這裏提醒一下,解壓路徑中最好不要有中文,好比我就放在E:\deep learning如圖所示,解壓後獲得caffe—master文件夾。能夠先無視我文件夾中的其餘一些文件,好比cuda,實際上最後我也沒用cuda,,至於緣由前面已經提到過。

打開caffe-master文件夾,看到一個windows文件夾,打開windows文件夾,看到裏面一個CommonSettings.props.example文件,複製一個副本,並更名字爲CommonSettings.props,同時保留這兩個文件(我發現好像編譯caffe後CommonSettings.props.example文件貌似會消失,這裏改主要是爲了能使VS2013能識別,如圖,前面加了了扳手圖標)點進去修改一下配置信息,打開以下圖,這裏注意修改如下幾個地方:(其餘地方和我不同能夠先不用管)

第七行:  <CpuOnlyBuild>true</CpuOnlyBuild>    採用cpuonly模式

第八行:  <UseCuDNN>false</UseCuDNN>           不使用cudnn(與cuda加速深度學習的)

第十三行: <PythonSupport>true</PythonSupport>  編譯Python接口須要打開

第四十八行:<PythonDir>D:\Anaconda2</PythonDir>  Python路徑,建議放這保持一致

修改後保存、保存、保存

而後打開E:\deep learning\caffe-master,在此路徑下找到Makefile.config.example文件,複製粘貼一個副本,並將名字修改成Makefile.config,這時一樣看到一個小扳手圖標。如圖所示,點進去修改兩個地方:

第八行: CPU_ONLY := 1       去掉#,文件自己這句是用#註釋掉了

第八十七行:WITH_PYTHON_LAYER := 1  去掉#,文件自己這句是用#註釋掉了

(by the way,若是以爲第多少行什麼的不方便,建議用notepad++文本編輯器打開文件,如圖能夠顯示行數) 修改後,保存、保存、保存。

打開caffe-master/windows/caffe.sln

在解決方案中找到libcaffe,右鍵點擊「設爲啓動項目(A)」

在菜單欄找到調試—libcaffe屬性,項目選擇活動(released)、活動(x64)模式,修改libcaffe的C++常規設置,將警告視爲錯誤選擇否,如圖所示。

 

設置完畢後便可開始編譯了(若是隻是爲了跑通demo請先看三在libcaffe中添加三個文件),注意在聯網狀態下編譯,這時會出現Nuget(第三方庫)還原管理界面,結束後會在caffe-master的同級目錄下生成一個NugetPackages的目錄,裝的是各類依賴庫。

 

編譯時間很長,耐心等待後沒有報錯就代表libcaffe編譯完成了。而後在解決方案中找到pycaffe設爲啓動項目後進行上述相同的設置後編譯。編譯完成可能會報不少警告,只要不是錯誤就行了。

 

 

最後右鍵點擊解決方案,點擊從新生成解決方案,注意看是不是release模式

通過漫長的等待就會編譯完畢,編譯完成後,會獲得一個bulid文件夾,若是你有圖示的這些文件說明你上述編譯成功了,注意看我下圖的路徑中的文件是否具有。

報錯與解決:這塊的報錯我遇到過,通常會提醒某些格式錯,用notepad++打開從新保存也許就能夠解決了,主要是由於編碼\n的問題。通常的錯誤百度基本都能找到解決辦法。另外若是實在解決不了,那就按上述步驟從新編譯一遍。

3、  faster-rcnn配置

配置參考連接:

http://blog.csdn.net/yueyuecsdn/article/details/53995383?winzoom=1

原本不打算把1、二分開寫的,但考慮到任務不一樣,有的用caffe框架的任務不須要下述操做,因此仍是分開寫吧。若是是僅爲了跑通py-faster-rcnn的demo.py能夠在上述二中編譯libcaffe前加入如下三個文件cu、cpp、hpp。

因爲faster-rcnn中使用了roi-pooling-layer層,而微軟版本編譯時並未添加roi_pooling_layer,因此咱們須要將hpp頭文件、cu文件和cpp文件手動加入到libcaffe中。

具體操做:在caffe.sln的解決方案中找到libcaffe它目錄下的cu-layers右鍵點添加-現有項,在E:\deep learning\caffe-master\src\caffe\layers中找到roi_pooling_layer.cu點添加。一樣地,在libcaffe它目錄下的include-layers右鍵點添加-現有項,在E:\deep learning\caffe-master\include\caffe\layers 中找到roi_pooling_layer.hpp點添加。最後,在在libcaffe它目錄下的src-layers右鍵點添加-現有項,在E:\deep learning\caffe-master\src\caffe\layers中找到roi_pooling_layer.cpp點添加。

添加完成後,按照二中的說明編譯libcaffe、pycaffe以及整個解決方案。

 

按照上述2、三過程,運行demo.py所需的環境基本上已經搭好了。以上若是出現了什麼錯,能夠嘗試從新生成試下,從新生成以前能夠在VS2013菜單欄找到生成-清理解決方案點擊,有時就是這麼奇怪,從新生成就行了。

4、  跑通demo.py

參考連接:

http://blog.csdn.net/yueyuecsdn/article/details/53995383?winzoom=1

http://blog.csdn.net/chenzhi1992/article/details/53374265

將剛纔編譯好的E:\deep learning\caffe-master\Build\x64\Release\pycaffe目錄下的caffe文件夾拷到D:\Anaconda2\Lib\site-packages目錄下。

cmd命令行中敲入命令如圖所示,若是結果如圖所示顯示>>>,說明Python接口已經搭好了。

 

下載py-faster-rcnn-master,連接:https://github.com/rbgirshick/py-faster-rcnn,打開網址頁面以下,右上角clone or download下點擊download zip下載壓縮包後解壓到電腦上,打開文件會發現py-faster-rcnn-master的caffe-fast-rcnn文件是空的,因此須要再點進去單獨下載caffe-fast-rcnn而後解壓到caffe-fast-rcnn文件夾,如圖。

下載連接:http://pan.baidu.com/s/1jHDFeNc 提取密碼:lpbc

下載連接:http://pan.baidu.com/s/1c2tiKDU 提取密碼:oal1

下載好py-faster-rcnn-master,用E:\deep learning\caffe-master\Build\x64\Release\pycaffe目錄下的caffe文件夾替換E:\deep learning\py-faster-rcnn-master\caffe-fast-rcnn\python目錄下的caffe文件夾。

 

編譯E:\deep learning\py-faster-rcnn-master\lib\setup.py,但這個setup是不能直接編譯的。我用的是rookie_cz從新整理好的newsetup.py和setup_cuda.py下載後放到lib下。

下載連接:http://pan.baidu.com/s/1c1Ugq7u 提取密碼:2dis

具體操做爲:首先在電腦中搜索cl.exe的路徑,將其路徑添加到環境變量中(添加環境變量步驟請百度)。cl.exe在VS2013路徑下:D:\vs2013\VC\bin,如圖我把該路徑添加到path中。

若是沒有將cl.exe路徑添加到環境變量中,就會報下面這個錯。

 

而後在cmd中直接cd到lib下面,執行 python newsetup.py install 和python setup_cuda.py install,如圖。

 

可能執行過程當中會報錯,以執行 python newsetup.py install爲例,可能會出現如圖所示的錯誤。

 

這時只須要接着報錯error在cmd中敲SET VS90COMNTOOLS=%VS120COMNTOOLS% (若是用的是vs2013),敲完這句回車,繼續敲python newsetup.py install,應該就沒問題了。一樣地,接着敲python setup_cuda.py install。執行這句可能會遇到下面這個錯,只需下載一個lib文件夾來替換,用lib下的nms文件夾直接替換你的E:\deep learning\py-faster-rcnn-master\lib 目錄下nms文件夾就好了,替換後從新python setup_cuda.py install。

下載連接:http://pan.baidu.com/s/1hrNm8te 提取密碼:1ucz

兩個py文件正確install的結果如圖所示。

 

編譯完成後,將通過上述編譯兩個py文件後產生的兩個後綴爲.pyd的文件在E:\deep learning\py-faster-rcnn-master\lib\build\lib.win-amd64-2.7\nms目錄下複製拷到E:\deep learning\py-faster-rcnn-master\lib\nms中。(最佳的方法你直接用個人nms文件替換你的,能夠省略不少步驟)

下載caffemodel(裏面包括VGG網絡和ZF網絡訓練好了的參數)解壓到E:\deep learning\py-faster-rcnn-master\data目錄下。

下載連接:http://pan.baidu.com/s/1kUYBIth 提取密碼:qs85

以上過程可能會趕上我blog裏未給出的錯誤,若是按照個人過程作,應該是不會遇到一些典型錯誤的,若是真的遇到有兩種解決辦法:一是百度,二是參考我給出的幾條blog連接。

在跑demo以前還須要改幾個地方防止它以gpu模式運行:

1.E:\deep learning\py-faster-rcnn-master\lib\fast_rcnn目錄下nms_wrapper.py文件改爲下面如圖,主要是註釋了幾行,第九、1七、1八、19行。

 

2.E:\deep learning\py-faster-rcnn-master\tools目錄下demo.py文件改爲如圖,註釋了幾個地方,另外作了部分修改。(建議能夠直接替換我工程裏的demo.py)

3.E:\deep learning\py-faster-rcnn-master\lib\rpn目錄下proposal_layer.py文件修改第26行,將後面括號中的變量self.param_str_最後一個_去掉。

這裏若是不改會報下面如圖這個錯。

E:\deep learning\py-faster-rcnn-master\lib\rpn目錄下proposal_layer.py文件修改64—69行,改爲我這個樣子,恆定取值。若是以爲麻煩能夠去個人工程裏直接替換這個文件,貌似這步我改複雜了,能夠百度參考一些blog。

若是不做這步修改,可能出現如下如圖錯誤。

 

4.E:\deep learning\py-faster-rcnn-master\lib\nms目錄下cpu_nms.pyx修改第25行,我是把第25行註釋了,因此是第26行。將np.int_t改爲np.intp_t保存,仍是要以爲不妥直接替換個人工程就好了。我我的強烈建議在前面就用我工程的nms文件來替換你的,這樣關於nms文件夾內不少文件修改都不用作了。若是沒有用個人nms文件夾替換,在修改cpu_nms.pyx文件後須要從新執行python newsetup.py install和python setup_cuda.py install

若是不做這步修改,可能會報如圖如下錯誤。

 

這時若是上述操做沒問題,就能夠跑了,首先cmd中cd到demo.py所在的文件夾E:\deep learning\py-faster-rcnn-master\tools

 

加載過程會比較慢的,耐心等吧,並且特別傷cpu。

跑成功的截圖如圖所示:

 

結語:寫這篇blog花了我幾天時間,原本準備用CSDN發表博客,但用過CSDN的人應該清楚我不用它的緣由,由於有圖CSDN插圖太複雜。人生的第一篇blog教程,主要仍是爲了讓你們避免走彎路。你們若是以爲有用,看完後心中默唸:祝做者家庭幸福、學習進步、生活如意、愛情快來! 哈哈,接受你們的祝福我會很happy的。

相關文章
相關標籤/搜索