金融信创如何推动金融服务效率与安全的全面提升
2077
2022-10-06
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~