已裁剪图像的 YOLO 注释文件

YOLO Annotation Files for Already-Cropped Images

我正在尝试创建自己的数据集以用于 YOLO(You Only Look Once)。最初,我从一个包含风景和动物图片的大型 geotiff 文件开始。我能够编写一个脚本来将动物的图像提取到单独的文件中。

我现在想要将这些动物图像用作 YOLO 数据集的一部分。但是,我在网上看到的所有示例都使用注释文件,这些文件表示待检测对象在较大图像中的位置。

在我的例子中,每张动物图片的整体都将包含在边界框中。在这种情况下我能做什么?

编辑:我想问的是:我是否仍然可以使用这些已经裁剪过的图像,然后在注释文件上注明边界框应该覆盖整个图像?

简单的回答:不。在像 Yolo 这样的对象检测的情况下,我们希望 Yolo 识别哪个是对象,哪个不是对象。当你创建bounding box时,Yolo会将bounding box识别为属于1class的positive object,bounding box之外的部分识别为non-object。

模型将尝试学习如何区分物体和非物体,以及如何根据您的训练数据注释在精确坐标 (x,y,w,h) 上绘制边界框。在这种情况下,Yolo 使用了 anchor boxes 的概念,Yolo 会将最近的 anchor boxes 的大小调整为预测对象的大小。

当您创建自定义训练数据集时,yolo 需要:带有边界框的注释图像 + 边界框坐标 保存在文本文件中,例如:

<object-class> <x_center> <y_center> <width> <height>

所以你需要这些信息来训练 Yolo 模型。

通常当你已经裁剪过数据集时,我认为它更适合图像 classification 任务。或者,如果您能够创建脚本来区分动物和大图像,为什么不自动为相关图像创建边界框注释和 yolo 坐标训练文本文件?

由于 YOLO 是一种对象检测工具而不是对象 class化工具,因此它需要未裁剪的图像来理解对象和背景。

为了了解 YOLO 如何看待数据集,请看一下这个 image

在这张图片中,假设我们需要标注一辆汽车 (class id-1),那么标注将按如下方式完成 -

<class id> <Xo/X> <Yo/Y> <W/X> <H/Y>

其中, class 待标注class的id,label索引
Xo,边界框中心的X坐标
Yo,边界框中心的Y坐标
W,边界框的宽度
H,边界框的高度
X, 图片的宽度
Y,图像的高度

有关 YOLO 注释的更多详细信息,请查看此 medium post