558. Vesuvius Challenge - Ink Detection | vesuvius-challenge-ink-detection
首先,我们要感谢主办方为我们提供了参与复活古代图书馆的绝佳机会,这真的太棒了!同时也祝贺所有获奖者!
我们最终选择的解决方案是一个15个UNet的集成模型,仅使用ir-CSN作为3D编码器,并通过简单的平均池化桥接到2D解码器。这个想法参考了@samfc10的笔记本:Vesuvius Challenge - 3D ResNet训练。我们的训练和推理流程参考了@tanakar的优秀可扩展分享:2.5D分割基线。下面让我详细说明。
最初我们只使用原始的3个碎片进行本地验证,但在第一个集成模型中,折叠2的得分最差,导致整体表现很差。我们认为这可能是由于折叠2的训练样本较少所致。
我们参考了@junxhuang的评论和@tattaka的讨论,将碎片2拆分为3个碎片。

有趣的是,我们最好的公共分数0.77来自在折叠2上训练的单个ir-CSN-r50 UNet模型,使用4次旋转TTA,本地得分为0.66,不使用TTA时为0.73。在我们所有的实验中,折叠2在公共排行榜上的得分始终高于其他折叠。
我们曾长时间研究多少个切片能带来更高的分数。我们参考@tanakar的基线,尝试了`8*i`个切片(i取值1, 2, 3, 4, 6)。24、32和48个切片在公共排行榜和CV上均表现稳健。在看到@pavelgonchar的讨论后,我们决定在大多数实验中使用24个切片。
我们几乎花了2/3的时间在224x224裁剪大小的模型调优上,因为尺寸越小,我们获得的训练样本越多。224//2的裁剪步长总共提供了13272个样本,这对于训练r50类型的UNet已经足够。在224x224裁剪大小和224//2裁剪步长上训练的最稳健的单个r50模型是折叠5,在公共排行榜上得分为0.74(使用4次旋转TTA),CV得分也是0.74。
在最后两周,阅读了许多优秀的获胜方案后(例如@hesene的第三名解决方案),我们决定使用更高分辨率并采用多尺寸裁剪推理作为最终提交。因为大裁剪尺寸能让模型看到完整字符这一点很容易理解。但问题是,裁剪的补丁越大,样本就越少。当使用864x864大小的补丁和864//6的步长时,我们的r152 UNet在2个epoch内就很容易过拟合。因此我们做了权衡,在500-700尺寸的补丁上进行实验,这些尺寸对我们很有效。最佳单一大分辨率模型是576x576补丁大小的r152 UNet(折叠5),本地得分为0.77。

我们的分割模型仅使用UNet。
在大多数实验中,我们选择ir-CSN-r50作为UNet的编码器。在阅读了@selimsef的第四名解决方案和@nvnnghia的第一名解决方案后,我们坚持使用openmmlab的优秀实现和预训练权重。
这是我们首次参加分割竞赛。一开始我们花了很多时间构建更好的解码器,但阅读了一些解决方案后发现,解码器的通道数是最不重要的部分。实验表明,轻量级解码器已足够好,因此我们所有UNet的解码器通道都从256开始。我们的解码器代码使用了selimsef的xview3解决方案,并做了一些修改。
最初我们给模型提供1通道的体素。我们需要像@samfc10那样将第一个卷积层的预训练权重求和以得到1通道。

但在阅读了@pelegshilo的评论和@hengck23的优秀主题后,我们认为可以充分利用第一个卷积层的预训练权重,让模型选择最佳的z位置。我们简单地将时间维度的3个重叠体素在通道维度上连接。

在我们的实验中,输入体素大小为(28,224,224),重叠起始索引为[0,2,4],提供3个体素,使不同折叠的CV提升了0.01到0.03。
我们的最终解决方案是一个224-384-576-15-UNet集成模型,不使用TTA,公共得分为0.76。在此设置中,我们使用28-24切片选择(即切片文件ID范围18到46),并将其复制到3个体素中,起始索引为[0,2,4]。对于576尺寸模型,我们升级到r152,其余为r50。这使我们获得了私有排行榜的第三名。
我们发现,当添加一些大分辨率模型时,旋转TTA的提升不大。
但我们有6种不同的集成设置私有分数高于0.682。最佳方案私有得分为0.687873,公共得分为0.749338。在此方案中,我们增加了5个r152 UNet,训练输入尺寸为640,使用36-32切片和起始索引[0,2,4]。我们没有选择它是因为公共排行榜得分较低,且训练损失与验证损失之间存在过拟合表现。
以下是其中两种方案:
| 集成模型 | 输入尺寸 | 切片数量 | 裁剪步长 | 公共分数 | 私有分数 |
|---|---|---|---|---|---|
| r50,r50,r152 | 224,384,576 | 28-24,28-24,28-24 | 224//8,384//6,576//8 | 0.763384 | 0.681137 |
| r50,r50,r152,r152 | 224,384,576,640 | 28-24,28-24,28-24, 36-32 | 224//2,384//3,576//4,640//5 | 0.749338 | 0.687873 |
| r152 | 576 | 28-24 | 576//12 | 0.720028 | 0.683273 |
我们要感谢所有提到的Kagglers。从你们的分享中我们学到了很多,还有很多需要学习的地方。
我们还要感谢Kaggle社区,这里的每个人都可以自由分享自己的见解,这对个人成长非常有帮助。
再次感谢主办方举办如此精彩的比赛!我们看到了许多优秀团队出色的解决方案。
我的队友@yufujiang是第一次参加Kaggle比赛,他也是我的大学室友,非常感谢他。这是我第三次参加Kaggle比赛,终于获得了我的第一枚奖牌!