我正在 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')
有没有一种方法可以在较小尺寸的图像上训练模型,并且仍然能够对较大的图像进行预测?有人可以提示如何解决这个问题吗?预先感谢。
您的图像是彩色的,这就是为什么您的图像形状为 (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)