天天看點

Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

文章目錄

  • 前言
  • 一、開發部署環境
  • 二、RKNN 三件套介紹
  • 三、安裝過程
    • 3.1 檢視開發闆中DRV的版本(1.3.1)
    • 3.2 關閉開發闆目前系統的圖形界面
    • 3.3 安裝Python3.7
    • 3.4 用virtualenv管理python版本
    • 3.5 安裝相關依賴包(numpy、h5py &opencv)
      • 3.5.1 安裝并更新相關依賴包
      • 3.5.2 安裝并編譯numpy、h5py
      • 3.5.3 安裝并編譯opencv-python
      • 3.5.4 安裝RKNN-Toolkit 1.4.0
      • 3.5.5 安裝TensorFlow 1.14.0
      • 3.5.6 安裝matplotlib
      • 3.5.7 安裝PyTorch
  • 四、測試過程
    • 4.1 在python中測試各子產品是否正常
    • 4.2 運作官方提供的demo,測試RKNN是否安裝成功
    • 4.3 在測試YOLO 官方demo時遇到的問題及解決方法
  • 總結

前言

先前在開發闆上部署了RKNN Toolkit 1.6.0版本,在運作官方提供的demo時存在一些問題,是以這兩天在開發闆上安裝了RKNN Toolkit 1.4.0版本,安裝和測試的過程中也遇到了一些問題,故記錄在此文章中,友善以後自己部署時或者各位同學參考。

一、開發部署環境

開發環境 軟體版本/配置
開發闆型号 Firefly AIO-3399 ProC開發闆 (3+16GB)
開發闆作業系統 Ubuntu 18.04LTS
開發闆固件版本 AIO-RK3399PROC-UBUNTU18.04-GPT-20200525-1016.img
RKNN Toolkit版本 1.4.0 (rknn_toolkit-1.4.0-cp37-cp37m-linux_aarch64.whl)
Python版本 Python 3.7.10
電腦遠端軟體 Xshell 6&Xftpd 6

官方提供的RKNN 1.6.0版本使用者手冊中,有對系統依賴的說明,如下圖:

Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

同時官方的文檔也給出了RKNN 1.4.0版本的系統依賴說明,如下圖:

Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

對比兩張圖,可以看到RKNN兩個版本有以下三個依賴包的版本不相同:

V1.6.0版本 V1.4.0版本
protobuf == 3.11.2’ protobuf == 3.6.1’
‘onnx == 1.6.0’ ‘onnx == 1.4.1’
requests == 2.22.0’ requests == 3.11’

故有些在RKNN 1.6.0環境下編譯出的whl包在部署1.4.0版本時不可直接使用,需要再重新編譯。

二、RKNN 三件套介紹

1、RKNN-Toolkit → 基于 Python 環境的模型轉換推理開發工具

2、DRV → NPU 和上位機通信的服務

3、API → 調用NPU 硬體的 API 接口

三、安裝過程

3.1 檢視開發闆中DRV的版本(1.3.1)

[email protected]:~$ dpkg -l | grep 3399pro
ii  firefly-3399pronpu-driver      1.3.1       arm64        <insert up to 60 chars description>

           

更新DRV的版本

sudo apt update
sudo apt install firefly-3399pronpu-driver
           

更新完後,檢查DRV的版本已更新至1.6.0

[email protected]:~$ dpkg -l | grep 3399pro
ii  firefly-3399pronpu-driver      1.6.0       arm64        <insert up to 60 chars description>

           

3.2 關閉開發闆目前系統的圖形界面

使用Xshell 6 SSH登入開發闆,進行下列操作,防止後續編譯軟體包時因系統記憶體不足導緻編譯失敗

(謹慎使用,最新固件AIO-RK3399PROC-UBUNTU-20210304-1705.img關閉圖形界面後會導緻系統無法啟動,序列槽顯示如下報錯資訊:

4189 序列槽[    4.772713] 00000040: 000002a5 000002a5 00000000 00000000 00000000 00000000 00000000 00000000
4190 序列槽[    4.773490] 00000060: 00000004 00000004 00000753 00000753 00000000 00000000 00000000 00000000
4191 序列槽[    4.774254] 00000080: 00000000 00000000
4192 序列槽[    4.820522] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
4193 序列槽[    4.820522] 
4194 序列槽DDR Version 1.24 20191016
           

AIO-RK3399PROC-UBUNTU18.04-GPT-20200525-1016.img該版本可以正常操作)

sudo systemctl set-default multi-user.target
sudo reboot
           
#未關GUI界面時的系統占用
Memory usage:  12 % of 1893MB
 Usage of /:    24% of 15G    
#關閉GUI界面時的系統占用
Memory usage:  4 % of 1893MB 	
Usage of /:    24% of 15G  
           

(PS:待RKNN Toolkit安裝完成後可再手動開啟使用者界面

sudo systemctl set-default graphical.target
sudo reboot
           

3.3 安裝Python3.7

sudo apt update #檢查可更新檔案
sudo apt install software-properties-common  #安裝可添加源的工具
sudo add-apt-repository ppa:deadsnakes/ppa #添加源,否則會無法找到python3.7-dev軟體包
sudo apt install python3.7-dev #安裝python3.7
           

3.4 用virtualenv管理python版本

(開發闆系統中同時存在多個 Python(Python2.7&python3.6)版本,建議使用 virtualenv來管

理 Python環境)

#建立 virtualenv環境
sudo apt install virtualenv #安裝virtualenv軟體
virtualenv -p /usr/bin/python3.7 venv  #建立虛拟環境
source venv/bin/activate  #激活venv環境
(venv) [email protected]:~$  pip3 -V #檢視目前pip3所在Python的路徑
pip 21.0.1 from /home/firefly/venv/lib/python3.7/site-packages/pip (python 3.7)pip
           

修改python預設為python3.7:

為了因為C++調用python時,預設是調用python2.7,這導緻很多python3.7的文法報錯。是以需要更改python預設軟連接配接

#檢視路徑python,python3.7路徑
which python python3.7
/usr/bin/python
/usr/bin/python3.7
sudo rm /usr/bin/python
sudo rm /usr/bin/python3
#建立python3.軟連接配接到python&Python3
sudo ln -s /usr/bin/python3.7 /usr/bin/python
sudo ln -s /usr/bin/python3.7 /usr/bin/python3
           

至此Python3.7環境配置完成。

3.5 安裝相關依賴包(numpy、h5py &opencv)

3.5.1 安裝并更新相關依賴包

sudo apt-get update
sudo apt-get install cmake gcc g++ libprotobuf-dev protobuf-compiler libgfortran5-dbg libopenblas-dev gfortran libprotoc-dev
sudo apt-get install liblapack-dev libjpeg-dev zlib1g-dev 
sudo apt-get install libhdf5-dev
pip3 install --upgrade pip #更新pip包的版本
pip3 install wheel setuptools #安裝 Python 打包工具
           

3.5.2 安裝并編譯numpy、h5py

(PS:opencv-python和h5py同時依賴的numpy包的版本必須是1.16.3,故需先安裝編譯numpy包。較難編譯和費時較長的whl包已上傳至網盤,如有需要,可從文末的連結下載下傳到PC端,通過Xftpd軟體上傳至開發闆安裝目錄,離線安裝即可

重要 :安裝包的順序不可調換,否則預設安裝的依賴包版本與RKNN所要求的沖突

執行以下指令:

pip3 install numpy==1.16.3 #安裝numpy包,編譯完成即可進行下一步
#或将離線包下載下傳後安裝
#pip3 install numpy-1.16.3-cp37-cp37m-linux_aarch64.whl 
pip3 install h5py==2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple  #安裝h5py包,編譯完成即可進行下一步
#或将離線包下載下傳後安裝h5py
#pip3 install h5py-2.8.0-cp37-cp37m-linux_aarch64.whl
           

3.5.3 安裝并編譯opencv-python

安裝并編譯opencv-Python包,如果不指定版本,預設會從清華源下載下傳已編譯好的最新版本包opencv_python-4.5.1.48-cp37-cp37m-manylinux2014_aarch64.whl (34.5 MB),但該包預設依賴numpy的版本要求numpy>=1.19.3,RKNN Toolkit依賴的numpy版本必須是1.16.3,是以不可安裝最新版本的opencv_python-4.5.1.48版本,需下載下傳4.3.0.38版本的opencv-python源碼包編譯

opencv-python的各個版本可此連結下載下傳https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/

pip3 install opencv-python==4.3.0.38  -i https://pypi.tuna.tsinghua.edu.cn/simple #安裝源碼包進行編譯
[2021/ 21:43:23] Building wheels for collected packages: opencv-python
                             ...
[2021/ 22:51:49] Building wheel for opencv-python (PEP 517) ... done
[2021/ 22:51:49] Successfully built opencv-python
[2021/ 22:51:49] Installing collected packages: opencv-python
[2021/ 22:51:50] Successfully installed opencv-python-4.3.0.38
#或将離線包下載下傳後安裝opencv-python
#pip3 install opencv_python-4.3.0.38-cp37-cp37m-linux_aarch64.whl #
           

大約要1小時左右方可編譯完成,編譯好的opencv_python-4.3.0.38-cp37-cp37m-linux_aarch64.whl包可從文末連結處擷取。

3.5.4 安裝RKNN-Toolkit 1.4.0

執行以下指令,系統會根據RKNN的版本要求安裝編譯固定版本的依賴包,如 onnx1.4.1 (與1.6.0的版本所依賴的onnx包版本不同)scipy>=1.1.0 protobuf3.11.2 Pillow==5.3.0等。大概10-30分鐘左右編譯安裝成功。(RKNN的各個版本可從此連結下載下傳http://repo.rock-chips.com/pypi/simple/,其他編譯好的whl依賴包不可直接用到AIO-3399ProC上,如onnx,scipy,numpy等,這些包在python中會因未知原因導入失敗,并導緻OpenCV、TensorFlow和RKNN-Toolkit無法使用)

(venv) [email protected]:~/RKNN1.6$ pip3 install rknn_toolkit-1.4.0-cp37-cp37m-linux_aarch64.whl 
 Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Pillow-5.3.0 PyYAML-5.4.1 Werkzeug-1.0.1 certifi-2020.12.5 chardet-3.0.4 click-7.1.2 decorator-4.4.2 dill-0.2.8.2 flask-1.0.2 flatbuffers-1.10 idna-2.8 itsdangerous-1.1.0 lmdb-0.93 networkx-1.11 onnx-1.4.1 onnx-tf-1.2.1 ply-3.11 protobuf-3.6.1 psutil-5.6.2 requests-2.22.0 rknn-toolkit-1.4.0 ruamel.yaml-0.15.81 scipy-1.5.4 typing-3.7.4.3 typing-extensions-3.7.4.3 urllib3-1.25.11
           

3.5.5 安裝TensorFlow 1.14.0

将下載下傳好的tensorflow-1.14.0-cp37-none-linux_aarch64.whl 放置目錄下,安裝并編譯。(若使用pip3 install tensorflow 會自動安裝最新版本的tensorflow包,依賴的numpy包的版本與RKNN要求沖突,故需手動安裝)

基于arm的已編譯好的各版本tensorflow whl包也可從此位址下載下傳https://github.com/lhelontra/tensorflow-on-arm/releases。

此步驟在編譯grpcio時報錯,導緻無法成功安裝tensorflow,具體報錯日志如下:

Building wheel for grpcio (setup.py) ... error
ERROR: Command errored out with exit status 1:
raise CompileError(msg)
distutils.errors.CompileError: command 'aarch64-linux-gnu-gcc' failed with exit status 4
  
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/firefly/venv/bin/python3.7 -u -c 'import sys, setuptools, tokenize; ...
           

此時從清華源下載下傳的gprcio源碼包為grpcio-1.36.1.tar.gz,按以往調試經驗安裝了下列依賴包,grpcio仍然無法編譯成功

(venv) [email protected]:~/RKNN1.4$ sudo apt-get install gcc 
 (venv) [email protected]:~/RKNN1.4$ sudo apt-get install Cython
 (venv) [email protected]:~/RKNN1.4$ sudo apt-get install libhdf5-dev
           

通過檢視官方釋出的RKNN docker鏡像中安裝的包版本,發現grpcio版本為1.34.0,故嘗試降低grpcio版本,pip3重新安裝編譯grpcio,具體日志如下:

(venv) [email protected]:~/RKNN1.4$ pip3 install grpcio==1.34.0
Building wheels for collected packages: grpcio
 Building wheel for grpcio (setup.py) ... done
 Created wheel for grpcio: 
 uccessfully built grpcio
Installing collected packages: grpcio
Successfully installed grpcio-1.34.0
           

再執行下列指令,重新安裝tensorflow即可。

(venv) [email protected]:~/RKNN1.6$ pip3 install tensorflow-1.14.0-cp37-none-linux_aarch64.whl 
...
  Successfully installed absl-py-0.12.0 astor-0.8.1 gast-0.4.0 google-pasta-0.2.0 keras-applications-1.0.8 keras-preprocessing-1.1.2 tensorboard-1.14.0 tensorflow-1.14.0 tensorflow-estimator-1.14.0 termcolor-1.1.0 wrapt-1.12.1
           

3.5.6 安裝matplotlib

在測試官方給出的rknn-toolkit\examples\darknet\yolov3路徑下的demo時,報如下錯誤:

raceback (most recent call last):
   File "test.py", line 5, in <module>
     from matplotlib import gridspec
 ModuleNotFoundError: No module named 'matplotlib'
           

可知需要安裝Matplotlib依賴包,官方的docker鏡像中,安裝的Matplotlib版本為3.0.3,故指定該版本手動安裝,但在編譯過程中報錯,無法成功安裝,具體日志如下:

(venv) [email protected]:~/RKNN1.4/examples/darknet/yolov3$ pip3 install matplotlib==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
ERROR: Command errored out with exit status 1:
  command: /home/firefly/venv/bin/python3.7 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-zyrjt7ya/matplotlib_d32c2949086446449427874a51fff411/setup.py'"'"'; __file__='"'"'/tmp/pip-install-zyrjt7ya/matplotlib_d32c2949086446449427874a51fff411/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-v_dy1bs_

    Complete output (43 lines):
     ============================================================================
    Edit setup.cfg to change the build options
     
    BUILDING MATPLOTLIB
                matplotlib: yes [3.0.3]
                  python: yes [3.7.10 (default, Feb 20 2021, 21:17:23)  [GCC
                             7.5.0]]
                   platform: yes [linux]
     
     REQUIRED DEPENDENCIES AND EXTENSIONS
                      numpy: yes [version 1.16.3]
           install_requires: yes [handled by setuptools]
                     libagg: yes [pkg-config information for 'libagg' could not be found. Using local copy.]
                   freetype: no  [The C/C++ header for freetype2 (ft2build.h) could not be found.  You may need to install the
                            development package.]
                       png: yes [version 1.6.34]
                      qhull: yes [pkg-config information for 'libqhull' could not be found. Using local copy.]
     
     OPTIONAL SUBPACKAGES
                sample_data: yes [installing]
                   toolkits: yes [installing]
                      tests: no  [skipping due to configuration]
             toolkits_tests: no  [skipping due to configuration]
     
     OPTIONAL BACKEND EXTENSIONS
                        agg: yes [installing]
                      tkagg: yes [installing; run-time loading from Python Tcl /
                             Tk]
                     macosx: no  [Mac OS-X only]
                  windowing: no  [Microsoft Windows only]
]     
     OPTIONAL PACKAGE DATA
                       dlls: no  [skipping due to configuration]
     
     ============================================================================
                             * The following required packages can not be built:
                             * freetype
                             * Try installing freetype with `apt-get install
                            * libfreetype6-dev` and pkg-config with `apt-get
                             * install pkg-config`
     ----------------------------------------
 Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
 ERROR: Could not find a version that satisfies the requirement matplotlib==3.0.3
 ERROR: No matching distribution found for matplotlib==3.0.3
           

由The C/C++ header for freetype2 (ft2build.h) could not be found,You may need to install the development package.報錯日志可推測,是在開發環境缺少所依賴的freetype包,執行以下指令進行安裝,具體日志如下:

sudo apt-get install pkg-config
sudo apt-get install libfreetype6-dev
pip3 install matplotlib==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
Building wheel for matplotlib (setup.py) ... done
  Created wheel for matplotlib: filename=matplotlib-3.0.3-cp37-cp37m-linux_aarch64.whl 
  Stored in directory: /home/firefly/.cache/pip/wheels/8a/bb/44/9d6804fb3c73fc4f624e76721ed032411f725ac812b070b5b9
 Successfully built matplotlib
 Installing collected packages: python-dateutil, pyparsing, kiwisolver, cycler, matplotlib
 Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.0.3 pyparsing-2.4.7 python-dateutil-2.8.1
           

成功安裝了Matplotlib,可繼續測試官方的yolo v3 demo。

3.5.7 安裝PyTorch

因項目暫時用不上PyTorch,故先不安裝,可參考下列連結進行編譯安裝。

https://github.com/yunfeizu/RK3399Pro-pytorch-opencv/

https://blog.csdn.net/zengwubbb/article/details/110936687

四、測試過程

4.1 在python中測試各子產品是否正常

venv) [email protected]:~/RKNN1.6$ python3
 Python 3.7.10 (default, ) 
 [GCC 7.5.0] on linux
 Type "help", "copyright", "credits" or "license" for more information.
 >>> import h5py
 >>> h5py.__version__
 '2.8.0'
 >>> import cv2
 >>> import numpy
 >>> from rknn.api import RKNN
 >>>import tensorflow as tf
 >>>tf.__version__
 >>>1.14.0
 >>>
           

4.2 運作官方提供的demo,測試RKNN是否安裝成功

(venv) [email protected]:~/RKNN1.6/examples/tensorflow/ssd_mobilenet_v1$ python3 test.py 
Traceback (most recent call last):
   File "test.py", line 61, in <module>
   ...                           ...
File "/home/firefly/venv/lib/python3.7/site-
packages/tensorflow/contrib/__init__.py", line 31, in <module>
  from tensorflow.contrib import cloud
 ImportError: cannot import name 'cloud' from 'tensorflow.contrib'
           

出現報錯,參考此連結文章,将/home/firefly/venv/lib/python3.7/site-packages/tensorflow/contrib/init.py出錯那行注釋掉即可,并且,在下一句還需縮進,不然會提示以下錯誤代碼:

File "/home/firefly/venv/lib/python3.7/site-packages/tensorflow/contrib/__init__.py", line 33
from tensorflow.contrib import cluster_resolver
      ^
 IndentationError: expected an indented block
           
Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

測試\examples\tensorflow\ssd_mobilenet_v1\路徑下的demo,發現報錯日志:

...
--> Init runtime environment
...
 E     restore_signals, start_new_session, preexec_fn)
 E OSError: [Errno 12] Cannot allocate memory
 Init runtime environment failed
           

此時新開一個終端視窗,top檢測導入模型時的系統資源占用情況,具體如下圖:

Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

初步判斷是CPU和記憶體不足,導緻RKNN初始化運作環境失敗,按照官方文檔Rockchip_Trouble_Shooting_RKNN_Toolkit_V1.4.0_CN.pdf的方法,對腳本進行修改,将rknn.build(do_quantization=True, dataset=’./dataset.txt’)行,改為rknn.build(do_quantization=False, dataset=’./dataset.txt’)具體如下:

可以輸出處理圖檔結果,但幀率很低,推測可能是安裝的tensorflow 1.14.0版本太高,和RKNN的相容性不夠,導緻無法成功運作。

tflite下的demo均可運作成功,如下圖所示:

Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

4.3 在測試YOLO 官方demo時遇到的問題及解決方法

在運作yolo 官方的測試腳本時,發現一直停留在Downloading yolov3.weights…指令行,參考網上的文章,并檢視測試腳本,發現需要先從https://pjreddie.com/media/files/yolov3.weights下載下傳yolov3.weights,方可進行下一步測試,而由于未知原因一直無法下載下傳,将此連結放入迅雷中将yolov3.weights檔案下載下傳至本地,通過Xftpd軟體上傳至對應路徑即可,在PC端測試的結果如下圖:

Firefly AIO-3399ProC開發闆安裝RKNN Toolkit 1.4.0開發環境前言一、開發部署環境二、RKNN 三件套介紹三、安裝過程四、測試過程總結

總結

RKNN1.4.0版本 python3.7環境下安裝tensorflow1.14.0版本可能還是存在相容問題,在進行推理時開發闆的系統資源不足導緻無法運作,後續打算降到RKNN Toolkit 1.3.0版本,python 3.6環境下安裝tensorflow 1.11.0版本,基本上可以運作官方提供的各個demo測試腳本。

部署過程中生成的whl包和下載下傳的yolov3.weights檔案如有需要可在下面連結自取,因為每個人的開發環境不同,相應的whl包不保證都能正常使用,對應的whl包僅可在RKNN1.4.0,python3.7環境下安裝使用。請謹慎安裝。

網盤位址 提取碼: xa5y

繼續閱讀