返回列表

3rd place solution, the simplest way is the best way (full training/inference code)

433. HuBMAP - Hacking the Kidney | hubmap-kidney-segmentation

开始: 2020-11-16 结束: 2021-05-10 医学影像分析 数据算法赛
第三名方案:最简单的方法就是最好的方法

第三名方案:最简单的方法就是最好的方法(完整训练/推理代码)

作者:Shujun (Grandmaster) | 比赛:Hubmap Kidney Segmentation | 排名:第3名

恭喜所有参加这次比赛的人!对我来说,这是一场情绪像过山车一样的经历。感谢主办方举办了这场拥有有意义数据的有趣比赛。我还要特别感谢 @iafoss,如果没有他的入门笔记(starter notebooks),我在这里什么都做不了,因为我以前从未做过分割任务。顺便说一句,恭喜你离 Grandmaster 更近了一步!看来我们在这次排名波动中都表现得不错。

在比赛接近尾声时,标注问题让我感到非常抓狂,觉得似乎无计可施了。但我不想就这样放弃,所以我选择了一条路:只做那些我认为能尽可能好地泛化的最简单的事情。在这里,我将讨论最重要的细节,并发布用于产生最终结果的所有代码。

预处理 (Preprocessing)

我们在最终的集成模型中使用了 reduce=2sz=1024。我们使用的笔记本最初是由 iafoss 发布的:https://www.kaggle.com/iafoss/256x256-images

数据增强 (Augmentation)

我们在所有的训练中都使用了 cutout:

def cutout(tensor,alpha=0.5):
    x=int(alpha*tensor.shape[2])
    y=int(alpha*tensor.shape[3])
    center=np.random.randint(0,tensor.shape[2],size=(2))
    #perm = torch.randperm(img.shape[0])
    cut_tensor=tensor.clone()
    cut_tensor[:,:,center[0]-x//2:center[0]+x//2,center[1]-y//2:center[1]+y//2]=0
    return cut_tensor

此外,我们使用了以下 albumentations 数据增强:

def get_aug(p=1.0):
    return Compose([
        HorizontalFlip(),
        VerticalFlip(),
        RandomRotate90(),
        ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=15, p=0.9,
                         border_mode=cv2.BORDER_REFLECT),
        OneOf([
            ElasticTransform(p=.3),
            GaussianBlur(p=.3),
            GaussNoise(p=.3),
            OpticalDistortion(p=0.3),
            GridDistortion(p=.1),
            IAAPiecewiseAffine(p=0.3),
        ], p=0.3),
        OneOf([
            HueSaturationValue(15,25,0),
            CLAHE(clip_limit=2),
            RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3),
        ], p=0.3),
    ], p=p)

模型 (Models)

从 iafoss 的入门笔记本开始,我将其改为纯 PyTorch 实现并加重了数据增强。我集成了两组 5 折交叉验证的模型:一组使用 ResNeXt50,另一组使用 ResNeXt101。EfficientNets 对我来说从来没起过作用,在这里这一趋势仍在继续。说实话,这里没什么更多可说的。

推理 (Inference)

我们在推理过程中使用了我们称之为“扩展切片”的方法,这是我的队友 jj 最初在 PANDA 比赛中提出的。你可以在我们的推理笔记本和下图中看到这是如何实现的。其基本思想是消除边缘效应。为了实现这一点,对于我们运行模型的每个切片,我们在所有 4 个方向上将切片扩展一定数量的像素,但只使用没有边缘的中心区域的预测结果。这样实际上就没有边缘效应

同比赛其他方案