Rectangular inference 矩形推理

前言

学习YOLOv3代码https://github.com/ultralytics/yolov3

Rectangular inference 矩形推理是detect.py中的默认实现。 这可以显著的减少推理时间。 例如,在zidane.jpg上,CPU推理时间(在2018年MacBook Pro上)从1.01s减少到0.63s,减少了37%。这是因为图像区域送入网络时减少了38%(416x416减少到256x416) 。为了说明什么是Rectangular inference,就得说说什么是 Square Inference。

Square Inference 正方形推理

众所周知,YOLOv3下采样了32倍,因此输入网络的长宽需要是32的倍数,最常用的分辨率就是416了。Square Inference就是输入为正方形,具体过程为:求得较长边缩放到416的比例,然后对图片长宽按这个比例缩放,使得较长边达到416再对较短边进行填充使得较短边也达到416。

 

Rectangular Inference 矩形推理

可以看到,上面的图片中存在大量的冗余部分,一个很自然的想法就是,能不能去掉这些填充的部分但是又要满足长宽是32的倍数?

这就是Rectangular Inference的思想了,具体过程为:求得较长边缩放到416的比例,然后对图片wh按这个比例缩放,使得较长边达到416,再对较短边进行尽量少的填充使得较短边满足32的倍数。

Rectangular training 矩形训练

既然可以 Rectangular Inference ,很自然又想到训练的时候能不能也这样?但是显然,训练的时候情况就比较复杂了,因为我们是批次训练的,要保证这个batch里面的图片shape是一样的,所以最常见的就是Square training,例如YOLO默认就是图片416x416输入,SSD300x300等等。而Faster RCNN系列、Retinanet就不是固定尺寸的正方形输入,因此一开始Faster RCNN实现往往都是写死batch size = 1。而现在有些实现是可以batch size > 1,因为可以取这个batch中的最大的长和宽,然后图片都填充到这个max width和max height。但是这样显然还是比较浪费的,因为如果一个batch中的不同图片wh差距很大,小图片就太吃亏了啊。但是如果训练的图片尺寸都是相同的或者相近的,那这个就有很大优势了。

这个YOLO实现主要就是优化了一下如何将比例相近的图片放在一个batch,这样显然填充的就更少一些了。作者说是这样做在混合了不同长宽比例的COCO数据集上快了1/3,但是感觉还挺麻烦的。

发布了16 篇原创文章 · 获赞 37 · 访问量 8469

猜你喜欢

转载自blog.csdn.net/songwsx/article/details/102639770