一、简介
在使用STM32 X-CUBE-AI部署深度学习模型时,ai_buffer是一个非常重要的结构体,它用于管理AI模型的输入输出数据。从代码中可以看到,这个结构体被广泛应用于数据传输过程。
二、结构体定义
typedef struct ai_buffer_ {
ai_buffer_format format; // 数据格式
ai_handle data; // 数据指针
ai_buffer_meta_info* meta_info; // 元数据信息
ai_flags flags; // 标志位
ai_size size; // 元素数量
ai_buffer_shape shape; // 数据形状
} ai_buffer;
三、成员详解
1. format (ai_buffer_format)
- 功能:定义数据格式类型
- 常用值:
-
AI_BUFFER_FORMAT_FLOAT // 32位浮点数 AI_BUFFER_FORMAT_U8 // 8位无符号整数 AI_BUFFER_FORMAT_S8 // 8位有符号整数
- 实际应用:MPU6050的数据通常使用AI_BUFFER_FORMAT_FLOAT
2. data (ai_handle)
- 功能:指向实际数据的指针
- 使用示例:
-
float input_data[6]; // MPU6050的6轴数据 ai_buffer input_buffer; input_buffer.data = input_data;
3. meta_info
- 功能:元数据信息指针
- 一般用法:在嵌入式应用中通常设为NULL
4. flags
- 功能:特殊标志位
- 常用值:
AI_FLAG_NONE // 普通数据
AI_BUFFER_FMT_FLAG_CONST // 常量数据
5. size
从生成的代码可以看到具体大小:
#define AI_MPU6050_IN_1_FORMAT (AI_BUFFER_FORMAT_FLOAT)
#define AI_MPU6050_IN_1_CHANNEL (6)
#define AI_MPU6050_IN_1_SIZE (6)
#define AI_MPU6050_IN_1_SIZE_BYTES (24)
6. shape
- 功能:定义数据的维度结构
- 初始化示例:
AI_BUFFER_SHAPE_INIT(AI_SHAPE_BCWH, 4, 1, 6, 1, 1)
四、实际应用示例
int AI_Run_Example(void) {
ai_buffer ai_input;
ai_buffer ai_output;
float input_data[6]; // MPU6050数据
float output_data[4]; // 4种姿态的概率
// 配置输入buffer
ai_input.format = AI_BUFFER_FORMAT_FLOAT;
ai_input.data = (ai_handle)input_data;
ai_input.size = 6;
// 配置输出buffer
ai_output.format = AI_BUFFER_FORMAT_FLOAT;
ai_output.data = (ai_handle)output_data;
ai_output.size = 4;
// 运行AI推理
ai_run(ai_handle, &ai_input, &ai_output);
return AI_OK;
}