基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习
(二)项目编译前的步骤:
(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文件,将如下打印信息的代码用"//"注释掉:
(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,再重新编译一次,就完成编译了。
(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配置学习的更多相关文章
- Flawfinder在Python2和Python3环境下对代码进行扫描方法
1. Flawfinder Flawfinder是一款开源的关于C/C++静态扫描分析工具,其根据内部字典数据库进行静态搜索,匹配简单的缺陷与漏洞. 官网:https://dwheeler.com/f ...
- 在windows10环境下给PHPStorm配置xdebug断点调试功能
笔者的开发环境: wampserver2.5系统环境包 操作系统:windows10 64位专业版. php版本:php5.512 Apache版本:2.49 好了下面介绍,phpstorm配置xde ...
- [转] Ubuntu 12.04下LAMP安装配置 (Linux+Apache+Mysql+PHP)
我是一个Linux新手,想要安装一台Ubuntu 12.04版的Linux服务器,用这台服务器上的LAMP套件来运行我自己的个人网站.LAMP套件就是 “Linux+Apache+Mysql+PHP这 ...
- Ubuntu 12.04下NFS安装配置图解
以前就听说过nfs服务,但是一直没有用,在学习制作根文件系统的时候,才算是真正用上它了,我感觉它还不错,通过它“挂载”制作好的根文件系统.它在嵌入式中的角色就用下面的一张图说明吧! 用网线将主机与开发 ...
- ubuntu 12.04下安装和配置kohana 3.3.3 的方法
一.先到官网下载3.3.3版本的压缩包到/var/www/1117/目录下(提前建好1117的目录)解压 解压好的文件有(applications\modules\system\build.xml\c ...
- urllib库在python2和python3环境下的使用区别
好东西啊!!! Python 2 name Python 3 name urllib.urlretrieve() urllib.request.urlretrieve() urllib.urlclea ...
- Visual Studio 2013环境下操作vc6/vc7/vc8等低版本平台项目【编译|生成|调试】
现代化的开发环境,微软一直在推出更新换代,我们所处的技术环境在日新月异的变化:不过在中国多数人们一边疲惫的追赶着时代的步伐,一边坚守着自己所获悉所掌握的那些紧吧吧的知本.对技术工具的掌握并非他们所想要 ...
- 如何在已经存在python2的linux环境上安装python3
最近看到好多人都在问在已经存在python2.7的环境下如何安装python3,于是我决定写下这篇文档,供大家学习参考,希望能够给大家带来帮助 有的人在安装的时候可能会先将python2卸载掉,这个地 ...
- Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)
(注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一 搭建环境: 1 Ubuntu16.04版本(系 ...
随机推荐
- C#基础-技术还债3-枚举【pending】
/// <summary> /// 声明三方查询类型可以关联的查询对象类型 /// </summary> [AttributeUsage(AttributeTargets.Fi ...
- java函数
函数的封装没有定规,只要遵循语法,函数如何封装按照需求来做 函数四要素:函数名,输入,加工,输出(返回). 一.函数调用 1.函数名(变量列表); 没有返回值. 2.数据类型 变量名=函数名(变量列表 ...
- PHP规范PSR2
为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的.各个成员项目间的共性组成了这组代码规范.当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用 ...
- Lind.DDD.Manage项目核心技术分享
回到目录 关于Lind.DDD.Manager的培训与学习 讲解:张占岭 花名:仓储大叔 主要框架:Lind.DDD,Lind.DDD.Manager 关于Lind.DDD.Manager 由于数据模 ...
- 学习Javascript闭包(Closure)
闭包作用 1.让变量驻留在内存中 2.函数外部可以读取函数内部的私有变量 <!DOCTYPE html> <html lang="en"> <head ...
- DrawSVG - SVG 路径动画 jQuery 插件
jQuery DrawSVG 使用了 jQuery 内置的动画引擎实现 SVG 路径动画,用到了 stroke-dasharray 和 stroke-dashoffset 属性.DrawSVG 是完全 ...
- jQuery实现页面内锚点平滑跳转
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以 ...
- spritecow改造
快速入口 不读文章可以直接拐向这里: spritecow二代:https://kmdjs.github.io/arejs-tool-sprite/ 写在前面 工欲善其事必先利其器,最近fork了一份s ...
- 修改ArcSDE的最大连接数
我们大体都知道ArcSDE的连接数有 48 的限制,很多人也知道这个参数可以修改,并且每种操作系统能支持的最大连接数是不同的. 如果应用报错:超出系统最大连接数该如何处理? 两种解决办法: 第一,首先 ...
- 邓白氏码的申请-iOS公司开发者账号准备
相比较个人开发者账号的申请,公司(or企业)的账号申请要稍显复杂,很关键的一点就是邓白氏码的申请,而在网上找了好久也没有找到相对系统的方法流程.因此, 用本文记录我在公司申请邓白氏码过程,以备之后不时 ...