zoukankan      html  css  js  c++  java
  • windows+caffe+vs2013+cuda6.5配置记录

    隔了大半年,因为论文的需要,又重新开始研究caffe。感谢niuzhiheng’s GitHub大神的贡献,caffe已经可以在Windows下使用了。参考了很多大神的博客,成功的在自己的笔记本配置好了Windows版本的caffe。现将自己的配置过程和配置中遇到的问题记录下来,希望能对大家有所帮助。

    1.配置环境

    我在自己的笔记本配置的caffe,配置的环境为:Windows 7 64位 + cuda6.5 + Opencv2.49 + VS2013。假设在配置caffe之前,你已经准备好这些。

    本文中将给出一些编译好的依赖库,如果你也是用的Windows 7 64位+VS2013,可以直接使用。

    2.准备依赖库

    在Windows下配置caffe,一个很主要的问题就是依赖库的编译。不像在Ubuntu下那么方便,在Windows下,依赖库都需要使用vs2013进行编译才能使用。下面我将介绍caffe需要的依赖库(如果你也是win7 64位+VS2013,可以直接使用我提供的依赖库)。

    2.1 boost

    boost可以下载源码进行编译,也可以直接下载安装文件。我使用的是后者,方便、快捷。

    我使用的是:boost_1.56_0-msvc-12.0-64.exe

    下载地址:http://sourceforge.net/projects/boost/files/boost-binaries/1.56.0/

    注意下载适合你的配置环境的boost版本即可。

    下载完毕,双击运行安装文件即可。

    2.2 Glog+Gflag+Protobuf+LevelDB+HDF5+LMDB+Openblas

    这一部分的很多都是谷歌的开源库,不容易下载(你懂的)。所以我使用的是Neil Z. SHAO's Blog

    提供的编译好的。由于大神给的地址是谷歌网盘,不容易下载。我将它转至百度盘。

    下载地址:http://pan.baidu.com/s/1mg1iJrE

    下载完,解压得到3rdparty文件夹。在下一段将会用到。

    3.建立caffe工程

    准备好了caffe需要的依赖库和环境之后,下面就可以建立caffe的vs项目,进行编译了。

    3.1 下载caffe源码

    可以从caffe的github主页下载源码。

    下载地址:Caffe’s GitHub

    解压文件,假设caffe源码所在目录为CAFFE_ROOT。

    3.2 准备项目需要的依赖库和系统环境变量

    经过上一阶段的准备,caffe项目所需的依赖库都已经准备好。

    1.首先设置系统环境变量(以我的为例):

    CUDA_PATH_V6_5 安装好cuda6.5之后,会自动添加环境变量CUDA_PATH_V6_5

    OPENCV_2_49 D:/Tools/opencv2.49/build/

    BOOST_1_56 D:/Tools/boost_1_56_0

    2.将3rdparty文件夹放到CAFFE_ROOT

    3.3 用vs建立caffe项目

    1.用VS2013在CAFFE_ROOT下建立 win32 console application,选择空项目。

    将项目的平台由32位改为64位

    2.修改项目属性

    项目——属性——C/C++——常规——附加包含目录

    添加:

    ../include;

    ../src;

    ../3rdparty/include;

    ../3rdparty;

    ../3rdparty/include;

    ../3rdparty/include/openblas;

    ../3rdparty/include/hdf5;

    ../3rdparty/include/lmdb;

    ../3rdparty/include/leveldb;

    ../3rdparty/include/gflag;

    ../3rdparty/include/glog;

    ../3rdparty/include/google/protobuf;

    项目——属相——VC++目录——包含目录

    添加:

    $(CUDA_PATH_V6_5)include;

    $(OPENCV_2_49)include;

    $(OPENCV_2_49)includeopencv;

    $(OPENCV_2_49)includeopencv2;

    $(BOOST_1_56)

    项目——属性——链接器——常规——附加库目录

    添加:

    $(CUDA_PATH_V6_5)lib$(PlatformName);

    $(OPENCV_2_49)x64vc12lib;

    $(BOOST_1_56)lib64-msvc-12.0;

    ..3rdpartylib;

    项目——属性——链接器——输入——附加依赖项

    debug添加:

    opencv_ml249d.lib
    opencv_calib3d249d.lib
    opencv_contrib249d.lib
    opencv_core249d.lib
    opencv_features2d249d.lib
    opencv_flann249d.lib
    opencv_gpu249d.lib
    opencv_highgui249d.lib
    opencv_imgproc249d.lib
    opencv_legacy249d.lib
    opencv_objdetect249d.lib
    opencv_ts249d.lib
    opencv_video249d.lib
    opencv_nonfree249d.lib
    opencv_ocl249d.lib
    opencv_photo249d.lib
    opencv_stitching249d.lib
    opencv_superres249d.lib
    opencv_videostab249d.lib
    cudart.lib
    cuda.lib
    nppi.lib
    cufft.lib
    cublas.lib
    curand.lib
    gflagsd.lib
    libglog.lib
    libopenblas.dll.a
    libprotobufd.lib
    libprotoc.lib
    leveldbd.lib
    lmdbd.lib
    libhdf5_D.lib
    libhdf5_hl_D.lib
    Shlwapi.lib
    gflags.lib
    libprotobuf.lib
    leveldb.lib
    lmdb.lib
    libhdf5.lib
    libhdf5_hl.lib

    release添加:

    opencv_ml249.lib
    opencv_calib3d249.lib
    opencv_contrib249.lib
    opencv_core249.lib
    opencv_features2d249.lib
    opencv_flann249.lib
    opencv_gpu249.lib
    opencv_highgui249.lib
    opencv_imgproc249.lib
    opencv_legacy249.lib
    opencv_objdetect249.lib
    opencv_ts249.lib
    opencv_video249.lib
    opencv_nonfree249.lib
    opencv_ocl249.lib
    opencv_photo249.lib
    opencv_stitching249.lib
    opencv_superres249.lib
    opencv_videostab249.lib
    cudart.lib
    cuda.lib
    nppi.lib
    cufft.lib
    cublas.lib
    curand.lib
    gflags.lib
    libglog.lib
    libopenblas.dll.a
    libprotobuf.lib
    libprotoc.lib
    leveldb.lib
    lmdb.lib
    libhdf5.lib
    libhdf5_hl.lib
    Shlwapi.lib

    3.4 编译caffe

    配置好caffe项目的属性之后,下面就可以一步一步的编译caffe了。

    3.4.1 编译./src中的文件

    首先,将../src文件夹中的*.cpp文件添加到工程中。

    QQ图片20150607220014

    依次编译每一个*.cpp文件。

    1.编译blob.cpp

    直接编译时会报错,缺少文件”caffeprotocaffe.pb.h”

    这个时候需要将proto.exe放到../3rdparty/bin文件夹

    将GernaratePB.bat放在../scripts文件夹

    下载地址:http://pan.baidu.com/s/1pJ7Onph

    运行bat脚本文件即可生成caffe.pb.h

    然后就可以成功编译。

    2.编译common.cpp

    直接编译这个文件,会出现关于getidfopen_s的错误。可通过如下步骤修改:

    在代码前面添加:#include <process.h>

    修改项目属性:项目——属性——C/C++——预处理器——预处理器定义

    添加:_CRT_SECURE_NO_WARNINGS

    在代码中getid的位置进行如下修改:

    #ifdef _MSC_VER

    pid = getid();

    #else

    pid = _getid();

    #endf

    修改完毕之后,可以成功编译。

    3.编译net.cpp

    直接编译这个文件,会出现关于mkstep、close、mkdtemp的错误。需要进行如下修改:

    在io.hpp头文件中添加:#include “mkstep.h”

    在io.hpp头文件中,在close()的位置进行如下修改:

    #ifdef _MSC_VER

    close(fd);

    #else

    _close(fd);

    #endif

    在mkdtemp的位置进行如下修改:

    #ifndef _MSC_VER

    char* mkdtemp_result = mkdtemp(temp_dirname_cstr);

    #else

    errno_t mkdtemp_result = _mktemp_s(temp_dirname_cstr, sizeof(temp_dirname_cstr));

    #endif

    修改完毕,可以成功编译。

    4.编译solver.cpp

    直接编译会出现关于snprintf的错误,需要进行如下修改:

    #ifdef _MSC_VER

    #define snprinf sprintf_s

    #endif

    修改完毕,可以成功编译。

    5.其他剩余的cpp文件也依次编译

    3.4.2 编译./src/layers中的文件

    将./src/layers中的所有的cpp和cu文件都添加到项目中。

    QQ图片20150608154944

    右键点击cu文件,修改属性。

    QQ图片20150608155140

    在bnll_layer.cu文件,进行如下修改:

    float kBNLL_THRESHOLD = 50 ——> #define kBNLL_THRESHOLD 50.0

    依次编译所有的文件。

    3.4.3 编译./src/util中的文件

    将./src/util中所有的文件添加到项目

    QQ图片20150608155946

    1.在io.cpp中

    修改ReadProtoFromBinaryFile函数

    O_RDONLY  ——> O_RDONLY | O_BINARY

    在代码中进行如下修改:

    #ifdef _MSC_VER

    #define open _open

    #endif

    将close()改为_close()

    2.在math_functions.cpp中

    做如下修改:

    #define __builtin_popcount __popcnt

    #define __builtin_popcountl __popcnt

    3.在db.cpp中

    作如下修改:

    #ifdef _MSC_VER

    #include <direct.h>

    #endif

    修改CHECK_EQ

    #ifdef _MSC_VER

    CHECK_EQ(_mkdir(source.c_str()),0)<<”mkdir”<<source<<”failed”;

    #else

    CHECK_EQ(mkdir(source.c_str(),0744),0)<<”mkidr”<<source<<”failed”;

    #endif

    4.依次编译其他文件

    3.4.4 编译./src/proto中的文件

    参照上一步,将proto中的文件都添加到项目。

    修改属性:

    项目——属性——C/C++——预处理器——预处理器定义

    添加:_SCL_SECURE_NO_WARNINGS

    编译所有文件。

    3.4.5 编译./tools中的文件

    本文件夹下有多个cpp文件,通过它们的名字就可以知道相应的功能。添加不同的cpp文件到项目中,然后生成项目,就可以得到不同功能的exe文件。

    将caffe.cpp添加到工程,生成项目,得到caffe.exe文件,可用于训练模型

    将computer_image_mean.cpp添加到工程,生成项目,得到的exe文件可用于将训练样本转换为caffe使用的leveldb/lmdb数据集。

    依次类推。

    自此,caffe在Windows下的编译已经完毕,接下来就可以使用它来训练自己的模型了。

    最后,本文主要参考Neil Z. SHAO's Blog,感谢博主的贡献。

  • 相关阅读:
    LintCode: Convert Sorted Array to Binary Search Tree With Minimal Height
    LNMP企业应用部署全过程(基于DEDE后台)
    提高Web服务器并发响应的经历
    提高Web服务器并发响应的经历
    提高Web服务器并发响应的经历
    提高Web服务器并发响应的经历
    华为设备RIP实施和理论详解
    华为设备RIP实施和理论详解
    MySQL 官方 Docker 镜像的使用
    Docker之docker设置系统的环境变量
  • 原文地址:https://www.cnblogs.com/fische/p/4561485.html
Copyright © 2011-2022 走看看