win10-caffe-gpu编译注意
win10-py27-cuda8.0-cudnnv6-caffe-gpu-vs2013
1.caffe的下载:
需要编译,需要编译 Caffe下载链接(caffe-master): https://github.com/Microsoft/caffe
该链接的caffe适合python2.7
微软的Windows三方包(Nuget程序包)
2.搭建环境
(1)首先解压caffe-master.zip压缩包,打开caffe-master文件夹。在windows文件夹下复制CommonSettings.props.example文件, 重命名为CommonSettings.props文件。
2)在windows文件夹下找到Caffe.sln
(3)配置完CommonSettings.props后,需要将CUDA8.0.props复制一份到vs的系统路径中去
(相当于在vs中添加cuda的path,lib)cuda8.0.props
在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\visual_studio_integration\MSBuildExtensions
复制到C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations
(4.)用vs2013打开caffe\windows\Caffe.sln
右击项目属性
选择配置属性,设置如下
右键libcaffe属性在弹出的对话框中修改 Treat Warnings As Errors为NO
(5)减少翻墙下载问题,copy NuGet 程序包
直接打开 工具 ->选项 -> 包管理器 -> 常规 -> 浏览,
手动把 NuGet 程序包复制进去,下载地址,密码 qfui
3.编译:先编译libcaffe,再编译caffe,最后再编译pycaffe
(1)编译libcaffe
编译就是生成,然后等待一段时间,较长,通常是会报错的
报错 错误 193 error : too few arguments in function call D:\huifenqi\caffe\caffe-master\include\caffe\util\cudnn.hpp 114 1 libcaffe
出现原因,
是因为cudnn 的v6比v5版本多了一个参数,要需要选择的
解决方法:
cudnnSetConvolution2dDescriptor 转到定义
最终修改版:
然后在重新生成,编译成功啦~~
(2)编译caffe
右击‘caffe’选择生成
报错
原因,缺少 python.lib
解决方法:
到C:\ProgramData\Anaconda2下查找 python27.lib ,复制到libcaffe.lib所在的目录下
即把C:\ProgramData\Anaconda2\libs\python27.lib复制到D:\huifenqi\caffe\caffe-master\Build\x64\Debug下
然后再重新生成,生成成功
(3)编译pycaffe
可能需要安装boost_1_60_0-msvc-14.0-64.exe ,安装到默认目录即可;
然后进行如下配置即可
然后再重新生成即可搞定
4.使用pycaffe
(1)复制生成的caffe包
把D:\huifenqi\caffe\caffe-master\Build\x64\Debug\pycaffe该目录下的caffe文件夹复制到C:\ProgramData\Anaconda2\Lib\site-packages下即可
(2)导入caffe
python
import caffe
(3)问题:
python导入caffe时出现python caffe报错:No module named google.protobuf.internal
解决方法:conda install protobuf
5.编译convert_imageset
这个项目主要是做图片转换的,需要将图片转换成caffe支持的格式,LMDB或者LEVELDB格式,据说这样可以保持较高的IO效率
编译就是生成,然后等待一段时间,较长,通常是会报错的,报错和libcaffe一样,参照libcaffe的修改即可,然后再重新生成,编译成功会生成convert_imageset.exe
6.编译compute_image_mean
compute_image_mean是用来图片减去均值后,再进行训练和测试,会提高速度和精度。因此,一般在各种模型中都会有这个操作。
对于自然图像,更多的是做图像零均值化,并不需要估计样本的方差。这是因为在自然图像上进行训练时,对每一个像素单独估计均值和方差意义不大,因为(理论上)图像任一部分的统计性质都应该和其它部分相同,图像的这种特性被称作平稳性(stationarity)。
对于自然图片,即使不进行方差归一化操作,不同特征的方差值彼此相似,故而我们不再进行任何方差归一化操作。既然我们不做方差归一化,唯一还需进行的规整化操作就是均值规整化,其目的是保证所有特征的均值都在0附近。根据应用,在大多数情况下,我们并不关注所输入图像的整体明亮程度。比如在对象识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。更为正式地说,我们对图像块的平均亮度值不感兴趣,所以可以减去这个值来进行均值规整化[1]。
如果你处理的图像并非自然图像(比如,手写文字,或者白背景正中摆放单独物体),其他规整化操作就值得考虑了,而哪种做法最合适也取决于具体应用场合。但对自然图像而言,对每幅图像进行上述的零均值规整化,是默认而合理的处理。
编译就是生成,然后等待一段时间,编译成功会生成compute_image_mean.exe