有没有办法让检测模型知道单个图像中给定类的最大可能对象数?
例如在一个有 2 个类的玩具箱中。如果我知道在每张图像中,A 类不能超过 5 个实例,B 类不能超过 1 个。有没有办法将它纳入训练过程?
为了清楚起见,我不是在谈论在训练模型之上运行的附加算法(例如用于为对象选择单个边界框的非最大抑制)。我特别询问实际模型及其训练过程。
有没有办法让检测模型知道单个图像中给定类的最大可能对象数?
例如在一个有 2 个类的玩具箱中。如果我知道在每张图像中,A 类不能超过 5 个实例,B 类不能超过 1 个。有没有办法将它纳入训练过程?
为了清楚起见,我不是在谈论在训练模型之上运行的附加算法(例如用于为对象选择单个边界框的非最大抑制)。我特别询问实际模型及其训练过程。
我可以想到以下方法:
假设您有两个类,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 的对象,对吗?)
通过这些输出,您还可以组合检测所需的其他输出。
这是一个非常有趣但很难实现的监督!
为什么我们需要这种监督?
这种监督的需要来自这样一个事实,即模型可能错误地检测到比它应该检测的更多的对象,因此,必须因这种违规行为而受到惩罚(教导),否则不需要监督,因为模型会相应地采取行动。
如何实施这种监管?
为此,我们需要从模型中分叉一些层来输出每个类检测到的对象数量对于输入图像,即,然后用图像中对象的真实数量来监督这个输出,即,或仅具有上限正如你所建议的那样。然后,添加一个术语,如或者对损失函数进行惩罚,以惩罚模型检测到错误或更多数量的对象。然后继续训练模型。
可能会出什么问题?
但问题来了,模型可以通过修改分叉层(权重)来学习谎报检测到的对象的数量!由于模型更容易制造有效的而不是实际检测更复杂的更少对象。此外,如果我们使用一个恒定的、不可制造的单元(例如,一个恒定的神经网络)来计算检测到的物体的数量,那么就不会有梯度来惩罚(教导)模型!
这就是为什么这种监督难以实现的原因。