0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

X3派AI算法推理快速入门

地平线机器人 2022-07-18 14:24 次阅读

0 环境安装

在进行AI算法开发之前请参考X3派用户手册完成系统安装及配置,此时X3派上已默认安装好了地平线Python版本AI推理引擎(hobot_dnn)及其配套依赖环境。hobot_dnn提供了ModelpyDNNTensor、TensorProperties三个类和load接口。您可通过如下方式获取hobot_dnn的基本信息

-------------------------------------------------------------------------------------------------------------------------------

python3
>>> from hobot_dnn import pyeasy_dnn as dnn
>>> dir(dnn)
['Model', 'TensorProperties', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'load', 'pyDNNTensor']

-------------------------------------------------------------------------------------------------------------------------------

AI推理引擎的更新可参考如下方式(出于系统安全、稳定性的考虑,建议统一通过APT命令更新X3派板级开发包):

-------------------------------------------------------------------------------------------------------------------------------

#更新package列表
sudo apt update
#升级所有已安装的软件包到最新版
sudo apt full-upgrade
#清除缓存文件(非必须)
sudo apt clean
#重启设备
sudo reboot

-------------------------------------------------------------------------------------------------------------------------------

1 推理接口介绍

1.1 Model

AI算法模型类,描述模型的名称,输入、输出数据属性信息,forward 方法用来完成算法的推理。

-------------------------------------------------------------------------------------------------------------------------------

class hobot_dnn.pyeasy_dnn.Model
'''
Parameters
1、name (string):模型名称
2、inputs (tuple(hobot_dnn.pyeasy_dnn.pyDNNTensor)):模型的输入tensor
3、outputs (tuple(hobot_dnn.pyeasy_dnn.pyDNNTensor)):模型的输出tensor
4、forward (args &args, kwargs &kwargs):模型推理函数接口,输入模型推理所必要的参数,返回模型推理结果
parameters:
input_tensor:输入数据
core_id (int):模型推理的core id,可为0,1,2,默认为0表示任意核推理
priority (int):当前模型推理任务的优先级,范围[0~255],越大优先级越高
'''

-------------------------------------------------------------------------------------------------------------------------------

其中,forward方法的input_tensor支持三种格式输入:

poYBAGLUxLSAc49LAAEU1HRQngQ810.png

forward方法的返回值为模型推理结果,有如下两种情况:

pYYBAGLUxLSAIOqJAADJF3iDWRc720.png

resizer模型指在模型转换时input_source设置为“resizer”编译生成的模型,相关配置方式可参考社区X3 用户手册。resizer模型推理时,hobot_dnn会先使用ROI从输入数据中抠图后resize到模型输入大小再送入模型进行推理。
*目前resizer模式暂只支持单输入的nv12/nv12_bt601模型。

1.2 pyDNNTensor

AI 算法输入、输出 tensor 类

-------------------------------------------------------------------------------------------------------------------------------

class hobot_dnn.pyeasy_dnn.pyDNNTensor
'''
Parameters:
1、properties (TensorProperties):tensor的属性,详细参见本文1.3节
2、buffer (numpy):tensor中的数据,数据访问方式同numpy
3、name (string):tensor的名称
'''

-------------------------------------------------------------------------------------------------------------------------------

1.3 TensorProperties

AI 算法输入/输出 tensor 的属性类

-------------------------------------------------------------------------------------------------------------------------------

class hobot_dnn.pyeasy_dnn.TensorProperties
'''
Parameters:
1、tensor_type (string):tensor的数据类型,如:NV12、BGR、float32等
2、dtype (string):数据的存储类型,同numpy数据类型,如:int8、uint8、float32等
3、layout (string):数据排布格式,NHWC或者NCHW
4、shape (tuple):数据的shape信息,例如:(1,3,224,224)
'''

-------------------------------------------------------------------------------------------------------------------------------

1.4 load

load接口用于加载模型

-------------------------------------------------------------------------------------------------------------------------------

hobot_dnn.pyeasy_dnn.load(model_file)
'''
接口支持两种模型加载方式:
1、输入模型的文件路径,加载单个模型,或者单个pack模型
model_file = "/userdata/single_model.bin"
models = hobot_dnn.pyeasy_dnn.load(model_file)
2、输入模型的文件列表,加载多个模型
model_file = ["model1.bin", "model2.bin"]
models = hobot_dnn.pyeasy_dnn.load(model_file)
接口返回hobot_dnn.pyeasy_dnn.Model类型的tuple列表
'''

-------------------------------------------------------------------------------------------------------------------------------

2 快速上手示例

X3派配套AI推理示例默认安装在/app/ai_inference目录下,包含如下示例:

-------------------------------------------------------------------------------------------------------------------------------

|-- 01_basic_sample # 从本地读取图片并完成mobilenetv1分类模型推理
|-- 02_usb_camera_sample # 从USB camera获取视频数据并完成FCOS检测模型推理
|-- 03_mipi_camera_sample # 从MIPI camera获取视频数据并完成FCOS检测模型推理
|-- 05_web_display_camera_sample # 基于MIPI Camera的FCOS目标检测及web端展示
|-- 06_yolov3_sample # 从本地读取图片并完成Yolov3检测模型推理
|-- 07_yolov5_sample # 从本地读取图片并完成Yolov5检测模型推理
`-- models

-------------------------------------------------------------------------------------------------------------------------------

本节将以01_basic_sample为例,为大家展示如何使用hobot_dnn完成模型推理。运行以下示例您需要准备编译好的混合异构模型mobilenetv1_224x224_nv12.bin(存放于/app/ai_inference/models路径下),以及一张图片zebra_cls.jpg(存放于01_basic_sample文件夹下)。

-------------------------------------------------------------------------------------------------------------------------------

from hobot_dnn import pyeasy_dnn as dnn
import numpy as np
import cv2

# 查看模型输入输出节点的信息
def print_properties(pro):
print("tensor type:", pro.tensor_type)
print("data type:", pro.dtype)
print("layout:", pro.layout)
print("shape:", pro.shape)

# 依据模型input_type_rt决定是否需要进行数据格式转换(本实例所用模型为nv12输入)
def bgr2nv12_opencv(image):
height, width = image.shape[0], image.shape[1]
area = height * width
yuv420p = cv2.cvtColor(image, cv2.COLOR_BGR2YUV_I420).reshape((area * 3 // 2,))
y = yuv420p[:area]
uv_planar = yuv420p[area:].reshape((2, area // 4))
uv_packed = uv_planar.transpose((1, 0)).reshape((area // 2,))

nv12 = np.zeros_like(yuv420p)
nv12[:height * width] = y
nv12[height * width:] = uv_packed
return nv12

# 1.加载模型
models = dnn.load('../models/mobilenetv1_224x224_nv12.bin')

# 2.查看模型输入输出节点的信息
for input in models[0].inputs:
print_properties(input.properties)
for output in models[0].outputs:
print_properties(output.properties)

# 3.准备输入数据
# 打开图片
img_file = cv2.imread('./zebra_cls.jpg')
# 把图片缩放到模型的输入尺寸
h, w = models[0].inputs[0].properties.shape[2], models[0].inputs[0].properties.shape[3]
resized_data = cv2.resize(img_file, (w, h), interpolation=cv2.INTER_AREA)
nv12_data = bgr2nv12_opencv(resized_data)

# 4.模型推理
outputs = models[0].forward(nv12_data)

# 5.后处理
np.argmax(outputs[0].buffer)
print("cls id: %d Confidence: %f" % (np.argmax(outputs[0].buffer), outputs[0].buffer[0][np.argmax(outputs[0].buffer)]))

-------------------------------------------------------------------------------------------------------------------------------

运行上述示例,即可在终端查看到如下信息:

poYBAGLUxLiAW8JhAAZI3C0maJw059.png

本文转自地平线开发者社区

原作者:颜值即正义

原链接:https://developer.horizon.ai/forumDetail/98129467158916308

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230600
收藏 人收藏

    评论

    相关推荐

    开发者手机 AI - 目标识别 demo

    识别demo: JS实现UI界面的功能; Native接口及实现主要为JS提供接口进行AI推理。通过Native方式完成推理的前处理、推理以及后处理,这里通过调用opencv、Mind
    发表于 04-11 16:14

    AI算法在RZ/V芯片中的移植推理流程

    之前文章已介绍了一些AI算法Demo的应用 ,我们提供从模型训练到RZ/V系列嵌入式端推理应用的完整流程。整体流程如下图所示。
    的头像 发表于 12-20 12:21 645次阅读
    <b class='flag-5'>AI</b><b class='flag-5'>算法</b>在RZ/V芯片中的移植<b class='flag-5'>推理</b>流程

    【爱芯 Pro 开发板试用体验】在爱芯部署ChatGLM3(一)

    ChatGLM3是由智谱AI和清华大学KEG实验室联合发布的第三代大型语言模型,是基于GLM-130B的对话微调版本,国内首个全线对标OpenAI产品线,官网:https://chatglm.cn
    发表于 12-17 22:54

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    场景介绍 MindSpore Lite 是一款 AI 引擎,它提供了面向不同硬件设备 AI 模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍
    发表于 12-14 11:41

    较全的树莓入门资料

    比较全的树莓入门介绍
    发表于 09-25 07:41

    OpenHarmony AI框架开发指导

    一、概述 1、功能简介 AI业务子系统是OpenHarmony提供原生的分布式AI能力的子系统。AI业务子系统提供了统一的AI引擎框架,实现算法
    发表于 09-19 18:54

    小记-yolo实例运行

    多说了。既然入手了,总要折腾点啥。想来想去,先在上面搞个图像分类检测玩玩。这个分类检测可以作为后续AI算法的一个基础。连上wifi开整。 安装Archiconda3 用github上大神编译好
    发表于 09-17 11:10

    AscendCL快速入门——模型推理篇(上)

    一、概述本文介绍了AscendCL模型推理相关知识,介绍了AscendCL接口加载离线模型,为离线模型准备数据结构以及调用离线模型进行推理的过程。简单来说,曻腾的AscendCL的推理工程可以问为
    发表于 08-24 11:04

    Arm Cortex‑X3核心加密扩展技术参考手册

    Cortex®-X3内核支持可选的ARMv8.0-A和ARM®v8.2-A加密扩展。 Armv8.0-A加密扩展向Advanced SIMD添加了A64指令,以加速高级加密标准(AES)加密和解
    发表于 08-17 06:25

    ARM Cortex-X3核心技术参考手册

    Cortex®-X3内核是一款实施ARM®v9.0-A架构的高性能低功耗产品。ARM®v9.0-A架构将ARMv8-A架构中定义的架构扩展至ARM®v8.5-A。Cortex®-X3酷睿面向大屏幕
    发表于 08-09 07:39

    地平线RDK X3语音算法通过Alexa ACM方案认证

    地平线RDK X3是地平线基于自研的旭日3芯片,针对通用机器人开发场景打造的智能开发板,为各类算法的开发部署提供了坚实的硬件基础。地平线RDK X3接口兼容树莓派,具有5TOPS端侧推理
    的头像 发表于 07-18 16:37 838次阅读
    地平线RDK <b class='flag-5'>X3</b>语音<b class='flag-5'>算法</b>通过Alexa ACM方案认证

    瑞萨 38D5 入门套件快速入门指南

    瑞萨 38D5 入门套件快速入门指南
    发表于 04-28 19:43 0次下载
    瑞萨 38D5 <b class='flag-5'>入门</b>套件<b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    瑞萨 3803L 入门套件快速入门指南

    瑞萨 3803L 入门套件快速入门指南
    发表于 04-28 19:42 0次下载
    瑞萨 3803L <b class='flag-5'>入门</b>套件<b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    Renesas 7542入门套件快速入门指南

    Renesas 7542 入门套件快速入门指南
    发表于 04-28 19:42 0次下载
    Renesas 7542<b class='flag-5'>入门</b>套件<b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    瑞萨入门套件 LCD 应用板快速入门指南

    瑞萨入门套件 LCD 应用板快速入门指南
    发表于 04-28 18:44 0次下载
    瑞萨<b class='flag-5'>入门</b>套件 LCD 应用板<b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南