Caffe之win10版安装小结--细数自己遇到的各种坑

来源:互联网 发布:matlab 符号矩阵 编辑:程序博客网 时间:2024/06/05 18:29

参考自:基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习

windows7+visual studio 2013+CUDA7.5 编译caffe+配置matcaffe+配置pycaffe

背景:

    最近翻开了《深度学习-21天实战Caffe》作为自己Caffe的入门,看到后面章节通过python draw_net.py 可以绘出各种深度学习模型的层次图,为了巩固自己前面的学习知识,并加深印象,所以也来尝试绘制。 但天不随人愿,发现自己pycaffe以及matlab等第三方接口库都未编译,所以此次来尝试编译。

   本人机器ThinkPad E430c,已属于5年前配置了,装个VMWare的Redhat Linux实在感觉像老牛拉车,故不得已只能现在win10上尝试编译Caffe。

   编译顺序:libcafffe->caffe->pycaffe->matcaffe,为何要采用这种顺序?因为各工程间存在依赖关系,当然pycaffe和matcaffe是并列关系,它俩都依赖前面的编译生成结果。  

   由于本人机器python版本混乱,现对安装情况作简单梳理:C盘根目录下面安装了两个python版本 ;D盘先安装了Anaconda3,Anaconda2(因始终import caffe报模块找不到动态链接库,但pycaffe.pyd早已经存在,DLL加载失败 故安装Anaconda2)。

   image C盘根目录下面两个python版本都是较纯净的python,里面没有装numpy等一系列第三方包。

WHQY(CQ`S8T2HM[V2O5V}MFD盘根目录下面两个Anaconda。因为之前一直用python3,导致一直用着Anaconda3,但直到最后始终找不到pycaffe.pyd,实在没法所以又装了Anaconda2,并且补装了所有第三方压缩包。

Step 0:下载相关软件,修改配置文件:

CUDA

下载 CUDA Toolkit 7.5 (https://developer.nvidia.com/cuda-toolkit)。如果你电脑没有NVIDIA的独立显卡,那么只能选择用CPU进行编译,就不需要安装CUDA,去配置文件 .\windows\CommonSettings.props 设置<CpuOnlyBuild>false</CpuOnlyBuild> ,同时设置 <UseCuDNN>false</UseCuDNN>

cuDNN

下载 cuDNN v4 或者 cuDNN v5 (https://developer.nvidia.com/cudnn)。 解压下载的文件到 %CUDA_PATH% (这个路径是CUDA安装时默认设置的一个环境变量路径,通过【系统】-》【高级设置】-》【环境变量】就可以找到)。当然如果你没下载CUDA,也可以直接设置<UseCuDNN>false</UseCuDNN>

cuda_7.5.18_win10.exe安装用的系统默认路径:C:\Program Files\NVIDIA GPU Computing Toolkit

cudnn-7.5-windows10-x64-v5.0-ga.zip 解压到了C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5 的目录下

修改配置CommonSettings.props文件

<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">    <ImportGroup Label="PropertySheets" />    <PropertyGroup Label="UserMacros">        <BuildDir>$(SolutionDir)..\Build</BuildDir>        <!--NOTE: CpuOnlyBuild and UseCuDNN flags can't be set at the same time.-->        <CpuOnlyBuild>false</CpuOnlyBuild>        <UseCuDNN>true</UseCuDNN>        <CudaVersion>7.5</CudaVersion>        <!-- NOTE: If Python support is enabled, PythonDir (below) needs to be         set to the root of your Python installation. If your Python installation         does not contain debug libraries, debug build will not work. -->        <PythonSupport>true</PythonSupport>        <!-- NOTE: If Matlab support is enabled, MatlabDir (below) needs to be         set to the root of your Matlab installation. -->        <MatlabSupport>true</MatlabSupport>        <CudaDependencies></CudaDependencies>        <!-- Set CUDA architecture suitable for your GPU.         Setting proper architecture is important to mimize your run and compile time. -->        <CudaArchitecture>compute_30,sm_30;compute_52,sm_52</CudaArchitecture>        <!-- CuDNN 3 and 4 are supported -->        <CuDnnPath>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5</CuDnnPath>        <ScriptsDir>$(SolutionDir)\scripts</ScriptsDir>    </PropertyGroup>    <PropertyGroup Condition="'$(CpuOnlyBuild)'=='false'">        <CudaDependencies>cublas.lib;cuda.lib;curand.lib;cudart.lib</CudaDependencies>    </PropertyGroup>    <PropertyGroup Condition="'$(UseCuDNN)'=='true'">        <CudaDependencies>cudnn.lib;$(CudaDependencies)</CudaDependencies>    </PropertyGroup>    <PropertyGroup Condition="'$(UseCuDNN)'=='true' And $(CuDnnPath)!=''">        <LibraryPath>$(CuDnnPath)\cuda\lib\x64;$(LibraryPath)</LibraryPath>        <IncludePath>$(CuDnnPath)\cuda\include;$(IncludePath)</IncludePath>    </PropertyGroup>    <PropertyGroup>        <OutDir>$(BuildDir)\$(Platform)\$(Configuration)\</OutDir>        <IntDir>$(BuildDir)\Int\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>    </PropertyGroup>    <PropertyGroup>        <LibraryPath>$(OutDir);$(CUDA_PATH)\lib\$(Platform);$(LibraryPath)</LibraryPath>        <IncludePath>$(SolutionDir)..\include;$(SolutionDir)..\include\caffe\proto;$(CUDA_PATH)\include;$(IncludePath)</IncludePath>    </PropertyGroup>    <PropertyGroup Condition="'$(PythonSupport)'=='true'">        <PythonDir>C:\Python27</PythonDir>        <LibraryPath>$(PythonDir)\libs;$(LibraryPath)</LibraryPath>        <IncludePath>$(PythonDir)\include;$(IncludePath)</IncludePath>    </PropertyGroup>    <PropertyGroup Condition="'$(MatlabSupport)'=='true'">        <MatlabDir>D:\Program Files\MATLAB\R2015b</MatlabDir>        <LibraryPath>$(MatlabDir)\extern\lib\win64\microsoft;$(LibraryPath)</LibraryPath>        <IncludePath>$(MatlabDir)\extern\include;$(IncludePath)</IncludePath>    </PropertyGroup>    <ItemDefinitionGroup Condition="'$(CpuOnlyBuild)'=='true'">        <ClCompile>            <PreprocessorDefinitions>CPU_ONLY;%(PreprocessorDefinitions)</PreprocessorDefinitions>        </ClCompile>    </ItemDefinitionGroup>    <ItemDefinitionGroup Condition="'$(UseCuDNN)'=='true'">        <ClCompile>            <PreprocessorDefinitions>USE_CUDNN;%(PreprocessorDefinitions)</PreprocessorDefinitions>        </ClCompile>        <CudaCompile>            <Defines>USE_CUDNN</Defines>        </CudaCompile>    </ItemDefinitionGroup>    <ItemDefinitionGroup Condition="'$(PythonSupport)'=='true'">        <ClCompile>            <PreprocessorDefinitions>WITH_PYTHON_LAYER;BOOST_PYTHON_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>        </ClCompile>    </ItemDefinitionGroup>    <ItemDefinitionGroup Condition="'$(MatlabSupport)'=='true'">        <ClCompile>            <PreprocessorDefinitions>MATLAB_MEX_FILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>        </ClCompile>    </ItemDefinitionGroup>    <ItemDefinitionGroup>        <ClCompile>            <MinimalRebuild>false</MinimalRebuild>            <MultiProcessorCompilation>true</MultiProcessorCompilation>            <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;USE_OPENCV;USE_LEVELDB;USE_LMDB;%(PreprocessorDefinitions)</PreprocessorDefinitions>            <TreatWarningAsError>true</TreatWarningAsError>        </ClCompile>    </ItemDefinitionGroup>    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">        <ClCompile>            <Optimization>Full</Optimization>            <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>            <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>            <FunctionLevelLinking>true</FunctionLevelLinking>        </ClCompile>        <Link>            <EnableCOMDATFolding>true</EnableCOMDATFolding>            <GenerateDebugInformation>true</GenerateDebugInformation>            <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>            <OptimizeReferences>true</OptimizeReferences>        </Link>    </ItemDefinitionGroup>    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">        <ClCompile>            <Optimization>Disabled</Optimization>            <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>            <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>        </ClCompile>        <Link>            <GenerateDebugInformation>true</GenerateDebugInformation>        </Link>    </ItemDefinitionGroup></Project>

Step1:编译libcafffe->caffe->pycaffe->matcaffe

libcaffe的编译及安装使用请参考前一篇:Win10上编译Caffe之Libcaffe,运行mnist案例 总体还算顺利。貌似加不加这个C:\Python27\include问题都不大,都可以编译通过。

]@2QCP@~V2MA{KDT0A)E$(6

caffe包的编译:

43EOLIH)D7822}@B$1P%G`4

0GJNH6D92[XCW%XFC8OCB4C

之前这里只加了C:\Python27\libs, 没有把Anaconda3下面pkgs里面python2.7下面的libs加进来,导致一直莫名的link错,为此困扰了好久。最终还是通过报的链接错LNK2001,分析出还是缺少静态依赖库,但这时又不打算重装python2.7,所以就找了Anaconda3下面pkgs里面python2.7下面的libs把它加到了链接器的附加库目录里面。这里也多亏了基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习文章末尾的一点提示。没明白我的C:\Python27\libs下面为何会库不全了。

出错信息如下:

 1>caffe.obj : error LNK2001: 无法解析的外部符号 __imp_PyErr_Print 1>layer_factory.obj : error LNK2001: 无法解析的外部符号 __imp_PyErr_Print 1>libboost_python-vc120-mt-1_59.lib(function_doc_signature.obj) : error LNK2001: 无法解析的外部符号 __imp__Py_NoneStruct 1>libboost_python-vc120-mt-1_59.lib(dict.obj) : error LNK2001: 无法解析的外部符号 __imp__Py_NoneStruct 1>libboost_python-vc120-mt-1_59.lib(module.obj) : error LNK2001: 无法解析的外部符号 __imp__Py_NoneStruct 1>libboost_python-vc120-mt-1_59.lib(function.obj) : error LNK2001: 无法解析的外部符号 

问题解决后终于编译通过了。

pycaffe的编译:吃过前面的亏,这里就学乖了,把可能的路径都加上了。

T8[}]$AWD)KLODANJ[((BZ7

WZI)$S2LI]QB92EZ@VRTLD6

matcaffe的编译:

D2MAID1F)K}9UV@}[]1A7Y1

_7~5~3RXWQBRT17[)52U93W

到这里,各类caffe所支持的接口都已经编译成功了。

Step2:使用caffe,并draw_net

1)解决import caffe

初始使用draw.net发现import caffe报错,信息如下:

在未装Anaconda2之前:

import caffe 报找不到_caffe模块,原来还要把build生成的D:\VS2012\Projects\caffe-windows\Build\x64\Release\pycaffe\caffe模块copy到D:\VS2012\Projects\caffe-windows\python\目录下。这之后,又报

File "D:\VS2012\Projects\caffe-windows\python\caffe\pycaffe.py", line 13, in
from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver,
ImportError: DLL load failed:

这个问题又折腾很久,始终想尝试不安装Anaconda2绕过,但最终没有其他途径来解决,只能安装Anaconda2,同时还copy了一份caffe放到了D:\Anaconda2\Lib\site-packages\ 下面。

本以为大功告成,import caffe还出现ImportError: No module named google.protobuf. 知道是没安装protobuf,但是用pip install protobuf总是提示已经安装了protobuf,原来前些日子,安装tensorflow windows版的时候把protobuf已经预装到Anaconda3目录下的lib\sitepackages下面了,但是现在用python2.7却引用不到这个包(每次pip install总告知已安装protobuf),想在Anaconda2下的python2.7下面安装并使用该包,应在D:\Anaconda2\Scripts 下面执行pip install protobuf。这样就会调用该目录下的pip脚本来安装protobuf到python2.7下面了。在D:\Anaconda2\Lib\site-packages下面查看了,终于有google\protobuf了。

至此终于可以import caffe成功了。

2)draw_net

终于可以打算用draw_net.py画图了,发现还缺pydot,于是又装了pydot。但是调用draw_net.py画图时发现报:“Exception: "dot.exe" not found in path.”

参考http://blog.csdn.net/lemianli/article/details/53034432 中所述:

先去这个网址http://www.graphviz.org/Download_windows.php将graphviz-2.38.msi下下来,进行安装,可以发现它的bin目录下有这个我们需要的dot.exe,将这个bin目录添加到系统的环境变量中去即可,再pip install pygraphviz即可。

这里我把graphviz-2.38.msi的安装路径D:\Program Files (x86)\Graphviz2.38\bin添加到了系统目录,但是在pip install pygraphviz的时候有报错(不管了)。使用draw_net.py的时候还是报Exception: "dot.exe" not found in path.”看来必须重启电脑,才能使环境变量生效。重启后果然一切都搞定了。

执行:

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\models\bvlc_reference_caffenet\train_val.prototxt caffenet.png
Drawing net to caffenet.png

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\models\bvlc_alexnet\train_val.prototxt alexnet.png
Drawing net to alexnet.png

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\models\bvlc_googlenet\train_val.prototxt googlenet.png
Drawing net to googlenet.png

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\models\bvlc_reference_rcnn_ilsvrc13\deploy.prototxt rcnn.png
Drawing net to rcnn.png

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\examples\mnist\lenet_train_test.prototxt lenet5.png
Drawing net to lenet5.png

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\examples\mnist\mnist_autoencoder.prototxt mnist_ae.png
Drawing net to mnist_ae.png

D:\VS2012\Projects\caffe-windows\python>python draw_net.py D:\VS2012\Projects\caffe-windows\examples\cifar10\cifar10_full_sigmoid_train_test_bn.prototxt cifar10_full_sigmoid_bn.png
Drawing net to cifar10_full_sigmoid_bn.png

caffenet:

caffenet

mnist_ae:

mnist_ae

 

总结:开源软件caffe的windows安装需要有耐心,解决一个又一个坑,在对软件不熟悉的前提下,解决问题的过程也是慢慢了解这个新软件的学习过程,在时间允许的条件下可以慢慢尝试分析各种可能原因。

0 0
原创粉丝点击