本文首发于个人博客https://kezunlin.me/post/1739694c/,欢迎阅读!
Install and Configure Caffe on windows 10
- Part 1: Install and Configure Caffe on windows 10
- Part 2: Install and Configure Caffe on ubuntu 16.04
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
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
andC:/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.
verify
cd C:ProgramDataNVIDIA CorporationCUDA Samplesv9.2inwin64Release
./deviceQuery.exe
cudnn
extract cudnn-8.0-windows10-x64-v5.0-ga.zip
and copy include
,lib
and bin
to C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0
check cuda
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 useC:Boost
1.64 to replace caffe dependenciesC:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0libraries
1.61, because we have compilePCL 1.8.1
withBoost 1.64 static
.
(2) we use caffeC:Userszunli.caffedependencieslibraries_v140_x64_py27_1.1.0librariesx64vc14lib
to replaceC:/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
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 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;
run exe
- copy
C:/car_libs/caffe/bin/*.dll
dlls tobin/release
folder. - copy
Opencv
dlls tobin/release
folder.
Reference
History
- 20180413 created.
Copyright
- Post author: kezunlin
- Post link: https://kezunlin.me/post/1739694c/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.