本文是第一次在Ubuntu 16.04上安装Caffe(GPU)的过程。主要参考了以下链接:
https://blog.csdn.net/a_z666666/article/details/72853346
https://blog.csdn.net/yhaolpz/article/details/71375762
https://blog.csdn.net/yggaoeecs/article/details/79163789
https://blog.csdn.net/DumpDoctorWang/article/details/82317235
http://www.cnblogs.com/go-better/p/7161006.html
一、安装依赖包
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git cmake build-essential
二、cuda8.0
1.安装驱动
英伟达驱动查询与下载官网https://www.nvidia.cn/Download/index.aspx?lang=cn
Ubuntu 16.04的自带的驱动支持CUDA 8.0 和CUDA 9.0;Ubuntu 18.04自带的驱动支持CUDA 9.0和CUDA 9.1。
Ubuntu 16.04也可以安装CUDA 9.1,不过需要更新驱动,可参考其他博客。不过不建议在Ubuntu 16.04上安装CUDA 9.1。
OpenCV2.4.13仅支持CUDA 8.0;OpenCV 3.2.0仅支持CUDA8.0;OpenCV 3.4.2支持CUDA 9.1、CUDA 9.0、CUDA 8.0。
所以如果你使用Ubuntu16.04,那么安装CUDA 8.0的时候OpenCV版本可以随意选;如果安装的是CUDA 9.0,那么OpenCV得选3.4.0以上了(2.4.*和3.2.*不行,3.3.*没有测试过)。如果你使用Ubuntu 18.04,那么必须安装CUDA 9.1,OpenCV得选3.4.0以上了(2.4.*和3.2.*不行,3.3.*没有测试过)。
2.cuda下载
https://developer.nvidia.com/cuda-toolkit-archive
三、cudnn7.0
四、OpenCV3.1.0
OpenCV:https://github.com/opencv/opencv/releases
OpenCV contrib: https://github.com/opencv/opencv_contrib/releases
首先肯定是先安装依赖了,官方列出了一些:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install --assume-yes libopencv-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev
在你喜欢的地方建立一个工作目录,随便什么名字,就在home目录下面建立了一个opencv的目录
mkdir opencv
进入这个工作目录(opencv)然后用git克隆官方的项目(下载接受会需要一点时间,等待)
cd opencv
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
克隆好了之后,你就会看见你的工作目录(opencv)下面有了两个项目的文件夹opencv了。
进入到你下载的那个opencv文件夹,这时候建立一个build的文件夹,用来接收cmake之后的文件。
命令行进入已解压的文件夹 opencv-3.1.0 目录下,执行:
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON ..
这里要解释一下,后面是一个空格加上两个点,不要搞错了。
运行之后,下图表示cmake完成了。
安装OpenCv 3.1的过程中要在编译(make -j16)时下载ippicv_linux_20151201,由于网络的原因,这个文件经常会下载失败。
在确保MD5是808b791a6eac9ed78d32a7666804320e的情况下:
在OpenCV源代码的根目录下创建目录:
opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
将下载后的ippicv文件拷进去。
编译:
make -j16
或
make -j $(nproc)
-j16表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。 编译安装,输入make -j $(nproc) (这是多进程make的命令,$(nproc)就是进程数,当然也可以直接指定),这会花很长时间
可能出现问题:
这里写图片描述
这是因为opecv3.0与cuda8.0不兼容导致的。解决办法:修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件内容,如图:
其中, #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000) 是我们修改的。
编译成功后安装(必须加sudo,否则安装的是2.4.9版本):
sudo make install #安装
安装完成后通过查看 opencv 版本验证是否安装成功:
pkg-config --modversion opencv
五、安装caffe
1.首先在你要安装的路径下 clone :
git clone https://github.com/BVLC/caffe.git
进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :
cp Makefile.config.example Makefile.config
然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:
gedit Makefile.config
2.修改 Makefile.config 文件内容:
①应用 cudnn
将
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
②应用 opencv 版本
将
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
③使用 python 接口
将
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
④修改 python 路径
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
3.然后修改 caffe 目录下的 Makefile 文件:
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
4.然后修改 /usr/local/cuda/include/host_config.h 文件 :
将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
OK 。
5.开始编译了,在 caffe 目录下执行 :
make all -j16
make test -j16
sudo make runtest -j16
这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。
在make runtest时可能会出现的问题:
①问题一:
解决方法:
②问题二:
解决方法:
③问题三及解决方法:
如果运行之后出现下图,说明caffe配置成功。
六、编译Python接口
具体参考:
https://blog.csdn.net/qq_38784979/article/details/82811907
七、测试
能训练了,打印训练参数网络结束后却提示:已放弃,核心已转存
这时候只需要在./examples/mnist/train_lenet.sh前加个sudo就解决问题了
caffe训练途中停止之后继续训练
如果我们在训练途中停电或者有了其他的情况,可以通过之前保存的状态恢复数据,使用的时候直接添加–snapshot参数即可,如:
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
这时候运行会从snapshot开始继续运行
python opencv 添加文字 cv2.putText 各参数详解
cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)
各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细