Caffe Windows版本的编译
2019独角兽企业重金招聘Python工程师标准>>>
1:Caffe的主版本只支持Linux,所以要下载专门的Caffe Windows版本,网址为
https://github.com/niuzhiheng/caffe
该版本需要的环境如下
1)Windows 64-bit
2)MS Visual Studio 2012
3)CUDA toolkit 6.5
4)Other dependencies which you can directly download from here.
2:下载VS2012和CUDA
1)VS2012,这个在百度云上一搜就能找到(似乎不区分64位还是32位的),以前用VS2010感觉还不错,除了出错时候堆栈乱七八糟外。VS2012的界面我觉得是瞎折腾。
2)CUDA 6.5下载地址https://developer.nvidia.com/cuda-downloads。虽然我的机器没有GPU,我想最多跑的慢点吧。直接安装,似乎没有太多问题。
3:用VS2012打开\build\MSVC目录下的MainBuilder.sln工程文件,选择”x64”,直接进行编译,提示错误:
error MSB3073: 命令“set origin_dir=í%
error MSB3073: cd ../../
error MSB3073: "./scripts/GeneratePB.bat"
error MSB3073: cd %origin_dir%
error MSB3073: :VCEnd”已退出,代码为 1。
查看错误位置,是预编译的命令错误()
查看“生成事件->预先生成事件->命令行”有如下的命令
set origin_dir=�%
cd ../../
"./scripts/GeneratePB.bat"
cd %origin_dir%
这个是控制默认路径以及执行GeneratePB.bat批处理文件。暂时先不执行该命令,所以在“在生成中使用”选择“否”。
4:继续进行编译,会发现缺少几个开源库,所以要对这些库进行下载。
这个项目使用多个第三方函数库,在原来网页https://github.com/niuzhiheng/caffe中提到的第三方库的下载链接,不知是否被墙了,怎么也下载不下来,所以只能根据编译的错误,缺哪个库就去下哪个库了。
1)boost函数库,下载地址是http://www.boost.org/。下载需要的版本库,这里用的是Version 1.55.0。
2)OpenCV,这个到官方下一个就好了,这里用的是2.43版本
3)OpenBlas,下载地址是http://www.openblas.net/。注意要下载64位的window版本,这里用的是OpenBLAS-v0.2.8-x86_64-Win.zip
4)glog是google的开源API,但是google是上不去的,所以在互联网上苦苦寻觅了半天,找到了http://sourceforge.net/projects/google-glog.mirror/,这是一个镜像的网址,这里可以下载glog-0.3.3.tar.gz。
5)leveldb,也是谷歌的开源库,下载地址也在google上,我有幸采用一个国外代理,下载了https://leveldb.googlecode.com/archive/windows.zip 中的windows版本,不过这个代理只成功干了这么一个活。
6)protobuf,也是谷歌的开源库,下载地址也在google上,这个也是费力不少,在百度云盘上找到一个版本:http://pan.baidu.com/s/1pJlZubT。
对所有的第三方库进行解压。
5:添加头文件include的目录
Caffe 工程默认所需要的第三方文件头都统一在3rdparty\include目录,根据编译出错提示,将第三方库的头文件拷贝到include目录,第三方文件头的目录为:
1)boost_1_55_0目录下的boost目录及子目录
2)\leveldb-windows\include下的leveldb目录
3)OpenBLAS-v0.2.8-x86_64-Win的include目录
4)glog-0.3.3\src\windows下的glog目录
5)protobuf-2.5.0\src下的google目录
6:继续编译,出现错误
fatal error C1083: 无法打开包括文件:“caffe/proto/caffe.pb.h”: No such file or directory。
查看\src\caffe\proto目录下只有两个文件“caffe_pretty_print.proto”和“caffe.proto”两个文件,没有caffe.pb.h 文件。
还记得在开始编译的时候有个预处理的批处理文件GeneratePB.bat没有执行吗,打开这个批处理文件,内容如下:
if exist "./src/caffe/proto/caffe.pb.h" (
echo caffe.pb.h remains the same as before
) else (
echo caffe.pb.h is being generated
"./tools/protoc" -I="./src/caffe/proto" --cpp_out="./src/caffe/proto" "./src/caffe/proto/caffe.proto"
)
很明显,这个批处理文件是用protoc工具从caffe.proto生成caffe.pb.h的。
好吧,不管怎样,目前还是可以通过手动执行解决这个问题的。
7:编译protobuf-2.5.0
打开protobuf-2.5.0\vsprojects的protobuf.sln工程,选择“x64”进行编译。编译显示成功 5 个,失败 2个,不管失败的,因为毕竟我们不使用失败的文件。
将生成的protoc.exe文件拷贝到\src\caffe\proto目录
用命令行方式进入\src\caffe\proto目录,
仿照批处理文件,执行命令
protoc --cpp_out="." caffe.proto
于是生成了“caffe.pb.h”和“caffe.pb.cc”文件,
8:继续编译,出现错误,无法打开文件“leveldbd.lib”,这是需要levedb的lib库了。
leveldb-windows版本需要自己创建工程并生成leveldbd.lib文件。具体参见“Leveldb windows 编译”。如果建立的工程名字为leveldb则生成的是leveldb.lib,需要手动改为leveldbd.lib。编译leveldb-windows的时候一定选择x64编译选项。将leveldb.lib拷贝到\3rdparty\lib目录中。
9:继续编译,出现错误:无法打开文件“libboost_date_time-vc110-mt-gd-1_55.lib”。这是需要boost的x64版本的lib库了。libboost的编译参看“Boost windows x64版本编译”。另外编译出来的lib库名字前少了lib三个字符,例如编译出来的是“boost_filesystem-vc110-mt-gd-1_55”,而缺少的是“libboost_filesystem-vc110-mt-gd-1_55”,可以直接将文件名添加上“lib”字符,修改为需要的文件名。将需要的boost的lib拷贝到\3rdparty\lib目录中。
10:从protobuf-2.5.0的目录中,直接找到libprotobuf.lib改为libprotobufd.lib,拷贝到\3rdparty\lib目录中。
11:glog x64编译。编译glog-0.3.3 的google-glog.sln工程,出现错误:
error C4235: 使用了非标准扩展: 不支持在此结构上使用“_asm”关键字
可以简单粗暴的注掉这行语句 //_asm int 3。将生成的64位lib拷贝到\3rdparty\lib目录中。
12:继续编译,出现错误:
LINK : fatal error LNK1104: 无法打开文件
“../../3rdparty/lib/opencv_coreCV_VERSION_EPOCHCV_VERSION_MAJORCV_VERSION_MINORd.lib”
这是一个很神奇和诡异的lib文件,opencv不存在这样的库,那么需要搜索这个编译项是怎么生成的。搜索到\include下的opencvlib.h文件,有如下的宏定义
#define OPENCV_VERSION CVAUX_STR(CV_VERSION_EPOCH) CVAUX_STR(CV_VERSION_MAJOR) CVAUX_STR(CV_VERSION_MINOR)
#define OPENCV_LIB_PREFIX(module) "../../3rdparty/lib/" "opencv_" #module OPENCV_VERSION
这里的宏定义需要修改,我用的是2.43版本,所以需要增加定义
#define CV_VERSION_EPOCH 2
#define CV_VERSION_MAJOR 4
#define CV_VERSION_MINOR 3
13:拷贝opencv目录build\x64\vc10\lib的所有需要的lib到\3rdparty\lib目录中。
14:继续编译,出现错误
error MSB3073: 命令“copy ..\..\3rdparty\bin\opencv_core* ..\..\bin\
也是先关闭这个自动执行的选项,“属性”->“生成事件”->“后期生成时间”->“在生成中使用”->选择“否”。
手动拷贝这几个dll文件到\bin目录中。
15:现在可以编译出exe文件了,点击运行,出现错误:
无法启动程序,因为计算机中丢失libgfortran-3.dll。不管它是什么库了,网上搜一个现成的好了,
http://cgg.mff.cuni.cz/trac/morpho/browser/trunk/lib/Lapack/x86-64/libgfortran-3.dll?desc=1
将dll文件到\bin目录中。
16:运行时出现错误:
无法启动程序,因为计算机中丢失libquadmath-0.dll。网上搜一个现成的,
http://cgg.mff.cuni.cz/trac/morpho/browser/trunk/lib/Arpack/x64/libquadmath-0.dll?rev=
将dll文件到\bin目录中。
17:还是类似错误:
无法启动程序,因为计算机中丢失libgcc_s_sjlj-1.dll。网上搜一个现成的,
http://www.jb51.net/dll/libgcc_s_sjlj-1.dll.html#down
将dll文件到\bin目录中。
18:最后dll文件,lib文件,include(opencv的include另行添加)目录的结果如下:
\bin目录
boost_chrono-vc110-mt-gd-1_55.dll
boost_date_time-vc110-mt-gd-1_55.dll
boost_filesystem-vc110-mt-gd-1_55.dll
boost_system-vc110-mt-gd-1_55.dll
boost_thread-vc110-mt-gd-1_55.dll
libgcc_s_sjlj-1.dll
libgfortran-3.dll
libglog.dll
libopenblas.dll
libquadmath-0.dll
MainCaller.exe
MainCaller.ilk
MainCaller.pdb
opencv_core243d.dll
opencv_highgui243d.dll
opencv_imgproc243d.dll
opencv_objdetect243d.dll
\3rdparty\include目录
boost
glog
leveldb
openblas
\3rdparty\lib目录
leveldbd.lib
libboost_chrono-vc110-mt-gd-1_55.lib
libboost_date_time-vc110-mt-gd-1_55.lib
libboost_filesystem-vc110-mt-gd-1_55.lib
libboost_system-vc110-mt-gd-1_55.lib
libboost_thread-vc110-mt-gd-1_55.lib
libglog.lib
libopenblas.lib
libprotobufd.lib
opencv_core243d.lib
opencv_highgui243d.lib
opencv_imgproc243d.lib
opencv_legacy243d.lib
opencv_objdetect243d.lib
19:编译出完全正确的版本之后,根据使用说明来验证一下版本正确性。
Suppose you choose to build train_net.cpp which is the default one in MainCaller.cpp
If you do not have GPU, please change it to CPU in lenet_solver.prototxt
Goto directory ./examples/mnist
Double click get_mnist_leveldb.bat to download the dataset in leveldb format.
Double click train_lenet.bat to see the training progress .
20:小结
每次都觉得是见证奇迹的时刻,每次都出现错误,饱受折磨,有时候会编译了默认的32位版本。相信肯定有更好的方法来编译和解决这些问题,但是对于初用的人员来说,不管三七二十一,先编译成功使用起来才是王道,其他的问题慢慢再领会和吸收吧。
转载于:https://my.oschina.net/lilinzero/blog/812703
Caffe Windows版本的编译相关推荐
- caffe windows 学习第一步:编译和安装(vs2012+win 64)
转载自:http://www.cnblogs.com/denny402/p/5041060.html 没有GPU,没有linux, 只好装caffe的windows版本了. 我的系统是win10(64 ...
- Caffe(CPU-only)版本在windows下的安装及配置
参考文章 win7 + Caffe CPU版本安装 Caffe初体验之Caffe-Windows的配置(CPU/GPU)与Mnist数据集测试 win10下装caffe的cpu版本详解 Windows ...
- 开源终端上网行为管理服务器windows版本包的编译及运行环境搭建
前面几篇文章主要介绍开源终端上网行为管理服务器的编译与部分代码解讯,这里主要介绍下这个开源服务器的搭建过程,分别从环境的要求,服务的启动与一些基本配置来说明 1.从https://github.com ...
- Windows 上通过 Gitee 搭建 ESP-Who Master 版本的编译环境
说明:针对国内客户网络环境受限问题,请通过 Espressif Gitee 代码管理仓库来克隆 esp-who SDK 注意:esp-who master 版本需基于 esp-idf release/ ...
- 最新版本webrtc源代码在windows上的编译方法
http://blog.csdn.net/choday/article/details/19978427 分类: webrtc 2014-02-26 14:34 1893人阅读 评论(8) 收藏 举报 ...
- [Happy Coding] 加速Windows GUI debug版本的编译
加速Windows GUI debug版本的编译 1. 问题描述 我们重构我们的GUI程序时,增加了很多小的工程库,VC2008编译GUI最顶层DLL库libpkgA的速度让人几乎无法忍受. 以下是从 ...
- libreoffice 01 windows 版本编译
01 基本信息 目前office开源版本主流是 libreoffice.其前身是openoffice. 官网:https://zh-cn.libreoffice.org/ wiki: https:// ...
- WebRTC:如何编译Windows版本的WebRTC(M66)
我主要做安卓上的WebRTC,然而为了读懂源码,不得不使用PC版本来调试源码.so... 环境: Windows 10,Visual Studio 2017(企业版),Python,depot_too ...
- Windows下Caffe-SSD编译
1.下载Windows版本的Caffe-SSD源码 下载链接: https://github.com/conner99/caffe ,选择ssd-microsoft 分支: 2.编译caffe ...
最新文章
- 只用一张图+相机走位,AI就能脑补周围环境,来自华人团队 | CVPR2022
- linux中GIT组件,GitLab在Linux下安装
- Oracle查询优化-01单表查询
- sqlserver 更新 datetime 数据_获取股票分笔数据存储本地
- Java:switch语句例子
- H5工程师跨页面取值的几种方法
- mysql 字符设置与修改
- osm数据下载 python_GIS Experience (十):OSM数据获取
- vue 子级拿值_Vue 父组件主动获取子组件的值,子组件主动获取父组件的值
- JAVA-WEB-错误之-'OPTION SQL_SELECT_LIMIT=DEFAULT'
- 带小手的文档怎么复制
- 嵌套DIV中的onClick事件在嵌套容器中的连环作用
- java数据库连接access_java连接Access数据库的方法
- 计算机网络(第七版)部分课后习题含答案
- 产品经理如何写出一看就想约的简历
- 【博客分享】优秀的有趣的博客
- 报错:for..in loops iterate over the entire prototype chain, which is virtually never what you want.
- css3动画 --- transform属性值:旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix
- Allegro在PCB中区域规则设置方法
- 华为鸿蒙系统8月开源,华为正式宣布,鸿蒙系统8月开源,任正非却说:优先选用安卓...
热门文章
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...
- 火狐产品主管称:不值得开发Windows RT浏览器
- 在winform程序里实现最小化隐藏到windows右下角
- MVC 中使用bootstrap-select 基础使用方法
- Linux上Core Dump文件的形成和分析
- Android上的MVP:如何组织显示层的内容
- VB6 调用 Nim 生成的 DLL
- ubuntu 客户端ssh连接服务器速度缓慢
- java数组简单介绍以及其方法
- socket-accept