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

在Windows7/10上快速搭建深度学习框架Caffe开发环境

之前在 http://blog.csdn.net/fengbingchun/article/details/50987353 中介绍过在Windows7上搭建Caffe开发环境的操作步骤,那时caffe的项目是和其它依赖项目分开的,每次换新的PC机时再次重新配置搭建还是很不方便,而且caffe的版本较老,本次经过多次修改调整,将所有的项目除OpenCV和Boost外都放在一个工程里了,而且caffe更新到了最新,现在从GitHub上直接clone下来后直接进行编译即可,非常方便,对初步接触Caffe的来说,应该是有些帮助的,下面就说下进行快速搭建的操作步骤:

1.  OpenCV:

从 https://github.com/opencv/opencv/releases  下载2.4.13,解压缩到D:\soft\OpenCV2.4.13,将动态库路径D:\soft\OpenCV2.4.13\opencv\build\x64\vc12\bin添加到系统环境变量中,如下图红框所示:


2.  Boost:

从 http://www.boost.org/users/history/version_1_58_0.html 下载1.58.0,双击进行安装,安装到D:\ProgramFiles\local目录下,将D:\ProgramFiles\local\boost_1_58_0\lib64-msvc-12.0加入到系统环境变量中,如上图红框所示;

3.  Caffe_Test:

从  https://github.com/fengbingchun/Caffe_Test clone或DownLoad Caffe_Test工程(Note:master分支,old分支是之前旧版本caffe)到E:\GitCode目录下,clone后的结果如下图所示:


双击打开prj/x86_x64_vc12/Caffe目录下的Caffe.sln,结果如下图所示:


此工程下一共包含了19个项目:

(1)、依赖项目包括gflags、hdf5、leveldb、glog、openblas、protobuf、lmdb、snappy,这些项目都包含对相应依赖库源代码进行编译生成相应的库;

(2)、ThirdPartyLibrary_Test项目,用于测试生成各个依赖库的正确性及各个依赖库的使用;

(3)、libcaffe项目,用于生成caffe静态库;

(4)、Caffe_Test项目,用于测试caffe库的正确性及对Caffe应用的测试code;

(5)、libcaffe_gpu项目,用于生成基于GPU的caffe静态库,默认CUDA版本是8.0;

(6)、Caffe_GPU_Test项目,用于测试caffe_gpu库的正确性及对Caffe应用的测试code,此项目的code和Caffe_Test的code是同一套。

各目录说明:

(1)、demo目录存放测试code,ThirdParthLibrary_Test子目录下存放各个依赖库的简单测试代码,为了对各个依赖库的使用有更一步的了解,后续会加入更多的测试代码,此目录文件如下图所示:


Caffe_Test子目录存放对Caffe使用的测试代码,funset.cpp中存放对Caffe中一些重要头文件使用的测试代码,mnist.cpp中存放通过对MNIST数据集进行训练产生的model,以用来进行手写数字识别的测试代码,后续会加入更多的Caffe应用,如通过cifar10数据集,对物体进行分类等测试代码,此目录文件如下图所示:


(2)、prj/x86_x64_vc12目录存放各个项目配置文件,目前默认是vs2013,此目录文件如下图所示:


(3)、src目录存放caffe及除opencv和boost外各个依赖库的源代码,此目录文件如下图所示:


关于各种开源库版本详细信息(version.txt)如下所示:

1. caffe: branch: windowscommit: 88ddc95;date: 2017.03.29;url: https://github.com/BVLC/caffe
2. boost: binary library, boost_1_58_0-msvc-12.0-64.exeversion: 1.58.0date: 2015.04.17url:http://www.boost.org/http://www.boost.org/users/history/version_1_58_0.htmlhttps://sourceforge.net/projects/boost/files/boost-binaries/1.58.0/
3. protobuf: protobuf-cpp-3.2.0.zipcommit: 593e917version: v3.2date: 2017.01.28url: https://github.com/google/protobuf/releases
4. glog: commit: da816eaversion: masterdate: 2017.03.07url: https://github.com/google/glog
5. gflags:commit: f8a0efeversion: 2.2.0date: 2016.11.26url: https://github.com/gflags/gflags/releases
6. leveldb:commit: 915d663version: 1.18date: 2015.07.29url: https://github.com/bureau14/leveldb
7. lmdb:commit: 14cff07version: 0.9.19date: 2016.12.29url: https://github.com/LMDB/lmdb/releases
8. hdf5: hdf5-1.10.0-patch1.zipversion: 1.10.0url: https://support.hdfgroup.org/HDF5/release/obtainsrc.html
9. snappy:commit: 2d99bd1version: 1.1.4date: 2017.01.27url: https://github.com/google/snappy/releases
10. openblas:commit: 85636ffversion: 0.2.19date: 2016.09.01url: https://github.com/xianyi/OpenBLAS/releases
11. opencv:commit: 59975dbversion: 2.4.13date: 2016.05.16url: https://github.com/opencv/opencv/releases
(4)、test_data目录下存放各个库测试代码需要的测试数据。

接下来就可以编译Caffe_Test工程了,先依次编译依赖库再编译caffe。

此工程只配置了x64平台,没有配置win32平台。

如果机子上正确安装配置了CUDA8.0,则可以编译libcaffe_gpu库。

按照以上操作,只需三步,就可以快速完成在Windows上对Caffe的搭建,整个搭建时间应该不会超过30分钟,是不是非常方便。


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

相关文章:

扫码下单支持同桌单人点餐FAQ

一、使用场景 满足较多商户希望同一桌台,各自点各自的菜品的业态场景(例如杭味面馆,黄焖鸡米饭店,面馆等大多数轻快餐店) 二、配置步骤及注意事项 管理员后台配置--配置管理--店铺配置--扫码点餐tab页 1、开启扫码下单…

使用photoshop 10.0制作符合社保要求的照片

2019独角兽企业重金招聘Python工程师标准>>> 北京市社保新参统人员照片修制方法 修改目标:照片规格:358像素(宽)×441像素(高),分辨率350dpi。 颜色模式:24位RGB真彩色。 储存格式&am…

C++11中std::addressof的使用

C11中的std::addressof获得一个对象的实际地址,即使 operator& 操作符已被重载。它常用于原本要使用 operator& 的地方,它接受一个参数,该参数为要获得地址的那个对象的引用。一般,若operator &()也被重载且不一致的话…

一份职位信息的精准推荐之旅,从AI底层架构说起

整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】也许,每天早上你的邮箱中又多了一封职位推荐信息,点开一看,你可能发现这些推荐正合你意,于是按照这些信息,你顺利找到一份符合自己期待的…

Vue.js 生命周期

2019独角兽企业重金招聘Python工程师标准>>> 每个 Vue 实例在被创建之前都要经过一系列的初始化过程 vue在生命周期中有这些状态, beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed。Vue在实例化的过程中&#x…

AX2009取销售订单的税额

直接用以下方法即可: Tax::calcTaxAmount(salesLine.TaxGroup, salesLine.TaxItemGroup, systemDateGet(), salesLine.CurrencyCode, salesParmLine.LineAmount, salesTable.taxModuleType()); salesParmLine.LineAmount:这个直接取的是装箱单或者发票…

Dubbo源码解析之服务路由策略

1. 简介 服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。在详细分析服务路由的源码之前,先来介绍一下服务路由是什么。服务路由包含一条路由规则,路由规则决定了服务消费者的调…

C++中std::reverse和std::reverse_copy的使用

std::reverse&#xff1a;反转排序容器内指定范围中的元素。std::reverse_copy与std::reverse唯一的区别是&#xff1a;reverse_copy会将结果拷贝到另外一个容器中&#xff0c;而不影响原容器的内容。std::reverse: defined in header <algorithm>, reverses the order …

真相!30K拿到互联网大厂offer,网友:我服了!

最近笔者在知乎刷到一个帖子&#xff0c;其中&#xff0c;这条回答让人印象深刻&#xff1a;其实&#xff0c;最近几年人工智能大火&#xff0c;其中深度学习岗位的薪酬爆增&#xff0c;BAT大厂高薪招聘AI人才&#xff0c;收到的简历却寥寥无几&#xff1f;究竟是大厂岗位要求高…

OracleDesigner学习笔记1――安装篇

OracleDesigner学习笔记1――安装篇 QQ&#xff1a;King MSN&#xff1a;qiutianwhmsn.com Email&#xff1a;qqkinggmail.com 一&#xff0e; 前言 Oracle是当今最流行的关系型数据库之一&#xff0c;和很多朋友一样&#xff0c;我也是一个Oracle的爱好者&#xff0c;从…

C++/C++11中std::queue的使用

std::queue: 模板类queue定义在<queue>头文件中。队列(Queue)是一个容器适配器(Container adaptor)类型&#xff0c;被特别设计用来运行于FIFO(First-in first-out)场景&#xff0c;在该场景中&#xff0c;只能从容器一端添加(Insert)元素&#xff0c;而在另一端提取(Ext…

常见的http状态码(Http Status Code)

常见的http状态码&#xff1a;&#xff08;收藏学习&#xff09; 2**开头 &#xff08;请求成功&#xff09;表示成功处理了请求的状态代码。 200 &#xff08;成功&#xff09; 服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。201 &#xff08;已创…

“不给钱就删库”的勒索病毒, 程序员该如何防护?

作者 | 阿木&#xff0c;王洪鹏&#xff0c;运营有个人公众号新新生活志。目前任职网易云计算技术部高级工程师&#xff0c;近3年云计算从业经验&#xff0c;爱读书、爱写作、爱技术。责编 | 郭芮来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近期一家名为ProPub…

ruby实时查看日志

(文章是从我的个人主页上粘贴过来的&#xff0c; 大家也可以访问我的主页 www.iwangzheng.com) 在调试代码的时候&#xff0c;把日志文件打开&#xff0c;边操作边调试能很快帮助我们发现系统中存在的问题。 $tail rails_2014_03_03.log -f转载于:https://www.cnblogs.com/iw…

干货 | OpenCV看这篇就够了,9段代码详解图像变换基本操作

作者 | 王天庆&#xff0c;长期从事分布式系统、数据科学与工程、人工智能等方面的研究与开发&#xff0c;在人脸识别方面有丰富的实践经验。现就职某世界100强企业的数据实验室&#xff0c;从事数据科学相关技术领域的预研工作。来源 | 大数据&#xff08;ID&#xff1a;hzdas…

C++/C++11中std::priority_queue的使用

std::priority_queue:在优先队列中&#xff0c;优先级高的元素先出队列&#xff0c;并非按照先进先出的要求&#xff0c;类似一个堆(heap)。其模板声明带有三个参数&#xff0c;priority_queue<Type, Container, Functional>, 其中Type为数据类型&#xff0c;Container为…

left join 和 left outer join 的区别

老是混淆&#xff0c;做个笔记&#xff0c;转自&#xff1a;https://www.cnblogs.com/xieqian111/p/5735977.html left join 和 left outer join 的区别 通俗的讲&#xff1a; A left join B 的连接的记录数与A表的记录数同 A right join B 的连接的记录数与…

php减少损耗的方法之一 缓存对象

即把实例后的对象缓存起来(存入变量)&#xff0c;当需要再次实例化时&#xff0c;先去缓存里查看是否存在。存在则返回。否则实例化。转载于:https://www.cnblogs.com/zuoxiaobing/p/3581139.html

windows10 vs2013控制台工程中添加并编译cuda8.0文件操作步骤

一般有两种方法可以在vs2013上添加运行cuda8.0程序&#xff1a;一、直接新建一个基于CUDA8.0的项目&#xff1a;如下图所示&#xff0c;点击确定后即可生成test_cuda项目&#xff1b;默认会自动生成一个kernel.cu文件&#xff1b;默认已经配置好Debug/Release, Win32/x64环境&a…

算法人必懂的进阶SQL知识,4道面试常考题

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 石晓文来源&#xff5c;小小挖掘机&#xff08;ID&#xff1a;wAlsjwj&#xff09;近期在不同群里有小伙伴们提出了一些在面试和笔试中遇到的Hive SQL问题&#xff0c;Hive作为算法工程师的一项必备技能&#xff0c;在面…

007-迅雷定时重启AutoHotkey脚本-20190411

;; 定时重启迅雷.ahk,;;~ 2019年04月11日;#SingleInstance,forceSetWorkingDir,%A_ScriptDir%DetectHiddenWindows,OnSetTitleMatchMode,2#Persistent ;让脚本持久运行&#xff08;即直到用户关闭或遇到 ExitApp&#xff09;。#NoEnv;~ #NoTrayIcon Hotkey,^F10,ExitThisApp lo…

关于ExtJS在使用下拉列表框的二级联动获取数据

2019独角兽企业重金招聘Python工程师标准>>> 使用下拉列表框的二级联动获取数据&#xff0c;如果第一个下拉列表框有默认值时&#xff0c;需要设置fireEvent执行select事件 示例&#xff1a; var combo Ext.getCmp("modifyBuildCom"); combo.setValue(re…

C++中std::sort/std::stable_sort/std::partial_sort的区别及使用

某些算法会重排容器中元素的顺序&#xff0c;如std::sort。调用sort会重排输入序列中的元素&#xff0c;使之有序&#xff0c;它默认是利用元素类型的<运算符来实现排序的。也可以重载sort的默认排序&#xff0c;即通过sort的第三个参数&#xff0c;此参数是一个谓词(predic…

阿里云智能 AIoT 首席科学家丁险峰:阿里全面进军IoT这一年 | 问底中国IT技术演进...

作者 | 屠敏受访者 | 丁险峰来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;「忽如一夜春风来&#xff0c;千树万树梨花开。」从概念的流行、至科技巨头的相继入局、再到诸多应用的落地&#xff0c;IoT 的发展终于在万事俱备只欠东风的条件下真正地迎来了属于自己的…

eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...

Guide: eBCC性能分析最佳实践&#xff08;0&#xff09; - 开启性能分析新篇章eBCC性能分析最佳实践&#xff08;1&#xff09; - 线上lstat, vfs_fstatat 开销高情景分析eBCC性能分析最佳实践&#xff08;2&#xff09; - 一个简单的eBCC分析网络函数的latency敬请期待...0. I…

spring-data-mongodb必须了解的操作

http://docs.spring.io/spring-data/data-mongo/docs/1.0.0.M5/api/org/springframework/data/mongodb/core/MongoTemplate.html 在线api文档 1关键之识别 KeywordSampleLogical resultGreaterThanfindByAgeGreaterThan(int age){"age" : {"$gt" : age}}Le…

旷视张祥雨:高效轻量级深度模型的研究和实践 | AI ProCon 2019

演讲嘉宾 | 张祥雨&#xff08;旷视研究院主任研究员、基础模型组负责人&#xff09;编辑 | Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;基础模型是现代视觉识别系统中一个至关重要的关注点。基础模型的优劣主要从精度、速度或功耗等角度判定&#xff0c;如何…

Python脱产8期 Day02

一 语言分类 机器语言&#xff0c;汇编语言&#xff0c;高级语言&#xff08;编译和解释&#xff09; 二 环境变量 1、配置环境变量不是必须的2、配置环境变量的目的&#xff1a;为终端提供执行环境 三Python代码执行的方式 1交互式&#xff1a;.控制台直接编写运行python代码 …

分别用Eigen和C++(OpenCV)实现图像(矩阵)转置

(1)、标量(scalar)&#xff1a;一个标量就是一个单独的数。(2)、向量(vector)&#xff1a;一个向量是一列数&#xff0c;这些数是有序排列的&#xff0c;通过次序中的索引&#xff0c;可以确定每个单独的数。(3)、矩阵(matrix)&#xff1a;矩阵是一个二维数组&#xff0c;其中的…

Linux基础优化

***************************************************************************************linux系统的优化有很多&#xff0c;我简单阐述下我经常优化的方针&#xff1a;记忆口诀&#xff1a;***********************一清、一精、一增&#xff1b;两优、四设、七其他。*****…