前言:这两天给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
编译没问题的话, 就可以安装了
sudo make install
sudo ldconfig
恭喜 ! 你完成了在Ubuntu上安装OpenCV 3.1,接下来验证一下:
python
>>> import cv2
>>> cv2.__version__
这里可以看到已经成功安装了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
编译到最后出现一个问题:
cd ~/opencv/3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64
sudo cp libippicv.a /usr/local/lib
再次输入
`make -j8`
这里可以看到刚刚那个问题已经解决了,编译成功后,安装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 #第一次启动是从网上下载数据集,这期间可能需要耐心等待,千万不要中断退出,否则会造成数据集损坏
如果要实现GPU加速
python train_mnist.py --network mlp --gpus 0
好了~到这里MXNet就安装和测试完成了