软硬件环境

  • 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

简介

先说一下环境,使用anacondapython虚拟环境,支持opencv,支持CUDAcuDNN加速,支持在python中调用caffe。基础组件部分可以参考前面的文章,本文就不赘述了

  • anaconda基本使用 https://xugaoxiang.com/2019/12/08/anaconda/
  • ubuntu安装CUDA和cuDNN https://xugaoxiang.com/2019/12/13/ubuntu-cuda/
  • opencv源码编译,支持CUDA https://xugaoxiang.com/2019/12/17/opencv-cuda/

基础环境准备

安装依赖包和工具

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-devpip 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

接下来就可以编译caffe

git clone https://github.com/BVLC/caffe.gitcd caffecp 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# 启用opencvUSE_OPENCV := 1# USE_LEVELDB := 0# USE_LMDB := 0# This code is taken from https://github.com/sh1r0/caffe-android-lib# USE_HDF5 := 0

# 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 # For CUDA # 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 OpenBlasBLAS := 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/includeLIBRARY_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找到opencvUSE_PKG_CONFIG := 1# N.B. both build and distribute dirs are cleared on `make clean`# 默认编译的目录,所有的目标文件、可执行文件、库都存放在这里BUILD_DIR := buildDISTRIBUTE_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。还有就是尽量不要同时拥有aptconda安装的2种环境,对新手来说比较容易出错。

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_COLORCV_LOAD_IMAGE_GRAYSCALE已经改成了cv::IMREAD_COLORcv::ImreadModes::IMREAD_GRAYSCALE,所以,需要在caffe源码目录中查找并替换,才能够编译成功

caffe

参考资料

  • anaconda基本使用
  • ubuntu安装CUDA和cuDNN
  • opencv源码编译,支持CUDA
  • https://github.com/BVLC/caffe/issues/4436

python opencv源码_caffegpu源码编译相关推荐

  1. python opencv 条形码及二维码检测识别

    目录 条形码检测识别 二维码检测识别 基于python opencv pyzbar 实现. 条形码检测识别 原图: 最后截取图: 直接上代码: import cv2 import numpy as n ...

  2. python opencv调用cuda_Win10使用VS2019从源码编译OpenCV 4.4 + CUDA 11.0 + Cudnn 8.0 + python3

    本文主要介绍Win10使用VS2019从源码编译OpenCV 4.4,并使用opencv_contrib支持CUDA 11.0 + Cudnn 8.0,以及对python3的支持. 1 首先准备安装环 ...

  3. 【Python 笔记】Linux 下源码编译安装 python

    本文记录在 Linux 上源码编译安装 python 的过程. 文章目录 1. 源码编译安装说明 2. 安装 python2.7 3. 安装 python3.6 1. 源码编译安装说明 安装过程比我想 ...

  4. opencv + contrib windows下源码编译

    网上,包括书上有很多人云亦云的源码编译方式,不能说不正确但是有很多弯弯绕绕(坑).最近刚做完了一个识别项目的第一个版本,总结了一下..为了写这篇文章,特意重新在自己电脑搭了一遍开发环境. 最权威的方式 ...

  5. python opencv人脸识别考勤系统的完整源码

    这篇文章主要介绍了python opencv人脸识别考勤系统的完整源码,本文给大家介绍的非常详细,希望对大家的学习或工作具有一定的参考借鉴价值. 代码如下: import wx import wx.g ...

  6. python+opencv实现多张图像拼接_附源码

    文章目录 前言 完整源码 下载链接:[https://download.csdn.net/download/DeepLearning_/87290571](https://download.csdn. ...

  7. python代码封装加密_对Python源码加密及反编译前后对比

    关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...

  8. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版

    给大家带来的一篇关于计算机视觉相关的电子书资源,介绍了关于OpenCV3.Qt5.计算机视觉.应用开发方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小117.2 MB,阿敏·艾哈迈迪·泰 ...

  9. AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)

    摘要: 好吧,伙计们,我回来了.说我拖更不写文章的可以过来用你的小拳拳狠命地捶我胸口.... 那么今天我们来讲关于使用python+opencv+face++来实现人脸验证及人脸解锁.代码量同样不多, ...

最新文章

  1. 【C语言】两种方式实现冒泡排序算法
  2. python好学吗 老程序员-想自学程序员,朋友推荐了python,靠谱吗?
  3. 个人计算机的组成及相关功能,计算机的组成部分及功能(范文).doc
  4. DOS批处理中%cd%和%~dp0的区别
  5. 我是一个CPU:这个世界慢!死!了!
  6. 空军军医大学计算机复试线,2021空军军医大学考研国家线公布时间_国家线是多少分...
  7. cocoapods导入afnetworking报错问题
  8. 语音聊天室 anyHouse 使用手册
  9. 仙剑奇侠传五破解方法(虚拟机版)
  10. 使用windows内存-内存映射文件
  11. 视觉+机械手-delta并联机械手
  12. 永中word页码怎么从第二页开始_Word文档”双面打印“全攻略,解决打印难题!...
  13. 灌木修剪机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 《我的眼睛--图灵识别》第四章:基础:图片识别
  15. 办公室网络还能这么搭建?从入门到精通,看这里
  16. 解决org.apache.zookeeper.KeeperException$UnimplementedException:KeeperErrorCode = Unimplemented for /S
  17. Linux FrameBuffer(一) —— FrameBuffer是什么?怎么用?
  18. realpath和access函数浅谈
  19. 【构造】Colored Rooks
  20. 本人编写的近乎全部《仙境传说》(RO)服务器工具下载 包含源代码

热门文章

  1. oracle 好书( 09 对象管理 )
  2. LVS+DR源码安装
  3. 【opencv系列04】OpenCV4.X图形绘制
  4. 苹果7plus元件分布图_苹果iphone7 plus手机拆解全过程评测 iphone7 plus拆机图解教程...
  5. 全网最详细SpringBatch读(Reader)跨多行文件讲解
  6. HDFS NameNode进程挂了并且数据也丢失了,如何进行恢复?
  7. k8s安装工具:sealos设计原理及离线包结构分析
  8. k8s secret使用方式:pod通过变量和volume方式使用secret
  9. golang flag包使用示例:接收命令行参数
  10. k8s容器探针:就绪检测、存活检测