YOLOV8基于Opset-12导出的ONNX模型,使用TensorRT-8.2.1.8转换模型时,提示以下错误,请问如何修复这个错误?: [06/01/2023-17:17:23] [I] TensorRT version: 8.2.1 [06/01/2023-17:17:23] [I] [TRT] [MemUsageChange] Init CUDA: CPU +323, GPU +0, now: CPU 335, GPU 1027 (MiB) [06/01/2023-17:17:24] [I] [TRT] [MemUsageSnapshot] Begin constructing builder kernel library: CPU 335 MiB, GPU 1027 MiB [06/01/2023-17:17:24] [I] [TRT] [MemUsageSnapshot] End constructing builder kernel library: CPU 470 MiB, GPU 1058 MiB [06/01/2023-17:17:24] [I] Start parsing network model [06/01/2023-17:17:24] [I] [TRT] ---------------------------------------------------------------- [06/01/2023-17:17:24] [I] [TRT] Input filename: /opt/projects/ultralytics/runs/detect/train/weights/best.onnx [06/01/2023-17:17:24] [I] [TRT] ONNX IR version: 0.0.8 [06/01/2023-17:17:24] [I] [TRT] Opset version: 17 [06/01/2023-17:17:24] [I] [TRT] Producer name: pytorch [06/01/2023-17:17:24] [I] [TRT] Producer version: 2.0.0 [06/01/2023-17:17:24] [I] [TRT] Domain: [06/01/2023-17:17:24] [I] [TRT] Model version: 0 [06/01/2023-17:17:24] [I] [TRT] Doc string: [06/01/2023-17:17:24] [I] [TRT] ---------------------------------------------------------------- [06/01/2023-17:17:24] [W] [TRT] onnx2trt_utils.cpp:366: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32. [06/01/2023-17:17:24] [E] [TRT] ModelImporter.cpp:773: While parsing node number 267 [Range -> "/model.28/Range_output_0"]: [06/01/2023-17:17:24] [E] [TRT] ModelImporter.cpp:774: --- Begin node --- [06/01/2023-17:17:24] [E] [TRT] ModelImporter.cpp:775: input: "/model.28/Constant_9_output_0" input: "/model.28/Cast_output_0" input: "/model.28/Constant_10_output_0" output: "/model.28/Range_output_0" name: "/model.28/Range" op_type: "Range" [06/01/2023-17:17:24] [E] [TRT] ModelImporter.cpp:776: --- End node --- [06/01/2023-17:17:24] [E] [TRT] ModelImporter.cpp:779: ERROR: builtin_op_importers.cpp:3352 In function importRange: [8] Assertion failed: inputs.at(0).isInt32() && "For range operator with dynamic inputs, this version of TensorRT only supports INT32!" [06/01/2023-17:17:24] [E] Failed to parse onnx file [06/01/2023-17:17:24] [I] Finish parsing network model [06/01/2023-17:17:24] [E] Parsing model failed [06/01/2023-17:17:24] [E] Failed to create engine from model. [06/01/2023-17:17:24] [E] Engine set up failed
时间: 2023-11-21 17:05:32 浏览: 83
这个错误提示是因为TensorRT不支持ONNX模型中的INT64类型权重。您需要将ONNX模型中的INT64类型权重转换为INT32类型,以便TensorRT能够正确地解析模型。可以使用ONNX官方提供的`onnx-tensorrt`工具来转换模型,该工具支持将INT64类型权重转换为INT32类型。具体步骤如下:
1. 安装`onnx-tensorrt`工具,可以使用`pip install onnx-tensorrt`命令来安装。
2. 使用`onnx-tensorrt`工具将ONNX模型转换为TensorRT引擎。具体命令如下:
```
import onnx
import onnx_tensorrt.backend as backend
from onnx_tensorrt.backend import prepare
model = onnx.load('/path/to/onnx/model')
engine = backend.prepare(model, device='CUDA:0', max_batch_size=max_batch_size)
```
其中,`/path/to/onnx/model`是您的ONNX模型文件路径,`max_batch_size`是您想要设置的最大批处理大小。这个命令会将ONNX模型转换为TensorRT引擎,并返回一个TensorRT引擎对象。
注意,在使用`onnx-tensorrt`工具时,需要确保您的ONNX模型中不包含任何INT64类型的权重。如果您的模型中包含INT64类型权重,您需要手动将其转换为INT32类型,或者使用其他工具将其转换为INT32类型。