我正在使用 Tensorflow 对象检测 API 来检测 2 个对象。我需要负样本,因为它有时会检测到随机的东西作为图像之一。我应该如何将图像注释为“负样本”?我正在使用LabelImg来注释图像。我是否在整个图像周围绘制边界框并将其标记为“无”?
对象检测 - 如何注释负样本
机器算法验证
机器学习
张量流
物体检测
2022-04-13 02:05:46
3个回答
简短的回答:
您不需要负样本来训练您的模型。专注于改进你的模型。
长答案:
理想情况下,您的检测器在对您的 2 个对象进行训练后会检测到它们并在它们周围放置一个边界框。当您测试它并得到错误的结果时,这可能是由多种原因引起的:
- 如果您的检测器只是被误解为属于您训练它的 2 个对象之一,则会检测到错误的对象。
- 当您的 2 个对象的图像被扔到检测器但未检测到时,这也意味着您的检测器未能检测到您的对象。
当然,这两种情况都可能发生在同一张图片中,也可能发生不止一次。
据我所知,其中没有边界框的图像将是您的“负面示例”,当前模型无法处理,因为 tfrecord 阅读器只是失败了。
但是,负样本确实隐含存在。与边界框不对应的图像的所有区域都是“负样本”。通过在边界框中选择它们来明确定义“负样本”将创建一个名为“none”的新类。那时你将有 3 节课。
因此,为了更简单地关注你的正面例子。如果您的模型严重失败,则说明有问题。检查是否:
- 您的测试图像与经过训练的图像有很大不同。如果是这样,请尝试找到与您的测试图像相似的图像,并将它们与您以前的图像一起使用来重新训练您的模型。
- 检查您是否有足够的训练样本来训练您的模型。足够没有严格定义,但可能意味着至少有几百张图像。
- 检查您的训练模型是否包含来自两个对象的足够样本。如果不是,则与另一类相比,错误表示的类将很难检测到。
- 检查您的对象是否没有可能阻碍训练过程的隐含负面示例。这意味着,如果您检测到汽车,请确保图像中至少所有视觉上定性的外观都被标记为汽车。如果您只标记了 1 辆汽车,还留下了 2 辆未标记的汽车,那么这两辆汽车会妨碍您的训练。
您可以简单地使用 LabelImg 中的验证功能,它将创建一个没有注释的文件,您可以在整个过程中运行。通读这篇文章,似乎确实需要负面图像。
OP 询问了 Tensorflow 对象检测 API 中的负样本。我同意我们在基于 NN 的目标检测中没有针对负样本的特定图像。当图像的某些区域没有标记(没有边界框)时,所有负样本都是隐式可用的。
其它你可能感兴趣的问题