返回列表

11th place solution

468. Sartorius - Cell Instance Segmentation | sartorius-cell-instance-segmentation

开始: 2021-10-14 结束: 2021-12-30 医学影像分析 数据算法赛
第11名解决方案

第11名解决方案

作者: Theo Viel | 排名: 11th

首先恭喜获胜者,也感谢 Sartorius 和 Kaggle 举办这次比赛!

虽然第11名是一个不错的成绩,但我们还是有点失望,因为我们在榜首待了一个月,在最后几周也一直保持在前5名。我们知道我们不会赢,但这次排名的下滑对我们来说相当意外,我们至今还没完全弄清楚原因。

我们的模型在公共排行榜上的表现优于私有排行榜,这可能存在轻微的域偏移(更多的皮质细胞?更多的小细胞?更多的大细胞?我们永远无法得知……),这突显了我们流程中的弱点。

无论如何,以下是解决方案中我觉得值得一提的几个有趣点,完整代码在 GitHub:https://github.com/TheoViel/kaggle_sartorius

此外,我们的推理代码在这里:https://www.kaggle.com/theoviel/sartorius-inference-final

验证方案

在比赛结束前两周,我们切换到了一个我们认为可靠的验证设置:按照 Livecell 论文中的做法,按 plate(板)& well(孔)进行拆分。

验证方案图

这可能是我们排名下滑的原因之一?我们最好的私有 LB 分数(0.349,公共 0.339)是在切换到上述方案之前的最佳 CV 分数。不过,我们最终的分数 0.348 是在这个设置下的最佳 CV 分数(公共 0.342)。

模型

我们只使用配备单张 RTX 2080 Ti 的机器,因此我们必须发挥创造力,以便能够在高分辨率图像上进行训练并检测小细胞。我们使用了基于 Mask-RCNN 的模型,并依赖 mmdet,但仅用于模型定义和增强,流程的其余部分是手工打造的,这使得实验更加方便。

模型集成图

主要点
  • 移除编码器第一层的步长,以便在不进行任何调整大小的情况下“增加模型分辨率”!
  • 训练时使用 256x256 大小的随机裁剪
  • 在 Livecell 上进行预训练
  • 在训练数据上进行 4000 次迭代的微调
  • 主干网络:resnet50, resnext101_32x4, resnext101_64x4, efficientnet_b4/b5/b6
  • 模型:MaskRCNN, Cascade, HTC
集成

我们在三个阶段平均不同模型和不同翻转的预测结果,这些阶段是上面边框较粗的方框。

  • Proposals(提议):对于 FPN 输出的给定特征图,其每个像素都被分配一个分数和坐标预测(通过卷积)。这就是我们要平均的内容。
  • Boxes(边界框):我们重用集成的提议,并对每个提议的类别预测和坐标进行平均。我们使用了 4 种翻转 TTA。
  • Masks(掩码):从集成的边界框开始,我们在掩码上取平均——在将其上采样回原始图像尺寸之前。

该方案在集成时并没有真正使用 NMS,因为 NMS 可能比较棘手。因此我们堆叠了一堆模型。每种细胞类型我们使用了 6 个模型。

后处理
  • 对边界框使用高阈值的 NMS,然后对掩码使用低阈值的 NMS
  • 将 astro 掩码还原为损坏状态,因为我们是在干净状态下训练的(+0.002 LB)
  • 移除小掩码

我们在 CV 上进行了大量的超参数调整:NMS 阈值、RPN 和 bbox_head 参数、置信度阈值、最小细胞尺寸、掩码阈值。

补充说明

  • 伪标签对我们来说效果不佳,我们在微调阶段将其与原始训练数据一起使用,并逐渐降低其比例。
  • mmdet 的 RoiAlign 层存在实现问题。由 TTA 生成的掩码会出现偏移,这会损害性能,尤其是在尝试使用垂直翻转时。我们必须将边界框移动 0.5
同比赛其他方案