關鍵字:Windows、cpu模式、Python、faster-rcnn、demo.py
聲明:原文發表在博客園,未經允許不得轉載!!!本篇blog過程已經多名讀者實踐驗證,有人反饋報錯TypeError:‘None Type‘ object has no attribute _getitem_‘,但拿本人編譯好的文件可以跑通,對於此問題我沒去探究,評論區給出了解決辦法(nms函數cpu參數false改為true)。blog中除提到的下載鏈接外我還會給出網盤鏈接方便下載(鏈接失效,本人百度雲上傳次數受限無法再上傳),包括我的整個工程的網盤鏈接。如果有些報錯解決不了可直接拿本人的相關文件替換,本篇blog具有較高的參考性。
本人微軟版caffe工程 下載鏈接:http://pan.baidu.com/s/1o83DIl0 提取密碼:60zg
本人py-faster-rcnn工程 下載鏈接:http://pan.baidu.com/s/1bpjby2N 提取密碼:t8aj
起因:導師交待目標檢測有關論文的閱讀任務,建議我跑下demo.py(一個測試小程序,可以讀入圖片及相關網絡模型,進而對圖片進行目標檢測)。但是,我這個小白哪會啊?之前配置caffe環境電腦藍屏重裝系統后就一直不敢再裝,后續實驗都是在實驗室有gpu的工作站上進行的。這次躍躍一試,本來配置的是gpu模式,到最后一步時,報了與cuda相關的錯,后來查詢電腦計算能力低於cudnn的最低要求,果斷放棄gpu模式,轉投cpu模式。但是網上真的沒有教程啊,或者說只有那種極其簡略的教程,debug也欲哭無淚,因為我源碼沒看多少。為避免后來人少走彎路,我着手寫了這篇博客。本篇博客建立在作者沒讀過源碼的基礎上,所以很多解釋都是較為粗糙但是實用的,我們的目標只有一個:Windows下用cpu模式跑通demo.py。實際上很多人不建議我用cpu跑,傷機器,可苦了我的ThinkPad e431。當初買電腦因為不玩游戲,所以買商務本,現在表示很后悔!
經過:經過?很痛苦、很痛苦、很痛苦,尤其是對一個啥也不會的小白來說更痛苦。不過在此過程中,有負責任的導師的幫助,還有幸遇到一個同濟大神,他教會我很多東西!僅以此blog向他們致以崇高的敬意!
結果:當然是配好了gpu環境后發現自己顯卡計算能力不夠(配置gpu環境本篇不涉及,基本與cpu環境配置過程一致,只是要裝cuda、cudnn以及修改一些配置信息),所以重新配置了cpu環境並跑通了demo.py。
特別感謝:俊傑哥(不想暴露他的信息)、導師、不染(QQ名)、rookie_cz(雖然他沒教我什么,向他求助也不回我,但他的blog很有分量,略表感謝)。
適用對象:電腦上一切空白,沒搭過caffe環境的人,py-faster -rcnn從零開始的人。
一、 准備工作
下載Anaconda2、visual studio 2013、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
一種文本編輯器,方便看打開文件的代碼,傻瓜式安裝。
二、 配置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的問題。一般的錯誤百度基本都能找到解決辦法。另外如果實在解決不了,那就按上述步驟重新編譯一遍。
三、 faster-rcnn配置
配置參考鏈接:
http://blog.csdn.net/yueyuecsdn/article/details/53995383?winzoom=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以及整個解決方案。
按照上述二、三過程,運行demo.py所需的環境基本上已經搭好了。以上如果出現了什么錯,可以嘗試重新生成試下,重新生成之前可以在VS2013菜單欄找到生成-清理解決方案點擊,有時就是這么奇怪,重新生成就好了。
四、 跑通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文件改成下面如圖,主要是注釋了幾行,第9、17、18、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的。