Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)

前言:这两天给MXNet折腾够了,踩了一个又一个的坑,由于pip方式的安装很简单这里就不再讲述,遇到相关问题自己可以上网查下即可解决,这里推荐源代码安装,现在写下一些东西记录下来,希望能帮到大家。

环境:Ubuntu16.04+CUDA8.0(显卡的驱动安装和CUDA以及CUDNN的配置这里就不赘述)

1安装OpenCV

打开终端安装依赖项以及升级所有预安装包:

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 update
sudo apt-get upgrade

这里有个坑:假如遇到报错

E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

终端输入:

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

解决之后继续OpenCV相关包的安装

sudo apt-get install build-essential cmake git pkg-config  #安装开发工具和包
sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev #安装的图像I/O工具包
sudo apt-get install libgtk2.0-dev #OpenCV是用GTK开发包来显示GUI, 安装用户图形界面开发包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev #安装OpenCV处理视频流和单个帧的安装包
sudo apt-get install libatlas-base-dev gfortran #安装OpenCV内部优化工具

安装python包管理器pip

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

安装numpy

pip install numpy

配置python环境变量(不配置环境变量的话,有可能会报“no module named mxnet”的错)

gedit ~/.bashrc
export PYTHONPATH=~/mxnet/python #我这里的mxnet放在home里

预备环境安装结束,接下来正式安装OpenCV 3.1.0

git clone https://github.com/Itseez/opencv.git
cd opencv
git checkout 3.1.0

安装OpenCV支持包,一些算法如SIFT, SURF等

git clone https://github.com/Itseez/opencv_contrib.git
cd opencv_contrib
git checkout 3.1.0

注意: opencv_contrib和OpenCV版本要一致
准备编译OpenCV

cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON D BUILD_EXAMPLES=OFF -D WITH_OPENGL=ON -D  WITH_CUDA=OFF -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules .. 
make -j8(‘8’这个是cpu核数,可以用lscpu命令来查看)

过程中可能会遇到的问题:
1.make过程中:

    /home/hlx/opencv-3.2.0/opencv_contrib-3.2.0/modules/hdf/include/opencv2/hdf/hdf5.hpp:40:18: fatal error: hdf5.h: 没有那个文件或目录 
    compilation terminated.

解决方法:
在终端中输入

locate hdf5.h

发现在/usr/include/hdf5/serial/hdf5.h
在opencv_contrib-3.1.0/modules/hdf/include/opencv2/hdf/hdf5.hpp 文件中修改第40行
#include <hdf5.h> 修改成#include "/usr/include/hdf5/serial/hdf5.h"
详情见https://blog.csdn.net/hlxCSDN/article/details/82768767

2.make过程中:

   fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h: No such file or directory #include "LAPACKE_H_PATH-NOTFOUND/lapacke.h"

解决方法:
sudo apt-get install liblapacke-dev checkinstall
同上,找到 lapacke.h 文件,将#include "LAPACKE_H_PATH-NOTFOUND/lapacke.h"修改为#include "lapacke.h"

解决之后再次输入

make -j8

Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)
编译没问题的话, 就可以安装了

sudo make install
sudo ldconfig

恭喜 ! 你完成了在Ubuntu上安装OpenCV 3.1,接下来验证一下:

python
>>> import cv2
>>> cv2.__version__

Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)

这里可以看到已经成功安装了OpenCV了,可以进入下一阶段进入MXNet的安装了。

2安装MXNet
MXNet 的安装基本上是官方的标准流程

sudo apt-get install -y build-essential git libatlas-base-dev
git clone --recursive https://github.com/dmlc/mxnet
cd mxnet

在编译之前, 修改 MXNet 的 config.mk 文件, 改三个地方:

USE_CUDA = 1
USE_CUDA_PATH = /usr/local/cuda
USE_CUDNN = 1

保存后编译make -j8
编译到最后出现一个问题:
Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)

cd ~/opencv/3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64
sudo cp libippicv.a /usr/local/lib

再次输入

`make -j8`

Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)
这里可以看到刚刚那个问题已经解决了,编译成功后,安装python支持

cd ~/mxnet/python
python setup.py install

运行测试代码前请先安装

  pip install requests

到这里MXNet的安装就可以说是完成了,现在可以运行它的样例程序试试效果:
MNIST手写数字识别,数据集包含6万个手写数字的训练数据集以及1万个测试数据集,每个图片是28x28的灰度图。在mxnet/example/image-classification里可以找到MXnet自带MNIST的识别样例,我们可以先运行一下试试:

cd mxnet/example/image-classification 
python train_mnist.py #第一次启动是从网上下载数据集,这期间可能需要耐心等待,千万不要中断退出,否则会造成数据集损坏

Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)
如果要实现GPU加速

python train_mnist.py --network mlp --gpus 0

Ubuntu 16.04 安装MXNet【GPU版本源代码安装】(OpenCV 3.0 + Python 2.7)
好了~到这里MXNet就安装和测试完成了

参考资料:MXNet官网
博客
博客