我正在处理卷积图像模型,我将该模型转换并存储为yaml文件,然后在代码中使用它。输入图像的完整大小为256 * 256,但在训练过程中,我使用大小为128 * 128的补丁来训练模型,并在验证过程中获得完整大小的图像。因此,模型的输入大小设置为None。我想创建一个模型,只裁剪图像的中间部分,大小为64 * 64从这个输入层。此时,模型必须根据输入图像的大小裁剪不同长度的图像,以产生相同的输出大小(64*64)。但是,是否可以在我的代码中应用if-else语句?如果你能帮我写代码,我将不胜感激。
patch = (None,None, 6)
x_input = Input(shape=patch)
def get_crop(x):
from keras.layers import Cropping2D
if x.get_shape().as_list()[1:3] ==[256,256]:
return Cropping2D(cropping=(96,96))(x)
else:
return Cropping2D(cropping=(32,32))(x)
x_crop = Lambda(get_crop)(x_input)发布于 2019-01-24 14:24:34
你最好问另一个像CrossValidation这样的StackExchange,但这里有一个简短的答案。
在处理不同大小的图像时,有两种解决方案。首先是将大图像裁剪成多个子图像,并对每个子图像的类进行投票。第二种解决方案要好得多,那就是拥有一个完全卷积网络。您可以使用大卷积替换完全连接的块,并对分类层(GlobalAveragePooling或MaxPooling)使用全局池。
请注意,只有当您获得的图像更大时,这些解决方案才有效。如果有较小的图像,解决方案是缩放或填充图像。但最好是放大。
https://stackoverflow.com/questions/54339603
复制相似问题