YOLOv6
YOLOv6 copied to clipboard
模型转换的问题
Before Asking
-
[X] I have read the README carefully. 我已经仔细阅读了README上的操作指引。
-
[X] I want to train my custom dataset, and I have read the tutorials for training your custom data carefully and organize my dataset correctly; (FYI: We recommand you to apply the config files of xx_finetune.py.) 我想训练自定义数据集,我已经仔细阅读了训练自定义数据的教程,以及按照正确的目录结构存放数据集。(FYI: 我们推荐使用xx_finetune.py等配置文件训练自定义数据集。)
-
[X] I have pulled the latest code of main branch to run again and the problem still existed. 我已经拉取了主分支上最新的代码,重新运行之后,问题仍不能解决。
Search before asking
- [X] I have searched the YOLOv6 issues and found no similar questions.
Question
您好,我修改了YOLOv6的网络结构,采用轻量化模块替换了repblock,成功转换成了onnx模型,但用trtexec从onnx转trt模型时失败,报如下错误: [11/20/2023-15:31:50] [W] [TRT] onnx2trt_utils.cpp:220: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32. ERROR: builtin_op_importers.cpp:518 In function importConv: [6] Assertion failed: nchan == -1 || kernelWeights.shape.d[1] * ngroup == nchan [11/20/2023-15:31:50] [E] Failed to parse onnx file [11/20/2023-15:31:50] [E] Parsing model failed [11/20/2023-15:31:50] [E] Engine creation failed [11/20/2023-15:31:50] [E] Engine set up failed &&&& FAILED TensorRT.trtexec # ./trtexec --onnx=/home/test/lixiaojun/yolov5-master-vision/TensorRT/weights/yolov6-rcs-pconv.onnx --saveEngine=/home/test/lixiaojun/yolov5-master-vision/TensorRT/weights/yolov6--rcs-pconv.engine 请问这是什么导致的?
Additional
No response
解决ONNX模型转换为TensorRT时的错误
- 错误原因 你遇到的错误信息主要有两部分:
"Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32." 这表明你的ONNX模型生成的权重是INT64类型,而TensorRT本身不支持INT64,因此它试图将其转换为INT32。
"Assertion failed: nchan == -1 || kernelWeights.shape.d[1] * ngroup == nchan" 这是在导入卷积操作时出现的错误,可能是由于模型的某些参数与TensorRT的期望不符导致的。
- 可能的解决方法 以下是一些可能的解决方法:
确保你的ONNX模型生成的权重是TensorRT支持的数据类型。你可能需要在转换模型为ONNX格式时,将权重的数据类型设置为INT32或者其他TensorRT支持的类型。
检查你的模型中的卷积操作的参数。确保卷积核的形状、分组数量等参数与TensorRT的期望相符。
尝试更新你的ONNX和TensorRT版本。有时,使用最新版本的库可以解决一些兼容性问题。
以上是根据你提供的错误信息推测的可能的解决方法,具体的解决方案可能需要根据你的模型和环境进行调整。如果以上方法仍无法解决问题,建议你查阅相关文档或者在相关社区寻求帮助。
——— 复制自小美智能助理
解决ONNX模型转换为TensorRT时的错误
1. 错误原因 你遇到的错误信息主要有两部分:
"Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32." 这表明你的ONNX模型生成的权重是INT64类型,而TensorRT本身不支持INT64,因此它试图将其转换为INT32。
"Assertion failed: nchan == -1 || kernelWeights.shape.d[1] * ngroup == nchan" 这是在导入卷积操作时出现的错误,可能是由于模型的某些参数与TensorRT的期望不符导致的。
2. 可能的解决方法 以下是一些可能的解决方法:
确保你的ONNX模型生成的权重是TensorRT支持的数据类型。你可能需要在转换模型为ONNX格式时,将权重的数据类型设置为INT32或者其他TensorRT支持的类型。
检查你的模型中的卷积操作的参数。确保卷积核的形状、分组数量等参数与TensorRT的期望相符。
尝试更新你的ONNX和TensorRT版本。有时,使用最新版本的库可以解决一些兼容性问题。
以上是根据你提供的错误信息推测的可能的解决方法,具体的解决方案可能需要根据你的模型和环境进行调整。如果以上方法仍无法解决问题,建议你查阅相关文档或者在相关社区寻求帮助。
3. 参考链接 [YOLOv8-TensorRT-CPP issue](https://github.com/cyrusbehr/YOLOv8-TensorRT-CPP/issues/30) [使用onnx解析器来读取onnx文件](https://blog.csdn.net/qq_40672115/article/details/131883965) [yolov8+qt+onnx](https://blog.csdn.net/npu_yuanfang/article/details/134524695)
——— 复制自小美智能助理
您好,我已经解决了模型转换的问题,但是我改进了yolov6。在转换为tensorrt后,改进的模型在fp32和fp16下的推理速度比原来的yolov6更快。然而,在转换为int8后,原始yolov6的速度增加了一倍(fp16:66fps->int8:122fps),改进后的yolov6速度为(fp16:100fps->int8:102fps)速度几乎没有提升。请问这是改进模块不适用于int8吗? 改进模块包含:split、concat、droppath等操作,采用onnx.opset=12进行onnx转换的,因为13转onnx后,在NX上转trt会报如下错误: [TensorRT] VERBOSE: ModelImporter.cpp:119: Searching for input: backbone.ERBlock_2.1.spatial_mixing.partial_conv3.0.weight [TensorRT] VERBOSE: ModelImporter.cpp:125: Conv_6 [Conv] inputs: [input.8 -> (1, 32, 160, 160)], [backbone.ERBlock_2.1.spatial_mixing.partial_conv3.0.weight -> (16, 16, 3, 3)], [TensorRT] VERBOSE: builtin_op_importers.cpp:450: Convolution input dimensions: (1, 32, 160, 160) ERROR: ONNX Parse Failed In node -1 (importConv): INVALID_NODE: Assertion failed: nchan == -1 || kernelWeights.shape.d[1] * ngroup == nchan ERROR: failed to build the TensorRT engine!
我的指令如下: 1、PC:python ./deploy/ONNX/export_onnx.py --weights runs/train/yolov6-fast/weights/best_ckpt.pt --device 1 --simplify 2、NX:python3 onnx_to_trt.py -m ./weights/best_ckpt.onnx -d int8