Python 如何在培训期间实施随机裁剪?
我正在开发一个U型网络模型,它可以在多发性硬化症患者的两个时间点之间分割受损的大脑组织。该模型以基线图像和后续图像为x,分割模板为y。图像是3D的(192218192),模型输入大小是(128128128),并且正在通过骰子丢失进行训练。该模型基于以下文件: 我目前正在做的是在训练前对每个图像进行中心裁剪,训练骰子分数似乎学习得很好,但在验证数据中却不是这样 我已经读到随机裁剪10次左右有助于减少过度拟合,但我不知道如何实现它。我编写了这个函数来进行随机裁剪:Python 如何在培训期间实施随机裁剪?,python,tensorflow,deep-learning,conv-neural-network,data-augmentation,Python,Tensorflow,Deep Learning,Conv Neural Network,Data Augmentation,我正在开发一个U型网络模型,它可以在多发性硬化症患者的两个时间点之间分割受损的大脑组织。该模型以基线图像和后续图像为x,分割模板为y。图像是3D的(192218192),模型输入大小是(128128128),并且正在通过骰子丢失进行训练。该模型基于以下文件: 我目前正在做的是在训练前对每个图像进行中心裁剪,训练骰子分数似乎学习得很好,但在验证数据中却不是这样 我已经读到随机裁剪10次左右有助于减少过度拟合,但我不知道如何实现它。我编写了这个函数来进行随机裁剪: def random_crop(i
def random_crop(img_bl, img_fu, mask, width=128, height=128, depth=128):
x = random.randint(0, img_bl.shape[1] - width)
y = random.randint(0, img_bl.shape[0] - height)
z = random.randint(0, img_bl.shape[2] - depth)
img_bl = img_bl[y:y + height, x:x + width, z:z + depth]
img_fu = img_fu[y:y + height, x:x + width, z:z + depth]
mask = mask[y:y + height, x:x + width, z:z + depth]
return img_bl, img_fu, mask
在对每个图像进行培训之前,我是否只应用此功能10次?或者有没有办法将随机裁剪包含在模型中并与这10个子卷的预测重叠?您可以通过
tf.image.random\u crop
功能在Tensorflow中裁剪图像
cropped=tf.image.random_crop(image, (PATCH_SIZE,PATCH_SIZE,3))
若要裁剪案例中的三维模型,还可以设置通道参数
cropped=tf.image.random_crop(model, (PATCH_SIZE_1,PATCH_SIZE_2,PATCH_SIZE_3))
要将此裁剪完美地应用于输入管道,可以使用tf.keras.layers.Lambda
,映射此函数
def crop_layer():
def _crop_layer(x):
return cropped=tf.image.random_crop(x, (PATCH_SIZE_1,PATCH_SIZE_2,PATCH_SIZE_3))
return lambda x:_crop_layer(x)
layer=tf.keras.layers.Lambda(crop_layer)(input)
...