开发板

K210开发板

基于K210开发板神经网络加速器测试_初始化

实验目的

本次测试主要学习 K210 芯片中的神经网络加速器 KPU 的功能。

实验准备

实验元件

K210 芯片中的神经网络加速器 KPU

元件特性

KPU 是通用神经网络处理器,内置卷积、批归一化、激活、池化运算单元,可以对人脸或物体进行实时检测,具体特性如下:

  • 支持主流训练框架按照特定限制规则训练出来的定点化模型
  • 对网络层数无直接限制,支持每层卷积神经网络参数单独配置,包括输入输出通道数目、输入输出行宽列高
  • 支持两种卷积内核 1x1 和 3x3
  • 支持任意形式的激活函数
  • 实时工作时最大支持神经网络参数大小为 5.5MiB 到 5.9MiB
  • 非实时工作时最大支持网络参数大小为(Flash 容量-软件体积)

SDK 中对应 API 功能

以头文件 kpu.h为例

• kpu_task_init (0.6.0 以后不再支持,请使用 kpu_single_task_init):初始化 kpu 任务句柄,该函数具体实现在 model compiler 生成的 gencode_output.c 中。
• kpu_run (0.6.0 以后不再支持,请使用 kpu_start):启动 KPU,进行 AI 运算。
• kpu_get_output_buf (0.6.0 以后不再支持):获取 KPU 输出结果的缓存。
• kpu_release_output_buf (0.6.0 以后不再支持):释放 KPU 输出结果缓存。
• kpu_start:启动 KPU,进行 AI 运算。
• kpu_single_task_init:初始化 kpu 任务句柄。
• kpu_single_task_deinit:注销 kpu 任务。
• kpu_model_load_from_buffer:解析 kmodel 并初始化 kpu 句柄。
• kpu_load_kmodel:加载 kmodel,需要与 nncase 配合使用。
• kpu_model_free:释放 kpu 资源。
• kpu_get_output:获取 KPU 最终处理的结果。
• kpu_run_kmodel:运行 kmodel。
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

实验原理

KPU 可以接收图像的数据,然后经过神经网络卷积计算,返回计算后的数据,LCD 显示输出

实验过程

1.首先是 LCD、摄像头和按键的硬件引脚和软件 GPIO 映射关系。

// 硬件IO口,与原理图对应
#define PIN_LCD_CS             (36)
#define PIN_LCD_RST            (37)
#define PIN_LCD_RS             (38)
#define PIN_LCD_WR             (39)

// camera
#define PIN_DVP_PCLK           (47)
#define PIN_DVP_XCLK           (46)
#define PIN_DVP_HSYNC          (45)
#define PIN_DVP_PWDN           (44)
#define PIN_DVP_VSYNC          (43)
#define PIN_DVP_RST            (42)
#define PIN_DVP_SCL            (41)
#define PIN_DVP_SDA            (40)

#define PIN_KEYPAD_MIDDLE      (2)

/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,与程序对应
#define LCD_RST_GPIONUM        (0)
#define LCD_RS_GPIONUM         (1)

#define KEYPAD_MIDDLE_GPIONUM  (2)

/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口
#define FUNC_LCD_CS             (FUNC_SPI0_SS3)
#define FUNC_LCD_RST            (FUNC_GPIOHS0 + LCD_RST_GPIONUM)
#define FUNC_LCD_RS             (FUNC_GPIOHS0 + LCD_RS_GPIONUM)
#define FUNC_LCD_WR             (FUNC_SPI0_SCLK)

#define FUNC_KEYPAD_MIDDLE      (FUNC_GPIOHS0 + KEYPAD_MIDDLE_GPIONUM)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11