VS2015編譯Caffe2(目前已編譯CPU+GPU+python+opencv)
官方編譯參考:https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile
官方的安裝指導不全面,留了很多坑,不把坑填了會導致編譯失敗,本文的主要目的在於填坑,官方文件裡說過的內容就不再詳細介紹了。
一、下載原始碼
git clone --recursive https://github.com/caffe2/caffe2.git
該步驟無需解釋
二、配置cuda、python、cmake等第三方軟體
cuda不是必須的,可以編譯only cpu版本;
python我裝的是anaconda的2.7,按照官方文件安裝了各種python包,具體安裝哪些模組請參考官方文件;
cmake必須裝,去官網下載安裝包就可以;
三、修改caffe2指令碼:
這裡是重點,下面開始填坑。我是2017年12月1日下載的caffe2原始碼,當你看到這篇文章的時候,有可能這些坑已經被官方更新填掉了,也有可能被官方挖出新的坑。
1、修改“(原始碼根目錄)\scripts\build_host_cmd.bat”
我用VS2015 64bit編譯,所以需要修改編譯選項相關的cmake變數,如果你使用vs2017編譯,則不需要修改該選項。在開頭的@echo off下一行新增語句:set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"
2、修改“(原始碼根目錄)\scripts\build_windows.bat”
和二、1一樣,我用VS2015 64bit編譯,所以需要修改編譯選項相關的cmake變數,如果你使用vs2017編譯,則不需要修改該選項。在開頭的@echo off下一行新增語句:set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"
該指令碼中還有一些用於控制是否編譯python介面、是否使用cuda等特性的開關變數,可自己根據需要修改。建議先用預設的設定進行編譯驗證,待編譯成功後再修改這些變數重新編譯,以免出錯時不容易定位原因。
3、修改"(原始碼根目錄)\caffe2\cmake\Proto_buf.cmake"
找到如下程式碼段:
if (WIN32)
find_package(Protobuf NO_MODULE)
elseif (ANDROID OR IOS)
……
這段程式碼會導致編譯器找不到Protobuf模組,造成編譯失敗。按照下圖所示修改,就是將if這段註釋掉,並將後面的elseif修改為if。
4、如果在二、2所述的build_windows.bat中將BUILD_PYTHON變數改為ON,即打開了python介面的編譯選項,則還需要修改"(原始碼根目錄)\caffe2\cmake\Dependencies.cmake"。如果不編譯python介面,則該步驟可忽略。
在if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND NUMPY_FOUND)下面一行新增如下語句:
list(APPEND Caffe2_PYTHON_DEPENDENCY_LIBS ${PYTHON_LIBRARIES})
這句話的作用是將python27.lib(我安裝的anaconda是python2.7版本)新增到link選項裡。如果不新增這句話,編譯時會出現無法連結python27.lib的錯誤。不知道作者有沒有在windows下編譯過自己的作品,看樣子應該是沒有。
5、新增CUDA和OpenCV支援,在build_windows.bat中,將USE_CUDA和BUILD_OPENCV設為ON,然後……然後……然後你得改一大堆東西,不是一句話兩句話能說清的,十分酸爽……想開cuda和opencv的,還是等作者更新程式碼吧,我就不贅述了。
多說一句,vs2017編譯帶cuda的版本不成功,中途報了個莫名其妙的錯誤,至今不知何意。
四、編譯
進入帶有python路徑設定的命令列,anaconda直接啟動Anaconda Prompt即可,切換路徑到原始碼根目錄,再進入scripts資料夾,執行build_windows.bat指令碼,耐心等待編譯完成。漫長的等待結束之後,如果你的人品足夠好,應該就可以看到編譯成功的提示了。可以用vs2015開啟(原始碼根目錄)/build下的vs解決方案,編譯Debug等其他配置方案,或者進行跟蹤除錯,或者新增工程開發新程式。