我想知道为什么YOLO图片需要一个边框。假设我们使用的是Darknet。每个映像都需要有一个与图像文件同名的相应.txt文件。在.txt文件中,它需要是。所有使用bounded boxes标记的YOLO框架都是一样的。
<object-class> <x> <y> <width> <height>其中x、y、width和height相对于图像的宽度和高度。
举个例子。如果我们转到这个页面并按YOLO Darknet TXT按钮下载.zip文件,然后转到train文件夹。然后我们可以看到这些文件
IMG_0074_jpg.rf.64efe06bcd723dc66b0d071bfb47948a.jpg
IMG_0074_jpg.rf.64efe06bcd723dc66b0d071bfb47948a.txt其中的.txt文件如下所示
0 0.7055288461538461 0.6538461538461539 0.11658653846153846 0.4110576923076923
1 0.5913461538461539 0.3545673076923077 0.17307692307692307 0.6538461538461539 每幅图像都有大小为416x416的图像。这张图片看起来如下:

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

这张照相机的照片应该被拍成:
416x416如下所示:

然后,每个对应于每个图像的.txt文件应该如下所示:
<object-class> 0 0 1 1问题
对于使用Darknet或其他使用bounded boxes标记类的框架来说,这有可能吗?
而不是让software (例如Darknet )将每个类对象的有界框升级到416x416,然后对每个只有one类对象的图像,我应该这样做,并将.txt文件更改为x = 0, y = 0, width = 1, height = 1。
这能让我以这种方式创建一个traing set并使用它进行训练吗?
发布于 2020-11-28 02:58:04
小免责声明我不得不说,我不是这方面的专家,我是一个项目的一部分,我们正在使用暗网,所以我有一些时间做实验。
因此,如果我正确理解它,你想要训练与裁剪单类图像与全图像大小的包围框。
这是可能的,我正在使用类似的东西,但它很可能不是你想要的。
让我告诉你这个方法产生的问题和意想不到的行为。
当您使用具有完整图像大小的图像进行训练时,包围框yolo无法进行适当的检测,因为在培训过程中,它还会了解数据集的背景和空空间。更具体地说,培训数据集上的对象必须与实际使用的上下文相同。如果你在丛林里用狗的图像训练它,它就不能很好地预测狗在家里的情况。
如果你只打算把它和分类一起使用,你仍然可以像这样训练它--它仍然分类的很好--但是你要预测的图像也应该像你的训练数据集,所以通过看你的例子,如果你训练像这个被裁剪的狗图片的图像,你的模型将无法在第一个图像上对狗进行分类。
更好的例子是,在我的案例中,不需要检测。我正在处理食物图像,我只预测盘子上的食物,所以我用全图像大小的bboxes训练,因为每一种食物都有一个类。它完美地分类食物,但bboxes总是被预测为完整的图像。
因此,我对理论部分的理解是,如果你只给网络提供完整的图像box,它就会知道尽可能大的框会减少错误率,所以它会以这种方式进行优化,这有点浪费了算法的一半,但它对我来说是有效的。
此外,您的图像不需要是416x416,它可以调整大小,无论您给它的大小,您也可以改变它从cfg文件。
我有一个代码,为目录中的所有图像制作全尺寸的bboxes,如果您想要快速尝试它的话。(它覆盖现有的注释,所以要小心)
最后,框应该是这样的,它们要居中满尺寸,x和y是bbox的中心,它应该是图像的中心/一半。
<object-class> 0.5 0.5 1 1from 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)https://stackoverflow.com/questions/65020378
复制相似问题