我正在处理卷积图像模型,将其转换并存储到yaml文件中,然后在代码中使用它。 输入图像的完整大小为256 * 256,但是在训练过程中,我使用大小为128 * 128的补丁来训练模型,并在验证过程中获得了完整大小的图像。因此,模型的输入大小设置为“无”。 我想通过仅裁剪该输入层中图像的中间部分(尺寸为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)
答案 0 :(得分:0)
您最好在另一个StackExchange中进行询问,例如CrossValidation,但这是一个简短的答案。
当处理不同尺寸的图像时,有两种解决方案。首先是将大图像裁剪为多个子图像,并对每个子图像获得的类进行投票。第二个更好的解决方案是拥有一个完整的卷积网络。您可以用大卷积代替完全连接的块,并为分类层使用全局池(GlobalAveragePooling或MaxPooling)。
请注意,只有当您获得的图像较大时,这些解决方案才有效。如果图像较小,解决方案是缩放图像或填充图像。但更好的变焦。