一、环境说明
也是安装顺序。特别强调的是除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、Miniconda2的Python2.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/tree/windows,下载源码(可直接点击下载)。 - 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(FATAL_ERROR "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 defaultsif 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 defaultsif NOT DEFINED MSVC_VERSION set MSVC_VERSION=14if 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 pythonif !PYTHON_VERSION! EQU 2 (set CONDA_ROOT=C:\Miniconda-x64)
修改为
:: Set python 2.7 with conda as the default pythonif !PYTHON_VERSION! EQU 2 (set CONDA_ROOT=D:\Libs\MiniConda)
D:\Libs\MiniConda是Conda的安装路径。
- 然后在
if ERRORLEVEL 1 (echo ERROR: Configure failedexit /b 1
)
后面添加一行
if ERRORLEVEL 1 (echo ERROR: Configure failedexit /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文件同一级目录下,否则会出现如下错误:
-
在matlab中使用caffe接口
经过编译后,会生成build文件夹。在网上看的教程大多是在caffe的根目录下生成,不过我的是在script/目录下,即build_cmd同目录下生成的。经过删掉重新生成后,还是在script下,考虑到build里的很多设置是相对路径,就不动了。
在matlab中添加路径
里面添加caffe的matlab接口路径现在,应该可以使用了,调整matlab当前路径为caffe/matlab/demo/文件夹下,有claasification_demo.m文件可以进行测试,如果无错即配置完成。
-
Caffe 深度学习框架是支持 opencl gpu 计算加速的,为了在 msys2/mingw 环境下可以工作我做了少量修改 https://github.com/zhujiang73/caffe-windows-opencl 下图是基于 OpenCL Caffe 做的画框识图,我只有一块入门级小显卡 GPU 版程序的图像识别速度是 CPU 版的三倍左右.
msys2集成了unix 风格的shell 环境和 mingw 编译工具,可以在windows 下写 gcc 风格的程序, 结合msys2/mingw 版的emacs 就是一个很好的开发环境。 http://msys2.github.io/
这两天刚搞好 caffe 的 python 接口,虽然我认为 msys2/mingw 比较好用,但是目前大多数软件在 windows 下会优先考虑 msvc 可移植,由于mingw 是 gcc 但不是unix 是 win 但不是msvc 比较小众,所以很多软件在 mingw 下需要做些修改才能编译,我把修改过的 caffe msys2/mingw 版放在:https://github.com/zhujiang73/caffe-windows-opencl 支持 opencl gpu 加速,支持 python 接口,算是比较完整了。caffe 这个“深度学习工具”虽然比较老但是比较适合机器视觉任务,我目前只实验了cnn 等比较经典的算法,下一步该实验 rcnn 等改进算法了,caffe 的缺点是框架不太灵活可能需要定制一些模块才能实现新算法。