小彩笔的摸爬滚打之路orz
零、写在前面
如果要安装pycaffe,那么首先要明白,最好用Anaconda2+Python2配置,但是如果我们电脑上安装的是Anaconda3,应该怎么做呢?如果安装的是Anaconda3,那么也要新建一个python2的环境。
一、准备
这篇教程的前提是假设已经安装好了vs2013,cuda,cudnn以及Anaconda3,Anaconda安装不做介绍,其他可参照博文https://blog.csdn.net/weixin_42260102/article/details/104610628中的准备部分进行。
二、创建虚拟环境
-
在Anaconda3中建立一个python27的环境:在开始菜单中找到Anaconda3-Anaconda Prompt,打开Anaconda Prompt,输入以下命令,从清华镜像加载,不然总是从官网下载超市。:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
conda config --remove channels defaults
-
然后开始新建环境命令:
conda create -n caffe_python27 python=2.7
此处我新建的环境名称为caffe_python27,打开Anaconda3在Environments中就可以看到新建的python27的环境了。
-
在该环境中安装好下列依赖库(此步骤不知用处是什么,但总归肯定是有用的,参考了很多文章,得出结论选装的库为下表所示,有些库会在安装别的库时自动被安装):
Cython numpy scipy scikit-image matplotlib ipython h5py leveldb networkx nose pandas python-dateutil protobuf Pillow six PyWavelets cloudpickle cycler dask decorator kiwisolver pip pyparsing pytz setuptools wheel
三、编译和配置
-
打开(caffe目录)\windows 文件夹,把里面的CommonSettings.props.example复制一份,并重命名为CommonSettings.props。
-
把C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\visual_studio_integration\MSBuildExtensions下的CUDA 10.2.props和CUDA 10.2.targets复制到
C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\ BuildCustomizations中。
-
在VS2013中打开Caffe.sln。(VS2013要以管理员身份运行)
将CUDA 9.1.props添加到Caffe、pycaffe和libcaffe(这个一开始是加载失败的)中。
在右侧的列表中打开CommonSettings.props。
怎么让libcaffe加载成功呢?
将第9行的Cuda版本7.5改为10.2,将13行的PythonSupport改为true,将21行的CudaArchitecture里面,改为你的GPU计算速度。
然后在24行的CuDnnPath里面填写你的cudnn的解压路径。
然后在48行的PythonDir里面填写你的虚拟环境地址。
这时右侧列表中的libcaffe和test_all两项应该是加载失败的状态,右键重新加载即可(当然,我的右键重新加载失败了,可以尝试重启VS,然后我的就成功了)。 -
编译(编译过程中的问题请看第四大点)
打开caffe-master/windows/Caffe.sln,设置为x64 release,然后单击工程下每个项目,右键进入属性,将“警告视为错误”值改为“否”。
编译的顺序为:libacffe->caffe->pycaffe->整个项目,方法为右键,生成。注:编译完caffe后,直接双击caffe.cpp文件,然后ctrl+F5直接编译,出现如下命令窗口说明编译成功。
全部编译完成之后,图中caffe目录下有_caffe.pyd证明编译pycaffe成功,将图中的caffe目录拷贝到虚拟环境路径\Lib\site-packages
目录下面。
验证
在pycharm中将解释器切换为新建的虚拟环境,网上有很多教程,自己去看,很简单,新建工程,新建python文件,import caffe,没有错误证明成功。
四、可能出现的问题
-
错误提示找不到文件python27.lib
解决办法:将新建的环境python2.7版本中的python27.lib添加进项目的附加依赖项中例如我的python27.lib在我Anaconda3环境中,
D:\tools\Anaconda3\envs\caffe_python27\libs\python27.lib
-
编译pycaffe时候,出现缺少Python27_d.lib
解决办法:需要修改三处地方:第一处修改地方:找到Anaconda3新建python2环境中include目录,修改object.h文件
如我的目录为:
修改:#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS) #define Py_TRACE_REFS #endif
为:
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS) //#define Py_TRACE_REFS #endif
第二处修改地方:还是在同级include目录下,修改pycongfig.h文件
修改:ifdef _DEBUG # pragma comment(lib,"python27_d.lib") # else # pragma comment(lib,"python27.lib") # endif /* _DEBUG */
为:
ifdef _DEBUG # pragma comment(lib,"python27.lib") # else # pragma comment(lib,"python27.lib") # endif /* _DEBUG */
第三处修改地方:还是修改刚才的pycongfig.h文件
修改:#ifdef _DEBUG # define Py_DEBUG #endif
为:
#ifdef _DEBUG //# define Py_DEBUG #endif
再重新编译pycaffe项目即可。