专栏算法工具链onnx转bin模型失败

onnx转bin模型失败

已解决
ZQQ2025-02-12
276
20

开发包:horizon_j5_open_explorer_v1.1.77-py38_20240802


onnx转bin模型失败,这是算子不支持吗?官方说支持,请问下这是啥原因


 


 



 


算法工具链
征程5
评论2
0/1000
  • Huanghui
    Lv.5

    你好 ,可以提供下转换失败的onnx文件以及配置文件吗

    2025-02-13
    0
    0
  • Huanghui
    Lv.5

    我们尝试了下用j5的1.1.74版本,gridsample算子可以正常使用 ,你可以用 1.1.74版本

    2025-02-13
    0
    18
    • ZQQ回复Huanghui:

      可以提供下转成功的onnx文件吗

      2025-02-14
      0
    • ZQQ回复Huanghui:
      2025-02-14
      0
    • Huanghui回复ZQQ:

      导出onnx文件时候的版本是多少呢opset,你可以尝试降低下opset比如从opset16降低到opset11,或者opset13,

      2025-02-14
      0
    • Huanghui回复ZQQ:

      你需要该你的模型,用地平线的gridsample算子 不要用pytorch的gridsample算子 ,然后重新导出onnx模型,到处时候 opset设置成11

      2025-02-14
      0
    • Huanghui:

      用 from horizon_nn.torch import export_onnx导出,之后会自动将gridsample替换为地平线的算子,不需要手动去改。

      2025-02-14
      0
    • Huanghui回复ZQQ:

      import torchimport torch.nn as nnimport torch.nn.functional as Ffrom horizon_nn.torch import export_onnxclass GridSampleModel(nn.Module):def __init__(self):super(GridSampleModel, self).__init__()def forward(self, x, grid):return F.grid_sample(x, grid, mode='bilinear', padding_mode='zeros', align_corners=True)# 创建模型model = GridSampleModel()# 输入张量 (batch_size=1, channels=3, height=4, width=4)x = torch.randn(1, 3, 16, 16)# 创建一个仿射网格theta = torch.tensor([[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]], dtype=torch.float) # 恒等变换grid = F.affine_grid(theta, x.size(), align_corners=True)# 进行前向计算output = model(x, grid)print("Output Shape:", output.shape)# 导出 ONNXtorch.onnx.export(model, (x, grid), "grid_sample.onnx",input_names=['input', 'grid'],output_names=['output'],opset_version=11)print("ONNX 模型已导出:grid_sample.onnx")你看下这个吧用chagpt或着ds帮你整理下格式这个可以在1.1.74里面用opest为11

      2025-02-14
      0
    • baoyu回复Huanghui:

      请问只有onnx文件的话,有工具可以直接替换掉grid_sample算子吗,opset版本现在是11(ai.onnx v11)

      2025-02-14
      0
    • Huanghui回复baoyu:

      可以参考下面的代码,有可能的结果是编译可以过,但是精度不确定


      2025-02-14
      0
    • ZQQ回复Huanghui:



      使用1.1.74的开发环境按照上诉代码替换后domain后,grid_sample算子精度很差,这是啥原因?还有其他方法吗
      2025-02-19
      0
    • Huanghui回复ZQQ:

      你尝试下另外一种方法呢,J5的1.1.74版本呢或许是直接改掉domain这种方法有问题,虽然这样编译可以过 。可能是不同的公司对gridsample算子的实现以及优化也不同。

      2025-02-19
      0
    • baoyu回复Huanghui:

      我们现在板端用的是1.77版本,用1.74版本转的也能跑吗,可以提供onnx文件给你们 帮看看吗

      2025-02-19
      0
    • baoyu回复Huanghui:

      另外想问下 horizon_nn这个包有1.77 py37的版本吗

      2025-02-19
      0
    • baoyu回复Huanghui:

      那哪个版本的比较正常呀 新版本没计划支持吗

      2025-02-19
      0
    • Huanghui回复baoyu:

      新版本这个包有问题已经报给研发的同学修复了,如果修复了应该会在下一个版本发布。


      你现在要使用 from horizon_nn.torch import export_onnx 就用1.74吧。有一点要注意的是,及时使用1.74,也要使用 import torch.nn.functional as F 中的gridsample哈,替换后重新训练。



      至于你直接修改onnx使之能编译这个做法,咱们也只能保证转换通过,精度的问题需要自己把控。

      2025-02-19
      0
    • ZQQ回复Huanghui:

      这个是用chatgpt写的?

      2025-02-21
      0
    • baoyu回复Huanghui:

      想问下gridsample模型转换的时候要注意哪些点吗,还是和普通op一样转就可以了,因为上面这个转完精度不行的 也是 import torch.nn.functional as F 中的gridsample,在你们镜像里用的torch gridsample是已经修改过了是吗

      2025-02-21
      0
    • Huanghui回复baoyu:

      修改完之后重新训练下,在导出onnx进行ptq,每个公司对算子的实现逻辑都不太一样

      2025-02-21
      0
    • 五星闪耀皆为信仰回复Huanghui:
      您好,我电脑导出的版本是onnx13的,因为我CUDA是11.7,查阅官方文档是只支持导出onnx13版本的,但是我不知道怎么降低版本合适,我强制降低的版本通过不了官方验证,能麻烦您给一个思路吗,谢谢您xin_org.svg
      2025-04-08
      0