yolov5中的Rectangular training和Rectangular inference

网友投稿 2077 2022-10-06

yolov5中的Rectangular training和Rectangular inference

yolov5中的Rectangular training和Rectangular inference

在常用的目标检测算法中,输入图像的分辨率大小不一,常用的方式是将输入图像的分辨率归一化为统一的图像分辨率,然后再喂给目标检测网络。

若设置喂给目标检测网络输入图像的分辨率为:416 * 416

目标检测算法训练阶段和推理阶段resize输入图像为416 * 416,

例如原始输入图像为1280 * 720:

Square training 和 Inference

原始输入图像宽高比:720/1280 = 0.5625 以长边为基准,缩放比例分别为:1,0.5625 等比例缩放后的分辨率为:416 ,234

Square training 和 Inference阶段对等比例缩放后的分辨率进行pading:左右两列的列表分别pad = (416-234)/ 2 = 91,padding后的图像为:

可以看到,上面的图片中存在大量的冗余部分,一个很自然的想法就是,能不能去掉这些填充的部分但是又要满足长宽是32的倍数?这样的话,训练和推理速度都会快一些,而且显存开销也会小一点。

Rectangular training 和 inference

原始输入图像缩放后的分辨率(设定为32的倍数)为:(np.ceil(1*416/32)*32 ,np.ceil(0.5625*416/32 )*32) = (416,256)

原始图像等比例缩放后的分辨率为:(416,234)

分别对等比例缩放后的图像进行行列padding:

行pad = (416- 416)/2 =0 , 列pad = (256- 234)/2 = 11

因此Rectangular training 和 inference阶段padding后的图像分辨率为:

Rectangular 训练阶段和推理阶段pading的像素值为(114,114,114)灰色像素或(0,0,0)黑色像素。

但是Rectangular training的时候,一般取这个batch中的最大的长和宽,然后图片都填充到这个max width和max height。但是这样显然还是比较浪费的,因为如果一个batch中的不同图片wh差距很大,小图片就太吃亏了啊。但是如果训练的图片尺寸都是相同的或者相近的,那这个就有很大优势了。

U版YOLOv3和YOLOv5实现主要就是优化了一下如何将比例相近的图片放在一个batch,这样显然填充的就更少一些了,训练起来也就快了一些。

参考:​​https://github.com/ultralytics/yolov3/issues/232​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序 setData的使用方法(微信小程序开发一个多少钱)
下一篇:微信小程序日期时间选择器的使用方法(如何设置小程序使用时间)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~