1. 程式人生 > >官方Caffe-windows 配置與示例執行

官方Caffe-windows 配置與示例執行

本文主要介紹官方給出的caffe-windows的配置及如何訓練mnist資料集,介紹的比較基礎,大神請繞道吐舌頭

1、環境:windows 10\CUDA7.5\cuDNN\VS2013

2、GPU計算環境準備(沒有GPU的同學可以跳過此步)

(1)首先下載並安裝CUDA7.5,下載介面如圖1:


圖 1:CUDA7.5的下載介面

(2)下載cuDNN,注意要下載cuDNN v4版本,下載介面如圖2:


圖 2:cuDNN的下載介面

官網下載cuDNN需要先註冊,而且要填一些調查表,也可以在我上傳的資源中下載。下載後解壓會有三個資料夾bin、include、lib。將這三個資料夾複製到cuda的安裝目錄中:\NVIDIA GPU ComputingToolkit\CUDA\v7.5

。(cuda的安裝目錄中也有這三個資料夾,將這三個資料夾分別與原來存在的資料夾合併,如3圖所示)。


圖 3:CUDA 7.5 安裝的根目錄

3、caffe-windows準備

(1)下載官方caffe-windows並解壓,將 .\windows\CommonSettings.props.example備份,並改名為CommonSettings.props。如圖4所示:


圖 4:修改後的CommonSettings.props檔案

(2)關於CommonSettings.props檔案的一點說明

</pre><pre name="code" class="html"><?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><!--註釋裡說的很清楚,這兩個值不能同時設為true。若沒有GPU就把CpuOnlyBuild設為true-->
        <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>false</PythonSupport><!--設定是否支援python介面,若想支援,需要改後面的PythonDir的值-->
	<!-- NOTE: If Matlab support is enabled, MatlabDir (below) needs to be
         set to the root of your Matlab installation. -->
        <MatlabSupport>false</MatlabSupport><!--設定是否支援matlab介面,若想支援,需要改後面的MatlabDir的值-->
        <CudaDependencies></CudaDependencies>

        <!-- Set CUDA architecture suitable for your GPU.
         Setting proper architecture is important to mimize your run and compile time. -->
        <CudaArchitecture>compute_35,sm_35;compute_52,sm_52</CudaArchitecture>

        <!-- CuDNN 3 and 4 are supported -->
        <CuDnnPath></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'"><!--與前面python介面設定對應-->
        <PythonDir>C:\Miniconda2\</PythonDir>
        <LibraryPath>$(PythonDir)\libs;$(LibraryPath)</LibraryPath>
        <IncludePath>$(PythonDir)\include;$(IncludePath)</IncludePath>
    </PropertyGroup>
    <PropertyGroup Condition="'$(MatlabSupport)'=='true'"><!--與前面的matlab介面設定對應-->
        <MatlabDir>C:\Program Files\MATLAB\R2014b</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>

4、編譯caffe-windows

編譯用vs2013開啟.\windows\Caffe.sln 並將解決方案的配置改為release,點選單欄上的“生成->生成解決方案”,會將整個專案全部生成,這個時間會比較長(由於官方caffe-windows 的版本使用了NuGet管理第三方開發包,所以需要在vs2013上安裝NuGet,官方網站下載速度比較慢,可以在我的資源裡下載)。生成成功之後的檔案都在.\Build\x64\Release中。

PS:生成時可能遇到的錯誤:errorC2220: 警告被視為錯誤 - 沒有生成“object”檔案 (..\..\src\caffe\util\math_functions.cpp)。

這個錯誤可參考Sunshine_in_Moon 的解決方案

5、測試

1)下載MNIST資料集,MNIST資料集包含四個檔案,如表1所示:

表1:MNIST資料集及其檔案解釋

下載完後解壓得到對應的四個檔案,這四個檔案不能直接用於caffe的訓練和測試。需要利用第4步生成的convert_mnist_data.exe把四個檔案轉換為caffe所支援的leveldb或lmdb檔案。

2)轉換 訓練\測試資料

a)  中的四個檔案放到 . \examples\mnist\mnist_data資料夾下。

b)  在caffe-windows安裝的根目錄下,新建一個convert-mnist-data-train.bat檔案轉換為訓練資料,並在檔案中新增程式碼:

Build\x64\Release\convert_mnist_data.exe --backend=lmdbexamples\mnist\mnist_data\train-images.idx3-ubyteexamples\mnist\mnist_data\train-labels.idx1-ubyte examples\mnist\mnist_data\mnist_train_lmdb
pause

其中--backend=lmdb 表示轉換為lmdb格式,若要轉換為leveldb將其改寫為--backend=leveldb 即可。

再新建一個convert-mnist-data-test.bat轉換測試資料,程式碼為:

Build\x64\Release\convert_mnist_data.exe --backend=lmdb examples\mnist\mnist_data\t10k-images.idx3-ubyte examples\mnist\mnist_data\t10k-labels.idx1-ubyte examples\mnist\mnist_data\mnist_test_lmdb
Pause

Ps:(1)convert_mnist_data.exe的命令格式為:

convert_mnist_data [FLAGS] input_image_file input_label_file output_db_file

[FLAGS]:轉換的檔案格式可取leveldb或lmdb,示例:--backend=leveldb

Input_image_file:輸入的圖片檔案,示例:train-images.idx3-ubyte

input_label_file:輸入的圖片標籤檔案,示例:train-labels.idx1-ubyte

output:儲存輸出檔案的資料夾,示例:mnist_train_lmdb

(2)如果感覺很麻煩,也可以直接下載我轉換好的MNIST檔案(leveldb和lmdb)。

3)執行測試

(1)將第2)步中轉換好的訓練\測試資料集(mnist_train_lmdb\ mnist_train_lmdb或mnist_train_leveldb\mnist_train_leveldb)資料夾放在.\examples\mnist中。

(2)在caffe-windows根目錄下新建一個run.bat,檔案中程式碼:

Build\x64\Release\caffe.exe  train --solver=examples/mnist/lenet_solver.prototxt
pause

儲存並雙擊執行,如果執行成功,說明caffe配置成功了。

注意使用leveldb或lmdb格式的資料時,需要將lenet_train_test.prototxt 檔案裡面的data_param-> source和data_param-> backend相對應,如圖5紅框所標註處。


圖 5:lenet_train_test.prototxt檔案中需要注意與訓練\測試資料對應的部分

4)訓練自己的資料

這部分可以參考下面的幾個部落格:

References