Windows編譯Caffe-Windows 含Matlab支持

一、環境說明

也是安裝順序。特別強調的是除VS2015以外,其他軟件的安裝路徑都最好不要包含空格。
1、Windows 64位系統。
2、Visual Studio 2015(VS2015, 對應VC14)。
3、Matlab 2017a。Matlab的版本倒不是很重要,只要支持Matlab 2015a之後的版本都應該支持。所以如果安裝了其他版本的Matlab,可以先不用安裝2017a。安裝完之後要把其中的bin目錄和runtime\bin目錄加入環境變量Path。

D:\Program Files\MATLAB\R2017a\bin
D:\Program Files\MATLAB\R2017a\runtime\win64

4、CMake 3.14。安裝時要選擇將CMake添加到環境變量Path,然後下面的路徑就會自動添加到環境變量Path。

C:\Program Files\CMake\bin

5、Miniconda2Python2.7版本。安裝的時候記得勾選add anaconda to environment path。然後下面的路徑就會自動添加到環境變量Path。安裝完conda之後,記得把conda的源換成國內的源,否則下載庫會特別慢。

D:\Libs\MiniConda
D:\Libs\MiniConda\Library\mingw-w64\bin
D:\Libs\MiniConda\Library\usr\bin
D:\Libs\MiniConda\Library\bin
D:\Libs\MiniConda\Scripts

安裝完成後,打開命令行,輸入cmake和python --version,檢查cmake是否工作以及python版本是否正確。如果Python的版本不是2.7,請在環境變量中刪除其他Python版本的路徑。

二、編譯Caffe-Windows

1、下載資源

  • Caffe-Windows
    打開https://github.com/BVLC/caffe,下載源碼(可直接點擊下載)。
  • libraries_v140_x64_py27_1.1.0.tar.bz2
    這個是caffe要依賴的庫,點擊下載。v140對應VS2015,x64對應系統架構,py27對應python版本。下載完成之後,打開libraries_v140_x64_py27_1.1.0.tar.bz2所在目錄,按住Shift鍵,右鍵單擊空白處,然後選擇“在此處打開powershell窗口”,打開命令行,執行下面的命令:
cmd
md %USERPROFILE%\.caffe\dependencies\download
copy libraries_v140_x64_py27_1.1.0.tar.bz2 %USERPROFILE%\.caffe\dependencies\download

執行上面的命令就是把libraries_v140_x64_py27_1.1.0.tar.bz2複製到%USERPROFILE%\.caffe\dependencies\download這個目錄裏面去。%USERPROFILE%是當前用戶的目錄。可在命令行中使用echo %USERPROFILE%來查看。

2、編輯CMakeLiss.txt

  • 解壓caffe-windows,打開caffe-windows\CMakeLiss.txt,在:
# ---[ Caffe project
project(Caffe C CXX)

之前加入如下幾行:

# ---[Install directory: D:\Libs\Caffe
set(CMAKE_INSTALL_PREFIX "D:/Libs/Caffe")

# ---[Set Matlab_DIR
set(Matlab_DIR "D:/Program Files/MATLAB/R2017a")

CMAKE_INSTALL_PREFIX 指定Caffe的安裝路徑,Matlab_DIR 指定Matlab的根目錄。

  • 打開caffe-windows\cmake\Utils.cmake,把357行的:
message(FATAL_ERROR "Logic error. Need to update cmake script")

改爲:

message(WARNING "Logic error. Need to update cmake script")

3、編輯build_win.cmd

  • 打開caffe-windows\scripts\build_win.cmd,如下就是編譯選項部分:
:: Default values
if DEFINED APPVEYOR (
    echo Setting Appveyor defaults
    if NOT DEFINED MSVC_VERSION set MSVC_VERSION=14
   ...

在if DEFINED APPVEYOR之前添加如下幾行:

:: Default values
set WITH_NINJA=0
set BUILD_MATLAB=1  
set CPU_ONLY=1    
set PYTHON_VERSION=2
set BUILD_PYTHON_LAYER=1
if DEFINED APPVEYOR (
    echo Setting Appveyor defaults
    if NOT DEFINED MSVC_VERSION set MSVC_VERSION=14
    if NOT DEFINED WITH_NINJA set WITH_NINJA=0
    ...

WITH_NINJA:不使用NINJA編譯;BUILD_MATLAB:編譯Matlab模塊,CPU_ONLY:不適用CUDA加速;PYTHON_VERSION:指定python版本。BUILD_PYTHON_LAYER:編譯pycaffe模塊。

  • 然後設置conda的安裝目錄,把
:: Set python 2.7 with conda as the default python
    if !PYTHON_VERSION! EQU 2 (
        set CONDA_ROOT=C:\Miniconda-x64
    )

修改爲

:: Set python 2.7 with conda as the default python
    if !PYTHON_VERSION! EQU 2 (
        set CONDA_ROOT=D:\Libs\MiniConda
    )

D:\Libs\MiniConda是Conda的安裝路徑。

  • 然後在
if ERRORLEVEL 1 (
  echo ERROR: Configure failed
  exit /b 1
)

後面添加一行

if ERRORLEVEL 1 (
  echo ERROR: Configure failed
  exit /b 1
)

exit /b 1

:: Lint
...

exit /b 1是退出cmd的命令,添加這行的目的是觀察cmake的結果。

4、執行build_win.cmd

  • 安裝pycaffe的依賴:
conda install --yes pip
pip install ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz

在執行這一步之前,建議先把conda的源換成國內的源。

  • 進入caffe-windows\scripts目錄,空白處按住shift+點鼠標右鍵,然後打開powershell,輸入:
cmd
build_win.cmd
build_win.cmd

對,build_win.cmd就是要執行兩遍,因爲第一遍的安裝目錄不正確。輸出類似爲(我把需要相同的部分標記出來, #後面就是我的註釋):

......
#  需要找到Matlab
-- Found Matlab: D:/Program Files/MATLAB/R2017a/extern/include (found version "9.2") found components:  MAIN_PROGRAM MX_LIBRARY   
-- Found Git: C:/Program Files/Git/cmd/git.exe (found version "2.19.1.windows.1")
--
-- ******************* Caffe Configuration Summary *******************
-- General:
--   Version           :   1.0.0
--   Git               :   unknown
--   System            :   Windows
--   C++ compiler      :   C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
--   Release CXX flags :   /MD /O2 /Ob2 /DNDEBUG /DWIN32 /D_WINDOWS /W3 /GR /EHsc
--   Debug CXX flags   :   /MDd /Zi /Ob0 /Od /RTC1 /DWIN32 /D_WINDOWS /W3 /GR /EHsc
--   Build type        :   Release    #  Release模式
--
--   BUILD_SHARED_LIBS :   0    #  需要相同
--   BUILD_python      :   1    #  需要相同
--   BUILD_matlab      :   1    #  需要相同
--   BUILD_docs        :
--   CPU_ONLY          :   1    #  需要相同
--   USE_OPENCV        :   ON    #  需要相同
--   USE_LEVELDB       :   ON    #  需要相同
--   USE_LMDB          :   ON    #  需要相同
--   USE_NCCL          :   0    #  需要相同
--   ALLOW_LMDB_NOLOCK :   OFF    #  需要相同
--
-- Dependencies:
--   BLAS              :   Yes (Open)    #  需要相同
--   Boost             :   Yes (ver. 1.61)    #  需要相同
--   glog              :   Yes    #  需要相同
--   gflags            :   Yes    #  需要相同
--   protobuf          :   Yes (ver. 3.1.0)    #  需要相同
--   lmdb              :   Yes (ver. 0.9.70)    #  需要相同
--   LevelDB           :   Yes (ver. 1.18)    #  需要相同
--   Snappy            :   Yes (ver. 1.1.1)    #  需要相同
--   OpenCV            :   Yes (ver. 3.1.0)    #  需要相同
--   CUDA              :   No    #  需要相同
--
-- Python:    #  這裏需要找到Python
--   Interpreter       :   D:/Libs/MiniConda/python.exe (ver. 2.7.15)
--   Libraries         :   D:/Libs/MiniConda/libs/python27.lib (ver 2.7.15)
--   NumPy             :   D:/Libs/MiniConda/lib/site-packages/numpy/core/include (ver 1.13.1)
--
-- Matlab:
--   Matlab            :   Yes (,    #  需要找到Matlab
--   Octave            :   No
--
-- Install:
--   Install path      :   D:/Libs/Caffe    #  需要相同
--
-- Configuring done
-- Generating done
......

得到上面的結果之後,刪除在build_win.cmd添加的那行exit /b 1,然後重新執行build_win.cmd,開始編譯依賴庫。編譯完成後,把下面的幾條加入環境變量Path。

%USERPROFILE%\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\bin
%USERPROFILE%\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib
%USERPROFILE%\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\bin
%USERPROFILE%\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\lib
%USERPROFILE%\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\staticlib

5、編譯Caffe

打開caffe-windows\script\Caffe.sln,使用VS2015打開。把編譯模式切換爲Release模式,然後右鍵單擊INSTALL子項目,右鍵單擊,選擇“生成”,然後就開始編譯Caffe了,編譯完會自動安裝到D:\Libs\Caffe。
在這裏插入圖片描述
編譯完成後,把D:\Libs\Caffe裏面的bin、lib、matlab+caffe\private和matlab+caffe\private\Release加入到環境變量Path。下面是我添加的環境變量:

D:\Libs\Caffe\bin
D:\Libs\Caffe\lib
D:\Libs\Caffe\matlab\+caffe\private
D:\Libs\Caffe\matlab\+caffe\private\Release

至此,caffe編譯完成。

三、使用Caffe

1、Matlab

在.m文件的最前面加入如下代碼:

PATH_TO_CAFFE_MATLAB='D:/Libs/Caffe/matlab/';
addpath(genpath(PATH_TO_CAFFE_MATLAB));

PATH_TO_CAFFE_MATLAB是前面install的安裝路徑。添加上面的代碼之後,Matlab就能找到Caffe。還有最關鍵的一步是,把D:\Libs\Caffe\matlab+caffe\private\Release\caffe_.mexw64複製到和.m文件同一級目錄下,否則會出現如下錯誤:

未定義函數或變量 'caffe_'。

2、Python

TODO

3、其他

請參考https://blog.csdn.net/xiamentingtao/article/details/78132836

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