Win 10 VS 2017使用Caffe詳細まとめ

20703 ワード

本リンク
https://blog.csdn.net/fengtaoO08/article/details/83023428
1はじめに
本明細書では、Win 10システムにcaffeをインストールおよび構成します.ネットワーク上の多くの記事とは異なり、本稿ではVS 2017環境でCUDA 9をコンパイルする.0バージョンのcaffe.実際、本明細書の構成プロセスは、より高いバージョンのCUDAのインストールプロセスと同様であり、読者は参照することができる.
2シンボル規則
  本明細書では、caffeをインストールする準備をしているディレクトリパスを%CAFFE_DIR%で表します.D:\Caffe\のような実際のパスに置き換えてください.  本明細書では、Windowsユーザー名を%USER_NAME%で表すため、WindowsユーザーフォルダパスはC:\Users\%USER_NAME%であるため、読者自身が実際のパスに置き換えてください.
3システム環境
  • OS:Windows 10 x64
  • CPU:Intel Core i7-8700K 3.70GHz
  • GPU:Nvidia GEFORCE GTX 1080 Ti
  • Memory RAM:8GB x2

  • 4プリインストール
  • Microsoft Visual Studio Community 2017 version 15.8
  • Anaconda3 version 4.3.30 with Python 3.6.5
  • Nvidia CUDA 9.0
  • cuDNN v7.3.1 for CUDA 9.0
  • Git v2.19.1
  • OpenCV 3.4.1
  • MatLab 2018a

  • 5 caffeの取得
     caffeのインストール準備中のディレクトリで次のコマンドを実行します.
    git clone https://github.com/BVLC/caffe.git
    cd caffe
    git checkout windows
    

    6 caffeのコンパイル
    この節は最も煩雑な一歩である.
    6.1 VC++2017バージョン15.4 v 14.11ツールセット
      新しいVS 2017 15.8に付属するVC++ツールセットバージョンはCUDA 9.0と深刻な互換性の問題があり、このバージョンのツールセットを直接使用してCUDA 9.0をコンパイルすると多くのわけのわからないエラーが発生し、ネット上で解決方法を見つけるのは難しい.ただし、古いバージョンのVS 2017を再インストールする必要はありません.古いVC++2017バージョン15.4 v 14をインストールして使用するだけです.11ツールセットはCUDA 9.0をコンパイルすればよい.
    6.1.1 VC++ツールセットのインストール
     VS Installerを開き、インストールを修正し、インストールオプションの VC++ 2017 15.4 v14.11 を選択してインストールします.
    6.1.2 VC++ツールセットの構成
      VS 2017インストールパスでvcvars64.bat所在ディレクトリを検索し、参照パスはC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\である.パスの下にあるvcvars64.batをコピーし、vcvars64_VC1411.batと名前を変更します.
    @call "%~dp0vcvarsall.bat" x64 -vcvars_ver=14.11 %*
    

    6.2 buildの構成win.cmd
      編集ファイルvcvars64_VC1411.batは、以下のように修正して保存する.
    6.2.1修正70~99行
      自分の必要に応じて70~99行の内容を修正してコンパイルを構成する.参考までに個人構成は以下の通りです.
    :: Change the settings here to match your setup
    :: Change MSVC_VERSION to 12 to use VS 2013 
    :: 【  VS2017,MSVC_VERSION=15】
    if NOT DEFINED MSVC_VERSION set MSVC_VERSION=15
    :: Change to 1 to use Ninja generator (builds much faster) 
    :: 【   Ninja】
    if NOT DEFINED WITH_NINJA set WITH_NINJA=0
    :: Change to 1 to build caffe without CUDA support 
    :: 【  GPU  】
    if NOT DEFINED CPU_ONLY set CPU_ONLY=0
    :: Change to generate CUDA code for one of the following GPU architectures
    :: [Fermi  Kepler  Maxwell  Pascal  All]
    if NOT DEFINED CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
    :: Change to Debug to build Debug. This is only relevant for the Ninja generator the Visual Studio generator will generate both Debug and Release configs
    if NOT DEFINED CMAKE_CONFIG set CMAKE_CONFIG=Release
    :: Set to 1 to use NCCL
    if NOT DEFINED USE_NCCL set USE_NCCL=0
    :: Change to 1 to build a caffe.dll
    if NOT DEFINED CMAKE_BUILD_SHARED_LIBS set CMAKE_BUILD_SHARED_LIBS=0
    :: Change to 3 if using python 3.5 (only 2.7 and 3.5 are supported) 
    :: 【 Anaconda    python,   python2.7  ,PYTHON_VERSION=2】
    if NOT DEFINED PYTHON_VERSION set PYTHON_VERSION=2
    :: Change these options for your needs. 
    :: 【  python  】
    if NOT DEFINED BUILD_PYTHON set BUILD_PYTHON=1
    if NOT DEFINED BUILD_PYTHON_LAYER set BUILD_PYTHON_LAYER=1
    :: 【  matlab  】
    if NOT DEFINED BUILD_MATLAB set BUILD_MATLAB=1
    :: If python is on your path leave this alone
    if NOT DEFINED PYTHON_EXE set PYTHON_EXE=python
    :: Run the tests
    if NOT DEFINED RUN_TESTS set RUN_TESTS=0
    :: Run lint
    if NOT DEFINED RUN_LINT set RUN_LINT=0
    :: Build the install target
    if NOT DEFINED RUN_INSTALL set RUN_INSTALL=0
    

    6.2.2 112行目を挿入
      112行に次のコードを挿入します.
    if "%MSVC_VERSION%"=="15" (
    	set CMAKE_GENERATOR=Visual Studio 15 2017 Win64
    )
    

    6.2.3 158行目の変更
     158行の%CAFFE_DIR%\caffe\scripts\build_win.cmd値を、batch_file節で修正されたファイル6.1.2の絶対パスに修正します.
    set batch_file=!VS%MSVC_VERSION%0COMNTOOLS!..\..\VC\vcvarsall.bat
    

    次のように変更
    set batch_file=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64_VC1411.bat 
    

    6.3 WindowsDownloadPrebuiltDependenciesを変更します.cmake
      vcvars64_VC1411.batファイルを編集し、14行目に挿入
    set(DEPENDENCIES_URL_1911_27 "${DEPENDENCIES_URL_BASE}/v${DEPENDENCIES_VERSION}/${DEPENDENCIES_NAME_1900_27}${DEPENDENCIES_FILE_EXT}")
    set(DEPENDENCIES_SHA_1911_27 "17eecb095bd3b0774a87a38624a77ce35e497cd2")
    

    ここで、1911はMSVCコンパイラのバージョン番号であり、VC++2017のバージョン15.4 v 14に対応する.11ツールセット、27はpythonバージョン番号です.
    6.4 Cudaを修正する.cmake
      %CAFFE_DIR%\caffe\cmake\WindowsDownloadPrebuiltDependencies.cmakeファイルを編集し、以下のように修正して保存します.
    6.4.1注記90~104行
      は90~104行を以下のように注釈する
    # if(${CUDA_ARCH_NAME} STREQUAL "Fermi")
      # set(__cuda_arch_bin "20 21(20)")
    # elseif(${CUDA_ARCH_NAME} STREQUAL "Kepler")
      # set(__cuda_arch_bin "30 35")
    # elseif(${CUDA_ARCH_NAME} STREQUAL "Maxwell")
      # set(__cuda_arch_bin "50")
    # elseif(${CUDA_ARCH_NAME} STREQUAL "Pascal")
      # set(__cuda_arch_bin "60 61")
    # elseif(${CUDA_ARCH_NAME} STREQUAL "All")
      # set(__cuda_arch_bin ${Caffe_known_gpu_archs})
    # elseif(${CUDA_ARCH_NAME} STREQUAL "Auto")
      # caffe_detect_installed_gpus(__cuda_arch_bin)
    # else()  # (${CUDA_ARCH_NAME} STREQUAL "Manual")
      # set(__cuda_arch_bin ${CUDA_ARCH_BIN})
    # endif()
    

    6.4.2 104行目を挿入
    104行目に挿入
    set(__cuda_arch_bin "61")
    

    ここで、61は私のGTX 1080 TiグラフィックスカードのGPU計算能力を表しています.%CAFFE_DIR%\caffe\cmake\Cuda.cmakeでNvidiaのすべてのグラフィックスカードの計算能力を検索し、グラフィックスカードの計算能力の数値に変更すればいいです.
    6.5 Anaconda python環境の構成
      プロジェクトの必要性のため、本明細書でインストールしたcaffeはpython 2.7環境でコンパイルされますが、本機でインストールしたAnaconda 3はpython 3.6がデフォルトでインストールされているため、python 2.7を作成する仮想環境を使用する必要があります.ここでは使用するAnacondaのコマンドについてのみ説明しますが、他の仮想環境を管理するコマンドは読者が自分で検索してください.
    6.5.1 python 2.7仮想環境の作成
     コマンドライン実行
    conda create -n py27 python=2.7
    

    6.5.2 python 2.7仮想環境のアクティブ化
     コマンドライン実行
    activate py27
    

      アクティブ化に成功すると、コマンドラインの前にhttps://developer.nvidia.com/cuda-gpusと表示されます.なお、後述するコマンドラインコマンドは、この仮想環境で実行されます.
    6.5.3 pycaffeのインストールに必要なパッケージ
     本明細書ではcaffeのpythonインタフェースをインストールする必要があるため、pycaffeに必要なパッケージを先にインストールする必要があります.コマンドライン実行
    conda install --yes numpy scipy protobuf six scikit-image pyyaml pydotplus graphviz
    

    インストールが完了するまで待機します.
    6.6 build_の実行win.cmd
     コマンドライン実行ファイル(py27)は、caffe依存ライブラリを自動的にダウンロードしますが、openCV構成エラーが表示され、エラー印刷フラグメントは次のようになります.
    ...
    
    Call Stack (most recent call first):
      cmake/Dependencies.cmake:114 (find_package)
      CMakeLists.txt:80 (include)
    
    
    CMake Error at cmake/Dependencies.cmake:114 (find_package):
      Found package configuration file:
    
        C:/Users/%USER_NAME%/.caffe/dependencies/libraries/OpenCVConfig.cmake
    
      but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be
      NOT FOUND.
    Call Stack (most recent call first):
      CMakeLists.txt:80 (include)
    
    
    -- Configuring incomplete, errors occurred!
    See also "%CAFFE_DIR%/caffe/build/CMakeFiles/CMakeOutput.log".
    See also "%CAFFE_DIR%/caffe/build/CMakeFiles/CMakeError.log".
    ERROR: Configure failed
    
    ...
    

      自動生成されたopencvとその他ライブラリのプロファイルがVS 2017と一致しないため、手動で修正する必要があります.
    6.7 OpenCVConfigを修正する.cmake
      編集%CAFFE_DIR%\caffe\scripts\build_win.cmd、86行挿入保存
    elseif(MSVC_VERSION EQUAL 1911)
        set(OpenCV_RUNTIME vc14)
    

    6.8 nvccを修正する.hpp
     編集C:\Users\%USER_NAME%\.caffe\dependencies\libraries\OpenCVConfig.cmake、ファイル全体を次のように置き換えて保存
    //  (C) Copyright Eric Jourdanneau, Joel Falcou 2010
    //  Use, modification and distribution are subject to the 
    //  Boost Software License, Version 1.0. (See accompanying file 
    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    
    //  See http://www.boost.org for most recent version.
    
    //  NVIDIA CUDA C++ compiler setup
    
    #ifndef BOOST_COMPILER
    #  define BOOST_COMPILER "NVIDIA CUDA C++ Compiler"
    #endif
    
    #if defined(__CUDACC_VER_MAJOR__) && defined(__CUDACC_VER_MINOR__) && defined(__CUDACC_VER_BUILD__)
    #  define BOOST_CUDA_VERSION __CUDACC_VER_MAJOR__ * 1000000 + __CUDACC_VER_MINOR__ * 10000 + __CUDACC_VER_BUILD__
    #else
    // We don't really know what the CUDA version is, but it's definitely before 7.5:
    #  define BOOST_CUDA_VERSION 7000000
    #endif
    
    // NVIDIA Specific support
    // BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device
    #define BOOST_GPU_ENABLED __host__ __device__
    
    // A bug in version 7.0 of CUDA prevents use of variadic templates in some occasions
    // https://svn.boost.org/trac/boost/ticket/11897
    // This is fixed in 7.5. As the following version macro was introduced in 7.5 an existance
    // check is enough to detect versions < 7.5
    #if BOOST_CUDA_VERSION < 7050000
    #   define BOOST_NO_CXX11_VARIADIC_TEMPLATES
    #endif
    // The same bug is back again in 8.0:
    #if (BOOST_CUDA_VERSION > 8000000) && (BOOST_CUDA_VERSION < 8010000)
    #   define BOOST_NO_CXX11_VARIADIC_TEMPLATES
    #endif
    // Most recent CUDA (8.0) has no constexpr support in msvc mode:
    #if defined(_MSC_VER)
    #  define BOOST_NO_CXX11_CONSTEXPR
    #endif
    
    #ifdef __CUDACC__
    //
    // When compiing .cu files, there's a bunch of stuff that doesn't work with msvc:
    //
    #if defined(_MSC_VER)
    #  define BOOST_NO_CXX14_DIGIT_SEPARATORS
    #  define BOOST_NO_CXX11_UNICODE_LITERALS
    #endif
    //
    // And this one effects the NVCC front end,
    // See https://svn.boost.org/trac/boost/ticket/13049
    //
    #if (BOOST_CUDA_VERSION >= 8000000) && (BOOST_CUDA_VERSION < 8010000)
    #  define BOOST_NO_CXX11_NOEXCEPT
    #endif
    
    #endif
    

    6.9 build_を再実行win.cmd
      コマンドラインでC:\Users\%USER_NAME%\.caffe\dependencies\libraries\include\boost-1_61\boost\config\compiler
    vcc.hpp
    を実行し、コンパイルを円滑に行います.コンパイル中に大量の警告が出力されます.その中には多くの文字化けが含まれています.次のようにします.
    ...
    
     d:
    vida gpu computing toolkit\cuda\v9.0\include\crt\math_functions.h(4417): warning C4819: (936) Unicode [%CAFFE_DIR%\caffe\scripts\build\src\caffe\caffe.vcx proj] d:
    vida gpu computing toolkit\cuda\v9.0\include\crt\math_functions.h(5319): warning C4819: (936) Unicode [%CAFFE_DIR%\caffe\scripts\build\src\caffe\caffe.vcx proj] ...

      これは符号化文字の問題によるものであり、他の非乱符号化警告と同様に、コンパイルプロセスに影響を及ぼさず、処理する必要はない.約10分でコンパイルが終了し、エラー数が0の場合はコンパイルに成功します.
    7 caffeのpythonインタフェース
      %CAFFE_DIR%\caffe\scripts\build_win.cmdパスの下の%CAFFE_DIR%\caffe\pythonフォルダをAnacondaの仮想環境caffepy27パスの下、参照パスsite-packagesにコピーします. D:\Anaconda3_64\envs\py27\Lib\site-packages仮想環境で、実行コマンドはpythonコマンド編集モードに入ります.
    python
    

    実行コマンド
    import caffe
    

    エラーが報告されていない場合は、インストールに成功したことを示します.
    8 caffeのMatlabインタフェース
      は、py27パスの下の%CAFFE_DIR%\caffe\matlab\+caffe\private\Releasecaffe_.mexw64ディレクトリの下にコピーする. システム環境変数%CAFFE_DIR%\caffe\matlab\+caffe\private\PATHを追加MatLabで%CAFFE_DIR%\caffe\scripts\build\install\binタブを選択し、 ボタンをクリックして以下のMATLAB検索パスを追加
    %CAFFE_DIR%\caffe\scripts\build\install\bin
    %CAFFE_DIR%\caffe\scripts\build\install
    

    次に、Link:bvlc_からインタフェースが成功したかどうかをテストします.reference_caffenet.caffemodelは からbvlc_reference_caffenet.caffemodelフォルダの下にダウンロードし、MatLabでスクリプト%CAFFE_DIR%\caffe\models\bvlc_reference_caffenetを実行します.成功すると、1000クラスの確率ベクトルが印刷され、282クラス(tabby,tabby cat)の確率は0.2985です.