我在tf.keras
中训练了一个基于UNet的图像分割模型,该模型预测对象在给定图像中的位置。我以(None, 256, 256, 1)
的输入形状进行训练并输出(None, 256, 256, 3)
形状的预测。
我现在想预测更大的图像(例如(520, 696)
(,并希望使用相同的模型。我知道可以将模型的输入形状更改为大小(None, None, None, 1)
。然而,现在它仍然只能预测正方形图像——对于上面提到的图像,由于形状不匹配,它返回Dimensionality Error
(520!=696(。
有人知道如何避免这种情况吗?或者有工作功能将较小的正方形输出缝合在一起吗?
错误步骤:
img = skimage.io.imread(X) # shaped (520, 696)
pred = model.predict(img[None,...,None])
InvalidArgumentError:_MklConcatOp:输入的维度应该匹配:shape[0][1]=64 vs.shape[1][1]=65[[{node concatenate_4/concat}}]]
我找到了一个解决方案——由于我训练了一个UNet(在上采样后具有级联层(,它只能组合2的幂(例如256/512(。因此,我必须在预测之前添加填充,使其达到二次方,并从输出中删除填充。