检测模型 - 具有类实例限制意识的训练

数据挖掘 机器学习 深度学习 物体检测
2022-02-18 11:08:54

有没有办法让检测模型知道单个图像中给定类的最大可能对象数?

例如在一个有 2 个类的玩具箱中。如果我知道在每张图像中,A 类不能超过 5 个实例,B 类不能超过 1 个。有没有办法将它纳入训练过程?

为了清楚起见,我不是在谈论在训练模型之上运行的附加算法(例如用于为对象选择单个边界框的非最大抑制)。我特别询问实际模型及其训练过程。

2个回答

我可以想到以下方法:

假设您有两个类,A 和 B。此外,您现在对于类 A 最多有 5 个实例(所以 0、1、2、3、4 或 5),对于 B 1 个实例(0 或 1) .

为此,您可以有 6 个 A 类输出和 2 个 B 类输出。在 A 类的这 6 个输出之间,只有一个应该处于活动状态;B 相同 - 只有两个中的一个应该处于活动状态。

例如,如果在某个图像上有 3 个 A 类对象和 B 类 0,则输出将是:[0, 0, 0, 1, 0, 0]A 类和[1, 0]B 类(或者非常接近 0 和 1 的对象,对吗?)

通过这些输出,您还可以组合检测所需的其他输出。

这是一个非常有趣但很难实现的监督!

为什么我们需要这种监督?

这种监督的需要来自这样一个事实,即模型可能错误地检测到比它应该检测的更多的对象,因此,必须因这种违规行为而受到惩罚(教导),否则不需要监督,因为模型会相应地采取行动。

如何实施这种监管?

为此,我们需要从模型中分叉一些层来输出每个类检测到的对象数量c对于输入图像i,即nc,i,然后用图像中对象的真实数量来监督这个输出i,即nc,i,或仅具有上限Nc正如你所建议的那样。然后,添加一个术语,如(nc,inc,i)2或者max(0,nc,iNc)对损失函数进行惩罚,以惩罚模型检测到错误或更多数量的对象。然后继续训练模型。

可能会出什么问题?

但问题来了,模型可以通过修改分叉层(权重)来学习谎报检测到的对象的数量!由于模型更容易制造有效的nc,i而不是实际检测更复杂的更少对象。此外,如果我们使用一个恒定的、不可制造的单元(例如,一个恒定的神经网络)来计算检测到的物体的数量,那么就不会有梯度来惩罚(教导)模型!

这就是为什么这种监督难以实现的原因。