yolov5中的Rectangular training和Rectangular inference

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

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

目标检测算法训练阶段和推理阶段resize输入图像为416416,
例如原始输入图像为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.5625416/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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值