行测 Eclipse 深度图像 二代征信 shell swing csv uiview compilation 河南普通话考试 maya曲线建模 oracle重命名表名 内存计算 磁盘清理会误删东西吗 mysql删除存储过程 vue与html5 hbuilder插件 svn安装后右键不显示 kubernetes集群 python中assert 配置java开发环境 java环境部署 java命令 java删除目录 linuxcat命令 python的用途 图片批量处理工具 bbm注册 为什么英雄联盟无法连接服务器 小程序开发工具下载 hyqihei js代码混淆工具 js给标签添加属性 图片文字提取软件 苹果内存怎么看 财务报表软件免费版 img转iso 括号符号大全 批处理 360极速浏览器官方下载
当前位置: 首页 > 学习教程  > 编程语言

基于rk3399pro的人工智能模型落地与服务器部署

2020/12/5 10:57:35 文章标签:

目前在校学生,厌倦了研究中的仿真模型优化,想玩玩实际的项目 目的:脱离MATLAB与电脑Python仿真环境,完成算法模型落地应用 大致流程: 数据获取–>模型搭建–>CPU训练模型–>模型转换–>嵌入式部署–>…

目前在校学生,厌倦了研究中的仿真模型优化,想玩玩实际的项目
目的:脱离MATLAB与电脑Python仿真环境,完成算法模型落地应用

大致流程:

数据获取–>模型搭建–>CPU训练模型–>模型转换–>嵌入式部署–>完成落地

硬件需求:

  1. 瑞芯微嵌入式开发板rk3399pro(搭载双核Cortex-A72及四核Cortex-A53组合架构处理器,四核GPU一块,以及最重要的NPU神经计算单元:内置算力3.0T)
  2. 键盘、鼠标、电源
  3. USB摄像头一块
  4. 有条件可以搭载RK1808算力棒

系统需求

  1. Python3.6以上版本
  2. 上位机搭建rknn.tooklit环境(用于模型转换)
  3. 上位机可搭建rknn.api环境(用于仿真嵌入式NPU)
  4. Tensorflow框架等Python环境
  5. Linux开发环境:(我使用的是Ubuntu系统,方便)
  6. 开发板搭建rknn.api环境以及npu驱动

为什么不采用大型服务器部署?:

个人理解:

  1. 小巧且具系统性能: 这块板子刚到手时就觉得其小巧,不够巴掌大,却如麻雀般内置了五脏六腑,还内置工智能芯片,rk3399pro与寻常电脑无异,可以烧写Linux系统,这就甩开了传统单片机、DSP、树莓派好几个档次。
  2. 功耗低、运算快: 我尝试过整天整天的运行程序都不发热,说明可以很好的适应产品环境 ,便于部署; 另外,内置NPU神经计算单元是电脑无可比拟的,该单元为神经网络计算而生,相比CPU、GPU运算速度、功耗、承受时长都远远超越。
  3. 丰富的接口: 具有单片机、DSP一样的管脚以及模拟量输出接口,可以直接完成外接控制器的功能实现。假如你让一台电脑去控制一个开关,一个电机,不可能吧?
    点击进入B站大佬实现导盲小车控制

在这里插入图片描述


模型转换

为什么你训练好的Python模型要转换呢,因为NPU采用指定的rknn模型,因此所有模型都需要转化为rknn模型才能完成部署。

该板子最新SDK已经能够支持tensoflow2、tensoflow lite 、Paddle、caffe、pytorch、Darknet、ONNX等模型,我目前是使用Python语言在tensorflow框架下学习,后续还是学一下百度飞桨Paddle,毕竟支持国产~
在这里插入图片描述
首先将写好的tensorflow模型转化为RKNN,具体转化代码如下:

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()

模型推理与部署

模型转换完成后,通过ssh将模型传输至开发板服务器,如下:

sudo su
scp -r model.rknn test.py toybrick@172.22.225.225:/home/test/
ssh toybrick@172.22.225.225 
cd /home/test/
python3 test.py

API具体流程如下:
在这里插入图片描述

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("../picture/6_7.jpg")   # 加载图片
    im = im.resize((64, 64),Image.ANTIALIAS)  # 图像缩放到64x64
    mat = np.asarray(im.convert('RGB'))    # 转换成RGB格式
    outputs = rknn.inference(inputs=[mat])   # 运行推理,得到推理结果
    pred, prob = get_predict(outputs)     # 将推理结果转化为可视信息
    print(prob)
    print(pred)
 
if __name__=="__main__":
    rknn = load_model()
    predict(rknn) 
 
    rknn.release()

采用Demo验证模型效果:

手语数字识别demo效果如下:
在这里插入图片描述
Demo资源如下:
https://download.csdn.net/download/weixin_45776027/13454590


本文链接: http://www.dtmao.cc/news_show_450355.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?