配置

1. cubeAI 生成代码设置好串口后,不需要再进行输出重定向
下载成功后打印调试信息
image.png
接下来可以将打印调试信息的函数注释掉
image.png

自定义模型输入

  1. #include "ai_datatypes_defines.h"
  2. #include "ai_platform.h"
  3. #include "network.h"
  4. #include "network_data.h"
  5. #include "stdio.h"
  6. #include "arm_math.h"
  7. /* USER CODE BEGIN PTD */
  8. float aiInData[5][AI_NETWORK_IN_1_SIZE]={
  9. {5.6, 2.5, 3.9, 1.1},
  10. {6.3, 3.3, 4.7, 1.6},
  11. {6.7, 3.3, 5.7, 2.5},
  12. {6.0, 2.2, 5.0, 1.5},
  13. {6.7, 2.5, 5.8, 1.8}
  14. };
  15. ai_handle network;
  16. float aiOutData[AI_NETWORK_OUT_1_SIZE];
  17. uint8_t activations[AI_NETWORK_DATA_ACTIVATIONS_SIZE];

初始化模型

  1. /* 模型初始化 */
  2. void net_Init(ai_handle w_addr, ai_handle act_addr)
  3. {
  4. ai_error err;
  5. err = ai_network_create(&network, AI_NETWORK_DATA_CONFIG);
  6. if (err.type != AI_ERROR_NONE) {
  7. printf("???? - code=%d code=%d\r\n", err.type, err.code);
  8. Error_Handler();
  9. }
  10. const ai_network_params params = AI_NETWORK_PARAMS_INIT(
  11. AI_NETWORK_DATA_WEIGHTS(w_addr),
  12. AI_NETWORK_DATA_ACTIVATIONS(act_addr)
  13. );
  14. if (!ai_network_init(network, &params)) {
  15. err = ai_network_get_error(network);
  16. printf("初始化失败 - code=%d code=%d\r\n", err.type, err.code);
  17. Error_Handler();
  18. }
  19. }
  20. /* 模型运行 */
  21. void net_Run(float *pIn, float *pOut)
  22. {
  23. ai_i32 batch;
  24. ai_error err;
  25. ai_buffer ai_input[AI_NETWORK_IN_NUM] = AI_NETWORK_IN;
  26. ai_buffer ai_output[AI_NETWORK_OUT_NUM] = AI_NETWORK_OUT;
  27. ai_input[0].n_batches = 1;
  28. ai_input[0].data = AI_HANDLE_PTR(pIn);
  29. ai_output[0].n_batches = 1;
  30. ai_output[0].data = AI_HANDLE_PTR(pOut);
  31. batch = ai_network_run(network, ai_input, ai_output);
  32. if (batch != 1) {
  33. err = ai_network_get_error(network);
  34. printf("运行失败 - code=%d code=%d\r\n", err.type, err.code);
  35. Error_Handler();
  36. }
  37. }

模型推理

  1. printf("start testing!!!\r\n");
  2. //uint8_t correct=0;
  3. net_Init(ai_network_data_weights_get(), activations);
  4. __HAL_TIM_SetCounter(&htim4,0);
  5. HAL_TIM_Base_Start(&htim4);
  6. int i=0;
  7. for(i=0;i<2;i++){
  8. net_Run(aiInData[i],aiOutData);
  9. }
  10. int count_ms=__HAL_TIM_GET_COUNTER(&htim4);
  11. HAL_TIM_Base_Stop(&htim4);
  12. int j;
  13. for(j=0;j<4;j++){
  14. printf("%.3f ",aiOutData[j]);
  15. }
  16. printf("done\r\n");
  17. printf("computing done\r\n");
  18. printf("run 6 times cost:%d\r\n",count_ms);