首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YOLO图片可以有一个覆盖整个图片的有界框吗?

YOLO图片可以有一个覆盖整个图片的有界框吗?
EN

Stack Overflow用户
提问于 2020-11-26 10:40:02
回答 1查看 492关注 0票数 0

我想知道为什么YOLO图片需要一个边框。假设我们使用的是Darknet。每个映像都需要有一个与图像文件同名的相应.txt文件。在.txt文件中,它需要是。所有使用bounded boxes标记的YOLO框架都是一样的。

代码语言:javascript
复制
<object-class> <x> <y> <width> <height>

其中xywidthheight相对于图像的宽度和高度。

举个例子。如果我们转到这个页面并按YOLO Darknet TXT按钮下载.zip文件,然后转到train文件夹。然后我们可以看到这些文件

代码语言:javascript
复制
IMG_0074_jpg.rf.64efe06bcd723dc66b0d071bfb47948a.jpg
IMG_0074_jpg.rf.64efe06bcd723dc66b0d071bfb47948a.txt

其中的.txt文件如下所示

代码语言:javascript
复制
0 0.7055288461538461 0.6538461538461539 0.11658653846153846 0.4110576923076923 
1 0.5913461538461539 0.3545673076923077 0.17307692307692307 0.6538461538461539 

每幅图像都有大小为416x416的图像。这张图片看起来如下:

我的idéa是每个图像都应该有one类。只有one类。这张照片应该用这样的相机拍摄。

这张照相机的照片应该被拍成:

  1. 拍下相机
  2. 把相机剪成所需的尺寸
  3. 将其升级到平方416x416

如下所示:

然后,每个对应于每个图像的.txt文件应该如下所示:

代码语言:javascript
复制
<object-class> 0 0 1 1

问题

对于使用Darknet或其他使用bounded boxes标记类的框架来说,这有可能吗?

而不是让software (例如Darknet )将每个类对象的有界框升级到416x416,然后对每个只有one类对象的图像,我应该这样做,并将.txt文件更改为x = 0, y = 0, width = 1, height = 1

这能让我以这种方式创建一个traing set并使用它进行训练吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-28 02:58:04

小免责声明我不得不说,我不是这方面的专家,我是一个项目的一部分,我们正在使用暗网,所以我有一些时间做实验。

因此,如果我正确理解它,你想要训练与裁剪单类图像与全图像大小的包围框。

这是可能的,我正在使用类似的东西,但它很可能不是你想要的。

让我告诉你这个方法产生的问题和意想不到的行为。

当您使用具有完整图像大小的图像进行训练时,包围框yolo无法进行适当的检测,因为在培训过程中,它还会了解数据集的背景和空空间。更具体地说,培训数据集上的对象必须与实际使用的上下文相同。如果你在丛林里用狗的图像训练它,它就不能很好地预测狗在家里的情况。

如果你只打算把它和分类一起使用,你仍然可以像这样训练它--它仍然分类的很好--但是你要预测的图像也应该像你的训练数据集,所以通过看你的例子,如果你训练像这个被裁剪的狗图片的图像,你的模型将无法在第一个图像上对狗进行分类。

更好的例子是,在我的案例中,不需要检测。我正在处理食物图像,我只预测盘子上的食物,所以我用全图像大小的bboxes训练,因为每一种食物都有一个类。它完美地分类食物,但bboxes总是被预测为完整的图像。

因此,我对理论部分的理解是,如果你只给网络提供完整的图像box,它就会知道尽可能大的框会减少错误率,所以它会以这种方式进行优化,这有点浪费了算法的一半,但它对我来说是有效的。

此外,您的图像不需要是416x416,它可以调整大小,无论您给它的大小,您也可以改变它从cfg文件。

我有一个代码,为目录中的所有图像制作全尺寸的bboxes,如果您想要快速尝试它的话。(它覆盖现有的注释,所以要小心)

最后,框应该是这样的,它们要居中满尺寸,x和y是bbox的中心,它应该是图像的中心/一半。

代码语言:javascript
复制
<object-class> 0.5 0.5 1 1
代码语言:javascript
复制
from imagepreprocessing.darknet_functions import create_training_data_yolo, auto_annotation_by_random_points
import os

main_dir = "datasets/my_dataset"

# auto annotating all images by their center points (x,y,w,h)
folders = sorted(os.listdir(main_dir))
for index, folder in enumerate(folders):
    auto_annotation_by_random_points(os.path.join(main_dir, folder), index, annotation_points=((0.5,0.5), (0.5,0.5), (1.0,1.0), (1.0,1.0)))

# creating required files
create_training_data_yolo(main_dir)
代码语言:javascript
复制
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65020378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档