返回列表

13th place solution: 4-panel solo model

596. SenNet + HOA - Hacking the Human Vasculature in 3D | blood-vessel-segmentation

开始: 2023-11-07 结束: 2024-02-06 医学影像分析 数据算法赛
```html 第13名解决方案:4面板 solo模型

第13名解决方案:4面板 solo模型

作者: menno(Expert)
发布日期: 2024-02-07
比赛排名: 第13名
比赛: 血管分割

首先我要感谢主办方举办这场精彩的比赛,我非常喜欢参与这次竞赛!我还要感谢@hengck23的宝贵且有趣的评论,我从中学到了很多!由于我的解决方案受到了6个月前凝结尾迹竞赛获胜方案的启发,我也想感谢@junkoda

4面板图像

4面板示例图像

受到@junkoda获胜方案的启发,模型在4面板图像上进行训练,这些图像由连续切片的256像素大小块组成(创建512像素×512像素的图像)。因此,我能够在2D图像中保持2.5D的维度。其思想是模型会学习切片之间的关系,从而预测出更连续的分割结果。

256像素的块是使用EMPatches库制作的。这使得从每个4面板图像中拼接单独的256像素块变得更加容易。

图像基于整个肾脏的百分位数进行归一化。所有低于0.5的值都被限制为0.5,以更好地归一化背景:

lo, hi = np.percentile(kidney_volume.numpy(), (2, 98))
def preprocess_image(image, lo, hi):
    image = image.to(torch.float32)
    image = (image - lo) / (hi - lo)
    image = torch.clamp(image, min=0.5)
    return image

数据增强

我使用了简单的训练数据增强:

train_transform = A.Compose([
    A.RandomRotate90(p=1),
    A.HorizontalFlip(p=0.5),
    A.VerticalFlip(p=0.5),
    A.RandomBrightness(p=1),
    A.OneOf(
        [
            A.Blur(blur_limit=3, p=1),
            A.MotionBlur(blur_limit=3, p=1),
        ],
        p=0.9,
    ),
])

对我来说不起作用的是基于图像缩放的增强。

提交

提交部分:4面板图像中的每个块分别进行旋转。然后取旋转后块的平均值。同时取各个4面板图像中所有块的平均值。这些块使用'max'设置进行合并。这是对整个肾脏体积进行xy、xz、yz旋转后执行的。

模型

在这些4面板图像上训练的模型是使用segmentation models pytorch (SMP)的Unet maxvit_tiny_tf_512。模型在3个完整肾脏体积旋转上进行训练,块之间重叠0.4(约490,000张不同的图像)。模型先用1e-4的学习率训练了9个epoch,然后用CosineAnnealingLR调度器在接下来的6个epoch中将学习率降至1e-6。

```
同比赛其他方案