558. Vesuvius Challenge - Ink Detection | vesuvius-challenge-ink-detection
我非常感激组织这次极具挑战性和精彩绝伦的比赛。 我感觉到有很多非常优秀的人,我尊敬他们所有人。 我想向比赛的组织和参与者表达我的感激之情。
我想按照性能改进的贡献程度来描述我的解决方案。 下面描述中的★数量表示对性能改进的贡献程度。
如上图所示,我认为碎片的特定层不会与其他碎片的相同层相对应。基于这些点,我想出了一种增强方法,通过反映数据的特征来给模型提供强烈的正则化。
如上图所示,有三个步骤:
1) 时序随机裁剪
2) 随机粘贴
3) 随机遮挡
以上三个过程可以通过查看下面的PyTorch Dataset代码部分来简单理解。
如下图所示,我为每个epoch保存了预测掩码。文件名包含epoch、分数、tp、fp和fn,其中fp值很重要。即使分数相似,如果fp很大,在公开分数中往往表现很差。 因此,我希望选择fp值小且分数值高的权重,我通过多次提交为每个fold选择了合适的fp值。此外,我尝试通过集成具有不同fp值范围的模型来提高泛化性能。
我集成了3个模型:
3D resnet152, 3D resnet200, 3D resnext101,带有unet-like解码器。
参考模型首先受到JEBASTIN NADAR的启发并应用。感谢你的努力,尊敬你。
3D resnet152, 3D resnet200来自 https://github.com/kenshohara/3D-ResNets-PyTorch
3D resnext101来自 https://github.com/okankop/Efficient-3DCNNs
所有模型都有MIT许可证,不违反规则。
3D Resnet在Kinetic 710上预训练,3D resnext101在Kinetic 600上预训练。
在kinetics上训练与不训练之间有巨大差异。 因此,在比赛期间,我试图找到在kinetic 600或700上训练的模型。
所有模型都结合了unet-like简单解码器。3D编码器的特征通过解码器上采样并连接。
详细信息在代码中。
如下表所示,这两个模型是我最终提交的。
Ensemble 2的公开分数比ensemble1低,但在交叉验证中表现更好。 还有其他可以采用的模型,但考虑到它在交叉验证中表现良好,所以被采用,在私有分数中性能进一步提升,最终获得了更好的第一名成绩。
| 模型 | CV分数 | 阈值 | 公开分数 | 私有分数 |
|---|---|---|---|---|
| Ensemble 1 | 0.66 / 0.762/ 0.723 / 0.68 | 0.5 | 0.795835 | 0.663542 |
| Ensemble 2 | 0.67 / 0.764 / 0.724 / 0.69 | 0.47 | 0.789024 | 0.674544 |
我用4折训练模型:
结果如下表所示。
Ensemble表示用相同权重集成3个模型。
| 模型 | CV分数 | 阈值 | 公开分数 | 私有分数 |
|---|---|---|---|---|
| 3D Resnet152 | 0.64 / 0.71 / 0.71 / 0.69 | 0.5 | 0.78 | - |
| 3D Resnet200 | 0.66 / 0.71 / 0.69 / 0.66 | 0.5 | 0.77 | - |
| 3D Resnext101 | 0.61 / 0.72 / 0.71 / 0.64 | 0.5 | 0.77 | - |
| Ensemble | 0.66 / 0.762/ 0.723 / 0.68 | 0.5 | 0.795835 | 0.663542 |
| Ensemble | 0.67 / 0.764 / 0.724 / 0.69 | 0.47 | 0.789024 | 0.674544 |
所有概率设为0.6