一、安装顺序
Cuda9.0(先安装显卡驱动) cuDNN7.2.1 OpenCV3.4.2 Tensorflow1.10
首先Ubuntu要安装一些依赖库
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
二、更新一下显卡驱动,GeForce1060显卡,最新驱动390版本(2018.8.12)
2.1 NVIDIA网站,查找下载.run文件
https://www.nvidia.com/Download/index.aspx?lang=en-us
2.2 卸载老驱动
sudo apt-get autoremove --purge nvidia-*
2.3 安装新驱动
关闭图形界面,安装.run驱动文件,打开图形界面
sudo service lightdm stop #(关闭图形界面) (实测重装驱动需要此步骤)
./NVIDIA-390.run #(运行驱动安装文件,若无权限,使用chmod +x NVIDIA-390.run)
sudo service lightdm start #(打开图形界面)
nvidia-smi #(查看显卡及驱动状态,smi--System Management Interface)
三、安装CUDA9.0+cuDNN7.2.1
下载CUDA9.0
https://developer.nvidia.com/cuda-toolkit-archive
上述网站选择适合当前系统的CUDA版本,下载.run文件
测试方法
终端输入如下指令查询cuda版本信息
nvcc --version
把CUDA路径添加到用户环境变量里
sudo gedit ~/.bashrc
打开文件,把下面两条添加到文件末尾
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
执行
source ~/.bashrc
使配置文件生效
3.2 安装cuDNN
下载地址
https://developer.nvidia.com/rdp/cudnn-download
[cuDNN v7.2.1 Library for Linux]
下载得到tgz文件
tar xvf cudnn-xxx
进入cudnn7.2.1解压之后的include目录,在命令行进行如下操作:
sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再进入lib64目录下的动态文件进行复制和链接:
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.7 #删除原有动态文件
sudo ln -s libcudnn.so.7.2.1 libcudnn.so.7 #生成软衔接
sudo ln -s libcudnn.so.7 libcudnn.so #生成软链接
四、安装OpenCV3.4.2
4.1 OpenCV依赖包
GCC 4.4.x or later
CMake 2.6 or higher
Git
GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI
pkg-config
Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, - - python-numpy)
ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, - libswscale-dev
[optional] libtbb2 libtbb-dev
[optional] libdc1394 2.x
[optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
安装指令
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 libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev #处理视频所需的包
sudo apt-get install libatlas-base-dev gfortran #优化opencv功能
sudo apt-get install ffmpeg
4.2 OpenCV3.4.2源码下载配置
创建文件夹并打开
mkdir OpenCV
cd OpenCV
官方下载地址
https://opencv.org/releases.html
注:官网下载速度太慢,在CSDN上下载了一个.7z的压缩源码
7z解压方法
sudo apt install p7zip-full #安装解压软件
7z x opencv3.4.2+contrib.7z -r -o /home/xx # x ---- 解压缩;-r ---- 表示递归所有的子文件夹;-o 是指定解压到的目录
unzip opencv-3.4.2.zip
unzip opencv_contrib-3.4.2.zip # 解压官方源码压缩包
配置编译opencv (NVIDIA CUDA版本)
cd opencv-3.4.2
mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/OpenCV/opencv_contrib-3.4.2/modules \
-D PYTHON_EXCUTABLE=/usr/bin/python \
-D WITH_CUDA=ON \ # 使用CUDA
-D WITH_CUBLAS=ON \
-D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
-D CUDA_ARCH_BIN="6.1" \ # 这个需要去官网确认使用的GPU所对应的版本(https://developer.nvidia.com/cuda-gpus)
-D CUDA_ARCH_PTX="" \
-D CUDA_FAST_MATH=ON \ # 计算速度更快但是相对不精确
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \ # 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考[这里](http://stackoverflow.com/questions/17420739/opencv-2-4-5-and-qt5-error-s)
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=ON ..
(上面指令报错找不到目录,把-D后面空格删除后,可行,不知道什么原理)
编译完成之后安装
sudo make -j6
sudo make install
make时出错,错误信息:
[ 88%] Built target example_gpu_optical_flow
Scanning dependencies of target example_gpu_video_reader
[ 88%] Building CXX object samples/gpu/CMakeFiles/example_gpu_video_reader.dir/video_reader.cpp.o
/usr/bin/ld: CMakeFiles/example_gpu_multi.dir/multi.cpp.o: undefined reference to symbol '_ZN3tbb18task_group_contextD1Ev'
//usr/lib/x86_64-linux-gnu/libtbb.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
samples/gpu/CMakeFiles/example_gpu_multi.dir/build.make:120: recipe for target 'bin/example_gpu_multi' failed
make[2]: *** [bin/example_gpu_multi] Error 1
CMakeFiles/Makefile2:46979: recipe for target 'samples/gpu/CMakeFiles/example_gpu_multi.dir/all' failed
make[1]: *** [samples/gpu/CMakeFiles/example_gpu_multi.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
[ 88%] Built target example_gpu_farneback_optical_flow
[ 88%] Linking CXX executable ../../bin/example_gpu_generalized_hough
[ 88%] Built target opencv_perf_superres
[ 88%] Linking CXX executable ../../bin/example_gpu_video_reader
[ 88%] Built target example_gpu_generalized_hough
[ 88%] Linking CXX executable ../../bin/example_gpu_pyrlk_optical_flow
[ 88%] Linking CXX executable ../../bin/example_gpu_stereo_multi
[ 88%] Linking CXX executable ../../bin/example_gpu_opticalflow_nvidia_api
[ 88%] Built target example_gpu_video_reader
[ 88%] Built target example_gpu_pyrlk_optical_flow
[ 88%] Built target example_gpu_opticalflow_nvidia_api
[ 88%] Built target example_gpu_stereo_multi
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2
错误原因猜测为关于multi gpu的example例程出问题了,所以更改cmake指令参数-DBUILD_EXAMPLES=OFF,并添加-DBUILD_TESTS=OFF(此句应该不添加也没问题)
将make生成清除再重新cmake、make
$ make clean
$ cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DINSTALL_C_EXAMPLES=OFF \
-DOPENCV_EXTRA_MODULES_PATH=~/OpenCV/opencv_contrib-3.4.2/modules \
-DBUILD_opencv_python3=ON -DBUILD_opencv_python2=OFF \ ##这里做了些更改,生成与Anaconda+Python3匹配的共享库(2018.08.15)
-DPYTHON_EXCUTABLE=/home/guo/anaconda3/bin/python3 \
-DPYTHON3_INCLUDE_DIR=/home/guo/anaconda3/include/python3.6m \
-DPYTHON3_LIBRARY=/home/guo/anaconda3/lib/libpython3.6m.so.1.0 \
-DPYTHON_NUMPY_PATH=/home/guo/anaconda3/lib/python3.6/site-packages \
-DWITH_CUDA=ON \
-DWITH_CUBLAS=ON \
-DDCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
-DCUDA_ARCH_BIN="6.1" \
-DCUDA_ARCH_PTX="" \
-DCUDA_FAST_MATH=ON \
-DWITH_TBB=ON \
-DWITH_V4L=ON \
-DWITH_GTK=ON \
-DWITH_OPENGL=ON \
-DBUILD_EXAMPLES=OFF \
-DWITH_OPENMP=ON \
-DBUILD_TESTS=OFF ..
##将生成的Anaconda+Python3匹配的共享库复制到anaconda lib python3.6的目录下(2018.08.15)
$ cp /home/guo/OpenCV/opencv-3.4.2/build/lib/python3/* ~/anaconda3/lib/python3.6/site-packages/
$ sudo make -j6
$ sudo make install
用python测试
import cv2
cv2.__version__
4.2 OpenCV环境配置
环境配置添加库路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
#打开后可能是空文件,在文件内容最后添加
/usr/local/lib
更新系统库
sudo ldconfig
配置bash,执行如下命令
sudo gedit /etc/bash.bashrc
#在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,然后执行如下命令使得配置生效
source /etc/bash.bashrc
# 激活配置然后更新database
sudo updatedb
4.3 在CLion中测试
创建CMakeLists.txt文件
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV REQUIRED)
add_executable(demo main.cpp)
target_link_libraries( demo ${OpenCV_LIBS} )
创建Main.cpp文件
#include
#include
using namespace cv;
using namespace std;
int main()
{
Mat image;
# 必须使用绝对路径
image = imread("/home/nic/20171125154428073.png");
if ( image.empty() )
{
cout<<"No image data!"<< endl;
return -1;
}
namedWindow("Display Image");
imshow("Display Image", image);
waitKey(0);
return 0;
}
进行测试
五、Tensorflow安装
根据Tensorflow官网的安装教程 https://www.tensorflow.org/install/install_linux
首先添加环境变量
sudo gedit ~/.bashrc
打开配置文件,添加
export CUDA_HOME=/usr/local/cuda ## 打开目录,发现/usr/local下有一个cuda-9.0的快捷方式
然后,运行指令
source ~/.bashrc
更新配置
Tensorflow官网安装教程里,需要安装libcupti-dev库,安装教程,运行下面代码
sudo apt-get install cuda-command-line-tools
提示无法定位软件,经过百度,google查到,在安装CUDA9.0时已经安装了此库,在如下位置
/usr/local/cuda/extras/CUPTI/lib64
然后,只要添加一下环境变量就可以了,添加方法跟前面一样,在 ~/.bashrc最后添加,记得执行 source ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64
继续跟随官网教程,有一个可选的安装选项,Nvidia TensorRT3.0,查了一下,可以加速模型预测速度,在Nvidia官网下载了一个3.0.4版本(Ubuntu14.04,Tensorflow教程中要求下载此版本)的tar文件,根据Nvidia教程解压,添加环境变量,后续没有尝试其他,以后用到的话再说
最后,根据Tensorflow官网教程使用 Virtualenv 安装 TensorFlow:
1.发出下列其中一条命令来安装 pip 和 Virtualenv:
$ sudo apt-get install python-pip python-dev python-virtualenv # for Python 2.7
$ sudo apt-get install python3-pip python3-dev python-virtualenv # for Python 3.n
2.发出下列其中一条命令来创建 Virtualenv 环境:
$ virtualenv --system-site-packages targetDirectory # for Python 2.7
$ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n
targetDirectory 用于指定 Virtualenv 树的顶层目录。我们的指令假定 targetDirectory 为 ~/tensorflow,但您可以选择任何目录。
3.通过发出下列其中一条命令激活 Virtualenv 环境:
$ source ~/tensorflow/bin/activate # bash, sh, ksh, or zsh
$ source ~/tensorflow/bin/activate.csh # csh or tcsh
$ . ~/tensorflow/bin/activate.fish # fish
4.确保安装了 pip 8.1 或更高版本:
(tensorflow)$ easy_install -U pip
5.发出下列其中一条命令以在活动 Virtualenv 环境中安装 TensorFlow:
(tensorflow)$ pip install --upgrade tensorflow # for Python 2.7
(tensorflow)$ pip3 install --upgrade tensorflow # for Python 3.n
(tensorflow)$ pip install --upgrade tensorflow-gpu # for Python 2.7 and GPU
(tensorflow)$ pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU
等待下载安装完成,根据提示如缺失依赖库就用pip指令安装相应库即可,本人电脑上没有出现问题。
6.测试,需要在tensorflow环境激活状态下,python指令进入python终端,执行下面代码
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
若输出
b'Hello, TensorFlow!'
说明安装没有问题~
7.在jupyter-notebook中使用tensorflow virtualenv的问题
因为一开始是在virtualenv下安装的虚拟环境,所里打开jupyter-notebook后,看不到相关的kernel,查询资料,首先安装了nb_conda软件包,使用conda install
conda install nb_conda
安装完成后,发现可以看到conda下的虚拟环境,还是看不到virtualenv下的tensorflow环境,继续查资料,使用ipykernel软件包,通过pip安装
sudo pip install ipykernel
安装完成后,使用下述命令建立tensorflow虚拟环境的Kernel,注意在tensorflow环境激活状态下
python -m ipykernel install --user --name=tensorflow
这样tensorflow Kernel就建立好了,尝试了一下,不必在tensorflow环境激活状态下启动jupyter-notebook,也可以使用tensorflow Kernel!