Toybrick

rknn输出没有任何画框,onnx输出正常

月夜留香

新手上路

积分
25
楼主
发表于 4 天前    查看: 114|回复: 7 | [复制链接]    打印 | 只看该作者
本帖最后由 月夜留香 于 2024-12-23 18:11 编辑

如标题,onnx模型输出画框正常转换为rknn之后输出没有任何画框。尝试调整阈值之后框出现了但是混乱
想问下这大概率是哪里出了问题呢



回复

使用道具 举报

月夜留香

新手上路

积分
25
沙发
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 月夜留香 于 2024-12-23 18:15 编辑

onnx输出

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

月夜留香

新手上路

积分
25
板凳
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 月夜留香 于 2024-12-23 18:20 编辑
  1. from rknn.api import RKNN
  2. import os

  3. if __name__ == '__main__':
  4.     DATASET_PATH = "./car_dataset/car_subset_20.txt"
  5.     # modified_model.onnx remove Floor op
  6.     model_path = "../onnx/onnx_model_modify_replacefloor.onnx"
  7.     platform = "rk3588"
  8.     output_path = "./rk3588_modified_new.rknn"

  9.     # Create RKNN object
  10.     rknn = RKNN(verbose=False)

  11.     # Pre-process config
  12.     print('--> Config model')
  13.     rknn.config(target_platform=platform, quantized_dtype="asymmetric_quantized-8")
  14.     print('done')

  15.     # Load model
  16.     print('--> Loading model')
  17.     ret = rknn.load_onnx(model=model_path)
  18.     if ret != 0:
  19.         print('Load model failed!')
  20.         exit(ret)
  21.     print('done')

  22.     # Build model
  23.     print('--> Building model')
  24.     ret = rknn.build(do_quantization=True, dataset=DATASET_PATH)
  25.     if ret != 0:
  26.         print('Build model failed!')
  27.         exit(ret)
  28.     print('done')

  29.     # Export rknn model
  30.     print('--> Export rknn model')
  31.     ret = rknn.export_rknn(output_path)
  32.     if ret != 0:
  33.         print('Export rknn model failed!')
  34.         exit(ret)
  35.     print('done')

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

这是转换代码


回复

使用道具 举报

月夜留香

新手上路

积分
25
地板
 楼主| 发表于 4 天前 | 只看该作者
调整阈值之后的rknn输出

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

jefferyzhang

版主

积分
13659
5#
发表于 前天 09:57 | 只看该作者
1. 是否量化
2. 量化后rknn模型输出是否和onnx一致
3. 不量化rknn模型输出是否和onnx一致
4. 如果不一致,请详细到哪一层出现差异

rknntoolkit文档有很详细调试手册,你问题这么笼统的发上来没人帮得了你。
回复

使用道具 举报

月夜留香

新手上路

积分
25
6#
 楼主| 发表于 昨天 17:56 | 只看该作者
jefferyzhang 发表于 2024-12-25 09:57
1. 是否量化
2. 量化后rknn模型输出是否和onnx一致
3. 不量化rknn模型输出是否和onnx一致

谢谢你的回复,
1.无论是否量化结果跟onnx输出都有很大差异。
2.onnx中间层输出还在调试。
回复

使用道具 举报

月夜留香

新手上路

积分
25
7#
 楼主| 发表于 昨天 18:01 | 只看该作者
jefferyzhang 发表于 2024-12-25 09:57
1. 是否量化
2. 量化后rknn模型输出是否和onnx一致
3. 不量化rknn模型输出是否和onnx一致

想请教下问题:
  1. import numpy as np
  2. from PIL import Image
  3. import onnx
  4. from onnx import helper, TensorProto
  5. import numpy as np
  6. import onnxruntime as ort

  7. image_path = '1.jpg'  # 你的图像路径
  8. image = Image.open(image_path)

  9. # 调整图像尺寸为模型输入要求的尺寸 (896, 448)
  10. image = image.resize((896, 448))  # (宽, 高)

  11. # 将图像转换为RGB(如果它是灰度图或者有其他颜色模式)
  12. image = image.convert('RGB')

  13. # 转换为numpy数组,并将数据类型设置为float32
  14. image_np = np.array(image).astype(np.float32)

  15. # 归一化:将像素值缩放到 [-1, 1]
  16. image_np = (image_np / 127.5) - 1.0  # 将 [0, 255] 范围的像素值归一化到 [-1, 1]

  17. # 调整形状为 (1, 3, 448, 896)
  18. image_np = np.transpose(image_np, (2, 0, 1))  # 转换为 (3, 448, 896) 形式
  19. image_np = np.expand_dims(image_np, axis=0)    # 增加批次维度,变为 (1, 3, 448, 896)

  20. print(image_np.shape)

  21. # load model
  22. model = onnx.load_model("model_nchw.onnx")
  23. new_model_name="model_nchw_output.onnx"

  24. input_shape=[1,12,224,448]

  25. # add output
  26. intermediate_layer_value_info = helper.make_tensor_value_info('Concat_41', TensorProto.FLOAT, input_shape)
  27. model.graph.output.extend([intermediate_layer_value_info])
  28. onnx.save(model, new_model_name)
  29. onnx.checker.check_model(model)


  30. # run model
  31. ort_session = ort.InferenceSession(new_model_name)
  32. input_name = ort_session.get_inputs()[0].name

  33. conf_onnx, boxes_onnx, tmp_onnx = ort_session.run(None, {input_name: image_np})

  34. ## ========================== Result Compare ===============================
  35. print('********************* Intermidiante Layer Number: %s *******************' % 'input')
  36. tmp_onnx = np.squeeze(tmp_onnx)
  37. tmp_onnx = tmp_onnx.reshape(-1,tmp_onnx.shape[-1])

  38. # for idx in range(tmp_onnx.shape[0],2):
  39. for idx in range(0,4):
  40.     print('********************* Onnx:%d ****************************' % idx)
  41.     print(tmp_onnx[idx,:20])

  42. total_weight = np.sum(np.abs(tmp_onnx))
  43. print('totoal-weight:', total_weight)
复制代码

输出为: Graph output 'Concat_41' is not an output of any node in graph.
请问这个代码哪里出现问题呢,或者说输出"Concat_41"结果无法通过这个方法实现?
回复

使用道具 举报

月夜留香

新手上路

积分
25
8#
 楼主| 发表于 昨天 18:01 | 只看该作者
月夜留香 发表于 2024-12-26 18:01
想请教下问题:

输出为: Graph output 'Concat_41' is not an output of any node in graph.
在netron上是可以看到'Concat_41'节点的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

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

本版积分规则

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


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