You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yolov7转TensorRT推理报错:无法解包足够值(预期4,得到0)

解决Yolov7-TensorRT本地推理时ValueError: not enough values to unpack (expected 4, got 0)问题

核心原因分析

报错说明self.infer(img)没有返回预期的4个结果(num, final_boxes, final_scores, final_cls_inds),Colab正常但本地失败,大概率是本地环境与Colab的环境不兼容,或者infer方法的API修改引入了逻辑错误。

具体排查与解决步骤

1. 对齐TensorRT版本

Colab导出的.trt引擎文件是基于特定版本TensorRT生成的,本地版本不匹配会导致引擎无法正确解析,推理无输出:

  • 先在Colab中查看TensorRT版本:
    import tensorrt
    print(tensorrt.__version__)
    
  • 本地安装完全相同版本的TensorRT,注意要匹配CUDA、cuDNN的版本(参考TensorRT官方兼容矩阵)
  • 用本地的TensorRT重新导出引擎文件,不要直接复用Colab导出的文件

2. 检查infer方法的API修改逻辑

替换废弃API(如get_tensor_shape)时,可能破坏了输出张量的读取逻辑:

  • 确认infer方法中正确绑定了所有输出张量:
    • 检查输出张量的数量是否为4个,名称与导出引擎时的配置一致
    • 确保每个输出张量都通过cudaMemcpy或TensorRT的新API正确读取数据并返回
  • 在infer方法中添加日志,打印输出张量的形状、数据是否为空,定位哪一步没有拿到结果

3. 验证CUDA/cuDNN兼容性

本地CUDA、cuDNN版本与TensorRT不兼容,会导致引擎无法正常执行:

  • 对照TensorRT官方文档,确认当前TensorRT版本对应的CUDA、cuDNN版本范围
  • 调整本地环境到兼容版本,例如TensorRT 8.6对应CUDA 11.8、cuDNN 8.7.0

4. 对齐图像预处理逻辑

本地preproc函数与Colab实现不一致,会导致输入引擎的图像数据格式错误:

  • 对比本地和Colab的preproc代码,确保:
    • 图像resize的填充方式、保持比例的逻辑完全一致
    • 归一化用的mean和std值与导出引擎时的参数一致
    • 图像通道顺序(RGB/BGR)、数据类型(如float32)正确

调试辅助手段

  • 使用TensorRT官方工具trtexec测试引擎文件是否正常:
    trtexec --loadEngine=yolov7-tiny-nms.trt --batch=1
    
    如果trtexec报错,说明引擎本身无效,需要重新导出
  • 在inference方法中添加打印,检查img的形状、数据是否符合引擎输入要求

内容的提问来源于stack exchange,提问作者hmmyess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:50:31