当前位置:   article > 正文

yolov5中的Rectangular training和Rectangular inference

rectangular training

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

若设置喂给目标检测网络输入图像的分辨率为: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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/743288
推荐阅读
相关标签
  

闽ICP备14008679号