82|0

2939

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

【FRDM-MCXN947测评】使用NPU对象检测测试 [复制链接]

1、测试介绍

测试是基于 TensorFlow Lite 模型的“对象检测器”实现对象检测测试。 此测试是使用eQI工具经过调整后的TensorFlow Lite模型,转换后的模型可在带有NPU的MCXN MCU 上运行。

程序将三通道彩色图像转化为量化 Mobilenet 的卷积神经网络模型输入,该输入通过“对象检测器模型”在NPU运算后输出为1000种图像分类之一。

程序静态图像为输入。NPU运算结果通过UART进行输出。

待识别的图像为:

 

该图像需要预先转换为C语言的数组文件image_data.h,该文件代替摄像头输入。

硬件:

FRDM-MCXN947开发板一块

USB  Type-C电缆一条

软件:

GCC ARM Embedded 13.2.1编译器

PUTTY 串口终端软件

eIQ_Toolkit 模型工具软件

2、模型转换

测试的模型可以从http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_0.25_128.tgz处下载。

输入文件 https://commons.wikimedia.org/wiki/File:Stopwatch2.jpg

(1)将Stopwatch2.jpg文件使用python脚本转成OpenCV格式数组

import cv2
import numpy as np
img = cv2.imread('test/Stopwatch2.jpg')
img = cv2.resize(img,(128,128))
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
with open('image_data.h','w') as fout:
    print('#define STATIC_IMAGE_NAME "stopwatch"',file=fout)
    print('static const uint8_t image_data[] = {',file=fout)
    img.tofile(fout,', ','0x%02X')
    print('};\n',file=fout)

(2)使用eIQ_Toolkit软件将TensorFlow Lite 模型模型转换成MCXN947 NPU能够使用的int8结构模型

  使用MODEL TOOL将模型转换成MCXN NPU格式

 模型的层次信息

 使用软件左上角Covert功能转换格式

    目标文件custom_model_converted.tflite

 

 

转后的文件格式为int8格式,该格式可以运行在MCXN NPU上面。

3、模型引入

将custom_model_converted.tflite文件放入model_data.h格式当中。

 

整个文件成为uint8_t  model_data[]数组。

总结一下就是将eIQ转换的模型放到一个C语言数组当中。这是我看了好几遍文档才明白过来的。

4、项目介绍

使用MCUXpresso Config Tools 引入项目

  整个程序主要为两部分

一、对使用的模型进行初始化;

二、将输入数据转换成NPU数组;

int main(void)
{
    BOARD_Init();
    TIMER_Init();

    DEMO_PrintInfo();

    if (MODEL_Init() != kStatus_Success)
    {
        PRINTF("Failed initializing model" EOL);
        for (;;) {}
    }

    tensor_dims_t inputDims;
    tensor_type_t inputType;
    uint8_t* inputData = MODEL_GetInputTensorData(&inputDims, &inputType);

    tensor_dims_t outputDims;
    tensor_type_t outputType;
    uint8_t* outputData = MODEL_GetOutputTensorData(&outputDims, &outputType);

    while (1)
    {
        /* Expected tensor dimensions: [batches, height, width, channels] */
        if (IMAGE_GetImage(inputData, inputDims.data[2], inputDims.data[1], inputDims.data[3]) != kStatus_Success)
        {
            PRINTF("Failed retrieving input image" EOL);
            for (;;) {}
        }

        MODEL_ConvertInput(inputData, &inputDims, inputType);

        auto startTime = TIMER_GetTimeInUS();
        MODEL_RunInference();
        auto endTime = TIMER_GetTimeInUS();

        MODEL_ProcessOutput(outputData, &outputDims, outputType, endTime - startTime);
    }
}

 

5、测试过程

使用USB type-c连接开发板和PC

 

打开Putty终端

 

测试结果:

 秒表 stopwatch

置信度:(86%)

6、总结

该测试是为了测评进行的,我之前尝试了好多次的摄像头实时取数的程序,但是摄像头的调试关于复杂,而且我没有显示屏也不能实时看到结果。但是整个NPU项目的流程已经搞清楚了。

非常期待手头阔绰的网友能够给出更加精彩的测评。


 

此帖出自NXP MCU论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表