首先明確的一點是,tx2是arm內核並自帶cuda9.0,至於cudnn的版本也需要得知,用cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2 進行查看,tx2自帶的cudnn版本爲7。
一、安裝opencv(python)
在python3中需要用到opencv 3.4.0 在 python3.5中的安裝,檢查是否成功的方法是用python3.5輸入import cv2,不報錯則成功,或者直接在 /usr/local/lib/python3.5/dist-packages中可以找到cv2.so。
安裝方法爲:
1.刪除原有opencv庫並安裝其它所依賴的庫
sudo apt-get purge libopencv*
sudo apt-get purge python-numpy
sudo apt autoremove
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install --only-upgrade g++-5 cpp-5 gcc-5
sudo apt-get install build-essential make cmake cmake-curses-gui g++ libavformat-dev libavutil-dev libswscale-dev libv4l-dev libeigen3-dev libglew-dev libgtk2.0-dev
sudo apt-get install libdc1394-22-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install libjpeg8-dev libjpeg-turbo8-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev
sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran
sudo apt-get install libopenblas-dev liblapack-dev liblapacke-dev
sudo apt-get install qt5-default
sudo apt-get install python3-dev python3-pip python3-tk
sudo pip3 install numpy
sudo pip3 install matplotlib
如果matplotlib版本過高,則下載低版本。
sudo vim /usr/local/cuda/include/cuda_gl_interop.h
cd /usr/lib/aarch64-linux-gnu/
sudo ln -sf tegra/libGL.so libGL.so
將該頭文件中的62-68行改爲:
/#if defined(__arm__) || defined(__aarch64__)
//#ifndef GL_VERSION
//#error Please include the appropriate gl headers before
including cuda_gl_interop.h
//#endif
//#else #include <GL/gl.h>
//#endif
2.下載opencv3.4.0源碼
用git clone 或者 wget的方式經常會有early EOF的錯誤,推薦直接下zip或者tar。
https://github.com/opencv/opencv/releases/tag/3.4.0
3.編譯opencv
在cmake時加如下編譯選項,否則無法得到opencv-python庫。
cmake -D CMAKE_BUILD_TYPE=RELEASE \
CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN="6.2" \
-D CUDA_ARCH_PTX="" \
-D WITH_CUBLAS=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D ENABLE_NEON=ON \
-D WITH_LIBV4L=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D PYTHON3_EXCUTABLE=/usr/bin/python3\
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.5m \
-D PYTHON3_LIBRARY=/usr/lib/aarch_64-linux-gnu/libpython3.5m.so \
-D PYTHON_NUMPY_PATH=/usr/local/lib/python3.5/dist-packages ..
也就是說,在cmake輸出的打印中的python選項,一定要看到:
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.5.2)
-- Libraries: /usr/lib/aarch64-linux-gnu/libpython3.5m.so (ver 3.5.2)
-- numpy: /usr/local/lib/python3.5/dist-packages/numpy/core/include (ver 1.14.0)
-- packages path: lib/python3.5/dist-packages --
-- Python (for build): /usr/bin/python2.7
這樣纔會按照我們希望的路徑安裝。
如果想要使用opencv所自帶的一些算法,如tracking等,需要下載opencv_contrib包,必須要下載源碼,用pip安裝不了!下載完畢後在cmake選項後加入-D OPEN_EXTRA_MODULE=...(opencv_contrib)/modules,這樣便一併進行了編譯。
在 with_qt的編譯時,出現了“please include the appropriate gl headers before including cuda_gl_interop.h"的問題時,需要將/usr/local/cuda-9.0/targets/aarch64-linux/include/cuda_gl_interop.h 中第65行開始的#endif註釋掉,使#include <GL/gl.h>被觸發!
在make install完成後,需要將以下的庫文件鏈接到/usr/local/lib/python3.5/dist-packages中,這個命令在此文件路徑下觸發。
sudo ln -s /home/ubuntu/opencv-3.4.0/build/lib/python3/cv2.cpython-35m-aarch64-linux-gnu.so cv2.so
這樣便可以通過opencv-python是否安裝成功的測試。
Ps:某些tx2在安裝完成後打開videocapture可能會出現問題,此時用cv2.CAP_GSTREAMER代替!!
二、安裝keras與tensorflow
yolo有多種形式可供使用,如果單純使用darknet進行識別則只需要下載其c語言的源碼並編譯運行,在這裏需要使用keras搭建yolov3網絡框架,因此不必下載yolo源碼。
1.tensorflow
根據github博主的readme,yolo需要tensorflow1.4.0,但是實測1.5~1.6也可以使用,先下載其他依賴:
sudo apt-get install zip unzip autoconf automake libtool curl zlib1g-dev maven -y
sudo apt-get install python-numpy swig python-dev python-pip python-wheel -y
安裝java:
注意如果使用apt-get安裝會遭遇Package oracle-java8-installer is not available此類錯誤,因此需要在Oracle官網下載jdk1.8安裝包並解壓。
cd /usr/lib
sudo mkdir jdk
sudo mv jdk1.8.0_241 /usr/lib/jdk/jdk1.8
export JAVA_HOME=/usr/lib/jdk/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
source ~/.bashrc
最後用java -version查看安裝是否成功。
安裝bazel:
https://github.com/bazelbuild/bazel/tags?after=0.15.0在官方網站直接下載0.9.0版本,並執行compile.sh即可。
https://github.com/peterlee0127/tensorflow-nvJetson/releases
我們在上述地址下載已編譯好的tensorflow的wheel,注意選擇python3.5的版本,接下來直接用pip3安裝該輪子即可。
測試tensorflow是否成功安裝的方法是在python3中import tensorflow as tf;print(tf.__version__),有輸出則成功。
2.keras
sudo apt-get install python3-scipy
sudo apt-get install libblas-dev liblapack-dev
sudo pt-get install gfortran
pip3 install keras==2.2.5
至此環境部署完畢,以上的工作我將寫成腳本形式便於一鍵安裝。
最終使用版本爲tensorflow1.6.0-rc1,keras2.2.5。
三、下載yolov3-deepsort源碼
1.首先感謝博主Qidian213的勞動成果,在https://github.com/Qidian213/deep_sort_yolov3.git上下載代碼,並在yolo官網上下載權重文件,由於tx2上無法實時運行yolov3網絡,因此只需要下載yolov3-tiny.weights文件。
2.將權重文件加載到keras中:python convert.py yolov3.cfg yolov3-tiny.weights model_data/yolo.h5
3.運行demo.py,接下來的自己盡情發揮吧。