如何“组合”两个图像用于 CNN 输入(分类任务)?

人工智能 神经网络 机器学习 卷积神经网络 图像识别 分类
2021-11-14 11:37:28

对于分类任务(我正在向 CNN 显示一对正好两个图像,应该以 0 -> 假对或 1 -> 真对回答)我正在努力弄清楚如何设计输入。

目前网络的架构如下所示:

image-1                       image-2
   |                             |
conv layer                    conv layer
   |                             |
   _______________ _______________
                  |
            flattened vector
                  |
          fully-connected layer
                  |
           reshape to 2D image
                  |
              conv layer
                  |
              conv layer
                  |
              conv layer
                  |
            flattened vector
                  |
                output

卷积层有一个2x2步幅,因此图像尺寸减半。我会使用第一个全连接层作为第一层,但是它的大小不适合我的 GPU 的 VRAM。因此,我首先将图像大小减半的第一个 conv 层,然后将信息与全连接层组合,然后使用 conv 层对组合图像信息进行实际分类。

我的第一个想法是简单地将信息相加,例如(image-1 + image-2) / 2……但这不是一个好主意,因为它严重混淆了图像信息。

下一个尝试是将图像连接成一个大小为 400x100 的图像,而不是两个 200x100 的图像。但是,这种方法的结果非常不稳定。我认为是因为在大的连接图像的中心,卷积会卷积两个图像的信息(的右边界image-1/左边界image-2),这再次以不太有意义的方式混合了图像信息。

我的最后一种方法是当前的架构,简单地留下一个全连接层的image-1组合image-2这很有效 - 有点(结果显示出很好的收敛性,但可能会更好)。

将两个图像组合为 CNN 输入的合理、“最先进”的方法是什么?

我显然不能简单地增加批量大小并在那里放置图像,因为这些对是相互关联的,如果我一次只输入一个图像并增加批量大小,这种关系就会丢失。

3个回答

您可以使用串联组合图像输出。请参考这篇论文:

http://ivpl.eecs.northwestern.edu/sites/default/files/07444187.pdf

您可以看一下图 2。如果您使用的是 caffe,则有一个层称为 Concat 层。您可以将其用于您的目的。

我不完全清楚你想做什么。但就像你说的,如果你想将图像值从第一层传递到某些层。尝试阅读有关跳过架构的信息。

如果您想将此网络用作真假查找器,您可以获取两张图像之间的差异并将其转换为分类问题。

希望能帮助到你。

我不确定你所说的配对是什么意思。但是处理成对排名的常见模式是连体网络:

在此处输入图像描述

其中 A 和 B 是 aa pos,negative pair,然后 Feature Generation Block 是一个 CNN 架构,它为每个图像输出一个特征向量(切断 softmax),然后网络试图最大化两个图像之间的回归损失。这两个网络共享相同的参数,因此最终你有一个模型可以准确地消除正负对之间的歧义。

eggie5其实为你提供了一个很好的解决方案。这种方法是一种久经考验的方法,可以解决您尝试解决的同一问题。

但是,如果您仍想连接图像并按照自己的方式进行操作,则应沿通道维度连接图像

例如,通过结合两个200×100×c特征向量(其中 c 是通道数)你应该得到一个200×100×2c特征向量。

下一个卷积的核遍历特征向量的所有通道x×x一次像素。
如果我们沿着通道维度进行组合,网络将更容易比较两幅图像中相应位置的像素值。由于目标是预测相似性或相异性,这对我们来说是理想的。