Table of Content
Overview
環境:Windows 10,64 位,僅支持 CPU,僅 C++
實測版本:Visual Studio 2017 Professional + Python 3.7.2 (Anaconda 1.9.6) + CMake 3.13.4 + Git 2.20.1
Caffe2 現僅支持 x64 版本,若需支持 GPU,有額外的配置步驟,具體請參考相關文檔
Caffe2 仍在不斷更迭,Python 以外環境的文檔還相當欠缺,本文主要基於當前版本文檔教程、技術博客及個人探索嘗試,不保證能夠應用於所有環境的所有版本配置,請知悉
所需依賴
Visual Studio
- Visual Studio 2017 | 官方下載
安裝 Visual Studio 2017,三種版本皆可,建議語言英文,安裝時左側必須勾選 Desktop Development with C++,右側必須勾選 C++/CLI support
通常原有的 Visual Studio 2012 可以保留,如需多版本並行,建議先安裝低版本,再安裝高版本
另外,自 Visual Studio 2015 以後,C++ 標準庫被抽離出來成爲獨立的 C Run-Time Libraries (CRT),默認路徑 C:\Program Files (x86)\Windows Kits\10\Lib
因此,在低版本 Visual Studio 2012 中,可能會丟失必需的 C++ 標準庫,工程屬性中需要額外添加 include 與 lib(x86/x64) 兩個路徑,默認 C:\Program Files (x86)\Microsoft Visual Studio\2012\VC\include 與 C:\Program Files (x86)\Microsoft Visual Studio\2012\VC\lib (\amd64)
Python
官方推薦安裝 Python 2.7.6 到 2.7.14,Python 3 現只提供實驗性支持,可通過 Anaconda 進行安裝
- Anaconda Python/R Distribution - Anaconda
如果安裝 Python 2.7 版本,還需要額外安裝 VC++ Compiler
安裝必需的 Python 依賴:
pip install future hypothesis numpy protobuf six
可選的非必需 Python 依賴:
pip install flask glog graphviz jupyter matplotlib pydot python-nvd3 pyyaml requests scikit-image scipy setuptools tornado
CMake
- 安裝 CMake
Git
- 安裝 Git
環境變量
添加系統變量中的 Path:
…\Python27 或 …\Anaconda3
…\Python27\scripts 或 …\Anaconda3\scripts
…\CMake\bin
…\Git\cmd
編譯安裝
下載源碼
推薦使用 Git 的方式 clone,因爲採用下載 .zip 的方式會丟失第三方依賴模塊,導致編譯失敗
git clone --recursive https://github.com/pytorch/pytorch.git
編譯源碼
打開 Developer Command Prompt for VS 2017
運行 ${PYTORCH_ROOT}\scripts\build_host_protoc.bat
如果需要編譯 Python 環境,編輯 ${PYTORCH_ROOT}\scripts\build_windows.bat,將 CMake 參數中的 -DBUILD_PYTHON=OFF 改爲 -DBUILD_PYTHON=ON
運行 ${PYTORCH_ROOT}\scripts\build_windows.bat
編譯需要一段較長的時間,成功後會提示 Caffe2 built successfully,且在 ${PYTORCH_ROOT}\scripts\ 下生成 Caffe2.sln 工程
生成安裝
必須以管理員身份運行 Visual Studio 2017,打開 Caffe2.sln 工程
在 Release x64 模式下生成解決方案
成功後右鍵點擊工程列表中的 INSTALL,生成項目
成功後默認會在 C:\Program Files\Caffe2\ 下安裝 Caffe2 的運行庫文件,包含 bin\ cmake\ include\ lib\ share\ 共五個文件夾
這一安裝路徑可在 ${PYTORCH_ROOT}\scripts\cmake_install.cmake 中第 5 行進行自定義
由於默認安裝庫不全,完成之後還需要將 ${PYTORCH_ROOT}\scripts\lib\Release\ 下獨有的 .lib 和 .dll 文件拷貝到 C:\Program Files\Caffe2\lib\ 下
在 VS 中引用
在 Visual Studio 2017 中新建 C++ Windows Console Application 工程,切換至 Release x64 模式,右鍵編輯工程屬性
引用目錄
在 VC++ Directories - Include Directories 中添加
C:\Program Files\Caffe2\include
C:\Program Files\Caffe2\include\c10
C:\Program Files\Caffe2\include\caffe2
C:\Program Files\Caffe2\include\google
C:\Program Files\Caffe2\include\onnx
庫目錄
在 VC++ Directories - Library Directories 中添加
C:\Program Files\Caffe2\lib
附加依賴項
在 Linker - Input - Additional Dependencies 中添加
c10.lib
caffe2.lib
Caffe2_perfkernels_avx.lib
Caffe2_perfkernels_avx2.lib
Caffe2_perfkernels_avx512.lib
caffe2_protos.lib
clog.lib
cpuinfo.lib
cpuinfo_internals.lib
foxi.lib
foxi_dummy.lib
foxi_loader.lib
libprotobuf.lib
libprotobuf-lite.lib
libprotoc.lib
onnx.lib
onnx_proto.lib
onnxifi.lib
onnxifi_dummy.lib
onnxifi_loader.lib
運行庫
將 C/C++ - Code Generation - Runtime Library 由 Multi-threaded DLL (/MD) 改爲 Multi-threaded (/MT)
SDL 檢查
將 C/C++ - General - SDL Checks 由 Yes (/sdl) 改爲 No (/sdl-)
修改源碼
爲避免 VS 中的 IntelliSense 錯誤,修改了 Caffe2\include 文件中的兩處源碼
修改了 c10\marcos\Marcos.h 中的 line 46:
//#elif __cplusplus && defined(__has_cpp_attribute)
#elif __cplusplus && defined(__clang__) && defined(__has_cpp_attribute)
註釋了 c10\util\ArrayRef.h 中的 line 273:
//using IntList C10_DEPRECATED_USING = ArrayRef<int64_t>;
編譯生成
導入頭文件:
#include "caffe2/core/flags.h"
#include "caffe2/core/init.h"
#include "caffe2/predictor/predictor.h"
#include "caffe2/utils/proto_utils.h"
在 main 函數中添加:
caffe2::NetDef net;
caffe2::TensorCPU input;
生成解決方案,應該就沒問題了
如果還有問題……那就愉快地 debug 吧……
希望能夠對大家有所幫助 ~ 轉載請註明出處 ~
References
[1] Install Caffe2 | windows & compile
[3] Caffe2的安裝
[4] Introducing the Universal CRT | Visual C++ Team Blog
[6] Windows10下VS2017+caffe2 - HY_JT的博客