从观察中估计是一个函数,但“真正计数”是一个过程。前馈神经网络可以从训练样本中学习任意函数,但它们不能表示(因此不能学习)过程。他们可以尝试将完成一个过程的结果作为一个函数来估计,但这与实际执行该过程不同。
要从示例中学习任意过程,除了所需的任何功能之外,还需要一个具有一些状态和演化概念的模型。循环神经网络 (RNN) 是解决这类学习问题的合适模型,但其他 AI 学习结构也是如此。
这个兔子洞很深,对于您可以构建的任何模型,都可以问:
系统是否真的在执行类似于人类尝试相同任务的计数任务?
系统是否真的学会了计数,或者它是由开发人员构建的,因此过程的某些部分是不可避免的?
系统是否学会了在任何子组件中进行一般计数,或者它可以计算的事物是否在组件之间紧密耦合?
您还可以提出其他问题,具体取决于您制作此类模型的目标。
值得注意的是,对于少量和某些模式,人类“计数”确实更接近于估计过程,或者可能更类似于 NLP 问题。例如,考虑如何“计算”骰子上的点数 - 尽管您可以使用计算过程来确认您看到的内容,但通常您不会这样做。相反,你大脑的某些部分正在快速而无意识地提供一个非常准确的答案:
更一般地说,人类的计数可能包含多种相关策略,用于将观察结果转换为数量的符号和/或感官表示。有些可能是本能,有些是习得的有意识行为,有些似乎介于两者之间,也许最初是学来的,但通过重复变成了潜意识的技能。
暂时忽略您是否正在实施您的 AI 项目以完全在神经网络中计算图像中的项目,我认为您需要以下组件:
表示和跟踪相对于正在处理的输入的计数过程的开始、进度和结束的状态。
表示到目前为止计数的数量的累加器。
当它观察到需要计数的东西时可以触发计数事件的检测器。
用于处理输入的策略或计划器,以便将检测事件分开,并且每个有效事件仅触发一次。
最后一个组件可能会有很大差异,人类将根据任务的难度使用一系列不同的计数策略。例如,您可以使用工作记忆(人类的有限资源)来跟踪图像中的几个关键点,以帮助您在处理图像时将图像分割成更小的部分。或者,您可以在图像上制作视觉标记以跟踪已计数的每个对象。对于人类来说,计数策略可以混合和匹配,有时甚至在相同的计数任务中也可以切换。
所有这些组件都可以在AI 过程的可学习部分中表示,但并非必须如此。当你在你的问题中建议
我不想使用检测器,然后计算边界框的数量。
那么您很可能会说您不想使用固定的硬编码策略。你想以某种方式创建一个神经网络,它可以发现至少一种处理输入的策略。
您将面临的麻烦是,为大型 RNN 模型(例如 LSTM)提供一个包含输入图像和输出正确计数的示例数据集可能是一个太大的挑战。从头开始发现一个健壮的对象计数系统太难了。
有几件事可以帮助你构建“真正”学会计数的东西。这里有几个想法:
一篇使用“fovea”模型进行对象检测的论文:Object detection through search with a foveated visual system