当前位置: 首页 > 编程日记 > 正文

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

1.      从https://github.com/BVLC/caffe/通过git clone下载caffe源码,master分支,版本号为09868ac:$ git  clone https://github.com/BVLC/caffe.git ;

2.      先使用cmake-gui构建生成vs2013工程,发现有很多错误,提示缺少各种依赖库,根据错误提示,分别编译各种依赖库,下面通过vs2013安装、编译各种依赖库;

3.      安装、配置NVIDIA CUDA 7.0(网上说使用GPU和不使用,速度上caffe至少要差10倍左右,如果想不使用GPU,在cmake-gui中勾选CPU_ONLY即可):可以参考http://blog.csdn.net/fengbingchun/article/details/44963681;

4.      安装、配置Boost:Boost库是一个可移植、提供源代码的C++库,它是为C++语言标准库提供扩展的一些C++程序库的总称:

(1)、从http://sourceforge.net/projects/boost/files/boost/1.58.0/下载Boost稳定版本1.58.0,如果不想自己编译Boost源码,则从http://sourceforge.net/projects/boost/files/boost-binaries/1.58.0/直接下载对应的二进制文件即可,我这里下载的是boost_1_58_0-msvc-12.0-64.exe ;

(2)、双击进行安装,将其安装到D:\ProgramFiles\local\boost_1_58_0目录下;

(3)、将D:\ProgramFiles\local\boost_1_58_0\lib64-msvc-12.0添加到系统环境变量Path中;

(4)、添加系统变量,变量名:BOOST_1_58_0,变量值:D:\ProgramFiles\local\boost_1_58_0,重启电脑;

5.      从https://github.com/gflags/gflags下载GFlags,解压缩,编译GFlags,google gflags是google使用的一个开源库,用于解析命令行标记:

(1)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/GFlags/gflags-master和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/GFlags/vs2013 ;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、CMAKE_INSTALL_PREFIX设置为::/GitCode/Caffe/src/thirdparty/GFlags/install;

(4)、点击Generate,生成vs2013gflags.sln工程;

(5)、打开gflags.sln工程,分别在x64Debug和x64 Release下,点击ALL_BUILD,重新生成;点击INSTALL,生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下;

6.      从https://github.com/google/glog下载GLog,解压缩,编译GLog,google glog是一个记录日志信息的c++库:

(1)、用vs2013打开google-glog.sln工程,需要升级到vs2013版本;

(2)、原始工程只有win32配置,需要手动添加Debug 和Release x64配置;

(3)、分别在Debug和Release下,选中解决方案google-glog,重新生成解决方案,会在/glog-master/x64目录下生成Debug和Release两个子目录,将其里面相应的库拷贝到/GLog/install相应目录下;

(4)、将源码中的.h文件拷贝到相应的/GLog/install/目录下;

7.      从https://github.com/bureau14/leveldb下载LevelDB,解压缩,编译LevelDB,它是一个google实现的非常高效的kv数据库:

(1)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/LevelDB/leveldb-master和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/LevelDB/vs2013 ;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、点击Advanced,将Boost_INCLUDE_DIR设置为D:/ProgramFiles/local/boost_1_58_0/,将CMAKE_INSTALL_PREFIX设置为E:/GitCode/Caffe/src/thirdparty/LevelDB/install,再次点击Configure;

(4)、点击Generate,生成vs2013 leveldb.sln工程;

(5)、打开leveldb.sln工程,分别在x64 Debug和x64 Release下,点击ALL_BUILD,重新生成;点击INSTALL,生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下;

8.      从https://github.com/LMDB/lmdb下载LMDB,解压缩,编译LMDB,Lightning Memory-Mapped Database:

(1)、打开vs2013,新建一个名称为lmdb的空项目;

(2)、将lmdb中的相应.c文件和.h文件加入到此项目中;

(3)、打开属性页,分别在Debug和Release下将其配置类型改为:静态库(.lib);

(4)、配置x64选项;

(5)、从http://4201a5.l67.yunpan.cn/lk/ccWF2Zge3tyfb密码是6147,下载3rdparty-2015.7.18.zip,将里面的unistd.h、getopt.h、getopt.c三个文件复制到lmdb源码并加入工程中;

(6)、修改属性,将C/C++下SDL检查设为否(/sdl-),并且将_CRT_SECURE_NO_WARNINGS、_CRT_SECURE_NO_DEPRECATE、_CRT_NONSTDC_NO_DEPRECATE三个宏添加到预处理定义中;

(7)、分别在Debug和Release下编译,生成lmdb.lib库,将其库和相应的头文件,拷贝到/install/include和install/lib相应目录下;

9.      从https://github.com/google/protobuf下载ProtoBuf,解压缩,编译ProtoBuf,它是一种轻便高效的结构化数据存储格式:

(1)、打开Cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/ProtoBuf/protobuf-master/cmake和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/ProtoBuf/vs2013;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、去掉BUILD_TESTING的勾选,将CMAKE_INSTALL_PREFIX设置为E:/GitCode/Caffe/src/thirdparty/ProtoBuf/install,再次点击Configure;

(4)、点击Generate,生成vs2013 protobuf.sln工程;

(5)、打开protobuf.sln工程,分别在x64 Debug和x64 Release下,点击ALL_BUILD,重新生成;点击INSTALL,生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下,将protoc.exe放在/install/bin目录下;

10.  从https://www.hdfgroup.org/HDF5/release/obtainsrc.html下载HDF5,解压缩,编译HDF5,它是一个层次型的数据存储格式:

(1)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/HDF5/hdf5-1.8.15-patch1和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/HDF5/vs2013;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、再次点击Configure,点击Generate,生成HDF5.sln工程;

(4)、打开HDF5.sln工程,分别在x64 Debug和x64 Release下,点击ALL_BUILD,重新生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下;

11.  从https://github.com/google/snappy下载snappy,解压缩,从https://github.com/kmanley/snappy-msvc下载snappy-msvc,解压缩,它是一个用C++实现的用来压缩和解压缩的库:

(1)、打开snappy-msvc-master目录下的snappy.sln工程,升级到vs2013;

(2)、添加x64解决方案平台;

(3)、从http://www.maspick.co.il/ddd/chromium/src/third_party/snappy/win32/snappy-stubs-public.h下载snappy-stubs-pulic.h文件,将其拷贝到/snappy-master目录下;

(4)、解决工程的error C2589:打开snappy属性页,分别在Debug和Release下,预处理定义中添加NOMINMAX;

(5)、在Debug和Release下,分别点击snappy工程,重新生成,会生成snappy.lib静态库;

(6)、将生成的静态库和头文件拷贝到/install/include和/install/lib目录下;

12.  编译不带CUDA支持的OpenCV2.4.9 x64动态库:可以参考http://blog.csdn.net/fengbingchun/article/details/8778121;

13.  从http://sourceforge.net/projects/openblas/files/v0.2.14/下载OpenBLAS-v0.2.12-Win64-int64.zip,解压缩,它是一个优化的Blas库,将里面的libopenblas.dll.a改成libopenblas.lib;

14.  使用CMake(cmake-gui)生成Caffe.sln工程:暂时没有成功,先作个记录,后面有时间再调试吧

(1)、打开vs2013,新建一个空项目caffe-vs2013,分别在Debug和Release下,配置解决方案平台为x64,将配置属性中的配置类型改为动态库(.dll);

(2)、利用ProtoBuf中的protoc.exe,通过/caffe/caffe/src/caffe/proto/caffe.proto文件生成caffe.pb.h和caffe.pb.cc:打开命令提示符,将protoc.exe拷贝到/proto目录下,执行:protoc.exe caffe.proto --cpp_out=./ ;

(3)、在/caffe/caffe/include/caffe目录下新建一个proto子目录,将caffe.pb.h和caffe.pb.cc两个文件拷贝到此目录下;

(4)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/caffe/caffe和build the binaries路径:E:/GitCode/Caffe/src/caffe/vs2013;

(5)、点击Configure,选择Visual Studio 12 2013 Win64;

(6)、设置Boost_INCLUDE_DIR为D:/ProgramFiles/local/;

(7)、设置GFlags选项见下图:


(8)、设置GLog选项见下图:


(9)、设置ProtoBuf选项见下图:


(10)、设置HDF5选项见下图:


(11)、设置LMDB选项见下图:


(12)、设置LevelDB选项见下图:


(13)、设置Snappy选项见下图:


(14)、设置OpenCV_DIR为D:/soft/OpenCV2.4.9/opencv/sources;

(15)、设置OpenBLAS选项见下图:


(16)、再次点击Configure,点击Generate,生成Caffe.sln工程。

15.  上面直接用CMake没有成功,下面手动添加生成Caffe.sln工程:

(1)、用vs2013新建一个控制台空工程caffe-vs2013,解决方案平台由Win32设置成x64;

(2)、设置CUDA支持:项目(P) -> 生成自定义(B)… -> 勾选CUDA 7.0(.targets, .props),点击确定,默认先使用不支持GPU进行编译,在工程中添加CPU_ONLY宏;

(3)、添加/caffe/src/caffe目录下的文件逐个进行编译,先编译/src/caffe当前目录下的10个.cpp文件,如下图:


(4)、caffe所有的依赖文件全部放在thirdparty目录下,将相应的头文件以及库文件加入到工程中,见下图:


(5)、对以上11个.cpp文件逐个进行编译,根据错误提示进行逐一解决;

(6)、将/caffe/src/caffe/layers目录下的.cpp文件加入到工程中,进行编译;

(7)、将/caffe/src/caffe/util目录下的.cpp文件加入到工程中,进行编译;

(8)、将/caffe/src/caffe/proto目录下的.cpp文件加入到工程中,进行编译,此.cc文件由上面的14.2步骤生成;

16.  编译caffe-vs2013工程,生成caffe-vs2013动态库。


说明

(1)、以上能够正确生成caffe-vs2013动态库,但是使用的时候发现光动态库,并没有对应的静态库产生。因此为了调用的方便将工程改为生成静态库,修改方法为:将工程属性 -> 常规 -> 配置类型,由原来的动态库(.dll)改为静态库(.lib)即可,其它均无需修改,或者自己新创建一个静态库工程,将相关caffe文件加入到工程中;

(2)、若想使生成的caffe静态库能够在windows下正常使用,还需几个额外的动态库,可以直接从 https://drive.google.com/file/d/0B_G5BUend20PTEJ0cGIyZ0czVmc/view 下载。

GitHub:https://github.com/fengbingchun/Caffe_Test

参考文献:

1.      https://initialneil.wordpress.com/

2.      http://wenku.baidu.com/link?url=ik_0Yf6ZixtG10cXXoaDRkTVrDNf9o3mmAI8-c48AhKunsOHX0JNSG_e4yVMiH9TVcZuxggQqqMC5HhAZ46KSaAs4kmCSRfD3taWpbksDv7

相关文章:

区块链之比特币的潜在激励

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】链客,有问必答!! 比特币,这个建立在开放P2P(点对点)网络结构之上的货币(文献9),继续享受人们的追…

每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?

作者 | 夕颜出品 | AI科技大本营(ID:rgznai100)随着深度学习、强化学习、知识图谱、AutoML 等 AI 技术出现更多突破,推荐系统领域的企业和开发者开始将这些技术与传统推荐算法相结合,使得推荐效果得到显著提升。不过,越…

常用的JQuery数字类型验证正则表达式

var regexEnum { intege:"^-?[1-9]//d*$", //整数 intege1:"^[1-9]//d*$", //正整数 intege2:"^-[1-9]//d*$", //负整数 num:"^([-]?)//d*//.?//d$", //数字 num1:"^([1-9]//d*|0)$", //正数&#xff…

Java多线程编程实战:模拟大量数据同步

背景 最近对于 Java 多线程做了一段时间的学习,笔者一直认为,学习东西就是要应用到实际的业务需求中的。否则要么无法深入理解,要么硬生生地套用技术只是达到炫技的效果。 不过笔者仍旧认为自己对于多线程掌握不够熟练,不敢轻易应…

Ubuntu中Atom编辑器显示中文乱码的处理方法

在Ubuntu14.04 64位机上安装Atom,依次在终端输入如下命令: 1. $ sudo add-apt-repository ppa:webupd8team/atom 2. $ sudo apt-get update 3. $ sudo apt-get install atom处理中文乱码的问题: 1. 安装文泉驿正黑等相关中文字体&#…

我的世界游戏安装

2019独角兽企业重金招聘Python工程师标准>>> Minecraft 是一款沙盘独立视频游戏,灵感来自于Infiniminer,使用Java编写,由Markus "Notch" Persson 所建立,现由Mojang AB 公司开发。 这里我们介绍如何在pcDuin…

RSA签名的PSS模式

本文由云社区发表作者:mariolu 一、什么是PSS模式? 1.1、两种签名方式之一RSA-PSS PSS (Probabilistic Signature Scheme)私钥签名流程的一种填充模式。目前主流的RSA签名包括RSA-PSS和RSA-PKCS#1 v1.5。相对应PKCS(Public Key Cryptography …

AI真人表情包、斗地主AI......DeeCamp学员做了50个好玩又实用的AI项目

8月16日,2019 DeeCamp人工智能训练营的结营仪式上,展示了600名DeeCamp学员的50个AI实践课题。 结营仪式上,由2019 DeeCamp学员组成的6个项目小组作为代表,现场展示了自己Demo成果,并由李开复、张潼等学术及产业导师现…

libcurl库的使用(通过libcurl库下载url图像)

1. 从http://curl.haxx.se/download.html下载libcurl源码,解压缩; 2. 通过CMake(cmake-gui)生成vs2013 x64位 CURL.sln; 3. 打开CURL.sln,编译会生成libcurl.dll动态库; 4. 在CURL.sln基础上&a…

SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法

2019独角兽企业重金招聘Python工程师标准>>> 一直想把数据库的默认路径修改一下,在网上找了一下,真的发现有办法 , 特拿 来与大家共同分享。 以下仅为参照,如果有多个实例,可能会有些许不同: …

Linux下多线程编程互斥锁和条件变量的简单使用

Linux下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基…

03基于python玩转人工智能最火框架之TensorFlow介绍

一句话介绍: Google开源的基于数据流图的科学计算库,适用于机器学习 不局限于机器学习,但目前被大多用于机器学习等。 TensorFlow计算流图的概念图 Tensor在图中流动。 TensorFlow的含义 拆字释义: Tensor 张量(tf中数据的表征) flow 流动 张量在图中流…

赴约北大,2019 CCF大数据与计算智能大赛正式启动

8月17日,以“数据驱动,智创未来”为主题的2019 CCF大数据与计算智能大赛(2019 CCF BDCI)全球启动仪式,在北京大学英杰交流中心阳光厅正式启幕。自2013年创办以来,大赛已成功举办六届,连续获得教…

Hadoop入门(10)_通过java代码实现从本地的文件上传到Hadoop的文件系统

2019独角兽企业重金招聘Python工程师标准>>> 第一步:首先搭建java的编译环境。创建一个Java Project工程,名为upload。 第二步:选中所需的Jar包。 选中JRE System Library 选择BuildPath Configure Build Path 选择ha…

Caffe源码中各种依赖库的作用及简单使用

1. Boost库:它是一个可移植、跨平台,提供源代码的C库,作为标准库的后备。 在Caffe中用到的Boost头文件包括: (1)、shared_ptr.hpp:智能指针,使用它可以不需要考虑内存释放的问题; (2)、dat…

漫画:5分钟了解什么是动态规划?

作者 | 调皮的阿广来源 | 视学算法(ID:z872561826)动态规划,英文是Dynamic Programming,简称DP,擅长解决“多阶段决策问题”,利用各个阶段阶段的递推关系,逐个确定每个阶段的最优决策…

小程序大转盘红包雨营销组件

前言 商城没几个营销活动能叫商城吗?所以就来几个组件吧,写的不好轻踩,对你有帮助记得给个小星星哦直接上链接github链接 运行例子 git clone https://github.com/sunnie1992/soul-weapp.git 微信开发者工具打开项目 营销组件 大转盘 "p…

Windows Server 2012 RDS系列:虚拟桌面化(5)

概述:本次将系列地测试Windows Server 2012 远程桌面服务(RDS),将过程进行分享,总的感觉比2008 R2更简单了,体现着2012的自动化。2012的RDS部署有标准部署和快速启动两种,快速启动就是自动快速配…

里程碑式成果Faster RCNN复现难?我们试了一下 | 附完整代码

作者 | 已退逼乎 来源 | 知乎【导读】2019年以来,除各AI 大厂私有网络范围外,MaskRCNN,CascadeRCNN 成为了支撑很多业务得以开展的基础,而以 Faster RCNN 为基础去复现其他的检测网络既省时又省力,也算得上是里程碑性成…

【跃迁之路】【725天】程序员高效学习方法论探索系列(实验阶段482-2019.2.15)...

实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长实验期2年(2017.10.06 - 2019.10.06)我将以自己为实验对象。我将开源我的学习方法,方法不断更新迭代&#…

C/C++各种数据类型转换汇总

以下是Windows/Linux系统中常用的C/C各种数据类型转换汇总&#xff1a;#ifndef FBC_MESSY_TEST_DATA_TYPE_CONVERT_HPP_ #define FBC_MESSY_TEST_DATA_TYPE_CONVERT_HPP_#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string>…

ASP.NET技巧:两个截取字符串的实用方法

两个截取字符串的实用方法&#xff08;超过一定长度自动换行&#xff09;1/** <summary> 2 /// 截取字符串&#xff0c;不限制字符串长度 3 /// </summary> 4 /// <param name"str">待截取的字符串</param> 5 /…

吃瓜腾讯平均月薪7.27万后,微信又出大招

腾讯最新财报一出&#xff0c;喜提热搜&#xff01;据腾讯第二季度财报显示&#xff1a;2019 年上半年腾讯有员工56310人&#xff0c;总薪酬成本为242.59亿元&#xff0c;腾讯员工平均半年薪为43.08万元。在第一季度里&#xff0c;腾讯员工平均季度薪资为21.27万元&#xff0c;…

回调函数在C/C++中的使用

回调函数就是一个通过函数指针调用的函数。假如把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数&#xff0c;那么就是回调机制。A函数就是回调函数&#xff0c;而通常情况下&#xff0c;A函数是在系统符合你设定的条件下自动执行。使用回调函…

excel单元格加引号及逗号,转换为sql需要的样式

A1 B1BXQY001 ------> BXQY001,BXQY001 -----> BXQY001 在B1中输入公式&#xff1a; ""&A1&""&"," 在B2中输入公式&#xff1a; ""&A1&"" 去掉了后面的逗号。其实就是 " "&A1&…

Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法...

我的Oracle 10g版本是10.2.0.1.0&#xff0c;&#xff08;10.1同理&#xff09;选择高级安装&#xff0c;提示“程序异常终止&#xff0c;发生未知错误”。1.修改Oracle 10G\database\stage\prereq\db\refhost.xml当打开refhost.xml 后会发现有</SYSTEM> <CERTIFIED…

Caffe基础介绍

Caffe的全称应该是Convolutional Architecture for Fast Feature Embedding&#xff0c;它是一个清晰、高效的深度学习框架&#xff0c;它是开源的&#xff0c;核心语言是C&#xff0c;它支持命令行、Python和Matlab接口&#xff0c;它既可以在CPU上运行也可以在GPU上运行。它的…

飞桨博士会第三期来啦!中国深度学习技术俱乐部诚邀您加入

飞桨博士会是由百度开源深度学习平台飞桨&#xff08;PaddlePaddle&#xff09;发起的中国深度学习技术俱乐部&#xff0c;旨在打造深度学习核心开发者交流圈&#xff0c;助力会员拓展行业高端人脉、交流前沿技术。俱乐部为会员制&#xff0c;成员皆为博士生导师或博士&#xf…

canvas 拼图

效果 代码 <!DOCTYPE html> <html lang"zh_CN"> <head><meta charset"UTF-8"><title>拼图</title><script src"https://code.jquery.com/jquery-3.3.1.js"></script> </head> <body&g…

性能优化之Java(Android)代码优化

最新最准确内容建议直接访问原文&#xff1a;性能优化之Java(Android)代码优化 本文为Android性能优化的第三篇——Java(Android)代码优化。主要介绍Java代码中性能优化方式及网络优化&#xff0c;包括缓存、异步、延迟、数据存储、算法、JNI、逻辑等优化方式。(时间仓促&#…