компиляция исходного кода caffe

глубокое обучение

Программно-аппаратная среда

  • ubuntu 18.04 64bit
  • NVidia GTX 1070Ti
  • anaconda with python 3.7
  • CUDA 10.1
  • cuDNN 7.6
  • opencv 3.4.2
  • caffe 1.0.0

Введение

Давайте сначала поговорим об окружающей среде, используйтеanacondaизpythonвиртуальная среда, поддержкаopencv,служба поддержкиCUDAиcuDNNускоренный, поддерживаемый вpythonвызыватьcaffe. За базовыми компонентами вы можете обратиться к предыдущей статье, в этой статье я не буду вдаваться в подробности.

Базовая подготовка среды

Установить зависимости и инструменты

sudo apt install build-essential cmake git ffmpeg libatlas-base-dev libtiff-dev pkg-config python3-dev libavcodec-dev libavformat-dev libswscale-dev libtbb-dev libjpeg-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libx264-dev libboost-all-dev libhdf5-serial-dev libleveldb-dev liblmdb-dev libhdf5-dev
pip install protobuf

opencv

положи сюдаopencvВзятые в одиночку, потому чтоopencvЕсть много способов установки

  • apt install python3-opencv
  • conda install opencv
  • компиляция исходного кода

пройти черезapt installСамый простой и наименее подверженный ошибкам метод установки; за ним следуетconda install, скорее всего проблема в том, чтобы самому скомпилировать исходники, параметры компиляции сложные, много зависимых библиотек, есть различия версий.

После установки рекомендуется использоватьopencv_versionкоманда для просмотра текущей версии, по умолчаниюubuntu 18.04Предоставленный источник3.2.0Версия,condaбудет выше, вот3.4.0, если исходный код установлен, обратите внимание наsudo make installвыполнить еще одно предложениеsudo ldconfig. Эта статья начинается сcondaспособ установки.

компилировать кофе

Затем вы можете скомпилироватьcaffeохватывать

git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config

редактировать файлMakefile.config, в основном изменение некоторых путей, вставьте измененные

## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!

# cuDNN acceleration switch (uncomment to build with cuDNN).
# 启用cuDNN加速
USE_CUDNN := 1

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

# uncomment to disable IO dependencies and corresponding data layers
# 启用opencv
USE_OPENCV := 1
# USE_LEVELDB := 0
# USE_LMDB := 0
# This code is taken from https://github.com/sh1r0/caffe-android-lib
USE_HDF5 := 1

# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
#  You should not set this flag if you will be reading LMDBs with any
#  possibility of simultaneous read and write
# ALLOW_LMDB_NOLOCK := 1

# Uncomment if you're using OpenCV 3
# opencv大版本号是3,这里一定要注意
OPENCV_VERSION := 3

# To customize your choice of compiler, uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX := g++

# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR := /usr/local/cuda
# On Ubuntu 14.04, if cuda tools are installed via
# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
# CUDA_DIR := /usr

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
# -gencode arch=compute_20,code=sm_21
# CUDA_ARCH := -gencode arch=compute_20,code=sm_20 
# 这里使用的是CUDA10.1,所以要注释掉前两行
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
      -gencode arch=compute_35,code=sm_35 \
      -gencode arch=compute_50,code=sm_50 \
      -gencode arch=compute_52,code=sm_52 \
      -gencode arch=compute_60,code=sm_60 \
      -gencode arch=compute_61,code=sm_61 \
      -gencode arch=compute_61,code=compute_61

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := atlas
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
# BLAS_INCLUDE := /path/to/your/blas
# BLAS_LIB := /path/to/your/blas

# Homebrew puts openblas in a directory that is not on the standard search path
# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
# BLAS_LIB := $(shell brew --prefix openblas)/lib

# This is required only if you will compile the matlab interface.
# MATLAB directory should contain the mex binary in /bin.
# MATLAB_DIR := /usr/local
# MATLAB_DIR := /Applications/MATLAB_R2012b.app

# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# Python头文件路径,再加上numpy的头文件路径
PYTHON_INCLUDE := /home/xugaoxiang/anaconda3/include/python3.7m \
      /home/xugaoxiang/anaconda3/lib/python3.7/site-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
# ANACONDA_HOME := $(HOME)/anaconda
# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
      # $(ANACONDA_HOME)/include/python2.7 \
      # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)
# 默认是python2,这里使用python3,一定要改,不然后面会报错相应没人在用python2了吧
PYTHON_LIBRARIES := boost_python3 python3.7m
# PYTHON_INCLUDE := /usr/include/python3.5m \
#                 /usr/lib/python3.5/dist-packages/numpy/core/include

# We need to be able to find libpythonX.X.so or .dylib.
# libpython*.so库的路径
PYTHON_LIB := /home/xugaoxiang/anaconda3/lib
# 如果设置了ANACONDA_HOME环境变量,可以使用下面的设置方法,作用一样
# PYTHON_LIB := $(ANACONDA_HOME)/lib

# Homebrew installs numpy in a non standard path (keg only)
# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
# PYTHON_LIB += $(shell brew --prefix numpy)/lib

# Uncomment to support layers written in Python (will link against Python libs)
# WITH_PYTHON_LAYER := 1

# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /home/xugaoxiang/anaconda3/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
# INCLUDE_DIRS += $(shell brew --prefix)/include
# LIBRARY_DIRS += $(shell brew --prefix)/lib

# NCCL acceleration switch (uncomment to build with NCCL)
# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
# USE_NCCL := 1

# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
# 启用pkg_config,方便caffe找到opencv
USE_PKG_CONFIG := 1

# N.B. both build and distribute dirs are cleared on `make clean`
# 默认编译的目录,所有的目标文件、可执行文件、库都存放在这里
BUILD_DIR := build
DISTRIBUTE_DIR := distribute

# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
# 是否打开debug信息
# DEBUG := 1

# The ID of the GPU that 'make runtest' will use to run unit tests.
TEST_GPUID := 0

# enable pretty build (comment to see full commands)
Q ?= @

Когда закончите, выполните

make all -j12

параметр-jотносится к тому, сколькоcpuЯдро, цель состоит в том, чтобы ускорить скорость компиляции, установленную в соответствии с вашей реальной ситуацией

чтобы иметь возможностьpythonвызыватьcaffe, также необходимо выполнить

make pycaffe -j12

На этом вся компиляция закончена.

проверять

использоватьipythonЭкологические испытания

caffe

Если вы будете осторожны, вы обнаружите, что новыйterminal, также открытьipython,такой жеimport caffe, но сообщит об ошибке, в чем причина этого?

caffe

без ошибокterminal, посмотрите на переменные среды, и вы найдете подсказки

caffe

при компиляцииcaffeв процессе будетexportпеременная средыPYTHONPATH, поэтому нам также нужно сделать это перед использованием

caffe

Для простоты оператор объявления можно записать как~/.bashrc, вам не нужно выполнять его каждый раз

export PYTHONPATH=/home/xugaoxiang/Works/github/caffe/python:$PYTHONPATH

Q & A

Q1

Процесс компиляции столкнулсяtiffсвязанные ошибки

caffe

Это связано с предыдущимopencvВызвано компиляцией исходного кода, здесь следует обратить особое внимание, если он скомпилирован из исходного кода.opencv, то вы должны добавить параметры при настройке-D BUILD_TIFF=ON. Кроме того, постарайтесь не иметь обоихaptиcondaДве установленные среды более подвержены ошибкам для новичков.

Q2

Входитьipythonсередина,import caffeсообщить об ошибке

caffe

будетlibhdf5_hl.so.100путь к присоединениюLD_LIBRARY_PATHсередина

export LD_LIBRARY_PATH=/home/xugaoxiang/anaconda3/lib:$LD_LIBRARY_PATH

Q3

Входитьipythonсередина,import caffeсообщить об ошибке

caffe

ИсправлятьMakefile.config,ИсправлятьPYTHON_LIBRARIESза

PYTHON_LIBRARIES := boost_python3 python3.7m

По умолчаниюpython2

Q4

оcaffeскомпилировано из исходниковopencv4,так какopencv4Разница версий сообщит об ошибке

caffe

Это связано сopencv4, макрос в оригинальной версииCV_LOAD_IMAGE_COLORиCV_LOAD_IMAGE_GRAYSCALEбыл изменен наcv::IMREAD_COLORиcv::ImreadModes::IMREAD_GRAYSCALE, так и должно бытьcaffeНайдите и замените в каталоге исходного кода для успешной компиляции

caffe

Q5

Отчет во время компиляцииhdf5Заголовочный файл не найден? Даже если команда установки выполняется

sudo apt install libhdf5-dev
src/caffe/layers/hdf5_data_layer.cu:10:10: fatal error: hdf5.h: No such file or directory
 #include "hdf5.h"
          ^~~~~~~~
compilation terminated.
Makefile:604: recipe for target '.build_release/cuda/src/caffe/layers/hdf5_data_layer.o' failed
make: *** [.build_release/cuda/src/caffe/layers/hdf5_data_layer.o] Error 1
make: *** Waiting for unfinished jobs....

Его нужно изменитьMakefile.configфайл, вINCLUDE_DIRдобавить путь после/usr/include/hdf5/serial,существуетLIBRARY_DIRдобавлено после/usr/lib/x86_64-linux-gnu/hdf5/serial

использованная литература