338. APTOS 2019 Blindness Detection | aptos2019-blindness-detection
大家好,祝贺所有的参赛者!
我们使用了2015年比赛的调整大小图像来预训练我们的模型。此外,我们在微调阶段将 IDRID 和 MESSIDOR 数据添加到了交叉验证中。
我们从比赛一开始就尝试了很多模型,但无论是小模型(ResNet34/DenseNet121)还是超大模型(EfficientNet-B6/B7, ResNe(x)t101, DenseNet201)效果都不理想。
得分最高的模型是中等大小和中等分辨率的:
图像分辨率超过 512x512 后我们没有看到提升。
起初,我们使用了一段时间的圆形裁剪和 Ben 的预处理方法,但后来开始尝试紧凑裁剪和角点掩码,结果在我们尝试的每个模型上效果都变差了(CV 和 LB 都是)。
在比赛截止日期前一周,我们意识到我们丢失了太多信息,于是转而不使用预处理,而是使用强力的数据增强。
我们使用了大量的数据增强,全部来自 Albumentations 库:
OpticalDistortion, GridDistortion, PiecewiseAffine, CLAHE, HorizontalFlip, VerticalFlip, RandomRotate90, ShiftScaleRotate, RGBShift, RandomBrightnessContrast, AdditiveGaussianNoise, GaussNoise, MotionBlur, MedianBlur, Blur, Sharpen, Emboss, RandomGamma, ToGray, CoarseDropout, Cutout。
我们使用了多目标学习(分类、有序回归和回归),它们的结果通过一个线性层(初始化权重为 0.3333)转换并结合以获得回归输出。
起初,我们只在当前数据上训练,但后来转为在 2015 数据集上进行预训练。
流程如下:
每个训练阶段由三个子阶段组成:
如果我们把所有层放在一起训练,总是会导致头部训练不均匀。
此外,我们在回归标签中添加了范围在 (-0.3, 0.3) 的随机噪声,这大大减少了过拟合。
我们使用了 FastGPU.net 提供的配有 4xV100 的服务器,这大大缩短了我们的实验周期。
我们根据模型在 CV 和留出集上的表现来挑选模型,完全不以 LB(排行榜)为导向。
我们表现最好的方案是由 20 个模型(4 种模型 x 5 折)组成的集成,使用了 10xTTA(水平翻转、垂直翻转、转置、旋转、缩放)并结合 0.25 截尾均值。这个集成在留出集和 LB 上的表现都较差,但我们决定选择它,希望它能更好地泛化(事实证明确实如此!)。