ywy0183102244 2024-03-20 14:48 采纳率: 0%
浏览 8

GroundingDINO-onnxrun的python程序使用GPU推理报错

大哥您好,本人才刚刚接触机器学习,使用您GroundingDINO-onnxrun的python程序时,当将onnxruntime设置为GPU推理的时候会报错 “onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Non-zero status code returned while running Expand node. Name:'/class_embed.0_4/Expand' Status Message: /class_embed.0_4/Expand: left operand cannot broadcast on dim 2 LeftShape: {1,900,4}, RightShape: {1,900,256}”,请问这个有解决方案吗?

该错误出现在 GroundingDINO 类的 detect 方法的 “outputs = self.net.run(self.output_names, inputs)” 这行代码里面。

提示的出处是 onnxruntime\capi\onnxruntime_inference_collection.py 这个文件的第220行代码 “print(self._sess.run(output_names, input_feed, run_options))”

img

诚挚等待您的答复!

  • 写回答

2条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-20 14:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 使用 GroundingDINO-onnxrun 的 Python 程序时,将 onnxruntime 设置为 GPU 推理时会报错 "onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Non-zero status code returned while running Expand node. Name:'/class_embed.0_4/Expand' Status Message: /class_embed.0_4/Expand: left operand cannot broadcast on dim 2 LeftShape: {1,900,4}, RightShape: {1,900,256}",请问这个有解决方案吗? 问题分析: 根据报错信息,出错的地方在 onnxruntime 的 Expand 节点上,原因是左侧的操作不允许在第二维进行广播。左操作的形状是 {1, 900, 4},右操作的形状是 {1, 900, 256}。可能是由于形状不匹配而导致的问题。 解决方案:
    1. 检查代码: 可以通过检查代码来确定问题是否在输入数据的处理过程中出现了错误。查看输入数据是否有误,如是否存在 NaN、无穷值等非法输入。检查输入数据的类型是否与模型的期望类型相同。
    2. 更新 onnxruntime 版本: 更新 onnxruntime 到最新版本,以确保能够获得最新的 bug 修复和性能优化。可以在命令行中使用以下命令升级: pip install onnxruntime --upgrade
    3. 修改模型: 如果在模型的构建和训练过程中出现了问题,则需要修改模型。请检查模型中使用的层、激活函数、优化器等是否合适,是否存在错误。
    4. 修改输入数据: 尝试调整输入数据的形状,使其与期望的形状相同。您可以尝试调整输入数据的大小、形状、尺寸等,以使其适应模型的期望输入。
    5. 切换到 CPU 推理: 如果将 onnxruntime 设置为 GPU 推理时出现错误,则可以将其设置为 CPU 推理。您可以使用以下代码将 onnxruntime 设置为 CPU 推理: import onnxruntime ort_session = onnxruntime.InferenceSession('model.onnx') ort_session.set_providers(['CPUExecutionProvider']) 案例分享: 下面提供一个样例代码,演示如何使用 onnxruntime 进行 CPU 推理: import numpy as np import onnxruntime

    创建一个 InferenceSession 实例并将其设置为 CPU 推理

    ort_session = onnxruntime.InferenceSession('model.onnx') ort_session.set_providers(['CPUExecutionProvider'])

    初始化输入数据

    input_data = np.random.rand(1,900,4).astype(np.float32)

    执行推理

    outputs = ort_session.run([], {'input_data': input_data})

    输出结果

    print(outputs)

    评论

报告相同问题?

问题事件

  • 创建了问题 3月20日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度