Toybrick

求助OpenPose模型inference结果错误

Solomon

新手上路

积分
25
发表于 2019-5-24 18:04:32    查看: 2726|回复: 5 | [复制链接]    打印 | 显示全部楼层
本帖最后由 Solomon 于 2019-5-24 18:05 编辑

我按照上一次直播的内容对openpose模型进行转换, 并在toybrick执行inference过程, 发现预测结果全部为0. 此外, 在toybrick上的推理时间约为8秒. 这与直播中提到的效率有一定差距.

求助:

1. 模型转换代码和推理程序代码如下, 请帮忙查看是否正确;
2. 直播中提到的源码和模型将会放到开源社区中进行分享, 请问下载链接在哪里.

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. from rknn.api import RKNN

  4. INPUT_SIZE = 64

  5. if __name__ == '__main__':
  6.     # 创建RKNN执行对象
  7.     rknn = RKNN(verbose=True)
  8. # 配置模型输入,用于NPU对数据输入的预处理
  9. # channel_mean_value='0 0 0 255',那么模型推理时,将会对RGB数据做如下转换
  10. # (R - 0)/255, (G - 0)/255, (B - 0)/255。推理时,RKNN模型会自动做均值和归一化处理
  11. # reorder_channel=’0 1 2’用于指定是否调整图像通道顺序,设置成0 1 2即按输入的图像通道顺序不做调整
  12. # reorder_channel=’2 1 0’表示交换0和2通道,如果输入是RGB,将会被调整为BGR。如果是BGR将会被调整为RGB
  13. #图像通道顺序不做调整
  14.     rknn.config(channel_mean_value='0 0 0 255', reorder_channel='2 1 0')

  15. # 加载TensorFlow模型
  16. # tf_pb='digital_gesture.pb'指定待转换的TensorFlow模型
  17. # inputs指定模型中的输入节点
  18. # outputs指定模型中输出节点
  19. # input_size_list指定模型输入的大小
  20.     print('--> Loading model')
  21.     # rknn.load_tensorflow(tf_pb='digital_gesture.pb',
  22.     #                      inputs=['input_x'],
  23.     #                      outputs=['probability'],
  24.     #                      input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
  25.     ret = rknn.load_caffe(model='./pose_deploy_linevec.1.prototxt',
  26.                             proto='caffe', blobs='./pose_iter_440000.caffemodel')
  27.     print('done', ret)

  28. # 创建解析pb模型
  29. # do_quantization=False指定不进行量化
  30. # 量化会减小模型的体积和提升运算速度,但是会有精度的丢失
  31.     print('--> Building model')
  32.     rknn.build(do_quantization=False)
  33.     print('done')

  34.     # 导出保存rknn模型文件
  35.     rknn.export_rknn('./openpose.rknn')

  36.     # Release RKNN Context
  37.     rknn.release()
复制代码

  1. rknn_context context;
  2.         int ret = rknn_init(&context, model_buf, model_len, RKNN_FLAG_PRIOR_HIGH);
  3.         if (model_fp)
  4.         {
  5.                 fclose(model_fp);
  6.                 model_fp = NULL;
  7.         }
  8.         if (model_buf)
  9.         {
  10.                 free(model_buf);
  11.                 model_buf = nullptr;
  12.         }
  13.         if (ret < 0)
  14.         {
  15.                 std::cerr << "rknn init fail" << std::endl;
  16.                 return -1;
  17.         }
  18.         rknn_sdk_version version;
  19.     rknn_query(context, RKNN_QUERY_SDK_VERSION, &version, sizeof(rknn_sdk_version));
  20.     std::cout << "api version: " << version.api_version << std::endl;
  21.     std::cout << "driver version: " << version.drv_version << std::endl;

  22.          std::chrono::time_point<std::chrono::system_clock> startTP = std::chrono::system_clock::now();

  23.         cv::Mat resized_img;
  24. cv::Size target_size = cv::Size(160, 160);
  25.         cv::resize(input, resized_img, target_size);
  26. rknn_input inputs[1];
  27.         inputs[0].index = 0;
  28.         inputs[0].buf = resized_img.data;
  29.         inputs[0].size = 3 * 160 * 160;
  30.         inputs[0].pass_through = false;
  31.         inputs[0].type = RKNN_TENSOR_UINT8;
  32.         inputs[0].fmt = RKNN_TENSOR_NCHW;
  33.         ret = rknn_inputs_set(context, 1, inputs);
  34.         if (ret < 0)
  35.         {
  36.                 std::cerr << "set input fail" << std::endl;
  37.                 return -1;
  38.         }

  39. ret = rknn_run(context, nullptr);
  40.         rknn_output outputs[1];
  41.         outputs[0].want_float = true;
  42.         outputs[0].is_prealloc = false;
  43.         ret = rknn_outputs_get(context, 1, outputs, nullptr);
  44.         if (ret < 0)
  45.         {
  46.                 std::cerr << "get outputs fail" << std::endl;
  47.                 return -1;
  48.         }

  49. void* ptr = (void*)(outputs[0].buf);
  50.         int sz[] = {1, 57, 20, 20};
  51.         cv::Mat netOutputBlob(4, sz, CV_32F, ptr);
复制代码


回复

使用道具 举报

hjf515

中级会员

积分
213
发表于 2019-5-27 09:44:34 | 显示全部楼层
能否将培训的 openpose 例程给开放出来。我们可以学习验证下
回复

使用道具 举报

Lee

注册会员

积分
187
发表于 2019-5-28 09:28:25 | 显示全部楼层
同问,能否将例程开放出来?谢谢
回复

使用道具 举报

jay-fit-future

新手上路

积分
38
发表于 2019-5-29 12:33:11 | 显示全部楼层
本帖最后由 jay-fit-future 于 2019-5-30 16:42 编辑

视频直播可以参考:http://www.yizhibo.com/l/NwUIt9Jg9GY5N7e5.html?p_from=pRoom.AnchorReplay
回复

使用道具 举报

jay-fit-future

新手上路

积分
38
发表于 2019-5-30 11:06:13 | 显示全部楼层
Lee 发表于 2019-5-28 09:28
同问,能否将例程开放出来?谢谢

直播地址参考我的回复
回复

使用道具 举报

you_big_father

注册会员

积分
114
发表于 2019-6-5 14:59:30 | 显示全部楼层
请问楼主问题解决了吗,我复现不了官方教程,出现以下错误:
"TypeError: 'NoneType' object is not iterable"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表