如何在培训期间实施随机裁剪?

2024-04-25 12:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个U型网络模型,它可以在多发性硬化症患者的两个时间点之间分割受损的大脑组织。该模型以基线图像和后续图像为x,分割模板为y。图像是3D的(192218192),模型输入大小是(128128128),并且正在通过骰子丢失进行训练。该模型基于本文:https://www.sciencedirect.com/science/article/abs/pii/S0895611120300732

我目前正在做的是在训练前对每个图像进行中心裁剪,训练骰子分数似乎学习得很好,但在验证数据中却不是这样

我已经读到随机裁剪10次左右有助于减少过度拟合,但我不知道如何实现它。我编写了这个函数来进行随机裁剪:

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个子卷的预测重叠


Tags: 模型图像网络imgmaskrandom骰子width
1条回答
网友
1楼 · 发布于 2024-04-25 12:48:15

您可以通过tf.image.random_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)
...

相关问题 更多 >