tensorrt中采用YOLOv5的pt文件生成engine中遇到问题

 

 kernel weights has count 32640 but 2304 was expected

其中32640/128=255

255 = (80+5)*3,即80个类,5个预测值,每个尺度用3个anchor

因此可能需要修改yololayer.h文件中把自己数据的类别、anchor等参数

当把class_num变成2时,提示变为

 kernel weights has count 32640 but 2688 was expected

128*1*1*21/1=2688

在下述的文章可以看到按理说不需要进行修改,但是仍然出现了问题 

​​​​​​Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型转engine文件_sinat_28371057的博客-CSDN博客

这个时候我采取了一种取巧的方法,因为制裁使用yolov5s的权重文件直接生成engine时并未出错,但是更改calss_num后出错,因此我想到是否是因为我的目标是单类别的。上文可知更改为2是仍然出错,我索性就将类别数不动仍为80,但是出了我要识别的物体外全设置为空,在这种情况下生成engine成功。 


原因:不清楚,可能是因为某些东西没安装好冲突了吧,哈哈哈

解决方法:最后我彻底放弃了直接重头开始布置环境,新装了最新的YOLOv5 6.0版本的,并且重新安装了依赖库,重新跑整个权重文件之后,然后使用最新的对应YOLOv5 6.0版本的tensorrt进行转换整个engine,结果终于正常了。折腾了我几个月的问题终于解决了(绕过了 哈哈哈)。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
为了提高YOLOv5的推理速度,可以使用TensorRT进行加速。以下是使用TensorRT加速YOLOv5的步骤: 1. 首先,需要安装TensorRT并设置环境变量。可以参考NVIDIA官方文档进行安装和设置。 2. 接下来,需要将YOLOv5模型导出为ONNX格式。可以使用官方提供的export.py脚本进行导出。例如,导出yolov5s模型可以使用以下命令: ``` python export.py --weights yolov5s.pt --img 640 --batch 1 --include torchscript onnx --optimize --dynamic ``` 这将在模型位置处生成yolov5s.onnx文件。 3. 然后,可以使用TensorRT进行优化和加速。可以使用以下代码进行加载和优化: ```python import tensorrt as trt TRT_LOGGER = trt.Logger(trt.Logger.WARNING) def build_engine(onnx_file_path): with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.OnnxParser(network, TRT_LOGGER) as parser: builder.max_workspace_size = 1 << 30 # 1GB builder.max_batch_size = 1 builder.fp16_mode = True with open(onnx_file_path, 'rb') as model: parser.parse(model.read()) engine = builder.build_cuda_engine(network) return engine ``` 这将返回一个已经优化的TensorRT引擎。 4. 最后,可以使用以下代码进行推理: ```python import pycuda.driver as cuda import pycuda.autoinit import numpy as np import cv2 def allocate_buffers(engine): inputs = [] outputs = [] bindings = [] for binding in engine: size = trt.volume(engine.get_binding_shape(binding)) * engine.max_batch_size dtype = trt.nptype(engine.get_binding_dtype(binding)) # Allocate host and device buffers host_mem = cuda.pagelocked_empty(size, dtype) device_mem = cuda.mem_alloc(host_mem.nbytes) # Append the device buffer to device bindings. bindings.append(int(device_mem)) # Append to the appropriate list. if engine.binding_is_input(binding): inputs.append({'host': host_mem, 'device': device_mem})

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LYiiiiiii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值