Win10 +VS2017+ python3.66 + CUDA9.2 + cuDNNv7.2.1 +微软版pycaffe编译
Win10 +VS2017+ python3.66 + CUDA9.2 + cuDNNv7.2.1 +微软版pycaffe编译
需要准备的文件:
1,VS2017,这个不再赘述
2,Windows版的caffe,微软链接为 https://github.com/Microsoft/caffe
BVLC官方链接为https://github.com/BVLC/caffe/tree/windows
安装过程:
1,将下载的caffe-windows.zip进行解压,并进入其根目录下的windows目录,(eg:D:\MS-caffe-master)。将该目录下的CommonSettings.props.example复制一个并改名为CommonSettings.props,同样还是放在当前目录下。
2,点击打开该CommonSettings.props,这里由于本人的需要,对matcaffe,和pycaffe都进行了安装,实际操作的童鞋可以根据自己的需要进行选择。(要安装matcaffe必须首先安装matlab,安装步骤不在赘述,要安装pycaffe需要首先安装python,可以参考该链接http://blog.****.net/qq_14845119/article/details/52354394)相应的修改如下所示。其中,右边为原始的CommonSettings.props.example,左边为需要修改并保存的的CommonSettings.props。
cpu模式的配置:
gpu模式的配置:
注意,CudaVersion修改为自己电脑的cuda版本(本人电脑的cuda为9.2版本)。
同时注意,由于GPU库除了使用cublas等cuda库之外,还用到了cudnn,默认安装驱动是不安装这个的,因此,需要去官网https://developer.nvidia.com/cudnn下载(需要注册)。下载完成后,进行解压,将相应的bin,include,lib分别放于自己的cuda下面的相应目录中,例如,本人电脑的cuda目录为C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v9.2,因此,将刚才解压的文件放在这个目录下面的bin,include,lib文件夹下。
详见 https://blog.****.net/qq_41895190/article/details/82413743 Win10 +VS2017+ python3.66 + CUDA9.2 + cuDNNv7.2.1 + tensorflow-gpu 1.10.0 最新版
3,点击D:\MS-caffe-master该目录下的Caffe.sln用VS2017或VS2015打开。
以下为VS2017的设置。
点击"单个组件" -> "编译器、生成工具和运行时" -> "用于桌面的 VC++ 2015.3 v140 工具集(x86,x64)"
选择 Release
模式和 x64
平台
点击"常规" -> "常规" -> "平台工具集" 选择 "Visual Studio 2015 (v140)"
为caffe libcaffe 添加cuda的项目属性表
将该目录下
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\extras\visual_studio_integration\MSBuildExtensions
项目属性表分别添加到工程caffe libcafe
4)设置编译器不讲警告视为错误。
5)先仅编译生成 libcaffe 时会报错 error: too few arguments in function call,进而导致后面124个错误。
双击查看报错函数 cudnnSetConvolution2dDescriptor,在115行参数列表末尾补充一个参数 CUDNN_DATA_FLOAT 或CUDNN_DATA_DOUBLE即可。
VS_error MSB3073: :VCEnd”已退出,代码为 1
copy 工程的dll出错
解决办法:
选中工程右击----->属性----->配置属性----->生成事件----->后期生成事件----->在生成中使用先置为否,编译工程,通过后在置为是
6)编译生成 caffe 至此整个环境配置完成。
这里由于别的模块用到了libcaffe,所以,首先选择libcaffe,右键生成。成功之后,再选择整个解决方案,右键生成解决方案。
====================
可能会遇到的其他问题
其中会出现3个问题
(1)Nuget会提示下载一些东西,包括boost,opencv2.4.10,gflags,glog,hdf5,lmdb,LevelDB,OpenBLAS,protobuf等预编译的依赖包。过程有点慢,多等会就ok。下载完成后会在caffe 的同级目录生成NugetPackages的文件。
(2)出现无法打开libcaffe.lib的错误,编译生成libcaffe,再编译整个解决方案。
(3),右键解决方案->属性->通用属性->启动项目->当前选定内容,然后保存。
点击caffe->caffe.cpp,按F5运行,生成如下界面,证明安装成功。同时在根目录下面会生成相应的exe,lib,dll等文件。
plus:在上面的工作完成之后,可以考虑将NugetPackages根目录下的glog,LevelDB,protobuf目录中lib下面的debug目录中相应的lib后面都加上D重命名一下,这样在实际工程调试还是部署都不会有debug和release的lib重名的现象。还是很有用的。当然这一步可以不做,根据自己需要。
到目前为止caffe就都安装好了,进入测试环节,let's make some noise,
mnist测试:
下面通过一个一个最简单的网络结构lenet来对刚才安装的caffe进行测试。
(1)去官网http://yann.lecun.com/exdb/mnist/下载mnist数据集。下载后解压到E:\caffe\data\mnist,如下图所示。
(2)在caffe根目录下,新建一个create_mnist.bat,里面写入如下的脚本。
[plain] view plain copy
- .\Build\x64\Release\convert_mnist_data.exe .\data\mnist\mnist_train_lmdb\train-images.idx3-ubyte .\data\mnist\mnist_train_lmdb\train-labels.idx1-ubyte .\examples\mnist\mnist_train_lmdb
- echo.
- .\Build\x64\Release\convert_mnist_data.exe .\data\mnist\mnist_test_lmdb\t10k-images.idx3-ubyte .\data\mnist\mnist_test_lmdb\t10k-labels.idx1-ubyte .\examples\mnist\mnist_test_lmdb
- pause
然后双击该脚本运行,即可在E:\caffe\examples\mnist下面生成相应的lmdb数据文件。
(3)修改E:\caffe\examples\mnist\lenet_solver.prototxt,将最后一行改为solver_mode:CPU,
修改E:\caffe\examples\mnist\lenet_train_test.prototxt,如下所示,左面为原始的,右面为修改后的。
(4)在caffe根目录下,新建train_mnist.bat,然后输入如下的脚本,
[plain] view plain copy
- .\Build\x64\Release\caffe.exe train --solver=.\examples\mnist\lenet_solver.prototxt
- pause
然后双击运行,就会开始训练,训练完毕后会得到相应的准确率和损失率。
plus:
c++实现的,将mnist数据集转化为图片格式,请戳 http://blog.****.net/qq_14845119/article/details/54895200
c++实现的,利用LeNet识别鼠标手写的字符,请戳 http://blog.****.net/qq_14845119/article/details/54910358
pycaffe项目,编译成功会在caffe-windows\Build\x64\Release\pycaffe\caffe中生成_caffe.pyd文件。
最后.将这个caffe文件夹复制到D:\Anaconda2\Lib\site-packages中,还要记得把caffe的..\Build\x64\Release\pycaffe添加到pythonpath中,然后尝试使用import caffe。import可能会出现typeerror:__init__()got an unexpected keyword argument ‘syntax'这样的错误,解决的办法是在D:\Anaconda2\Lib\site-packages\caffe\proto中选择caffe_pb2.py文件,将文件中所有含有syntax的语句注释掉即可。
问题:
1、千万注意:点击“生成”,而不是“重新生成”!!
千万注意:点击“生成”,而不是“重新生成”!!
千万注意:点击“生成”,而不是“重新生成”!!
2、Release 不能直接换成 Debug 然后生成,因为 NugetPackages 中有重名现象,所以需要删除 NugetPackages 和 Build 文件夹再点“生成”
3、Debug + Release 的 C/C++ 配置中“将警示视为错误”都勾成“否”