返回列表

2nd place solution

349. Understanding Clouds from Satellite Images | understanding_cloud_organization

开始: 2019-08-16 结束: 2019-11-18 气象预报 数据算法赛
第二名解决方案

第二名解决方案

作者:Andrey Kiryasov
比赛排名:第2名

大家好,祝贺所有获奖者,也感谢 Kaggle 提供了这么精彩的比赛。

在这里,我将给出问题的通用解决方案,我会谈谈那些有帮助的技术以及那些没有奏效的想法。

最近,我参加了 Kaggle 的分割竞赛 SIIM-ACR 气胸分割Severstal: 钢材缺陷检测。因此,我在解决此类问题方面积累了相当丰富的经验。我已经有了一个大概的概念,知道什么可能行得通,什么行不通。


想法 #1

观察数据时,我发现图像的尺寸为 1400x2100,直接将这样的数据输入网络并不是一个好主意。当然,可以将图像缩小 2 倍或 4 倍,但显然我们肯定会丢失数据中的一些信息。

我想出了一个折衷方案。使用一个小型网络——压缩器,从数据中提取显著特征并减小图像尺寸。结构大致如下:

压缩器结构图

为了构建模型,我使用了 Keras 2、Tensorflow 1.4 和库 https://github.com/qubvel/segmentation_models(非常感谢 Pavel Yakubovskiy)。


想法 #2

为了构建有效的集成模型,我们必须使用预测之间相关性尽可能低的模型。我决定使用以下模型参数组合:

模型组合

所有模型都使用了 Unet 解码器。


训练参数:
优化器:Adam
损失函数:FocalLoss
批次大小:4

强力数据增强:
Hflip(水平翻转), VFlip(垂直翻转), Equalize(直方图均衡化), CLAHE(对比度受限的自适应直方图均衡化), RandomBrightnessContrast(随机亮度对比度), RandomGamma(随机伽马), Cutout(遮挡)
ShiftScaleRotate(平移缩放旋转), GridDistortion(网格畸变), GaussNoise(高斯噪声)

在双周期学习率策略下训练 30 个 Epoch。大致形状如下:

学习率曲线

为了训练模型,我使用了 2xP3.2 Amazon 实例。


想法 #3

后处理
对所有模型的预测结果取平均 -> 得到原始概率图。

所有基于 DICE 指标的对象分割任务对假阳性错误都非常敏感。在某些情况下,训练一个单独的分类器模型来检测图像中是否存在掩码非常有帮助。在我的例子中,分类器帮助不大,我使用了“三重规则”方法,这是我第一次在 SIIM-ACR 气胸分割 比赛的第一名解决方案中看到的。

非常感谢 Aimoldin Anuar 提供的想法 https://www.kaggle.com/sneddy。该方法的描述可以参考这里:Kaggle SIIM-ACR 气胸挑战赛 - 第1名解决方案 - Anuar Aimoldin

三重规则参数(threshold1, minsize, threshold2)是通过全局优化方法搜索得到的。

基本上,这就是解决问题所有有帮助的内容。

没有