YOLO对象检测:包括不包含要预测类的图像



我想在自己的数据集上训练小Yolo。我想预测3堂课:汽车,行人和骑自行车的人;所有这些都被注释了。

我的数据集还包括不包含这些类(因此没有注释)的图像。我应该在培训中包括这些图像吗?为什么或为什么不

谢谢!

tldr;您不需要提供YOLO的图像。

Yolo将输出层分为单个网格单元,每个网格单元每个单元具有一个或多个锚固框验证器,每个细胞都可以预测对象类标签的输出值,而不是"非对象"。

由于大多数图像都不包含每个网格单元格中的对象,因此它自然会学习如何识别"无对象"。

实际上,通常没有太多没有对象的锚点的不平衡,而实际对象则太少。这就是为什么Yolo使用关节损失函数,该函数降低了负面示例λ_noobj= .5

其他方法,例如SSD使用"硬矿山"为了减少负面示例的数量并解决不平衡。

因此,您通常不需要包含纯粹的负面培训示例,因为数据集中已经存在太多负面网格盒的不平衡。

我能想到的一个例外是:如果您的所有培训示例包含整个视野中的许多对象(即人群,交通拥堵等),那么您可能需要包括一些没有对象的培训示例。

另一个例外是,如果您的对象始终出现在同一网格单元格(例如中心)中,那么您可能需要一些纯粹的负面示例,或者使用数据扩展来生成示例,其中具有在不同位置出现的对象。

除了提供培训数据外,模型应检测到的内容,还提供负面数据可能无法检测到的负面数据。没有注释的图像隐含地说没有任何模型应该检测到的任何内容。

假设您正在训练一个模型来检测黄色驾驶室。当然,您可以提供黄色驾驶室的数据。但是,包含包含非出租车的黄色物体的负数据以及不是出租车的汽车也很有意义。这样可以防止您的网络了解任何黄色的都是出租车,或者任何汽车都是出租车。

神经网络有点黑框,但是从理论观点来看,您可以说他们以某种方式从输入中提取了某些抽象功能。基于他们确定的提取功能(例如)对象的类和位置。

训练神经网络意味着网络学会找到与确定对象类和位置相关的抽象功能。神经网络的本质使得很难理解它正在学习的功能。我们所能看到的是,神经网络开始按照我们的训练方式行事。

没有负数据,网络可能会学习太抽象的特征。然后,网络可以在其他对象中找到这些功能,它不应检测到。例如,在我们的团队中,我们正在训练Yolo网络以检测某些植物。但是有一次,我们发现我们的一个网络还检测到图像中的植物,只有块。

负数据为学习功能提供了更多反馈。在培训过程中,网络可能会开始学习太抽象的功能。但是随后很可能该网络开始检测负数据中的对象。然后,培训算法看到网络错误地检测对象并提供反馈。

Rohit是指Alexeyab的GitHub页面,指出您应该在提供对象的图像的情况下提供尽可能多的负样本图像。由于Alexeyab是Yolo的主要贡献者之一,因此遵循他的建议可能不会有任何伤害,除非您有明确的证据他错了。

建议使用没有对象的图像,但我不确定其实际原因是什么。

希望您的培训数据集包含未标记的图像您不想检测到的对象 - 没有负面样本有限的框(空的.txt文件) - 使用否定的多数图像样本是有对象的图像

https://github.com/alexeyab/darknet#how-to-train-to-detect-your-custom-objects

最新更新