单程将两个图像作为输入,将两个图像作为输出?
Posted
技术标签:
【中文标题】单程将两个图像作为输入,将两个图像作为输出?【英文标题】:Unet two images as a input and two images as a output in single pass? 【发布时间】:2021-05-10 11:12:23 【问题描述】:我正在构建一个 UNET 模型。我被困在一件事上,如果我们必须将两个图像作为输入传递给 UNET ,我们可以通过连接它们来完成它,就像下面的代码一样
inputs = []
for _ in range(num_inputs):
inputs.append(Input((self.input_height, self.input_width, self.input_features)))
x = concatenate(inputs)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
但是我们如何才能在单次传递中获得两个图像作为输出呢?
【问题讨论】:
【参考方案1】:一种方法是将您的输出层设置为 2 通道层(每个图像一个通道)。考虑这种方法的一个方面是标签格式。您的标签也必须有 2 个通道,因此 Unet 可以将输出通道与标签(在本例中为 2 个图像)进行比较,并正确地反向传播错误。然后您可以解耦 2 个通道并分别处理图像。
额外:如果您的图像有多个通道(例如 RGB),那么如果您正确格式化标签,您仍然可以连接它并生成反向传播错误。在这种情况下:串联(3 个通道的 1 个图像,3 个通道的 1 个图像)= 6 个通道。
【讨论】:
【参考方案2】:我和你有同样的问题,实际上对我来说效果很好的有效方法是将两个输入图像都变成一个形状张量(6,高度,重量),如果两个图像都是 RGB,如果它们不是你将具有形状(2,高度,重量)。并对输出图像执行相同操作。 最后,您可以应用一些简单的 PP 来从输出张量中提取图像。
【讨论】:
【参考方案3】:U-Net 用于图像分割。为什么要传递两个图像作为输入?这两个图像的分割是否相互依赖?如果不是,我建议简单地创建两个独立的 U-Net 模型。
在任何情况下,U-Net 的输出与构造的输入一样多,因此提供连接的图像就足够了。
【讨论】:
这可能更适合作为评论而不是答案。 我没有足够的声誉来发表评论。以上是关于单程将两个图像作为输入,将两个图像作为输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何将视频文件作为输入传递给 NodeJS 中的子进程并接收帧/图像作为输出?
如何将第一个处理图像(例如 Canny 过滤器)的输出作为另一个处理过滤器的输入?