PowerSensor AI教程1.3 - 数字识别 - edge调用

介绍

本章主要介绍edge环节,即如何通过调度程序看,将编译好elf模型部署到powersensor上面运行。

本章需要使用新的powersensor镜像(2020.5月以后发布的镜像会带有DPU),下载地址:
链接:https://pan.baidu.com/s/18CFK2aXonxuFF6-L_ittdw
提取码:8ve4

本章的例程与上一节的相同,请移步
Powersensor AI教程1.1-数字识别-tf模型训练下载。

主要过程

  1. 进入powersenosr的jupyter文件管理页面,在/powersensor_workspace/powersensor_ai下面新建ministNumber目录(随教程发布的案例已经准备好文件了)。在新建的ministNumber目录下新建dataset_validedge文件夹
    edge_dir
  2. 通过jupyter的上传功能,把案例目录下的edge文件夹下的两个文件上传到powersensor的edge目录;验证集dataset_valid下的文件也同理上传到相应目录(可能需要新建minist-number文件夹)。
  • 如果要使用自己新训练的模型,可以把edge下的elf换成虚拟机里的compileResult下的elf文件。
  • 注意虚拟机里的文件不能直接上传(找不到),要先拷贝到自己的电脑里才能上传。
  1. 打开powersensor的edge下的powersensor_ministNumer.ipynb文件,按照notebook里面的指导逐个运行程序。

  2. 首先也是加载头文件和重要的参数,其中DPU网络参数应该与DPU的编译结果输出保持一致,否则会导致DPU崩溃。

from dnndk import n2cube
import numpy as np
from numpy import float32
import os
import cv2
import matplotlib.pyplot as plt
import random
import time
import matplotlib as mpl
from matplotlib import font_manager
import PowerSensor as ps

mpl.rcParams['axes.unicode_minus']=False     # 正常显示负号

# 训练用的网络尺寸
img_size_net = 28

# 词汇表
wordlist = ['1', '1', '2', '3', '4', '5', '6', '7', '8', '9']

# DPU网络参数
ELF_NAME = "dpu_testModel_0.elf"
CONV_INPUT_NODE = "x_input_Conv2D"
CONV_OUTPUT_NODE = "y_out_MatMul"
  1. 加载验证集,这个程序应该与pc环节的加载验证集一致。加载完会随机打印8个样本:
dataset_valid_path = '../dataset_valid//minist-number/'
# 1. 加载数据集
(validSet_images, validSet_lables) = load_mnist(dataset_valid_path, 't10k')

# 2. 图像预处理
validSet_images = validSet_images.reshape((-1,28,28,1)) / 255.
validSet_images = np.array(validSet_images, dtype='float32')

# 3. 随机打印8个测试图像
fig, ax = plt.subplots(5, 2)
fig.set_size_inches(15,15)
for i in range(5):
    for j in range(2):
        l = random.randint(0, len(validSet_lables))
        ax[i, j].imshow(validSet_images[l, :, :, 0])
        title = wordlist[validSet_lables[l]]
        title_utf8 = title.decode('utf8')
        ax[i, j].set_title(title_utf8, fontproperties=font)
plt.tight_layout()
  1. 加载DPU模型,powersensor在xilinx的dnndk的函数库上做了一个简单的封装,对于一些简单的分类任务已经够用,对于复杂的检测任务请使用xilinx的dpu的原生的dnndk函数。这里的ELF_NAME是elf文件的文件名,后面两个参数分布是网络的输入节点和输出节点,需要和dnndk的编译输出保持一致
dpu1 = ps.DpuHelper()
dpu1.load_kernel(ELF_NAME, input_node_name=CONV_INPUT_NODE, output_node_name=CONV_OUTPUT_NODE)
  1. 测试验证集的精度:注意dpu1.predit_softmax()输入是一个3维的图像,比如灰度图的最后一个维度虽然是1,但不能缺少。
tick_start = time.time()
test_num = len(validSet_lables)
right_eg_cnt = 0
for i in range(test_num):
    img1_scale = validSet_images[i]
    softmax = dpu1.predit_softmax(img1_scale)
    pdt= np.argmax(softmax, axis=0)
    if pdt == validSet_lables[i]:
        right_eg_cnt += 1
tick_end = time.time()
print('精度: ' + str((right_eg_cnt*1.) / test_num))
print('测试 ' + str(test_num) + ' 个样本。耗时 ' + str(tick_end - tick_start) + '秒!')

edge_test1

  1. 随机测试8个样本并打印结果:
    edge_test2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
GT-Power 是一款用于内燃机系统模拟和分析的软件工具。它被广泛应用于汽车、摩托车、卡车和发动机制造业,以支持设计师和工程师进行性能评估、燃料效率分析以及排放和系统优化等方面的工作。 GT-Power 提供了一个直观易用的界面,使用户能够快速建立和配置内燃机模型。其先进的模型库包含各种不同类型的发动机和车辆元件,例如气缸、汽缸盖、气门、活塞等,这些元件可以根据用户的需求进行自定义和连接。用户只需通过简单的拖拽和放置操作即可创建一个完整的模型。 在模拟过程中,GT-Power 能够准确地考虑各种因素,如燃烧室压力、燃烧过程、热交换、供油系统和排气系统等。通过这些分析,用户可以了解到内燃机在不同工况下的性能表现,包括功率输出、燃油消耗、排放物生成等。同时,GT-Power 还能够模拟和预测各种不同的控制策略对性能的影响,如喷油时机、进气和排气门的开启时间等。 另外,GT-Power 还具备强大的数据分析和可视化功能。用户可以自定义指标和图表来展示模拟结果,从而更好地理解和解释内燃机的行为。此外,GT-Power 还支持导出数据和结果,以便用户与其他工程师和团队进行共享和讨论。 总的来说,GT-Power 是一款功能强大而且易于使用的软件工具,它为内燃机系统的建模和分析提供了全面的支持。通过使用 GT-Power,用户可以更好地了解和优化内燃机的性能,从而实现更高效、更环保的车辆和发动机设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值