为 Caffe 添加 Python3 支持

Python2已近生命终点,然而 Caffe 却受硬件厂商的拥护。于是我们尝试在 Python3 环境下编译 Caffe。

Caffe Python 3.7 安装

对于 Python 3.3+而言,需要搭配 Protobuf 3。因此不再需要 apt 安装libprotobuf-devprotobuf-compiler,这二者是 Protobuf 2 的。
首先修改 CMakeLists.txt

#set(python_version "2" CACHE STRING "Specify which Python version to use")
set(python_version "3" CACHE STRING "Specify which Python version to use")

编译会遇到
c++11protobuf-3.6.0之后的版本需要 C++11支持。

# ---[ Flags
if(UNIX OR APPLE)
  #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -std=c++11")
endif()

如果使用 OpenCV3+,还会遇到
opencv
需要为 Caffe 修改过时的宏定义。此山放过,则会遇到

 libboost_python.so: undefined reference to `PyString_Size'

为 Caffe 添加 Python3 支持_第1张图片
原因是 Caffe 的 Dependencies.cmake 链接了 boost 库的 python2 模块。这是本文关注的重点。使用 Makefile.config 文件进行配置的则不会出现此问题。

$ ll /usr/lib/x86_64-linux-gnu/libboost_python*.so
lrwxrwxrwx 1 root root 30 6月 14  2016  /usr/lib/x86_64-linux-gnu/libboost_python3-py35.so -> libboost_python3-py35.so.1.58.0
lrwxrwxrwx 1 root root 30 6月 14  2016  /usr/lib/x86_64-linux-gnu/libboost_python-py27.so -> libboost_python-py27.so.1.58.0
lrwxrwxrwx 1 root root 30 6月 14  2016  /usr/lib/x86_64-linux-gnu/libboost_python.so -> libboost_python2.7.so

一个较为简单的方法是手动创建链接:

$ cd /usr/lib/x86_64-linux-gnu
$ 

你可能感兴趣的:(DeepLearning,Caffe,Caffe,Python3,boost)