windows下配置caffe-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、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 版的三倍左右. 

        Windows <wbr> <wbr>环境下 <wbr>caffe <wbr>opencl <wbr>gpu <wbr>加速版安装调试

     

         综合考虑开发效率,运行速度,和可移植性,选择 msys2/mingw 作为开发环境,caffe 代码的可移植性很好稍加修改就能在 mingw 环境下编译。

          msys2集成了unix 风格的shell 环境和 mingw 编译工具,可以在windows 下写 gcc 风格的程序,  结合msys2/mingw 版的emacs 就是一个很好的开发环境。 http://msys2.github.io/ 

    Windows <wbr> <wbr>环境下 <wbr>caffe <wbr>opencl <wbr>gpu <wbr>加速版安装调试
     

         这两天刚搞好 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 的缺点是框架不太灵活可能需要定制一些模块才能实现新算法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java在文档末尾添加_如何在打开表单后将子文件添加到Word文档的末尾?

我m trying to write a macro that adds subdocuments to the end of a Word document when the Word document is opened. The document in question already has some text in it, so before running the macro I d喜欢将光标移动到文档的末尾 . 我可以使用代码实现这一点&am…

oracle的db link

cd $ORACLE_HOME/network/admin vi tnsnames.ora 添加 CCPBS_19 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 10.130.38.19)(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME CCPBS) ) ) >create public database link ecbm_19 …

NVelocity标签使用详解

本文使用的NVelocity版本为1.1.1&#xff0c;应该是目前为止最新的版本吧&#xff0c;前几天在google上找了一个自称是NVelocity 1.6.1 bate2的dll&#xff0c;下载下来一看更新时间是2009年的&#xff0c;还没版本NVelocity 1.1.1&#xff08;2010年出的&#xff09; 新呢&…

一文搞懂蓝绿发布、灰度发布和滚动发布

一文搞懂蓝绿发布、灰度发布和滚动发布 应用程序升级面临最大挑战是新旧业务切换&#xff0c;将软件从测试的最后阶段带到生产环境&#xff0c;同时要保证系统不间断提供服务。 长期以来&#xff0c;业务升级渐渐形成了几个发布策略&#xff1a;蓝绿发布、灰度发布和滚动发布&…

NVelocity标签设置缓存的解决方案

意外的问题总会让人措手不及&#xff0c;今天与大家分享的就是NVelocity设置缓存的问题&#xff0c;之前刚google了一下发现没什么太好的解决方案&#xff0c;希望在这能为需要的朋友找出满意的答案&#xff0c;上一篇blog刚说了NVelocity的用法&#xff0c;这就不在重复了&…

实数历史无穷小能否带领我们直接走向今日科学之辉煌?

本篇文章朋友在深圳吃饭的时候突然想到的...这段时间就有想写几篇关于实数历史的博客&#xff0c;所以回家到之后就奋笔疾书的写出来发布了 历史不能重演&#xff0c;这是毫无疑问的。数学是一门基础学科&#xff0c;影响到本日科学技术的方方面面&#xff0c;可以说&#xff0…

java成员方法的一般格式为_Java基本知识(四)

一、二维数组1、定义方式m&#xff1a;代表当前二维数组中有多少个一维数组&#xff1b;n&#xff1a;代表每个一维数组的长度(1)数据类型[][] 数组名new 数据类型[m][n](2)数据类型[][] 数组名new 数据类型[m][ ]&#xff0c;只给定m个一维数组&#xff0c;每个一维数组长度动…

免费的定时任务托管 clock.sh

自己有很多定时任务要跑&#xff0c;所以之前搞了一个定时运行的系统。 在 V2EX 看到很多有类似需求的朋友&#xff1a; https://www.v2ex.com/t/252810https://www.v2ex.com/t/448726https://www.v2ex.com/t/579740https://www.v2ex.com/t/241229https://hk.v2ex.com/t/1134…

Android Webservices 返回多行多列数据(Dataset)

对于之前从事.net或者java开发人员&#xff0c;习惯了从后台获取网格数据&#xff08;多行多列DataTable&#xff09;&#xff0c;但转行从事android开发&#xff0c;难免会不习惯 Android调用Webservice时&#xff0c;如果返回值是一个boolean或者string值时可以通过下面方式接…

Spring.Net简单IOC应用

本文简单的介绍一下Spring.net的配置和IOC应用。 目录&#xff1a;  一、引用资源.  二、配置文件配置.  三、文件调用.  四、本实例代码下载&#xff08;vs-2010&#xff09;. 一、引用资源&#xff08;所需spring的dll&#xff09; Spring.Core.dll Spring.Web.dll C…

vCenter Server Appliance(VCSA )6.7部署指南

VCSA 6.7版本于2018年4月17日提供下载&#xff0c;同时发布的还有ESXi 6.7&#xff0c;根据官方文档&#xff0c;6.7版本升级主要为了发布vSAN 6.7版本。 第1步&#xff0c;下载VMware-VCSA-all-6.7.0-8217866文件&#xff0c;用虚拟光驱挂载或者解压运行&#xff0c;选择“安…

学习的回顾--数组的有关内容

1、数组的定义以及简单的内容 C&#xff03;中数组是引用类型&#xff0c;C&#xff03;定义整型数组方式是&#xff1a;int [] intArray {1,2,3};或int [] intArray new int[10]; C&#xff03;中的数组可以是一维的也可以是多维的&#xff0c;同样也支持矩阵和参差不齐的数…

mysql5.6.35安装_mysql5.6.35 二进制快速安装

说明&#xff1a;mysql安装在/data/mysql-5.6.35目录下&#xff1b;如果安装在/usr/local/mysql/目录下,则两个sed不许执行&#xff0c;因为默认是/usr/local/目录下&#xff1b;1.下载cd /data/tar -zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gzmv mysql-5.6.35-linux-gli…

XML 通用操作

Xml格式&#xff1a; <?xml version"1.0" encoding"utf-8"?> <remotes> <remote ip"ipval">nameAndPwd</remote> </remotes> 通用读写删类&#xff1a; using System; using System.Data; using System.…

Ansible无敌详细入门教程

Ansible 是什么 ? ansible架构图 ansible特性 模块化&#xff1a;调用特定的模块&#xff0c;完成特定的任务&#xff1b; 基于Python语言研发&#xff0c;由Paramiko, PyYAML和Jinja2三个核心库实现&#xff1b; 部署简单&#xff1a;agentless&#xff1b; 支持自定义模…

Nginx学习笔记(五) 源码分析内存模块内存对齐

Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题&#xff0c;那么就看看Nginx的内存分配相关模型的具体实现。还有内存对齐的内容~~不懂的可以看看~~ src/os/unix/Ngx_alloc.h&Ngx_alloc.c 先上源码&#xff1a; /** Copyright (C) Igor Sysoev* Copyright (C…

reactor p java_Java反应式框架Reactor中的Mono和Flux

1. 前言最近写关于响应式编程的东西有点多&#xff0c;很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼。但是目前Java响应式编程中我们对这两个对象的接触又最多&#xff0c;诸如Spring WebFlux、RSocket、R2DBC。我开始也对这两个对象头疼&#xff0c;所以今天我们就…

Visual Studio 20xx试用版升级为正式版(WIN7同样有效)图解、附带序列号

Visual Studio 2005|2008 试用版升级为正式版&#xff08;WIN7同样有效&#xff09;。 目录 一、步骤图解 二、win7破解工具下载 三、序列号 一、步骤图解 1.控制面板 > 程序和功能 > Visual Studio 2005|2008 启动、修复程序。如图&#xff1a; 2.填写序列号&#xff0…

java方法调用的格式_Java基础(一)---方法的调用

接上一篇方法的自定义&#xff0c;此篇简介一下如何去调用一个方法。。。方法的主要目的&#xff1a;实现代码的复用1.方法调用的格式&#xff1a;  方法名(参数);注&#xff1a;如果方法需要参数(即所调用的方法的参数列表中存在参数)&#xff0c;此时必须给参数&#xff0c…

解决go build报错cannot find main module; see ‘go help modules‘

描述&#xff1a; 在学习golang的过程中&#xff0c;在$GOPATH/src/github.com/xxx/hello目录下执行go build和go test都会报下面的错误 go: cannot find main module; see ‘go help modules’ 解决方案&#xff1a; 由于之前设置过GO111MODULEon&#xff0c;所以使用下面…