PS:心力憔悴,是不是windows下做开发都这么不友好,师兄说Linux下配caffe只要几行命令
PS:从12.26-12.28,总算林林总总的
贾扬清的访谈,里面提到了caffe名字的来源,哈哈哈,有意思 :
http://www.10tiao.com/html/579/201604/2685478534/1.html
windows下caffe配置
一、libcaffe的编译
libcaffe的编译,是为了生成caffe相关的库文件、可执行文件,可以在 caffe-master\Build\x64\Release 中查看
参考:https://blog.csdn.net/what_lei/article/details/77857117
1.修改属性文件
将 caffe-master\windows 下的 CommonSettings.props.example 重命名为 CommonSettings.props,并且修改相关内容
本来想支持python接口,但是提供的支持VS2013版本的caffe只支持python2.7,我之前只装了python3.5,就懒得再装一遍python2.7,本来也只想用C++的API
2.NuGet
NuGet是.NET平台的包管理工具,类似于python的pip(.NET是个平台,像Java虚拟机一样的一个平台,为支持的语言提供运行时的环境和开发环境)
NuGet可以理解为将Package从工程中 分离,帮助管理Package,真的很好用!
NuGet会自动下载第三方库,在 caffe-master 的平级目录下生成 NugetPackages,后面再说这个插件,真的是强大啊
caffe依赖库:https://blog.csdn.net/hqh45/article/details/51675104
3.无法打开输入文件“libcaffe.lib” 解决方法
https://blog.csdn.net/liyunlong111/article/details/70435143
二、caffe环境配置
自己新建一个解决方案,然后调用 libcaffe.lib,而不是在Caffe.sln解决方案里新建一个项目使用 开始以为新建项目的配置属性只要和 CommonSettings.props 一样就可以了,但是很奇怪的是,在这个属性文件里面没有关于 NugetPackages 第三方包相关路径的引用,这个地方卡了很久,后来看到 Caffe 的解决方案的每个项目下面都有 packages.config,这部分是和 NuGet
方法一:CommonSettings.props 添加 NugetPackages 中的第三方库和与caffe相关的库
算是最简单粗暴的方法,直接添加需要的头文件和库,我是参考了下面这个博主的,如果真的自己一个个去找,头文件和库文件,我怕是要疯了吧
http://abumaster.com/2017/04/18/Caffe%E7%9A%84C-%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8/
方法二:NuGet添加本地已下载的包,将其安装到现有的解决方案里
1.引入第三方包
工具——库程序包管理器——管理解决方案的NuGet程序包——设置(添加之前下载的 NugetPackages的路径)——安装所有的包
包引入后,会生成 packages.config 文件
2.引入caffe相关的库
将之前windows下的 CommonSettings.props
(1)头文件目录
caffe-master\include
caffe-master\include\caffe\proto
(2)附加库目录
caffe-master\Build\x64\Release
(3)附加依赖项
libcaffe.lib
3.解决了两天的报错
这个地方卡了一天多,刚开始想不明白有关的报错是,没有将hdf5相关的库链接,但是我明明用NuGet将 NugetPackages\hdf5-v120-complete.1.8.15.2 安装进了解决方案
解决方法一:又是简单粗暴的方法,将 hdf5-v120-complete.1.8.15.2 的头文件和库通过配置文件里引入,但是想不明白明明用NuGet安装了会报错,后面发现是NuGet的问题
解决方法二:这个真的是学到了,以前都不知道有这种操作,感叹一下NuGet功能强大
项目右键——生成依赖项——生成自定义——查找现有生成自定义项文件
然后发现没有hdf5这个选项,将自定义项文件 在NugetPackages\hdf5-v120-complete.1.8.15.2\build\native\hdf5-v120.targets 导入,激动人心的时刻到了,哈哈哈,再也不需要自己手动include,学到了学到了
而且还有一点就是,相应的dll在生成的时候,会自动导入可执行文件相应的目录下,后面发现,这也是targets里配置的
具体过程参考下面这篇博文:https://blog.csdn.net/junparadox/article/details/51086374