本文在windows下使用visual studio2013配置关联python(python-2.7.12.amd64.msi)的caffe项目,如果有耐心的人,当然可以自己去下载caffe项目自己进行编译,由于我比较懒,所以这里我利用微软自己移植的caffe进行部署,就不尝试编译官方的caffe(听说自己编译需要解决各种坑),微软移植的解决方案编译确实很方便,解决一些引用就ok了。
 
(一)Caffe微软官方GitHub
通过GitHub管理项目非常方便,可以自己通过VS团队资源管理器进行链接代码,牛人修改里面的东西也可以提交上去。当时我这里是直接下载caffe-master.zip的包的方式,然后直接解压出来,可以看到里面有28个文件,共包含16个项目:

(二)项目编译前的步骤:

(1)设置配置文件

在 .\caffe-mastter\windows路径下新建一个文本文档,重命名为CommonSettings.props ,并复制.\windows\CommonSettings.props.example 文件中的内容到 .\windows\CommonSettings.props。默认情况下windows编译需要CUDA和cuDNN,当然你也可以在配置文档(.\windows\CommonSettings.props)中去修改为不用,直接将为true的配置设置为false即可。但是python默认情况下是不能使用的,我这里需要用python进行caffe学习,所以就设置为true了。其他三方的库,VS编译时会通过NuGet进行自动获取,非常方便!

为了便于在训练模型时减少输出信息,建议去\caffe-master\caffe-master\src\caffe\layers\data_layer.cpp文件,将如下打印信息的代码用"//"注释掉:

DLOG(INFO) << "Prefetch batch: " << batch_timer.MilliSeconds() << " ms.";
DLOG(INFO) << "     Read time: " << read_time / 1000 << " ms.";
DLOG(INFO) << "Transform time: " << trans_time / 1000 << " ms.";

(2)下载相关软件

CUDA

下载 CUDA Toolkit 7.5 (https://developer.nvidia.com/cuda-toolkit)。如果你电脑没有NVIDIA的独立显卡,那么只能选择用CPU进行编译,就不需要安装CUDA,去配置文件 .\windows\CommonSettings.props 设置<CpuOnlyBuild>false</CpuOnlyBuild> ,同时设置 <UseCuDNN>false</UseCuDNN>

cuDNN

下载 cuDNN v4 或者 cuDNN v5 (https://developer.nvidia.com/cudnn)。 解压下载的文件到 %CUDA_PATH% (这个路径是CUDA安装时默认设置的一个环境变量路径,通过【系统】-》【高级设置】-》【环境变量】就可以找到)。当然如果你没下载CUDA,也可以直接设置<UseCuDNN>false</UseCuDNN>

Python

为了能使用python调用Caffe,需要在 .\windows\CommonSettings.props中设置<PythonSupport>true</PythonSupport>。如果本机没安装python,可以下载Miniconda 2.7 64-bit Windows installer,从官方网址:http://conda.pydata.org/miniconda.html选择下载,默认配置路径安装即可。同时需要以管理员权限安装numpy、scipy、matplotlib、scikit-image、protobuf包,安装命令如下:

conda install --yes numpy scipy matplotlib scikit-image pip
pip install protobuf

注意:

(1)在你编译通过后,需要将编译好的 <caffe_root>\Build\x64\Release\pycaffe\caffe文件复制到python的 <python_root>\lib\site-packages文件夹下面,这样python中才能引用到caffe,不然会报错。

(2)如果要用GPU计算,需要设置<CudaArchitecture>,我以前显卡是650所以只能设置低运行速度的:compute_30 和sm_30(这个根据你自己的显卡计算能力确定, 注意CUDA7.5已经不支持计算能力小于30的显卡了),后来我换成GTX1080,采用compute_52 和sm_52,具体需求见下表:

GPU Computer Capability
GTX660, 680, 760, 770 compute_30,sm_30
GTX780, Titan Z, Titan Black, K20, K40 compute_35,sm_35
GTX960, 970, 980, Titan X compute_52,sm_52

根据需要,我的配置如下图:

(三)项目编译

用VS2013,在caffe-master\windows目录下打开caffe.sln,进去后如下图(共16个项目):

其中capthaTest是我测试caffe进行验证码识别的python项目。编译时可以直接右键【解决方案caffe】进行生成,当然这会报很多错误,都是些资源文件引用问题,通过一个个项目单独编译都可以很快解决。因为我这里只用到其中几个项目,所以我编译的顺序是:

libcafffe->caffe->pycaffe->convert_imageset,每个项目编译前都需要设置相应的引用路径,这里有两种路径,include路径和libs路径,详细怎么添加见下面。

(1)libcaffe在编译前先设置资源引用路径,点击项目右键-》属性-》配置属性-》c/c++,【附加包含目录中】中加入python的include路径,我这是D:\Python27\include,如下图:

(2)caffe在编译前先设置资源引用路径,点击项目右键-》属性-》配置属性-》c/c++,【附加包含目录中】加入python的include路径,我这是D:\Python27\include,同时,在链接器中的【附加库目录】中加入python的libs路径,我这里是D:\Python27\libs,如果显卡安装不是默认路径也相应把C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include和libs加入到里面,如下图:

(3)pycaffe在编译前先设置资源引用路径,点击项目右键-》属性-》配置属性-》c/c++,【附加包含目录中】加入python的include路径和numpy的include路径,我这里分别是D:\Python27\include和D:\Python27\Lib\site-packages\numpy\core\include,同时,在链接器中的【附加库目录】中加入python的libs路径和numpy的libs路径,我这里分别是D:\Python27\libs和D:\Python27\Lib\site-packages\numpy\core\lib,如下图:

如果这个编译时出现:

error LNK2001: 无法解析的外部符号 __imp_PyString_FromString
error LNK2001: 无法解析的外部符号 __imp_PyCallable_Check

error LNK2001: 无法解析的外部符号 __imp_PyObject_CallObject
error LNK2001: 无法解析的外部符号 __imp_Py_Initialize

error LNK2001: 无法解析的外部符号 __imp_Py_IsInitialized

error LNK2001: 无法解析的外部符号 __imp_PyImport_Import

error LNK2001: 无法解析的外部符号 __imp_PyModule_GetDict

error LNK2001: 无法解析的外部符号 __imp_PyDict_GetItemString

error LNK2001: 无法解析的外部符号 __imp_PyRun_SimpleStringFlags

error LNK2001: 无法解析的外部符号 __imp_Py_Finalize

等无法解析外部符号等问题,说明C++编译器在调用python.exe时出错了,我遇到这个坑,解决了很久,具体原因我也不清楚,猜测是因为编码问题导致的,因为我下载的python有问题,而我同事的没问题,最终我把他所有的python文件拷贝覆盖我这里的,最终才算ok!

如果有出现error C2220: warning treated as error - no object file generated这样的错误,右击项目,属性,在C/C++那里把treat warning as error设为no,再重新编译一次,就完成编译了。

如果用C编写Python扩展找不到Python27_d.lib,这是一个python版本问题,网友给的两种解决方案
方法一:直接安装debug版本的python27
方法二:
1.将python安装目录下libs目录里的python27复制一份并命名为python27_d.lib
2.修改include目录下的pyconfig.h,用/**/将#define Py_DEBUG注释掉

(4)其他项目我想应该也是这种添加模式,应该问题不大

(四)编译完成后检查

如果编译成功了,会在caffe-master同路径下生成NugetPackages文件夹,同时在caffe-master文件夹下生成Build文件夹

(1)NugetPackages里面内容

一个都不能少,如果少了的话,可能是nuget通信问题,多编译几次就下载完了。

(2)Build文件夹下的内容,一定有caffe.exe文件,不然说明没编译成功

(3)编译成功后,将caffe-master\caffe-master\Build\x64\Debug\pycaffe路径下的caffe文件夹拷贝到python的site-packages下面(也可设置PYTHONPATH指向caffe文件夹),然后用python测试能不能正常import caffe,如果没报错说明一切OK。我这里引用时遇到一个问题AttributeError: 'module' object has no attribute 'bool_',追踪错误堆栈发现如下:

原来是import io出了问题,caffe文件夹里面也有一个io.py,而系统要求的是numpy里面的io.py,所以没有bool_这个模块,解决办法:

1、不要在caffe目录下打开python.exe,或者你一定要在此目录打开,那么请把caffe文件夹移出site-packages路径,并配置环境变量,变量名=PYTHONPATH,值=caffe包的路径

2、如果在VS2013项目里面,请删除References下面的_caffe.pyd引用,如下图:

(下面一篇文章将详细介绍利用caffe识别中文验证码的内容:卷积神经网络(CNN)学习算法之----基于LeNet网络的中文验证码识别

基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习的更多相关文章

  1. Flawfinder在Python2和Python3环境下对代码进行扫描方法

    1. Flawfinder Flawfinder是一款开源的关于C/C++静态扫描分析工具,其根据内部字典数据库进行静态搜索,匹配简单的缺陷与漏洞. 官网:https://dwheeler.com/f ...

  2. 在windows10环境下给PHPStorm配置xdebug断点调试功能

    笔者的开发环境: wampserver2.5系统环境包 操作系统:windows10 64位专业版. php版本:php5.512 Apache版本:2.49 好了下面介绍,phpstorm配置xde ...

  3. [转] Ubuntu 12.04下LAMP安装配置 (Linux+Apache+Mysql+PHP)

    我是一个Linux新手,想要安装一台Ubuntu 12.04版的Linux服务器,用这台服务器上的LAMP套件来运行我自己的个人网站.LAMP套件就是 “Linux+Apache+Mysql+PHP这 ...

  4. Ubuntu 12.04下NFS安装配置图解

    以前就听说过nfs服务,但是一直没有用,在学习制作根文件系统的时候,才算是真正用上它了,我感觉它还不错,通过它“挂载”制作好的根文件系统.它在嵌入式中的角色就用下面的一张图说明吧! 用网线将主机与开发 ...

  5. ubuntu 12.04下安装和配置kohana 3.3.3 的方法

    一.先到官网下载3.3.3版本的压缩包到/var/www/1117/目录下(提前建好1117的目录)解压 解压好的文件有(applications\modules\system\build.xml\c ...

  6. urllib库在python2和python3环境下的使用区别

    好东西啊!!! Python 2 name Python 3 name urllib.urlretrieve() urllib.request.urlretrieve() urllib.urlclea ...

  7. Visual Studio 2013环境下操作vc6/vc7/vc8等低版本平台项目【编译|生成|调试】

    现代化的开发环境,微软一直在推出更新换代,我们所处的技术环境在日新月异的变化:不过在中国多数人们一边疲惫的追赶着时代的步伐,一边坚守着自己所获悉所掌握的那些紧吧吧的知本.对技术工具的掌握并非他们所想要 ...

  8. 如何在已经存在python2的linux环境上安装python3

    最近看到好多人都在问在已经存在python2.7的环境下如何安装python3,于是我决定写下这篇文档,供大家学习参考,希望能够给大家带来帮助 有的人在安装的时候可能会先将python2卸载掉,这个地 ...

  9. Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)

    (注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一  搭建环境: 1 Ubuntu16.04版本(系 ...

随机推荐

  1. 在MVC控制器里面使用dynamic和ExpandoObject,实现数据转义的输出

    在很多时候,我们在数据库里面定义表字段和实际在页面中展示的内容,往往是不太匹配的,页面数据可能是多个表数据的综合体,因此除了我们在表设计的时候考虑周到外,还需要考虑数据展现的处理.如果是常规的处理,那 ...

  2. WPF CheckBox 自定义样式

    WPF 自定义样式.CheckBox <Style x:Key="EmptyCheckBox" TargetType="CheckBox"> < ...

  3. 鼠标移到导航上面 当前的LI变色 处于当前的位置

    鼠标移到导航上面 当前的LI变色 处于当前的位置,广泛应用于当前导航. 点击这里查看效果 以下是源代码: <html> <head> <meta http-equiv=& ...

  4. PetaPoco4.0的事务为什么不会回滚

    using (var srop=DbHelper.CurrentDb.GetTransaction()) { ID = bp.AddModel(model).ToStr(); #region 参与楼盘 ...

  5. 大公司c#&.net转型java的原因有哪些?

    历来就听说有编程语言“鄙视链”的说法,而如今月经贴上的那些事儿,还真让我给遇到了. 以下内容来自知乎,纯属扯淡,易引发口水战,看完勿人身攻击. 目的给盲目的公司决策者.开发人员科普下,有个客观清醒的认 ...

  6. 十一个行为模式之模板方法模式(Template Method Pattern)

    定义: 定义一个操作中算法的框架,并且将一部分操作延迟到子类当中.使得子类可以不改变一个算法的结构即可重新定义算法步骤. 结构图: AbstractClass:抽象方法类,定义了一些基本操作,这些操作 ...

  7. iOS UITableView删除cell分割线

    UITableView是UITableViewStylePlain风格的,这样整个TableView都会被分割线分隔开,不管有没有数据,非常丑. 为了可以自定义cell的分割线: 解决方案: 将UIT ...

  8. Linux安全基础:find命令的使用

    find 命令用于查找文件系统中的指定文件. *命令格式:find pathname -option [-print -exex -ok] 1.pathname要查找的目录路径 ~表示home目录 . ...

  9. VS2015搭建GoogleTest框架--配置第一个项目

    最近公司要我学习Google的测试框架google test:https://github.com/google/googletest. GoogleTest是C++的测试框架,我一个学习Java的, ...

  10. 支付宝alipay使用小结 调用支付宝程序被杀死说明

    一. 准备阶段 如果没有蚂蚁金服开放平台的注册账号,则需要实现注册一个,这里多说一点,就是当我们以公司名义注册账号时,需要预备公司的营业执照等物品(需要上传照片等信息审核).账号申请成功之后,我们需要 ...