rk3399 pro使用debian跑深度學習

前言

在ubuntu上給rk3399 pro燒錄debian

1. 準備

這裏下載debian固件
這裏下載燒錄工具

2. 燒錄

  • 1、Type-C線連接主機端的USB接口和TB-RK3399Pro開發板的Type-C接口。
  • 2、長按TB-RK3399Pro開發板上recovery按鍵後重啓機器,進入Loader模式。
  • 3、解壓固件,將固件拷貝到linuxTool-v1.0/images目錄下
  • 4、執行sudo ./flash.py -l all,如何失敗執行sudo python flash.py -l all
  • 5、燒錄完成後會重啓,進入debian

奇怪的混入者

  • 裝gedit(debian自帶vim,可以不裝gedit)
  • 配置.bashrc

將ll改成ll -alF
在末尾加export PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin

3. 更新軟件

  • rknn_tooklit : pip3 install --user -U rknn
  • rknn_api :
sudo apt update --fix-missing
sudo apt -y upgrade
sudo apt update
sudo apt install rknn-rk3399pro
  • npu_drv : 重啓
  • 之後會出現libf77blas.so.3 缺失 ,執行 sudo apt-get install libatlas-base-dev
  • 其他問題可參考這裏

4. 模型轉換

from rknn.api import RKNN  
 
INPUT_SIZE = 64
 
if __name__ == '__main__':
    # 創建RKNN執行對象
    rknn = RKNN()
# 配置模型輸入,用於NPU對數據輸入的預處理
# channel_mean_value='0 0 0 255',那麼模型推理時,將會對RGB數據做如下轉換
# (R - 0)/255, (G - 0)/255, (B - 0)/255。推理時,RKNN模型會自動做均值和歸一化處理
# reorder_channel=’0 1 2’用於指定是否調整圖像通道順序,設置成0 1 2即按輸入的圖像通道順序不做調整
# reorder_channel=’2 1 0’表示交換0和2通道,如果輸入是RGB,將會被調整爲BGR。如果是BGR將會被調整爲RGB
#圖像通道順序不做調整
    rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2')
 
# 加載TensorFlow模型
# tf_pb='digital_gesture.pb'指定待轉換的TensorFlow模型
# inputs指定模型中的輸入節點
# outputs指定模型中輸出節點
# input_size_list指定模型輸入的大小
    print('--> Loading model')
    rknn.load_tensorflow(tf_pb='digital_gesture.pb',
                         inputs=['input_x'],
                         outputs=['probability'],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
    print('done')
 
# 創建解析pb模型
# do_quantization=False指定不進行量化
# 量化會減小模型的體積和提升運算速度,但是會有精度的丟失
    print('--> Building model')
    rknn.build(do_quantization=False)
    print('done')
 
    # 導出保存rknn模型文件
    rknn.export_rknn('./digital_gesture.rknn')
 
    # Release RKNN Context
    rknn.release()

5. 模型推理

import numpy as np
from PIL import Image
from rknn.api import RKNN
# 解析模型的輸出,獲得概率最大的手勢和對應的概率
def get_predict(probability):
    data = probability[0][0]
    data = data.tolist()
    max_prob = max(data)
    return data.index(max_prob), max_prob;
def load_model():
    # 創建RKNN對象
    rknn = RKNN()
    # 載入RKNN模型
    print('-->loading model')
    rknn.load_rknn('./digital_gesture.rknn')
    print('loading model done')
    # 初始化RKNN運行環境
    print('--> Init runtime environment')
    ret = rknn.init_runtime(target='rk3399pro')
    if ret != 0:
       print('Init runtime environment failed')
       exit(ret)
    print('done')
    return rknn
def predict(rknn):
    im = Image.open("7.jpg")   # 加載圖片
    im = im.resize((416, 416),Image.ANTIALIAS)  # 圖像縮放到64x64
    mat = np.asarray(im.convert('RGB'))    # 轉換成RGB格式
    outputs = rknn.inference(inputs=[mat])   # 運行推理,得到推理結果
    #pred, prob = get_predict(outputs)     # 將推理結果轉化爲可視信息
    #print(prob)
    print(outputs)
 
if __name__=="__main__":
    rknn = load_model()
    predict(rknn) 
 
    rknn.release()
  • E Only support ntb mode on ARM64 platform. But can not find device with ntb mode.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章