训练和预测图像形状的混淆

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

我正在 Keras 中执行语义分割任务 - 从背景中对树进行分类。我的图像最初的形状是

(256, 256, 3)
。但是,我想将它们的大小调整为 (128, 128) 以加快训练速度。我也在参加比赛,我的输出文件应该是
(num_images, 256, 256)
形状,但我的模型现在只能处理
(128, 128)
图像,当我尝试预测
(256, 256)
图像时,我收到此错误:

  ValueError: Input 0 of layer "model_4" is incompatible with the layer: expected shape=(None, 128, 128, 1), found shape=(None, 256, 256, 1)

我正在使用Unet模型:

  inputs = Input((128, 128, 1))

  s = Lambda(lambda x: x / 255) (inputs)

  c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (s)
  c1 = Dropout(0.1) (c1)
  c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c1)
  p1 = MaxPooling2D((2, 2)) (c1)

  c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p1)
  c2 = Dropout(0.1) (c2)
  c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c2)
  p2 = MaxPooling2D((2, 2)) (c2)

  ...

  u9 = Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same') (c8)
  u9 = concatenate([u9, c1], axis=3)
  c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u9)
  c9 = Dropout(0.1) (c9)
  c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c9)

  outputs = Conv2D(1, (1, 1), activation='sigmoid') (c9)

  model = Model(inputs=[inputs], outputs=[outputs])
  model.compile(optimizer='adam', loss='binary_crossentropy')

有没有一种方法可以在较小尺寸的图像上训练模型,并且仍然能够对较大的图像进行预测?有人可以提示如何解决这个问题吗?预先感谢。

python keras deep-learning neural-network semantic-segmentation
1个回答
0
投票

您的图像是彩色的,这就是为什么您的图像形状为 (256, 256, 3),每种基色、“红色”、“绿色”和“蓝色”(RGB) 在 256x256 矩阵中都有一个像素值。

(128, 128) 的图像是灰色图像。有多种技术可以将彩色图像转换为灰度图像。

我建议你安装 OpenCV 库(pip install opencv-python)。

import cv2 as cv

resized_image = cv.resize(your_image, (128, 128))
resized_gray_image = cv.cvtColor(resized_image, cv.COLOR_RGB2GRAY)
© www.soinside.com 2019 - 2024. All rights reserved.