【caffe-Windows】添加工程-以classification为例(2017-04-11)
来源:互联网 发布:office word 2016 mac 编辑:程序博客网 时间:2024/06/11 01:08
转自:http://blog.csdn.net/zb1165048017/article/details/70116323(2017-04-11)
版权声明:欢迎大家一起交流,有错误谢谢指正~~~多句嘴,不要复制代码,因为CSDN排版问题,有些东西会自动加入乱糟糟的字符,最好是自己手写代码。格外注意被“踩”的博客,可能有很大问题,请自行查找大牛们的教程,以免被误导。
目录(?)[+]
前言
兴趣所向,研究一下如何在caffe工程之外建立一个属于自己的工程,这里以分类为例,将classification.cpp提取出来,然后调用相应的三方库和libcaffe.lib进行编译。这里比较建议有一丢丢C++功底的同志参考学习,主要涉及到利用VS新建工程,添加lib库文件,包含头文件,解决dll丢失问题。看完博客可以学会,如何不在复制别人的各种路径的情况下,依据caffe-windows自行为新建的工程设置调用caffe的路径。
国际惯例,贴一堆网址:
caffe下新建工程及编译
caffe-window搭建自己的小项目例子
使用libcaffe为工程添加深度学习功能
利用caffe建立自己的工程
caffe C++接口使用配置
caffe框架在添加自己的MFC程序(上)
文章结束提供本文编译所用代码。
做这次笔记主要是,网上找的方法都有复杂的各种路径的添加,包括上面的各个参考博客,各种lib,不可能每次新建项目我都要打开别人博客,然后把所有的lib文件复制下来。在编译caffe-windows的时候,大家肯定发现这样一个问题:我没有手动加任何路径,只需要它自动下载NugetPackages三方库,然后就能编译了。这就说明在某个地方肯定定义过路径了,编译时候直接调用。这就启发我们找到它,按照它 就可以在不看任何博客情况下独立编写路径信息。
【注】方法严格建立在BVLC或者微软的caffe-Windows能够正常使用的情况下,由于C++还不熟练,直接以classification.cpp为例。
建立新工程
创建项目
随便在磁盘某个地方新建一个空文件夹,用于存储我们所要新建的工程。
打开VS2013,新建一个工程,记得选空项目
添加源代码信息
- 源文件->添加->新建项->classification.cpp
- 将caffe-windows路径(E:\CaffeDev\caffe-master\examples\cpp_classification)里面的classification.cpp的内容拷贝,丢到新建的工程中的classification.cpp中去
- 看看配置管理器是什么,如果是Win32,就改成X64,最好是release
这就算是搞定了工程的创建,与我们写控制台helloword的步骤完全一样。接下来就是解决各种编译错误了。
逐步解决错误
caffe头文件
首先引入眼帘的是
解决方法:加头文件,把caffe-windows的include文件夹整体拷贝过来,我是放入到sln并列的地方了,这个路径与后面要加的路径要对应,这是后话
拷贝完毕,就去设置头文件的包含目录
三方库头文件
然后出现了更多的错误
不要慌,这个地方就是与网上的解决方法的不同之处了,当然你也可以按照前言中的博客配置。我这里主要是应对没有联网的,无法打开别人博客复制路径的情况。
观察原始caffe-Windows下E:\CaffeDev\caffe-master\windows下的任何一个工程,比如compute_image_mean文件夹下的compute_image_mean.vcxproj,有兴趣可以搜一下这个vcxproj的文件包含什么信息,答案是路径。那么我们就利用这里面的路径去设置自己工程的路径了,当然首先是把NugetPackages的三方库拷贝到当前工程下,路径自定,我的路径如下
然后加入路径的方法就在我们的E:\caffe-myproject\my_classification\my_classification\my_classification.vcxproj中了,我这里是对比着原始caffe的compute_image_mean.vcxproj和当前工程的my_classification.vcxproj修改的。我就不分析了,直接把关键点列出来:
【注意】以下步骤与路径关系很大,../是跳转一个目录,起始位置是vcxproj所在当前文件夹。
- 首先是三个props
- 1
- 2
- 3
- 1
- 2
- 3
随后是CommonSettings.props
如果不加入CommonSettings.props,会在后面提示OpenCV未启用问题,为了方便,直接把caffe-windows的拷贝CommonSettings.props过来使用
- 1
- 2
- 3
- 1
- 2
- 3
- 然后是libcaffe.lib
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 最后是所有的NugetPackage的头文件相关文件包含
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
这几步很容易遇到这样的问题
提示很明显了,看看第77行对应的 少了对应的 ,加上即可。
cuda相关头文件
编译运行发现出现下列错误
这个一看就可能是cuda的问题了,文件可以在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include中找到,当然不同的安装位置由不同的路径寻找,相同的是这个文件一定存在。加入到VS路径中,操作同上面加caffe的include一样,注意红线部分
拷贝libcaffe
最后一个问题是
原因很简单,因为我们上面只加了libcaffe.lib的路径,并没有指引它所在地方,这个就与你的VS功底有关了,详细请看“如何调用C++的dll与lib文件”相关博客。我们这里直接把原始的caffe-windows下的release版本的libcaffe.lib拷贝到新建文件夹lib中去,路径如下
拷贝进去以后,在VS中加入lib所在目录
编译工程
上述步骤都搞定以后,重新生成我们的工程
然后设置一下将警告视为错误为否
然后就看到了满意的结果啦
解决dll相关问题
有时候会遇到这个问题,有时候不会遇到,可以先直接跳过此步骤,直接进行分类使用步骤,如果出现dll缺失问题,再回来添加dll。
方案1
当前编译了不一定能运行,还有dll没拷贝呢,网上博客说dll的使用方法是,将dll拷贝到一个文件夹,比如将caffe-windows的release下的所有dll全部拷贝到我们工程的如下新建文件夹中
然后在VS中
但是设置完毕以后,还是提示缺少dll,以后再试试,是不是哪里出问题了
方案2
跟前面一样,把编译的caffe-windows下的release文件夹加入到系统环境变量path中去,不再赘述,因为前面的caffe-Windows配置好像有过这个步骤,就是单纯的将E:\CaffeDev\caffe-master\Build\x64\Release加入path,仅此而已。
方案3
最简单粗暴的方法,上面编译工程完事以后,可以发现我们的工程多了个build文件夹,那么把所有的dll拷贝到E:\caffe-myproject\Build\x64\Release即可,如果你发现这个文件夹中有dll,就不用拷贝了,应该不会提示缺dll的问题,如果还是提示,那就拷贝吧,如果还是不行,自行百度。
分类使用
准备相关文件
使用方法就是先将所有的文件准备好
分别是待分类图片、模型结构、训练好的模型参数、均值、标签。前面cifar的模型建立和使用都介绍过这些东西的生成方法。
【注】按照上述方法完全不会出问题,最好最好是在原始的caffe-windows的基础下操作,如果是自己改动的caffe-windows的话,可能会出现一些不必要的问题。
运行方法-bat形式
老样子,直接写bat文件:
- 1
- 2
- 1
- 2
运行出错
- 1
- 2
- 3
- 1
- 2
- 3
此博客【边喝caffee边Caffe 】(三) Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type有讲解为什么,那么就直接按照方法,建立一个head.h
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
然后在classification.cpp头部引用一下,注意是双引号而非尖括号引用,以有智能提示为基准
- 1
- 1
重新编译以后,然后运行bat的结果:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
运行方法-修改cpp方法
改一下main函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
然后ctrl+F5运行结果
后记
一定要不断编译、不断尝试、不断查错、不断修改,此外熟能生巧。还有两点强调:路径路径路径、原版caffe原版caffe原版caffe
编译方法多种多样,上述步骤肯定有不必要的地方,后期逐步修改
第一次尝试编译的代码
链接:http://pan.baidu.com/s/1i5vBPaP 密码:x7ee
第二次尝试编译的代码
链接:http://pan.baidu.com/s/1skIfYkH 密码:w69a
主要相对于第一次编译的代码,删除了部分冗余的文件,也就是不从原版的caffe-Windows拷贝的东西,包括:- CommonSettings.targets,在my_classification.vcxproj中不需要添加的话语是
- 1
- 2
- 3
- 1
- 2
- 3
- 下面这句话删除也没影响
- 1
- 2
- 3
- 1
- 2
- 3
- 顶
- 【caffe-Windows】添加工程-以classification为例(2017-04-11)
- 【caffe-Windows】添加工程-以classification为例
- 【caffe-Windows】caffe在Windows下训练深度学习网络并测试(以mnist为例)
- Caffe框架编译classification工程
- 【caffe-Windows】以mnist为例lmdb格式数据
- Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)
- caffe-windows添加自己的工程
- caffe中添加自己的layer(以triplet loss为例)
- Linux添加用户(以Ubuntu12.04为例)
- windows caffe 添加UpsampleLayer BNLayer以支持SegNet网络结构
- 训练参数解析-以caffe为例
- 【caffe-Windows】以mnist为例的hdf5单标签处理——matlab实现
- Caffe实战系列:最简洁的Caffe安装教程(以ubuntu14.04为例)
- 并查集(以hdu1232 畅通工程为例)
- ubuntu eclipse下生成caffe的C/C++ classification工程
- 接上篇 【caffe-Windows】mnist实例编译之model的使用-classification(2016-08-16)
- Windows下bat文件创建和运行(以caffe的train.bat和createData.bat为例)
- NFS功能的添加(本篇以路由为例)
- 解决图片错位的问题
- HDU2629 Identity Card
- 第七章表单校验
- GeoJson格式与转换(shapefile)Geotools
- java-IO流5(输入字符流)
- 【caffe-Windows】添加工程-以classification为例(2017-04-11)
- 数据库对接接口存储过程
- C#之数值
- 工具
- jq使用文本输入提示的方式验证贵美网站的注册
- Selenium-grid2 远程并发控制用例执行
- 持久化、DAO
- JSON和XML比较
- unit6~~文本处理工具