【bug】解决yolov5模型转换后,模型推理结果不一致问题

您所在的位置:网站首页 yolov5转tensorrt并测精度 【bug】解决yolov5模型转换后,模型推理结果不一致问题

【bug】解决yolov5模型转换后,模型推理结果不一致问题

2023-11-28 02:12| 来源: 网络整理| 查看: 265

yolov5模型转换问题随笔 pt转onnx出现推理结果不一致问题

pt转onnx出现推理结果不一致问题

因为yolov5提供了很便捷的模型转换流程,所以很多时候使用者并没有测试转换后的模型是否与原模型输出结果一致,导致有时使用效果与训练效果相差很大,给后续使用带来很多不便与隐患。

对于一些尺寸不是很“规范”的图片,输出结果会出现bbox位置有些许偏差,且score相差的可能会非常大。 举例我训练的一个模型,对同一张图pt模型输出结果:

0 0.505093 0.513194 0.980556 0.973611 0.788908

转onnx后输出结果:

0 0.510185 0.513542 0.97963 0.972917 0.738651

另一张图,pt模型输出结果:

0 0.0636364 0.506814 0.113636 0.076661 0.819145

onnx模型数据结果:

0 0.0715909 0.506814 0.0931818 0.0732538 0.922734

这评分结果相差的就很大了,但是bbox不是很明显,更增加了问题暴露发现的难度。

仔细观察推理代码不难发现,问题出在数据预处理上面,因为pt模型和其他格式的模型,在resize时的padding方式是不同的,所以导致模型输出结果有问题。 那么解决方式也很简单,只需在detect.py脚本中,图片变换前插入固定参数值即可:

stride, names, pt = model.stride, model.names, model.pt imgsz = check_img_size(imgsz, s=stride) # check image size pt=True # pt参数在处理图片时会影响padding规则,所以锁死则不会出现偏差 stride=32 # 别问,问就是天意 # Dataloader if webcam: view_img = check_imshow() cudnn.benchmark = True # set True to speed up constant image size inference dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt) bs = len(dataset) # batch_size else: dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt) bs = 1 # batch_size vid_path, vid_writer = [None] * bs, [None] * bs


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3