如何为神经网络包含图像中不存在的信息?

数据挖掘 神经网络 物体识别
2021-10-10 02:53:13

我正在训练一个 CNN 来识别图像中的对象(每张图像一个标签)。但是,我有关于这些图像的其他信息,这些信息无法通过查看图像本身来检索。更详细地说,我说的是这个对象的物理位置。事实证明,这些信息在对这些对象进行分类时很重要。

但是,我想不出一个好的解决方案来将此信息包含在图像识别模型中,因为 CNN 是根据像素值而不是有序特征数据对对象进行分类。

我正在考虑的一种可能的解决方案是在表格数据(主要包括位置数据)上增加一个简单的 ML 模型,例如 SVM,为 CNN 的输出赋予一定的额外权重。这会是一个好的策略吗?我似乎在文献中找不到任何关于此的内容。

提前致谢!

编辑:有人问我“位置”是什么意思。我所说的位置是指拍摄图像的物理位置,在大型 2d 空间的上下文中。我不想深入该领域,但它基本上是表面区域上的 (x,y) 向量,显然无法通过查看像素值来提取此元数据。

编辑2:我想提出另一种我发现有用的方法,但在任何答案中都没有提到。我没有使用神经网络来预测类别,而是使用神经网络来生成特征。

我删除了最后一层,其输出形状为 1024x1。这显然取决于您的网络设计。然后,我可以在附加模型(例如 SVM 或另一个 NN)中将这些特征与元数据(在我的情况下为位置数据)一起使用来进行预测

4个回答

其他答案建议放置一个额外的频道,我不同意。我认为这是一个计算量很大、耗时的过程。此外,它强制非像素数据由 Conv 过滤器处理,恕我直言,这没有多大意义。

我建议你建立一个多输入模型它将由三个部分组成:

  • 一个卷积部分,用于处理像素数据,
  • 处理非图像数据的前馈部分,
  • 另一个前馈部分,根据上面两个输出的连接来详细说明预测。

您需要分别实例化它们,然后在 Keras 中组合在一起Model()您还需要Concatenate()图层来组合两种不同的数据源。

您可以在此处阅读有关多输入神经网络实现的更多信息

编辑:在问题中进行编辑后,1)不再相关,但 2)仍然如此。

  1. 这在一定程度上取决于位置数据的形式。如果您有一个分割蒙版(即另一个图像,有两种颜色表示每个像素是否属于对象),那么使用 n1k31t4 建议的另一个通道可能是个好主意。

  2. 如果您有坐标或向量形式的东西,本文中的图 2显示了一种将信息放在一起的方法。本质上,作者将附加信息(在您的情况下为位置数据)连接到特征提取器的输出,并将其输入到 CNN 的分类器中。

最简单的尝试是将信息放在图像的额外通道中。

因此,如果您有 RGB 通道,您可以添加一个四通道,这只是您拥有的位置信息,对每个像素重复。

当然,这会产生很多冗余,但这意味着您可以采用任何标准的图像分类器,它仍然可以工作。

在知道图像中对象位置的特定情况下,一种技术是裁剪和填充每个训练示例,以使对象位于准确的中心。这样,额外的信息就会隐式传递给神经网络。这就是大多数人脸识别神经网络的工作方式。

如果对象的“位置”更抽象,例如“卧室”或“西班牙”,那么我建议将信息连接到图像的每个像素。不要害怕添加大量额外的输入通道,神经网络可以很好地处理这个问题。例如,Alpha Go 有一个 48 通道的输入层