包含libopenblasvs2013的词条 |
您所在的位置:网站首页 › opencv_imgproc249dll › 包含libopenblasvs2013的词条 |
如何在VS2013中使用caffe接口
观察caffe-master的第三方程序包,这个与caffe-master本文件夹都需要加上去的。所以在属性表里,先后需要include以下这些:(路径请自行修改) D:\caffe-master\include D:\NugetPackages\boost.1.59.0.0\lib\native\include D:\NugetPackages\glog.0.3.3.0\build\native\include D:\NugetPackages\gflags.2.1.2.1\build\native\include D:\NugetPackages\protobuf-v120.2.6.1\build\native\include C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include D:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\include D:\caffe-master\include\caffe\layers D:\NugetPackages\OpenCV.2.4.10\build\native\include D:\NugetPackages\OpenCV.2.4.10\build\native\include\opencv D:\NugetPackages\OpenCV.2.4.10\build\native\include\opencv2 最后一项是CUDA的配置路径,找一下应该就可以找到。 那么我们的附加依赖项需要添加: libcaffe.lib libprotobuf.lib opencv_highgui2410.lib opencv_core2410.lib opencv_imgproc2410.lib libglog.lib gflags.lib libopenblas.dll.a hdf5.lib hdf5_hl.lib cublas.lib cublas_device.lib cuda.lib cudadevrt.lib cudnn.lib cudart.lib cufft.lib cudart_static.lib cufftw.lib cusparse.lib cusolver.lib curand.lib nppc.lib OpenCL.lib 对了,最后别忘了配置环境变量哟,配置完之后重启一遍: D:\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\dynamic\Lib D:\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\bin\x64 D:\NugetPackages\glog.0.3.3.0\build\native\bin\x64\v120\Release\dynamic D:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\bin\x64 D:\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\dynamic\Lib D:\NugetPackages\OpenCV.2.4.10\build\native\bin\x64\v120\Release D:\caffe-master\Build\x64\Release 那么在做完这些之后,我们就可以在新建工程里使用Caffe的接口了 [img]caffe windows10 vs2013怎么配置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 注意下载适合你的配置环境的boost版本即可。 下载完毕,双击运行安装文件即可。 2.2 Glog+Gflag+Protobuf+LevelDB+HDF5+LMDB+Openblas 这一部分的很多都是谷歌的开源库,不容易下载(你懂的)。所以我使用的是Neil Z. SHAO‘s Blog 提供的编译好的。 下载完,解压得到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)\include\opencv; $(OPENCV_2_49)\include\opencv2; $(BOOST_1_56) 项目——属性——链接器——常规——附加库目录 添加: $(CUDA_PATH_V6_5)\lib\$(PlatformName); $(OPENCV_2_49)\x64\vc12\lib; $(BOOST_1_56)\lib64-msvc-12.0; ..\3rdparty\lib; 项目——属性——链接器——输入——附加依赖项 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文件添加到工程中。 依次编译每一个*.cpp文件。 1.编译blob.cpp 直接编译时会报错,缺少文件”caffe\proto\caffe.pb.h” 这个时候需要将proto.exe放到../3rdparty/bin文件夹 将GernaratePB.bat放在../scripts文件夹 运行bat脚本文件即可生成caffe.pb.h 然后就可以成功编译。 2.编译common.cpp 直接编译这个文件,会出现关于getid和fopen_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文件都添加到项目中。 右键点击cu文件,修改属性。 在bnll_layer.cu文件,进行如下修改: float kBNLL_THRESHOLD = 50 —— #define kBNLL_THRESHOLD 50.0 依次编译所有的文件。 3.4.3 编译./src/util中的文件 将./src/util中所有的文件添加到项目 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下的编译已经完毕,接下来就可以使用它来训练自己的模型了。 如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口一、准备 需要用到的东西我已经帮大家全部准备好了,有2016年2月4日刚刚从caffe官方master分支fork过来的源代码。有我自己亲手制作的第三方库,在源码的根目录下建立个3rdparty文件夹,把文件解压进去就可以了。 解压好之后,要将3rdparty/bin文件夹添加到环境变量的PATH中,这样才能让程序找到这些第三方库的dll。 最后是CUDA和MKL了,MKL是可选的,大家可以去Intel官方申请,如果不用cpu模式的话其实也无所谓,在第三方库包中我还提供了openblas的库文件。 我使用的是CUDA 7.5版,建议大家也安装这个版本。 二、编译 编译非常简单,分为以下几步: 1、双击./src/caffe/proto/extract_proto.bat批处理文件来生成caffe.pb.h和caffe.pb.cc两个c++文件,和caffe_pb2.py这个Python使用的文件。 2、打开./buildVS2013/MainBuilder.sln,打开之后切换编译模式至Release X64模式。如果打开之后显示加载失败,可能你的CUDA版本和我的不一致,我的是CUDA 7.5版,这时就要用记事本打开./buildVS2013目录下各个文件夹内的.vcxproj文件,搜索CUDA 7.5,把这个7.5换成你自己的CUDA版本,就可以正常打开了。 另外,如果你的显卡比较老或者没有显卡,请使用./build_cpu_only/MainBuilder.sln。 3、点上边工具栏中的绿色三角编译吧。编译大概需要半小时左右,请耐心等待。 如果要用matlab wrapper来提取特征、观察训练好的权重的话呢,只需要把matcaffe项目里面的matlab目录修改成你自己的,然后编译,你就能从matlab/+caffe/private文件夹里面找到一个叫caffe_.mexw64的文件啦。 python的wrapper类似,把pycaffe项目里的python目录改成你自己的(我用的是Anaconda),就能在python/caffe文件夹中生成_caffe.pyd的python dll文件。 三、测试 到 下载已经转换好的MNIST的leveldb数据文件,解压至./examples/mnist文件夹中,然后运行根目录下的run_mnist.bat即可开始训练,训练日志会保存在./log文件夹中,以INFO开头,txt格式的日志文件中。 ps:如果你编译成功的话,不要忘了给我的github工程点个star! 四、旧更新日志 2015/02/25 微软制作了一个caffe的windows版,他们更加专业,做出来的solution更加容易维护,第三方库完全由Nuget进行管理,几乎不用配置什么东西 2015/12/09 我总结了一下比较常见的问题,写在 里,而且未来会持续更新,如果碰到问题请先查看这个FAQ列表。 2015/09/14 Caffe现在支持单机多GPU啦,直接在caffe命令后面加--gpu=all或--gpu=0,1 即可使用多个GPU进行训练。 如果使用多gpu训练,不要直接点cmd窗口的X,最好使用Ctrl+C来终止程序,不然显卡驱动有时候会崩溃。 还有如果要在训练中途存一个snapshot,可以用Ctrl+Break。 因此一个正常的终止训练的操作是: 先Ctrl+Break保存当前工作状态,然后Ctrl+C终止训练。 2015/08/18 lmdb现在已经可以使用了,不过磁盘必须是NTFS格式的才可以。有需要的请到下载,并覆盖掉3rdparty/lib 中同名的文件,然后右键各个工程-仅用于项目-仅链接 即可,无需重新生成。 2015/08/08 有很多人报告(包括我自己)cuDNN v3 的速度比v2慢很多,因此master分支被我回滚回v2版本了,所幸cuDNN向下兼容,所以无需再次下载第三方库。 2015/08/06 新版caffe-windows上线了,由于vs2012编译速度太慢,从这个版本开始,不再对vs2012提供支持。 2015/07/07 现在caffe也支持VS2013了,第三方库全部更新至最新版本。请从下载并替换掉原有的build文件夹,其他步骤与先前版本一致。如果发现bug,烦请反馈给我,留言或在github上提issue均可。 2015/06/07 添加Insanity Layer(即randomized leaky rectified linear units),我也不知道为什么叫Insanity。。论文上说效果比PReLU还好些。 2015/06/05 将Caffe版本更新至6月5日的master分支,与上一版最大的不同在于matlab接口更加丰富,cudnn更新至v2版,所以要重新下载第三方库。 2015/06/05 Batch Normalization更新至新版,现在的默认mnist测试文件即为使用了Batch Normalization层的版本。 2015/05/29 发现上个版本的lmdb.lib使用了别人在vs2013下编译的版本,现改为vs2012版; 2015/05/29 添加了提取任意层特征的matlab接口,使用方法: OUTPUT = caffe('get_features', INPUT, 'layername1,layername2...');11 例如:f = caffe('get_features', H, 'conv51,pool5'); 返回的f为2*1的cell类型,里面记录了层的名称和该层的特征。 现在有了更好的方法来获得每层特征,该函数不再更新。请参见新版matlab接口。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |