Toybrick

ubuntu16.04仿真环境下运行mobilenetv2模型,识别结果错误

龙虎源

新手上路

积分
17
发表于 2021-3-3 23:38:51    查看: 10958|回复: 2 | [复制链接]    打印 | 显示全部楼层
各位大咖好!

我这边目前基于onnx转rknn模型,然后进行模型推理,发现识别结果不正确,测试了12张,只有3张正确。我的开发流程如下:

在ubuntu1604系统下:
1)安装基于py36的虚拟环境(rk)
安装的rktool的版本为:rknn_toolkit-1.4.0-cp36-cp36m-linux_x86_64.whl
2)通过官方提供的基于onnx2rknn的(resnet50v2)进行模型转换推理,具体的代码如下:
  1. <blockquote>import numpy as np
复制代码
3)基于该code测试了12张图,发现结果只有3张正确。

尝试提升精度的方案:
1)通过设置config中的量化方式(asymmetric_quantized-u8替换为dynamic_fixed_point-16),然后并未提升。
2)通过设置build时的量化方式,也并未提升。
  1. #rknn.build(do_quantization=True,dataset='./eval_dir_180x320.txt')
  2. rknn.build(do_quantization=False,dataset='./eval_dir_180x320.txt')
复制代码
3)通过增加校验测试图集的数据,也并未提升。

请问一下,还有什么可以解决的方案呢?多谢!
回复

使用道具 举报

龙虎源

新手上路

积分
17
 楼主| 发表于 2021-3-3 23:41:34 | 显示全部楼层
补充代码如下:
  1. import numpy as np
  2. import cv2
  3. from rknn.api import RKNN

  4. # 设置模型存放路径
  5. ONNX_MODEL = 'classify.onnx'
  6. RKNN_MODEL = 'classify.rknn'

  7. # 显示TOP3结果
  8. def show_outputs(outputs):
  9.     output = outputs[0][0]
  10.     output_sorted = sorted(output, reverse=True)
  11.     top3_str = 'mobilenetv2\n-----TOP 3-----\n'
  12.     for i in range(3):
  13.         value = output_sorted[i]
  14.         index = np.where(output == value)
  15.         for j in range(len(index)):
  16.             if (i + j) >= 3:
  17.                 break
  18.             if value > 0:
  19.                 topi = '{}: {}\n'.format(index[j], value)
  20.             else:
  21.                 topi = '-1: 0.0\n'
  22.             top3_str += topi
  23.     print(top3_str)


  24. if __name__ == '__main__':

  25.     #############################################################################
  26.     #
  27.     # 第一部分:通过onnx模型转换、量化为RKNN模型                                      
  28.     #
  29.     #############################################################################

  30.     # 1. 创建RKNN对象
  31.     rknn = RKNN()

  32.     # 2. 模型前处理配置
  33.     print('--> config model')
  34.     rknn.config(channel_mean_value='116.28 116.28 116.28 57.12', reorder_channel='0 1 2')
  35.     rknn.config()
  36.     print('done')

  37.     # 3. 加载onnx模型文件
  38.     print('--> Loading model')
  39.     ret = rknn.load_onnx(model=ONNX_MODEL)
  40.     if ret != 0:
  41.         print('Load mobilenetv2 failed!')
  42.         exit(ret)
  43.     print('done')

  44.     # 4. 创建模型文件(量化)
  45.     print('--> Building model')
  46.     ret = rknn.build(do_quantization=False,dataset='./eval_dir_180x320.txt')
  47.     if ret != 0:
  48.         print('Build mobilenetv2 failed!')
  49.         exit(ret)
  50.     print('done')

  51.     # 5. 提取RKNN模型文件
  52.     print('--> Export RKNN model')
  53.     ret = rknn.export_rknn(RKNN_MODEL)
  54.     if ret != 0:
  55.         print('Export mobilenetv2.rknn failed!')
  56.         exit(ret)
  57.     print('done')


  58.     #############################################################################
  59.     #
  60.     #第二部分:基于RKNN模型进行模型的前向推理
  61.     #
  62.     #############################################################################
  63.    
  64.     # 1. 读取图像文件&BGR2RGB
  65.     img = cv2.imread('./1/5_361.jpg')
  66.     img = cv2.resize(img,(320,180))
  67.     img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  68.     #img = cv2.normalize(img,img,alpha=0.017507,beta=2.035714)


  69.     # 2. 初始化RKNN运行环境
  70.     print('--> Init runtime environment')
  71.     ret = rknn.init_runtime()
  72.     if ret != 0:
  73.         print('Init runtime environment failed')
  74.         exit(ret)
  75.     print('done')


  76.     # 3. 前向推理
  77.     print('--> Running model')
  78.     outputs = rknn.inference(inputs=[img])
  79.     x = outputs[0]
  80.     output = np.exp(x)/np.sum(np.exp(x))
  81.     outputs = [output]
  82.     print(outputs)
  83.     #show_outputs(outputs)
  84.     print('done')

  85.     rknn.release()
复制代码
回复

使用道具 举报

bobby_jiang

高级会员

积分
538
发表于 2021-3-18 17:49:01 | 显示全部楼层
先用原始模型测试下,看是不是原始模型就不行?
如果原始模型没问题,那把do_quantization设成False,用识别错误的图跑浮点rknn模型,dump每一层,跟原始模型比。看哪里出现了错误。
回复

使用道具 举报

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

本版积分规则

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


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