【问题标题】:Can YOLO pictures have a bounded box that covering the whole picture?YOLO图片可以有一个覆盖整个图片的有界框吗?
【发布时间】:2021-03-09 05:38:56
【问题描述】:

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

<object-class> <x> <y> <width> <height>

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

例如。如果我们转到此page 并按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。此图像如下所示:

我的想法是每个图像都应该有one 类。只有one 类。并且图像应该使用这样的相机拍摄。

此相机快照应视为:

  1. 拍照
  2. 将相机按扣剪成所需大小
  3. 将其放大为正方形416x416

像这样:

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

<object-class> 0 0 1 1

问题

这对于 Darknet 或其他使用 bounded boxes 来标记类的框架是否可行?

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

我可以这样创建traing set 并使用它进行训练吗?

【问题讨论】:

    标签: tensorflow pytorch yolo bounding-box darknet


    【解决方案1】:

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

    因此,如果我理解正确,您希望使用裁剪后的单类图像和完整图像大小的边界框进行训练。

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

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

    当您使用具有完整图像大小边界框的图像进行训练时,yolo 无法进行正确检测,因为在训练时它还会学习数据集的背景和空白区域。更具体地说,您的训练数据集上的对象必须与您在现实生活中的使用情况相同。如果你用丛林中的狗图像训练它,它就不能很好地预测家里的狗。

    如果您只将它用于分类,您仍然可以像这样训练它,它仍然可以很好地分类,但是您要预测的图像也应该像您的训练数据集,所以如果您训练图像,请查看您的示例像这张裁剪后的狗图片,您的模型将无法在第一张图片上对狗进行分类。

    举个更好的例子,在我的情况下不需要检测。我正在处理食物图像,我只预测盘子上的食物,所以我使用全图像大小的 bbox 进行训练,因为每种食物都有一个类。它完美地对食物进行分类,但总是将 bbox 预测为完整图像。

    所以我对此的理论部分的理解是,如果你只给网络提供完整的图像 bbox,它会知道使盒子尽可能大会导致错误率降低,因此它会以这种方式进行优化,这有点浪费算法的一半,但它对我有用。

    此外,您的图像不需要是 416x416,它可以调整为您给它的任何大小,您也可以从 cfg 文件中更改它。

    如果您想快速尝试,我有一个代码可以为目录中的所有图像制作完整大小的 bbox。(它会覆盖现有的注释,所以要小心)

    最后,盒子应该是这样的,以便它们全尺寸居中,x 和 y 是 bbox 的中心,它应该是图像的中心/一半。

    <object-class> 0.5 0.5 1 1
    
    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)
    ```
    

    【讨论】:

    • 我现在改变了主意。我不会缩放图片。用有界框让它正常。顺便一提。 Darknet Tiny 需要 416x416 大小的图片进行训练。我正在构建一个可以自动收集训练数据的软件。
    • 哦,我不知道小 yolo 需要调整大小。
    • 是的。 Yolo 需要方形尺寸。
    • 顺便说一句!你能试试这个吗? github.com/DanielMartensson/Darknet-Data-Creator 1. 下载项目。使用命令mvn javafx:run 启动项目。您需要站在文件夹内。 mvn 是 Maven 命令。 sudo apt-get install maven 如果您使用的是基于 .deb 的 inux 系统。
    • 好吧,我试过了,但我没有 USB 摄像头,所以我只能说 ui 可以工作??‍♂️,你打算将培训作为终端进程运行吗?
    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2015-05-17
    • 2014-01-12
    • 2012-11-21
    • 2016-09-26
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多