Mac中Python3.x编译Caffe

一、环境

系统 Mac
conda 4.5.11
这里推荐anaconda来配置需您环境进行管理python。通过他来建立虚拟环境从而进行环境隔离,方便临时调试。
python 3.6
opencv 4.1

二、软件准备

anaconda

可以去官网或者镜像站下载,这里主要了解环境配置即可。

  • 查看所有环境
    conda envs --info

  • 创建指定python版本及该环境名称
    conda create --name test_name python=3.6

  • 进入该环境,进入后会看到命令行前面有当前环境的名称,表示已经处于当前的python环境中
    conda activate test_name

opencv4.1

这里下载的是Sources文件,自己完成编译安装。
官网下载

  • 1.解压缩包
  • 2.进入opencv文件夹后创建build文件夹
    cd oepncv
    mkdir build
  • 3.配置opencv
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON ..
  • 4.安装opencv
    make -j6
    make install
  • 5.验证
    输入如下命令查看版本号是否正确
    opencv_version

brew及相关软件

下载brew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

下载相关软件

brew install -vd snappy leveldb gflags glog szip lmdb
brew install openblas
brew install hdf5
brew install boost boost-python3
brew install autoconf
brew install automake libtool

protobuf

这里需要注意在安装protobuf的时候,需要查看一下版本,最好限定在3.5.1内,我在使用brew安装就是这个版本。

brew install protobuf

如果版本超出,则需要自己下载包并自己编译安装。
wget https://github.com/protocolbuffers/protobuf/archive/v3.5.1.zip
unzip v3.5.1.zip
cd protobuf-3.5.1
./autogen.sh
./configure
make
make install

Caffe下载

git clone https://github.com/BVLC/caffe.git

这样下载的软件就好了。

三、配置文件

此时开始配置Caffe项目。

config文件拷贝

cd caffe/
cp Makefile.config.example Makefile.config

修改common.hpp文件

打开./include/caffe/common.hpp文件,找到70行,并在后面添加如下代码:

// Supporting OpenCV4
#if (CV_MAJOR_VERSION == 4)
#define CV_LOAD_IMAGE_COLOR cv::IMREAD_COLOR
#define CV_LOAD_IMAGE_GRAYSCALE cv::IMREAD_GRAYSCALE
#endif

修改Makefile.config文件(重要)

这里开始修改Makefile.config文件,这里非常重要,每一步都需要保证准确即可。

  • 1.取消 CPU_ONLY 前面的注释符号
  • 2.取消 USE_OPENCV 前面的注释符号
  • 3.取消 USE_HDF5 前面的注释符号,并将值改成 1
  • 4.取消 OPENCV_VERSION 前面的注释符号,并将值改成 4
  • 5.将 BLAS 的值改成 open
  • 6.配置python路径(有brew和anaconda两种方式,根据环境决定)
  • 7.取消 WITH_PYTHON_LAYER 前面的注释符号
  • 8.增加部分库的环境配置,有些库由于安装方式可能需要手动引入
  • 9.blas环境配置
  • 10.Mac需要添加CXX配置项

下面是上述配置的最终代码(注意这里并不是最终文件而是需要修改的代码样式):

# 1.取消 CPU\_ONLY 前面的注释符号
CPU_ONLY := 1

# 2.取消 USE\_OPENCV 前面的注释符号
USE_OPENCV := 0

# 3.取消 USE\_HDF5 前面的注释符号,并将值改成 1
USE_HDF5 := 1

# 4.取消 OPENCV\_VERSION 前面的注释符号,并将值改成 4
OPENCV_VERSION := 4

# 5.将 BLAS 的值改成 open
BLAS := open

# 6.配置python路径(有brew和anaconda两种方式,根据环境决定)
ANACONDA_HOME := $(HOME)/anaconda3/envs/end_plate_demo
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib

# 7.取消 WITH\_PYTHON\_LAYER 前面的注释符号
WITH_PYTHON_LAYER := 1

# 8.增加部分库的环境配置,有些库由于安装方式可能需要手动引入
# 这里引入了openblas和boost-python3的lib库
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/Cellar/openblas/0.3.10_1/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/Cellar/openblas/0.3.10_1/lib /usr/local/Cellar/boost-python3/1.73.0/lib

# 9.blas环境配置
BLAS_INCLUDE := $(shell brew --prefix openblas)/include
BLAS_LIB := $(shell brew --prefix openblas)/lib

# 10.Mac需要添加CXX配置项
CUSTOM_CXX := clang++ -std=c++11

四、预编译

cd ~/caffe
mkdir build
cd build
cmake ..

五、修改编译后的文件配置

进入build文件夹

修改CaffeConfig.cmake

查找并修改代码如下:

set(Caffe_CPU_ONLY ON)

修改CMakeCache.txt(重要)

注意,这里的代码修改非常重要,失败的原因是没有修改Boost相关路径导致。

Python

PYTHON_EXECUTABLE:FILEPATH=..../anaconda3/envs/end_plate_demo/bin/python3.6

//Path to a file.
PYTHON_INCLUDE_DIR:PATH=..../anaconda3/envs/end_plate_demo/include/python3.6m

//Path to a library.
PYTHON_LIBRARY:FILEPATH=..../anaconda3/envs/end_plate_demo/lib/libpython3.6m.dylib

CXX

CMAKE_CXX_FLAGS:STRING=-std=c++11

Boost

Boost_PYTHON_LIBRARY_RELEASE:STRING=/usr/local/Cellar/boost-python3/1.73.0/lib/libboost_python38-mt.dylib

Boost_SYSTEM_LIBRARY_RELEASE:STRING=/usr/local/Cellar/boost-python3/1.73.0/lib/libboost_system-mt.dylib

Boost_THREAD_LIBRARY_RELEASE:STRING=/usr/local/Cellar/boost-python3/1.73.0/lib/libboost_thread-mt.dylib

CUDA

CPU_ONLY:BOOL=ON

六、再次编译

cmake ..
sudo make all -j8
sudo make pycaffe -j8

七、环境引入

vim ~/.bash_profile
# 添加如下

CAFFE_HOME=....caffe/python
export PATH=$PATH:${CAFFE_HOME}