CNN 采用不同通道数的输入图像

问题描述 投票:0回答:1

我正在训练 CNN 来分割输入图像。我有一组 3 通道 (RGB) 图像和一些 4 通道(RGB 和红外)图像。理想情况下,我想使用所有可用的通道在两者上训练一个网络。

是否有策略接受两个图像作为输入,在附加通道存在时利用它,否则忽略它?

python tensorflow pytorch conv-neural-network
1个回答
0
投票

默认情况下,神经网络必须知道其输入和输出的形状。最近,PyTorch 添加了动态批处理,它允许您将张量发送到具有动态批大小和其他常量组件的模型,包括通道数 ([batch, ch, w, h])。因此,为了解决您的问题,我提出两种方法:

将所有图像标准化为 4D:将红外层作为第四个分量添加到 RGB 图像中,如果没有 RGB 图像,则创建一个与图像形状相同的黑色图像以添加为图像的第四个分量。这不会影响网络的可靠性,并且会将所有图像标准化为 4D。

在模型中创建两个分支:在模型的输入处创建两个分支,一个用于将 3D 图像作为输入,另一个用于 4D 图像。在分支上执行操作,并在网络中间标准化每个分支的输出,以便可以将它们合并在一起并继续使用已知形状进行卷积或上采样操作。 (查看解码阶段的 UNet 架构,了解它如何合并张量块。)

以下是每种方法的更详细解释:

方法1:将所有图像归一化为4D

这个方法是最简单、最直接的。它只是向所有图像添加第四个通道,无论它们最初是 RGB 还是红外图像。这可确保所有图像具有相同的形状,这是 PyTorch 所要求的。

这种方法的优点是易于实现,并且不需要对模型进行任何额外的更改。但是,如果您的图像已经是 4D,则可能不是最佳选择。在这种情况下,额外的通道可能不会添加任何有用的信息,而可能只会增加模型的大小。

方法 2:在模型中创建两个分支

这种方法比较复杂,但它允许您分别处理RGB和红外图像。如果您的图像具有不同的属性(例如不同的分辨率或对比度级别),这可能会很有用。

要实现此方法,您需要在模型中创建两个分支。一个分支将 RGB 图像作为输入,另一分支将红外图像作为输入。然后,您可以对每个分支执行相同的操作,也可以为每种类型的图像自定义操作。

此方法的优点是它允许您根据图像的特定属性定制模型。然而,实现起来比较复杂,可能需要更多的训练数据。

哪种方法最适合您取决于您的具体需求和要求。

© www.soinside.com 2019 - 2024. All rights reserved.