zoukankan      html  css  js  c++  java
  • windows 10安装和配置caffe教程 | Install and Configure Caffe on windows 10

    本文首发于个人博客https://kezunlin.me/post/1739694c/,欢迎阅读!

    Install and Configure Caffe on windows 10

    Guide

    requirements:

    • windows: 10
    • caffe: caffe-windows
    • nvidia driver: gtx 1060 382.05 (gtx 970m)
    • GPU arch(s): sm_61 (sm_52)
    • cuda: 8.0
    • cudnn: 5.0.5
    • opencv: 3.1.0 WITH_CUDA (compiled from source)
    • other libs: libraries_v140_x64_py27_1.1.0.tar.bz2

    cuda+cudnn

    (1). download and install driver by standalone for GTX 970 or GTX 1060 from here.
    (2). download and install cuda_8.0.61_win10.exe, skip install nvidia driver and install toolkit only.
    (3). download and install cudnn-8.0-windows10-x64-v5.0-ga.zip.

    nvidia driver

    driver can be installed by standalone or from cuda_xxx_win10.exe.
    we choose to install by standalone

    download proper driver for GTX 970 or GTX 1060 eg: 398.36-notebook-win10-64bit-international-whql.exe from https://www.nvidia.com/Download/index.aspx

    download driver

    cuda toolkit

    cuda install guides for windows

    download cuda_8.0.61_win10.exe from here

    The CUDA Toolkit installs the CUDA driver and tools needed to create, build and run a CUDA application as well as libraries, header files, CUDA samples source code, and other resources

    cuda_8.0.61_win10.exe includes: Nvidia driver + toolkit.

    • driver install to C:/Program Files/NVIDIA Corporation and C:/ProgramData/NVIDIA Corporation
    • tookit install to C:/Program Files/NVIDIA GPU Computing Toolkit,which contains headers,libs,tools for compiling CUDA applications. C:/ProgramData/NVIDIA GPU Computing Toolkit contains cuda plugins for Visual Studio.

    cuda driver

    cuda toolkit

    cuda driver data

    cuda toolkit data

    verify

    cd C:ProgramDataNVIDIA CorporationCUDA Samplesv9.2inwin64Release
    ./deviceQuery.exe
    

    cudnn

    extract cudnn-8.0-windows10-x64-v5.0-ga.zip and copy include,liband bin to C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0
    cudnn

    check cuda

    nvidia driver and cuda software installation

    compile

    download

    place caffe-windows at C:/compile/caffe-windows

    extract libraries_v140_x64_py27_1.1.0.tar.bz2 to C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0libraries

    config

    edit C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0librariescaffe-builder-config.cmake

    # BOOST config
    set(BOOST_ROOT "C:/Boost/")
    set(BOOST_INCLUDEDIR ${BOOST_ROOT}/include/boost-1_64 CACHE PATH "")
    set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib CACHE PATH "")
    set(Boost_USE_MULTITHREADED ON CACHE BOOL "")
    set(Boost_USE_STATIC_LIBS ON CACHE BOOL "")
    set(Boost_USE_STATIC_RUNTIME OFF CACHE BOOL "")
    

    vim caffe-windows/cmake/Dependencies.cmake

    set(Boost_USE_STATIC_LIBS ON)
    find_package(Boost 1.64 REQUIRED COMPONENTS system thread filesystem)
    

    Tips:
    (1) we use C:Boost 1.64 to replace caffe dependencies C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0libraries 1.61, because we have compile PCL 1.8.1 with Boost 1.64 static.
    (2) we use caffe C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0librariesx64vc14lib to replace C:/Program Files/opencv. (opencv3.1 <====opencv3.4)

    cd caffe
    mkdir build && cd build && cmake-gui ..
    

    with options

    BLAS                 Open # Atlas, Open, MKL
    BUILD_SHARED_LIBS        OFF # build static library
    CMAKE_CONFIGURATION_TYPES   Release
    CMAKE_CXX_RELEASE_FLAGS    /MD /O2 /Ob2 /DNDEBUG /MP
    
    CUDA_ARCH_BIN  3.0 3.5 5.0 5.2 6.0 6.1 # very time-consuming
    CUDA_ARCH_NAME Manual
    CUDA_ARCH_PTX 3.0
    

    Use Boost 1.64

    caffe cuda arch

    cudnn

    opencv with cuda

    Selecting Windows SDK version 10.0.14393.0 to target Windows 10.0.15063.
    Boost version: 1.64.0
    Found the following Boost libraries:
      system
      thread
      filesystem
      chrono
      date_time
      atomic
    Found gflags  (include: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/include, library: gflags_shared)
    Found glog    (include: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/include, library: glog)
    Found PROTOBUF Compiler: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/bin/protoc.exe
    Found lmdb    (include: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/include, library: lmdb)
    Found LevelDB (include: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/include, library: leveldb)
    Found Snappy  (include: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/include, library: snappy_static;optimized;C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/lib/caffezlib.lib;debug;C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/lib/caffezlibd.lib)
    CUDA detected: 8.0
    Found cuDNN: ver. 5.0.5 found (include: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/include, library: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64/cudnn.lib)
    Added CUDA NVCC flags for: sm_61
    OpenCV found (C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries)
    Found OpenBLAS libraries: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/lib/libopenblas.dll.a
    Found OpenBLAS include: C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/include
    NumPy ver. 1.11.3 found (include: C:/Python27/lib/site-packages/numpy/core/include)
    Boost version: 1.64.0
    Found the following Boost libraries:
      python
    
    ******************* Caffe Configuration Summary *******************
    General:
      Version           :   1.0.0
      Git               :   unknown
      System            :   Windows
      C++ compiler      :   C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
      Release CXX flags :   /MD /O2 /Ob2 /DNDEBUG /MP /DWIN32 /D_WINDOWS /W3 /GR /EHsc
      Debug CXX flags   :   /MDd /Zi /Ob0 /Od /RTC1 /DWIN32 /D_WINDOWS /W3 /GR /EHsc
      Build type        :   Release
    
      BUILD_SHARED_LIBS :   OFF
      BUILD_python      :   ON
      BUILD_matlab      :   OFF
      BUILD_docs        :   
      CPU_ONLY          :   OFF
      USE_OPENCV        :   ON
      USE_LEVELDB       :   ON
      USE_LMDB          :   ON
      USE_NCCL          :   OFF
      ALLOW_LMDB_NOLOCK :   OFF
    
    Dependencies:
      BLAS              :   Yes (Open)
      Boost             :   Yes (ver. 1.64)
      glog              :   Yes
      gflags            :   Yes
      protobuf          :   Yes (ver. 3.1.0)
      lmdb              :   Yes (ver. 0.9.70)
      LevelDB           :   Yes (ver. 1.18)
      Snappy            :   Yes (ver. 1.1.1)
      OpenCV            :   Yes (ver. 3.1.0)
      CUDA              :   Yes (ver. 8.0)
    
    NVIDIA CUDA:
      Target GPU(s)     :   Auto
      GPU arch(s)       :   sm_61
      cuDNN             :   Yes (ver. 5.0.5)
    
    Python:
      Interpreter       :   C:/Python27/python.exe (ver. 2.7.13)
      Libraries         :   C:/Python27/libs/python27.lib (ver 2.7.13)
      NumPy             :   C:/Python27/lib/site-packages/numpy/core/include (ver 1.11.3)
    
    Install:
      Install path      :   C:/car_libs/caffe
    
    Configuring done
    

    build and install

    tips: Visual Studio 2015 can not generate shared library. So we build static caffe library.

    CMake Error at CMakeLists.txt:66 (message):
      The Visual Studio generator cannot build a shared library.  Use the Ninja
      generator instead.
    

    Build with Release x64 with Visual Studio 2015 and 38 modules will be generated and We Install to C:/car_libs/caffe/.
    build with vs

    build result.
    build result

    install to C:/car_libs/caffe.

    caffe usage

    CMakeLists.txt

    # Boost
    if(MSVC)
    	# use static boost on windows
    	set(Boost_USE_STATIC_LIBS ON) # 
    else()
    	# use release boost on linux
    	set(Boost_USE_STATIC_LIBS OFF)
    endif(MSVC)
    
    set(Boost_USE_MULTITHREAD ON)
    # Find Boost package 1.64 (caffe also use Boost 1.64)
    find_package(Boost 1.64 REQUIRED COMPONENTS serialization date_time system filesystem thread timer math_tr1)
    
    # opencv 
    SET(OpenCV_DIR "C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/")
    find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc features2d calib3d) # nofree for 2.4
    
    # caffe
    set(Caffe_DIR "C:/car_libs/caffe/share/Caffe/")
    find_package(Caffe)
    

    when we use caffe lib in our program, errors will occur. And we need to fix CaffeTargets-release.cmake file。

    usage error fix

    (1) error with shared.lib

    LNK1181	unable to open“gflags_shared.lib” 
    

    solution:

    vim C:/car_libs/caffe/share/Caffe/CaffeTargets-release.cmake
    
    # remove _shared -shared
    :1,$s/_shared//g
    :1,$s/-shared//g
    

    (2) error with hdf5

    hdf5.lib=>libcaffehdf5.lib
    hdf5_hl.lib
    =>libcaffehdf5_hl.lib

     :1,$s/hdf5/libcaffehdf5/g
    

    (3) error with libopenblas

    LNK1181	unable to open“libopenblas.dll.a.lib”
    

    solution:

    cd C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0librarieslib and

    • copy libopenblas.a ===> libopenblas.a.lib
    • copy libopenblas.dll.a ===> libopenblas.dll.a.lib

    (4) error NtClose

    error LNK2019: 无法解析的外部符号 NtClose,该符号在函数 mdb_env_map 中被引用
    

    solution:

    copy `C:/Program Files (x86)/Windows Kits/10/Lib/10.0.14393.0/um/x64/ntdll.lib` to `C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0librarieslib`
    copy `C:WindowsSysWOW64
    tdll.dll` to `C:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0librariesin`
    

    CaffeTargets-release.cmake

    cd C:car_libscaffeshareCaffeCaffeTargets-release.cmake

    #----------------------------------------------------------------
    # Generated CMake target import file for configuration "Release".
    #----------------------------------------------------------------
    
    # Commands may need to know the format version.
    set(CMAKE_IMPORT_FILE_VERSION 1)
    
    # Import target "caffe" for configuration "Release"
    set_property(TARGET caffe APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
    set_target_properties(caffe PROPERTIES
      IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
      IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE 
    "caffeproto;C:/Boost/lib/libboost_system-vc140-mt-1_64.lib;C:/Boost/lib/libboost_thread-vc140-mt-1_64.lib;C:/Boost/lib/libboost_filesystem-vc140-mt-1_64.lib;C:/Boost/lib/libboost_chrono-vc140-mt-1_64.lib;C:/Boost/lib/libboost_date_time-vc140-mt-1_64.lib;C:/Boost/lib/libboost_atomic-vc140-mt-1_64.lib;C:/Boost/lib/libboost_python-vc140-mt-1_64.lib;caffehdf5.lib;caffehdf5_cpp.lib;caffehdf5_hl.lib;caffehdf5_hl_cpp.lib;caffezlib.lib;caffezlibstatic.lib;gflags;glog;leveldb.lib;libcaffehdf5.lib;libcaffehdf5_cpp.lib;libcaffehdf5_hl.lib;libcaffehdf5_hl_cpp.lib;libprotobuf.lib;libprotoc.lib;lmdb.lib;snappy.lib;snappy_static.lib;libopenblas.dll.a.lib;ntdll.lib;C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64/cudart.lib;C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64/curand.lib;C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64/cublas.lib;C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64/cublas_device.lib;C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64/cudnn.lib;opencv_core;opencv_highgui;opencv_imgproc;opencv_imgcodecs;C:/Python27/libs/python27.lib;"
      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/caffe.lib"
      )
    
    list(APPEND _IMPORT_CHECK_TARGETS caffe )
    list(APPEND _IMPORT_CHECK_FILES_FOR_caffe "${_IMPORT_PREFIX}/lib/caffe.lib" )
    
    # Import target "caffeproto" for configuration "Release"
    set_property(TARGET caffeproto APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
    set_target_properties(caffeproto PROPERTIES
      IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
      IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE "C:/Users/zunli/.caffe/dependencies/libraries_v140_x64_py27_1.1.0/libraries/lib/libprotobuf.lib"
      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/caffeproto.lib"
      )
    
    list(APPEND _IMPORT_CHECK_TARGETS caffeproto )
    list(APPEND _IMPORT_CHECK_FILES_FOR_caffeproto "${_IMPORT_PREFIX}/lib/caffeproto.lib" )
    
    # Commands beyond this point should not need to know the version.
    set(CMAKE_IMPORT_FILE_VERSION)
    
    

    comiple errors with caffe.pb.h

    tips: sometimes we not need to do this.

    CMakeLists.txt

    add_definitions( -DGLOG_NO_ABBREVIATED_SEVERITIES ) 
    add_definitions( -DNOMINMAX )  # for pcl min,max
    add_definitions( -DWIN32_LEAN_AND_MEAN ) 
    #add_definitions( -DNO_STRICT ) # no use for caffe.pb.h
    

    vim C:car_libscaffeincludecaffeprotocaffe.pb.h

    typedef ParamSpec_DimCheckMode DimCheckMode;
    static const DimCheckMode STRICT = ParamSpec_DimCheckMode_STRICT;
    static const DimCheckMode PERMISSIVE = ParamSpec_DimCheckMode_PERMISSIVE;
    
    typedef V1LayerParameter_DimCheckMode DimCheckMode;
    static const DimCheckMode STRICT = V1LayerParameter_DimCheckMode_STRICT;
    static const DimCheckMode PERMISSIVE = V1LayerParameter_DimCheckMode_PERMISSIVE;
    

    replace STRICT and PERMISSIVE to _STRICT and _PERMISSIVE.

    typedef ParamSpec_DimCheckMode DimCheckMode;
    static const DimCheckMode _STRICT = ParamSpec_DimCheckMode_STRICT;
    static const DimCheckMode _PERMISSIVE = ParamSpec_DimCheckMode_PERMISSIVE;
    
    typedef V1LayerParameter_DimCheckMode DimCheckMode;
    static const DimCheckMode _STRICT = V1LayerParameter_DimCheckMode_STRICT;
    static const DimCheckMode _PERMISSIVE = V1LayerParameter_DimCheckMode_PERMISSIVE;
    

    caffe.pb.h compile errors

    run exe

    • copy C:/car_libs/caffe/bin/*.dll dlls to bin/release folder.
    • copy Opencv dlls to bin/release folder.

    Reference

    History

    • 20180413 created.

    Copyright

  • 相关阅读:
    目录
    DRF的分页
    Django Rest Framework 视图和路由
    爬虫基本原理
    C# System.Threading.Timer的使用
    C# Task的使用
    C# 线程池的使用
    C# 异步委托回调函数使用
    C#异步委托等待句柄的使用
    C# 异步委托的使用
  • 原文地址:https://www.cnblogs.com/kezunlin/p/11841945.html
Copyright © 2011-2022 走看看