YOLO序列版本和Deepstream的数据缩放预处理问题

博客探讨了在Deepstream框架中使用Yolov5模型时遇到的泛化能力问题。作者发现模型在新场景和不同摄像头角度下的表现不佳,主要原因是数据预处理的缩放填充方式与模型训练时的差异。Yolov5在训练时使用mosaic和mixup增强,而验证时采用Letterbox填充,Deepstream则使用固定填充方式。实验表明填充位置和颜色的差异显著影响检测精度。为解决此问题,提出了两个改进方案:一是调整验证阶段的数据处理方式以匹配Deepstream,二是训练时加入Deepstream填充方式的数据。

因为我们的项目使用Deepstream作为视频播放和模型推理的框架,经过前面解决若干模型转换上的问题和Deepstream内在的问题后,在同分布的测试集上,Deepstream里FP16量化模型的推理精度基本上和无量化版模型使用python调用的推理精度差不多了,可以说是基本无损了,但是近来拿到从未参与训练的场景和摄像头角度差异有点大的新的试点部署现场测试,泛化能力表现却比较差,在经过序列调查排除网络模型本身的问题后,发现几点原因:

1. 我们目前使用的yolov5-v6版模型比之前使用的yolov5旧版模型的泛化能力受数据预处理上的缩放填充方式的影响比较大;

2. Deepstream里数据的缩放填充预处理方式是把图片保持宽高比(aspect ratio)缩放到小于或等于640x640以内然后直接拷贝到640x640的buffer的上方,下侧以黑色填充的(我翻看了nvinfer插件的源码,实际上是事先创建640x640的0值缓冲区,将缩小的图片内容填到上方后,下方就相当于用黑色填充了),所以不是标准的Letterbox方式,而且只提供了这种缩放填充方式,里面代码写死了的没得选;

3.yolo序列模型最初的版本是直接做resize后输入模型,后来AlexeyAB版的yolov3以及后来的pytorch版的yolov4和yolov5都是这样搞的: training时是直接resize原始图片到模型输入的尺寸或者在原始图片基础上做mosaic和mixup增强效果直接弄成了模型输入数据的尺寸(例如640x640),也就根本不存在填充问题,而在validation时却是将输入图片先保持宽高比缩放到小于或等于640x640的范围内并将缩小了的图片放在待输入模型的图片数据mat的中央,上下两侧不足的部分用灰色(114,114,114)填充的,也就是标准的Letterbox缩放填充方式,也就是用Letterbox方式缩放填充后的图片作为输入模型的数据去选择最好的参数组合:

这样有点的搞法根据

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Arnold-FY-Chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值