欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows、visual studio 2015上编译Caffe2

程序员文章站 2022-06-17 08:53:21
...

一、软件准备

  1. Windows 10 64位;
  2. Visual studio 2015 64位;
  3. CUDA v9.2;
  4. cuDNN v7.4.2 for CUDA 9.2;
  5. OpenCV 3.4.1;
  6. Python2.7;
  7. pip;
  8. Conda(在属性中获取所有权限)。

二、CMD窗口安装模块

以管理员身份打开CMD窗口,执行如下命令:

pip  install  future ^
              hypothesis ^
              numpy ^
              protobuf ^
              six ^
              flask ^
              glog ^
              graphviz ^
              jupyter ^
              matplotlib ^
              pydot python-nvd3 ^
              pyyaml ^
              requests ^
              scikit-image ^
              scipy ^
              setuptools ^
              tornado ^
              lmdb 

编译过程中如果出现缺少某个模块,例如提示缺少lmdb,则用conda install lmdb再安装一次。

三、增加/修改环境变量

  1. 根据FindLMDB.cmake中的find_path(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS “ENVLMDBDIR/include")findlibrary(LMDBLIBRARIESNAMESlmdbPATHS"ENV{LMDB_DIR}/include")和find_library(LMDB_LIBRARIES NAMES lmdb PATHS "ENV{LMDB_DIR}/lib” ),设置include和lib文件夹所在目录为LMDB_DIR:
    LMDB_DIR C:\Tools\vcpkg\packages\lmdb_x64-windows
  2. 找到电脑中Release版本Opencv的OpenCVConfig.cmake所在目录,设置为OpenCV_DIR:
    OpenCV_DIR C:\Tools\vcpkg\buildtrees\opencv\x64-windows-rel
  3. 设置PYTHONPATH:
    PYTHONPATH CAFFE2_ROOT\build
  4. 增加PATH:
    C:\Python27;
    C:\Python27\bin;
    C:\Python27\DLLs;
    C:\Python27\Scripts;
    C:\ProgramData\Anaconda2;
    C:\ProgramData\Anaconda2\bin;
    C:\ProgramData\Anaconda2\DLLs ;
    C:\ProgramData\Anaconda2\Scripts;
    C:\Tools\vcpkg\buildtrees\opencv\x64-windows-rel\bin。
  5. 重新启动电脑。

四、修改build_host_protoc.bat

设置编译Release版本,设置VS2015为编译生成器。

set CMAKE_BUILD_TYPE=Release
set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"

五、修改build_windows.bat

设置编译Release版本,设置VS2015为编译生成器,选中CUDA、LMDB、OPENCV和PYTHON作为一同编译项目。

set USE_CUDA=ON
set CMAKE_BUILD_TYPE=Release
set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"

  -DUSE_CUDA=%USE_CUDA% ^
  -DCUDA_GENERATION=Pascal ^
  -DUSE_NNPACK=OFF ^
  -DUSE_GLOG=OFF ^
  -DUSE_GFLAGS=OFF ^
  -DUSE_LMDB=ON ^
  -DUSE_LEVELDB=OFF ^
  -DUSE_ROCKSDB=OFF ^
  -DUSE_OPENCV=ON ^
  -DBUILD_SHARED_LIBS=OFF ^
  -DBUILD_PYTHON=ON

六、修改Cuda.cmake

增加对CUDA9.2的编译支持。

# set(Caffe2_known_gpu_archs9 "30 35 50 52 60 61 70 71") # for CUDA 9.x, not supported yet
set(Caffe2_known_gpu_archs9 "30 35 50 52 60 61") # for CUDA 9.x, not supported yet

if (${CUDA_VERSION} LESS 7.0)
  message(FATAL_ERROR "Caffe2 requires CUDA 7.0 or later version")
elseif (${CUDA_VERSION} LESS 8.0) # CUDA 7.x
  set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs7})
  list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
  list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
elseif (${CUDA_VERSION} LESS 9.0) # CUDA 8.x
  set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs8})
  list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
  list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
  # CUDA 8 may complain that sm_20 is no longer supported. Suppress the
  # warning for now.
  list(APPEND CUDA_NVCC_FLAGS "-Wno-deprecated-gpu-targets")
elseif (${CUDA_VERSION} EQUAL 9.0) # CUDA 9.0
  set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs9})
  list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
  list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
elseif (${CUDA_VERSION} GREATER 9.0) # CUDA 9.x
  set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs9})
  list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
  list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
endif()

七、CMD窗口编译

以管理员身份打开cmd窗口,切换到caffe2/src/scripts目录,先执行build_host_protoc.bat,再执行build_windows.bat(需一个小时)。

八、VS编译

CMD窗口编译成功后,以管理员身份打开visual studio 2015,打开caffe2/src/build/Caffe2.sln,切换到Release模式,先rebuild ALL(需一个小时),再rebuild Install(需一个小时),此时在C:\Program Files中可以看到Caffe2文件夹。

九、拷贝

  1. 拷贝caffe2\src\build\caffe2\python\Release目录下的caffe2_pybind11_state.pyd及该文件夹下的所有项目到C:\Python27\DLLs和C:\ProgramData\Anaconda2\DLLs;
  2. 拷贝caffe2/src/build目录下的caffe和caffe2文件夹到C:\Python27\Lib和C:\ProgramData\Anaconda2\Lib。

十、运行MNIST.PY检验

  1. 下载Caffe2的tutorial:https://github.com/caffe2/tutorials;
  2. 打开tutorial下的MNIST.PY,点击save_db函数找到其定义文件predictor_exporter.py和predictor_py_utils;
  3. 修改predictor_exporter.py:
    #ws = ws or workspace.C.Workspace.current
    ws = ws or workspace
  4. 修改predictor_py_utils.py:
    #shape = ws.blobs[blob].fetch().shape
    shape = ws.FetchBlob(blob).shape
  5. 执行MNIST.PY,如果流程完全正确则Caffe2编译成功。
相关标签: Caffe2