本文主要是讲解基于python3在ubuntu上安装caffe和opencv4.4
对于原版caffe目前支持的是python2,很多基于python2的软件包在python3时就不在更新,但是安装caffe时就需要这些软件包,所以当在python3的环境下安装caffe时,就会出现不支持的情况,我就遇到pip进行安装时不支持的情况。
还有就是opencv,caffe原版使用的是opencv2.4版本,但是现在opencv都更新到opencv4.4版本了,其中很多定义都进行了改变,不仅仅是c++编译器,连安装路径都改变了。这时我们就需要安装基于python3的opencv4.4
首先要安装opencv的依赖
下面是opencv依赖的第三方库,可以依次进行安装:
# a fresh start in the morning
$ sudo apt-get update
$ sudo apt-get upgrade
# install the dependencies
$ sudo apt-get install build-essential cmake git unzip pkg-config
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install libgtk2.0-dev libcanberra-gtk*
$ sudo apt-get install python3-dev python3-numpy python3-pip
$ sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev
$ sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libavresample-dev libvorbis-dev libxine2-dev
$ sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
$ sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
$ sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev
$ sudo apt-get install liblapack-dev libeigen3-dev gfortran
$ sudo apt-get install libhdf5-dev protobuf-compiler
$ sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev
# a symlink to videodev.h
$ cd /usr/include/linux
$ sudo ln -s -f ../libv4l1-videodev.h videodev.h
$ cd ~
下载opencv以及第三方库:
$ cd ~
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.4.0.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip
下载完成后,对文件进行解压,创建编译环境:
$ mv opencv-4.4.0 opencv
$ mv opencv_contrib-4.4.0 opencv_contrib
$ cd opencv
$ mkdir build
$ cd build
安装cuda
在编译之前首先要确认,你的机器上是否有cuda,以及相关驱动,如果没有安装可以使用下面命令进行查看你的显卡情况,并根据相应的信息,去英伟达官方网站下载相应的驱动以及cuda,这里具体安装不在详细介绍:
#命令
$ nvidia-smi
在安装caffe之前,cuda是必须要进行安装的。还有就是cuda版本和cudnn版本要相对应。
编译opencv
需要注意 -D后面有一个空格,这里OPENCV_GENERATE_PKGCONFIG 需要设置为on,后面安装caffe时需要用到。这里提供两种编译opencv的方法,一种是使用cuda的方式,一种是不使用cuda的方式,在使用cuda的方式时 需要设置CUDA_ARCH_BIN=7.0这里我的是7,你的需要进行查看你的架构数,需要匹配才可以
下面是cuda方式:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=OFF \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D CUDA_ARCH_BIN=7.0 \
-D WITH_CUBLAS=ON \
-D WITH_CUDNN=ON \
-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.7.6.5 \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include \
-D BUILD_EXAMPLES=OFF ..
没有cuda的方式如下:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=OFF \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_TESTS=OFF \
-D BUILD_EXAMPLES=OFF ..
如果所有的配置正确,会出现如下的信息:
后面就是make opencv了
#编译
$ make -j8 #8是线程数
编译成功后运行:
$ sudo make install
$ sudo ldconfig
$ sudo apt-get update
安装完成进行测试如下:
到此opencv基本安装完成,
安装caffe
安装caffe前需要安装caffe所需的依赖如下:
$ sudo apt-get install cmake git unzip
$ sudo apt-get install libprotobuf-dev libleveldb-dev liblmdb-dev
$ sudo apt-get install libsnappy-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install --no-install-recommends libboost-all-dev
$ sudo apt-get install libatlas-base-dev libopenblas-dev
$ sudo apt-get install the python3-dev python3-skimage
$ sudo pip3 install pydot
$ sudo apt-get install graphviz
下载caffe:
这里我们下载的不是原版的caffe,原版的caffe不存在ssd,所以我们下载的caffe是经过修改的,支持opencv4.4和cudnn8.0以及python的caffe,里面还添加了支持树莓派和jetson nano的脚本。
链接:https://pan.baidu.com/s/1bJgbIWfCdB9ZOGyuXItuWA
提取码:mcel
这里下载下来然后进行解压$ unzip caffe.zip
$ mv caffe-ssd caffe
cuDNN
cudnn版本8已经丢弃了caffe所依赖的一些接口,编译的过程中会出现"CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT was not declared in this scope". 其中两个接口cudnnGetConvolutionForwardAlgorithm , cudnnGetConvolutionBackwardDataAlgorithm被其他的接口替代,并且 cudnnGetConvolutionBackwardFilterAlgorithm接口没有找到合适的替代。
这里安装cudnn你有三个选择:
1.将版本降到7.6,这个是不建议的,会导致其他依赖出现问题
2.使用没有cudnn进行编译caffe,保留cuda进行编译caffe,这样也是可以使用的
3.使用上面修改过的caffe,这里我们将 cudnnGetConvolutionBackwardFilterAlgorithm算法设置为一个常量, CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0 这个可能不是最优的选择,但是是可以使用的,当然这个修改只适用于cudnn8,对于其他的版本是不适用的。
编译caffe
这里我们配置caffe Makefile的环境,具体配置可以参考我的另外的博客。这里是使用配置好的文件。
$ cd ~/caffe
# If you use CUDA, copy the cp38_x86_64-linux-gnu_CUDA_example
$ cp Makefile.config.cp38_x86_64-linux-gnu_CUDA_example Makefile.config
# Or without CUDA, copy the cp38_x86_64-linux-gnu_example
$ cp Makefile.config.cp38_x86_64-linux-gnu_example Makefile.config
# After you select one of the above configurations, the build can start
$ make clean
$ make all -j$(nproc)
$ make test -j$(nproc)
$ make runtest -j$(nproc)
编译成功后可以看到如下的信息:
最常见的错误是如果你将20.04的caffe版本安装到18.04系统上会出现如下问题。
如果在ubuntu18.04上安装caffe,请参考我的另外的博客。
python build
上面只是编译了c++的部分,如果想要python支持,还需要编译python部分。
# Assuming you're still in ~/caffe
$ make pycaffe
$ make pytest
最后就是添加环境变量了,可以在 ~/.bashrc 或者 ~/.profile中添加环境变量,编辑器可以用vim或者nano以及gedit都可以
$ cd ~
$ sudo nano ~/.bashrc
# at the end of the file add the next line
export PYTHONPATH="${PYTHONPATH}:$HOME/caffe/python"
# save and close with
Ctrl+X, Y, Enter