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

2023-11-12

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 下载。 

GitHubhttps://github.com/fengbingchun/Caffe_Test

参考文献:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤 的相关文章

  • 【caffe-windows】 caffe-master 之 cifar10 超详细

    本教程尽量详细 大多步骤都有图 如果运行出错 请先对照自己的文件是否和图上的一样 包括标点啊 空格啊 斜杠 反斜杠啊之类的小细节 本例程是在 win10 64位 caffe master vs2013下进行的 并且已经配置GPU版本 若用C
  • cifar数据集介绍及到图像转换的实现

    CIFAR是一个用于普通物体识别的数据集 CIFAR数据集分为两种 CIFAR 10和CIFAR 100 The CIFAR 10 and CIFAR 100 are labeled subsets of the 80 million ti
  • TensorRT Samples: GoogleNet

    关于TensorRT的介绍可以参考 http blog csdn net fengbingchun article details 78469551 以下是参考TensorRT 2 1 2中的sampleGoogleNet cpp文件改写的
  • Window下用caffe实现MNIST训练

    本博包含MNIST原始数据的格式转化 以及分类训练 1 数据转化 Caffe源码中src caffe caffe examples mnist convert mnist data cpp提供的实现代码并不能直接在Windows下运行 这里
  • Caffe:如果两层反向传播渐变到同一个底部斑点会发生什么?

    我想知道如果我有一个层生成一个底部斑点 该斑点进一步被两个后续层消耗 这两个层都会生成一些梯度来填充反向传播阶段的 Bottom diff 将两个梯度相加形成最终梯度吗 或者说 只有他们一个人能够活下去 根据我的理解 Caffe 层需要在用
  • 咖啡 | solver.prototxt值设置策略

    在 Caffe 上 我正在尝试实现一个用于语义分割的全卷积网络 我想知道是否有一个具体的策略来设置你的 solver prototxt 以下超参数的值 测试迭代器 测试间隔 迭代大小 max iter 这是否取决于您的训练集的图像数量 如果
  • PyCaffe中的layer模块在哪里定义

    我正在修改一个Caffe教程 http nbviewer jupyter org github BVLC caffe blob master examples pascal multilabel with datalayer ipynb实现
  • Caffe 模型为每个图像提供相同的输出

    我刚刚使用预定义的 prototxt 和 caffemodel 文件在 caffe 中加载了 alexnet 然而 将任何图像发送到模型都会返回与 fc7 层的输出相同的值 这是代码片段 net caffe Net alexnet trai
  • 找不到 PROTOBUF 编译器

    我正在尝试使用 Caffe 进行 CMake 但我的系统找不到 protobuf 编译器 我之前安装过protobuf2 7 0 现在我切换回2 6 1 如何配置我的 CMake 来识别 protobuf2 6 1 编译器 我已经做好了 s
  • 如何在非 NVIDIA 设置上加速深度学习?

    由于我只有 AMD A10 7850 APU 并且没有资金购买 800 1200 美元的 NVIDIA 显卡 因此我正在尝试利用我拥有的资源通过 TensorFlow Keras 加速深度学习 最初 我使用了 Tensorflow 的预编译
  • Caffe的Python接口:“导入caffe”时出错

    我正在尝试在 Caffe 的 Python 界面中运行它 我已经运行了命令make pycaffe在 caffe 目录中并且运行良好 现在 当我运行命令时import caffe在终端的 python 环境中 Ubuntu 14 04 我收
  • 使用 Caffe 没有提高 RMSprop、Adam、AdaDelta 测试精度

    I am finetuning using Caffe在图像数据集上Tesla K40 用一个batch size 47 solver type SGD base lr 0 001 lr policy step momentum 0 9 g
  • Caffe:如何通过代码获取`solver.prototxt`参数?

    我想访问solver prototxt参数如base lr 基础学习率 或weight decay来自Python代码 有什么方法可以从solver net目的 谢谢 根据本教程 http nbviewer jupyter org gith
  • 在 ubuntu 16.04 中安装 Caffe 时遇到困难

    操作系统 ubuntu 16 04 CUDA 7 5 库德恩 5 我正在关注this https github com BVLC caffe wiki Ubuntu 16 04 or 15 10 OpenCV 3 1 Installatio
  • Caffe/pyCaffe:设置所有 GPU

    是否可以为Caffe 尤其是pyCaffe 设置所有GPU 就像是 caffe train solver examples mnist lenet solver prototxt gpu all 这两个分支现在都支持多 GPU 一段时间了
  • caffe: **group** 参数是什么意思?

    我已阅读有关的文档group param group g 默认 1 如果 g gt 1 我们将每个过滤器的连接限制为输入的子集 具体地 将输入和输出通道分为g组 第i个输出组通道将仅与第i个输入组通道连接 但首先我不明白它们的确切含义 其次
  • Caffe:如果内存中只能容纳一小部分,我该怎么办?

    我正在尝试训练一个非常大的模型 因此 我只能将非常小的批量大小放入 GPU 内存中 处理小批量的结果非常噪声梯度估计 https stackoverflow com a 33717093 1714410 我该怎么做才能避免这个问题 您可以更
  • Caffe 中的预测 - 异常:输入 blob 参数与网络输入不匹配

    我使用 Caffe 使用非常简单的 CNN 结构对非图像数据进行分类 我在尺寸为 n x 1 x 156 x 12 的 HDF5 数据上训练网络没有任何问题 但是 我在对新数据进行分类时遇到了困难 如何在不进行任何预处理的情况下进行简单的前
  • 如何在 Caffe 中沿着通道分割 Blob

    我想在Caffe中分割Blob通道 这样我就可以分割一个Blob N c w h 分成两个大小相同的输出 Blob N c 2 w h 我上面描述的是非常笼统的 我实际上想做的是将一个两通道输入图像分离成两个不同的图像 一个进入卷积层 另一
  • 使用Python构建caffe(找不到-lboost_python3)

    我正在尝试用 python 构建 caffe 但它一直这样说 CXX LD o python caffe caffe so python caffe caffe cpp usr bin ld cannot find lboost pytho

随机推荐

  • 蓝桥杯每日一题2023.9.8

    蓝桥杯2023年第十四届省赛真题 飞机降落 C语言网 dotcpp com 题目描述 N 架飞机准备降落到某个只有一条跑道的机场 其中第 i 架飞机在 Ti 时刻到达机场上空 到达时它的剩余油料还可以继续盘旋 Di 个单位时间 即它最早 可
  • Learning Video Object Segmentation from Static Images

    Abstract 论文灵感来源于 实例分割和目标跟踪 特点 1 我们的模型在每帧的基础上进行 并由前一帧的输出导向下一帧中的关注对象 2 一个高度准确的视频目标分割可以用一个卷积神经网络并用静态的图片来训练 3 使用在线和离线的策略 前者产
  • 为什么那么多的人选择到Java培训机构学习

    目前IT行业Java编程是最炙手可热的技术 Java应用范围广泛 企业在大量招收Java人才 薪水也随之上涨 发展前景越来越好 因此现在有越来越多的人发现了这片美丽的新大陆 都正在拼命往里的挤 一些觉得Java培训机构费用贵的同学会选择自学
  • public Map kaoYanAllStation() { Map map = new HashMap<>(); ...

    首先 根据代码中的注释可以看出 该方法主要是获取各种气象数据 对其进行计算和比较 然后将结果存储在一个 Map 对象中返回 为了优化这段代码 可以考虑以下几个方面 减少重复代码 在代码中可以看到 获取历年同期降水和温度数据的代码几乎一模一样
  • LVS常用模式(DR、NAT、TUN)以及ldirector和keepalived

    1 LVS简单介绍 1 lvs定义LVS是Linux Virtual Server的简写 意即Linux虚拟服务器 是一个虚拟的服务器集群系统 LVS集群采用IP负载均衡技术和基于内容请求分发技术 调度器具有很好的吞吐率 将请求均衡地转移到
  • Java学习教程,Java从入门到精通,全套Java视频教程+笔记+配套工具

    目录 一 大纲 一 Java基础 二 计算机基础 三 工具的使用 四 数据库 五 web前端 六 JavaWeb 七 框架 八 互联网分布式技术 发现身边很多自学java却放弃的 真的挺可惜的 白白浪费了几个月宝贵的时间 且放弃一次 就会有
  • 第二十二章 Spring AOP⾥⾯的代理知识

    1 静态代理和动态代理 什么是代理 为某 个对象创建 个代理对象 程序不直接 原本的对象 是由创建的代理对象来控制对原对象 通过代理类这中间 层 能有效控制对委托类对象的直接访问 也可以很好地隐藏和保护委托类对象 同时也为实施不同控制策略预
  • 05-网络的四层协议和七层协议

    TCP IP网络分层模型 TCP IP的设计创造性的提出了分层的概念 把复杂的网络通信划分出多个层次 再为每一个层次分配不同的职责 层次内只专心做好自己的事情 用分而治之的思想把一个大麻烦拆分成了数个小麻烦 从而解决了网络的难题 TCP I
  • JAVA中的for循环使用方法

    一 循环结构 1 概念 在学习Java里的循环之前 我们先来了解一下到底什么是循环 以及循环的作用 我们先来看下面这张图 大家想一下 我们在400米的跑道上参加万米长跑 正常情况下要跑25圈 这25圈每一圈的跑步过程其实都是一样的 相当于是
  • springboot过滤器和拦截器

    一 过滤器和拦截器的区别 1 过滤器和拦截器触发时机不一样 过滤器是在请求进入容器后 但请求进入servlet之前进行预处理的 请求结束返回也是 是在servlet处理完后 返回给前端之前 2 拦截器可以获取IOC容器中的各个bean 而过
  • Volatility3内存取证工具使用详解

    Volatility 介绍 Volatility是一款开源的内存取证分析工具 是一款开源内存取证框架 能够对导出的内存镜像进行分析 通过获取内核数据结构 使用插件获取内存的详细情况以及系统的运行状态 支持Windows Linux MaC
  • org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder 找不到依赖包

    org springframework boot autoconfigure jdbc DataSourceBuilder 找不到依赖包 org springframework boot autoconfigure jdbc DataSou
  • PowerOJ2546: fork【C++ STL __gnu_cxx::rope】

    题目链接 我们可以这样定义一个可持久化数组 rope
  • MIPI TX控制器的设计

    MIPI接口在移动设备中被广泛应用 主要用于传输图像传感器 液晶显示器等外设的数据 以MIPI DPHY v1 2为例 它包含一个CLK lane和若干个DATA lane 可配置 每个lane的最高速率可达到2 5Gbps 对比SerDe
  • 向win7旗舰版U盘启动盘 添加usb3.0driver

    以前的主板usb采用的是ehci controller 仅支持usb2 0 而现在的主板一般采用xhci controller 同时支持usb2 0和usb3 0 win7的镜像安装包里面的驱动并没有xhci的驱动 所以在如今的很多新平台的
  • 怎么样对阿里云ECS主机进行绑定域名

    首先我有个阿里的 域名 虚拟云主机 搭建了一个wordpress 的网站 地址为 www liuxun name wordpress liuxun name wordpress 现在我想把一个阿里云的ECS主机 里面装了tomcat 希望以
  • GET请求里的body问题

    故事还得从一个bug说起 今天有人问我 为什么发到后端的请求400了 我说肯定是参数不对 你去检查检查GET POST之类的方法写没写对 要么就是字段没对上 无非是这几个问题 然后他说检查过了 没问题啊 我不太相信 但是看了看前端发送的请求
  • springmvc 03(JSR303和拦截器)

    目录 一 JSR303 1 服务端验证 2 步骤 二 拦截器 1 简介 2 拦截器与过滤器 2 1 什么是过滤器 2 2 拦截器和过滤器的区别 3 拦截器案例 3 1 使用原理 一 JSR303 1 服务端验证 2 步骤 1 导入pom x
  • 【数据结构】6.5 红黑树(C++)

    数据结构 6 5 红黑树 没有学过二叉搜索树 也叫二叉排序树或二叉查找树 的小伙伴们建议先学习一下 这样阅读会更轻松哦 点我学习二叉搜索树 目录 一 红黑树的概念和性质 二 红黑树的存储结构和声明 三 红黑树的构建过程 四 红黑树的实现 1
  • Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

    1 从https github com BVLC caffe 通过git clone下载caffe源码 master分支 版本号为09868ac git clone https github com BVLC caffe git 2 先使用