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成功。
原文地址:https://www.cnblogs.com/k7k8k91/p/11727321.html
- HTTP 压力测试工具 wrk
- 理解 Linux shell 中的一个方言:2>&1
- 大家知道什么是git中的 .gitignore吗?
- MySQL 8.0 新特性 :隐藏索引 Invisible Indexes
- 如何监控MySQL的复制延迟?
- Uber 的 Docker Mysql 应用
- Dubbo源码-从HelloWorld开始
- 【深度学习】用PaddlePaddle进行车牌识别(二)
- JavaScript 10分钟入门
- 外键约束
- OpenCV3.x中UMat介绍与使用
- OpenCV中KMeans算法介绍与应用
- LinkedIn 即时通信系统的优化
- javascript console输出图片?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 猿实战21——商品发布之商品数据存储
- Android编程自定义进度条颜色的方法详解
- Android TextView对齐的两种方法
- Android ScrollView实现反弹效果的实例
- Ubuntu 18.04上安装 phpMyAdmin的详细教程
- Android Popupwindow弹出窗口的简单使用方法
- 解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网
- Android编程实现自定义Dialog的大小自动控制方法示例
- Linux中如何查看文件的创建时间详解
- Android 图片添加水印的实现方法
- Linux系统清除缓存的方法总结
- 详解Android使用@hide的API的方法
- Android 实现按两次返回键退出程序(两种方法)
- 使用 bash 倒计时日期的方法
- Android 实现页面跳转