Yolo对象检测:包括不包含要预测的类别的图像吗?

时间:2019-03-17 00:09:52

标签: machine-learning deep-learning object-detection yolo

我想在自己的数据集中训练微小的yolo。我想预测3类:汽车,行人和骑自行车的人;所有这些都已注释。

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

<块引用>

希望您的训练数据集包含未标记的图像 您不想检测的对象 - 没有负样本 有界框(空的 .txt 文件) - 使用尽可能多的负片图像 样本,因为有对象的图像

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

答案 1 :(得分:0)

TLDR;您不需要提供没有类别的图像。

YOLO将输出分为单个网格单元,每个网格单元每个单元具有一个或多个锚点框先验,每个先验框预测对象类别与“非对象”的输出值。

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

实际上,通常没有对象的锚太多,而有实际对象的锚很少。这就是为什么YOLO使用联合损失函数来减轻负面示例λ_noobj= .5

的原因

诸如SSD的其他方法使用“硬否定挖掘”来减少否定示例的数量并解决不平衡问题。

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

另一个例外是,如果您的对象始终出现在同一个网格单元(例如中心)中,则您可能需要一些纯否定的示例,或者使用数据扩充来生成对象出现在不同位置的示例。

答案 2 :(得分:0)

除了提供模型应该检测到的训练数据之外,提供它不应该检测到的负面数据也可能会有所帮助。没有注释的图像暗示其中的任何内容都不是模型应该检测到的。

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

神经网络有点像黑匣子,但从理论角度来看,您可以说它们以某种方式从输入中提取了某些抽象特征。他们根据提取的特征确定(例如)对象的类别和位置。

然后训练神经网络意味着网络学习找到与确定对象的类别和位置相关的抽象特征。神经网络的性质使得它很难理解它正在学习什么特征。我们只能看到神经网络开始根据我们的训练方式运行。

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

负数据为学习特征提供更多反馈。在训练过程中,网络可能会开始学习过于抽象的特征。但是,很可能网络开始检测负面数据中的对象。然后训练算法发现网络错误地检测到对象并提供反馈。

Rohit 引用了 AlexeyAB 的 github 页面,指出您应该提供与提供对象图像一样多的负样本图像。由于 AlexeyAB 是 YOLO 的主要贡献者之一,遵循他的建议可能不会有什么坏处,除非你有明确的证据证明他是错的。