YOLOv4 训练:无法在单个图像上检测多个类

问题描述

我使用 Open Images 数据集为两个类训练 CNN:人、手机。问题是 Yolo 每张图像只检测 1 个类。例如,如果图像包含人和手机,则只会检测到手机。 Example Output。如果只有人类,那么所有人类都会被成功检测到。我认为问题在于数据集只有每个图像标记了 1 个类的图像。我在数据集中有很多图像,其中两个类都存在,但只有其中一个标签标记。这可能是问题吗?

我该如何解决问题?

  1. 添加几张标有两个类的图像
  2. 标记所有图像以确保每个包含电话和人物的图像都为每个对象都有适当的标签
  3. 或者也许有一种方法可以下载数据集,以便正确标记两个类?

这是我的 .names 文件中的内容

Person
Mobile_phone

这里是 .data 文件

classes = 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = /mydrive/yolov4/backup

感谢您的帮助!

解决方法

在检查 Open Images Dataset V6(类型:Bounding Boxes)与“Mobile Phone”类时,我发现包含我们在“person”类下考虑的东西的边界框被不一致地标记为“Man,Woman,Girl” 、人脸等”这些应标记为“人”。

我推荐这两个选择:

  • 确保所有图像都正确无误,并始终使用相应的类别进行标记。不要让带有人物的图像没有标记(除非它被截断太多)。
  • 提示:我建议使用负样本——没有感兴趣对象的图像,以避免出现误报的情况,例如地板上看起来像人的漩涡
  • 您也可以尝试使用其他数据集,在那里您可以获得我上面所说的内容。示例:MSCOCO (https://cocodataset.org/)
,

检查标签或 .txt 文件。如果它有两个类,.txt 文件中的第一列将有 0 和 1,其中 0 表示人员类,1 表示手机类,反之亦然。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...