windows中caffe_ssd编译python35的接口
参考博客:
https://blog.csdn.net/thecentry/article/details/90318360
https://www.cnblogs.com/xuanyuyt/p/9772819.html
准备工具:
vs2015
anaconda中建一个python3.5的虚拟环境
cmake(3.4以上的版本)
本文编译的是cpu模式的caffe-ssd
***下载caffe-ssd-windows的源码
https://github.com/runhang/caffe-ssd-windows
***下载caffe所需要的第三方库
https://github.com/willyd/caffe-builder/releases/download/v1.1.0/libraries_v140_x64_py35_1.1.0.tar.bz2
下载的库文件:
解压后是文件夹
***修改caffe-ssd-windows工程中的编译选项
修改文件./caffe-ssd-windows/scripts/build_win.cmd
第24行开始:
if !PYTHON_VERSION! EQU 2 (
set CONDA_ROOT=D:\Develop\WinPython2.7\python-2.7.10.amd64
)
:: Set python 3.5 with conda as the default python
if !PYTHON_VERSION! EQU 3 (
set CONDA_ROOT=D:\Anaconda3\envs\pytorch_35
)
set PATH=!CONDA_ROOT!;!CONDA_ROOT!\Scripts;!CONDA_ROOT!\Library\bin;!PATH!
指定python3的环境路径,上面python2的路径不用管它。
第160行开始:
cmake -G"!CMAKE_GENERATOR!" ^
-DBLAS=Open ^
-DCMAKE_BUILD_TYPE:STRING=%CMAKE_CONFIG% ^
-DBUILD_SHARED_LIBS:BOOL=%CMAKE_BUILD_SHARED_LIBS% ^
-DBUILD_python:BOOL=%BUILD_PYTHON% ^
-DBUILD_python_layer:BOOL=%BUILD_PYTHON_LAYER% ^
-DBUILD_matlab:BOOL=%BUILD_MATLAB% ^
-DCPU_ONLY:BOOL=%CPU_ONLY% ^
-DCOPY_PREREQUISITES:BOOL=1 ^
-DINSTALL_PREREQUISITES:BOOL=1 ^
-DUSE_NCCL:BOOL=!USE_NCCL! ^
-DCUDA_ARCH_NAME:STRING=%CUDA_ARCH_NAME% ^
-C "D:\caffe-builder\build_v140_x64\libraries\caffe-builder-config.cmake" ^
"%~dp0\.."
指定了第三库的路径,这个libraries的路径可以自己指定。
第70行开始:
:: Change the settings here to match your setup
:: Change MSVC_VERSION to 12 to use VS 2013
if NOT DEFINED MSVC_VERSION set MSVC_VERSION=14
:: Change to 1 to use Ninja generator (builds much faster)
if NOT DEFINED WITH_NINJA set WITH_NINJA=0
:: Change to 1 to build caffe without CUDA support
if NOT DEFINED CPU_ONLY set CPU_ONLY=1
:: 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)
if NOT DEFINED PYTHON_VERSION set PYTHON_VERSION=3
:: Change these options for your needs.
if NOT DEFINED BUILD_PYTHON set BUILD_PYTHON=1
if NOT DEFINED BUILD_PYTHON_LAYER set BUILD_PYTHON_LAYER=1
if NOT DEFINED BUILD_MATLAB set BUILD_MATLAB=0
:: 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
这块区域,指定一些宏,因为我的电脑上没有gpu,所以编译的是cpu模式的caffe-ssd。
***生成vs工程
在命令行中,运行caffe-ssd-windons/scripts下的build_win.cmd


如果工程的配置选项没有问题,该命令会调用cmake,在/caffe-ssd-windows/scripts/build/下生成vs2015的工程。
***编译caffe-ssd
在上一步中,build_win.cmd命令会继续编译caffe的工程,有报错

问题出在NormalizeLayer和InnerProductLayer这个两个类上。
打开/caffe-ssd-windows/src/caffe/layer_factory.cpp,屏蔽掉报错的这两段函数:

用vs2015打开生成的caffe.sln解决方案,release_x64模式下,先编译caffe,不出意外的话,能够编译成功。
然后编译pycaffe,编译成功后,可生成/caffe-ssd-windows/python/caffe文件夹。

***import caffe
将上一步中,编译成功的caffe文件夹,拷贝到site-packages中。
以我自己的python虚拟环境,为例:D:\Anaconda3\envs\pytorch_35\Lib\site-packages
安装caffe,必须的库,protobuf,scipy,scikit-image,即可import caffe成功。

