使用 YOLO v. 4 在对象检测中处理图像大小的最佳方法是什么?

数据挖掘 预处理 约洛
2022-02-25 13:26:31

我正在使用YOLO v. 4对大量图像进行对象检测和分类。我是通过 Python 接口来做到这一点的。我的图像有各种尺寸和纵横比。
从命令行使用 Darknet / YOLO 的示例(例如在此 Colab 笔记本中)只是将图像扔到darknet可执行文件中,而没有明显考虑图像大小或纵横比。这让我觉得 YOLO 会自动对空白部分进行一些缩放/裁剪/插入。
然后再看Darknet/YOLO框架自带darknet_imagesPython模块,做法好像是用来cv2缩放图片的到在 YOLO 中检测之前的网络大小。特别是,这似乎通常会扭曲纵横比。现在我很困惑:在通过 检测之前我应该​​缩放还是不缩放darknet.detect_image()
可以darknet.make_image()使用图像的本机尺寸创建图像对象并将它们提供给darknet.detect_image()没有任何抱怨,那么在这种情况下,Darknet 对尺寸做了什么?
我还想知道是否将 1000x500 图像缩放到我的暗网网络的 608x608 大小作为 608x608“帧”中的 608x304 图像,将帧的其余部分留空(白色或黑色)?或者我应该将 1000x500 图像完全缩放到 608x608,从而严重扭曲纵横比?我想 YOLO 的训练通过数据增强考虑了一些失真,但我想它可以容忍多少失真一定是有限制的?

1个回答

我现在似乎想通了。使用时,依次darknet.detect_image调用which 如果图像的大小与网络的输入层不同,后者会调整图像的大小。predict_imagenetwork_predict_image

如果您改为darknet detector test从命令行调用,正如我在原始问题中看到的示例所做的那样,“命令链”会通过test_detector调整图像的大小,如果它还不是网络输入层的大小。

因此,在任何情况下,图像似乎都会调整大小以适应网络的输入层,我不需要做任何特别的事情来处理它。