返回列表

5th place solution, 3D fMRI part

388. TReNDS Neuroimaging | trends-assessment-prediction

开始: 2020-04-23 结束: 2020-06-29 医学影像分析 数据算法赛
第5名解决方案,3D fMRI 部分

第5名解决方案,3D fMRI 部分

作者:Inoichan | 比赛排名:第5名

首先,非常感谢 Kaggle 和主办方举办了如此有趣的比赛,并祝贺所有获奖者。特别感谢我所有的队友与我组队!!我在队友 @masatomatsui @kurupical @takoihiraokazu 的大量建议下完成了这个解决方案。

(请原谅我糟糕的英语。)

模型总结

模型总结图

ResNet, SEResNet 基于: https://github.com/kenshohara/3D-ResNets-PyTorch/tree/540a0ea1abaee379fa3651d4d5afbd2d667a1f49
DenseNet: https://github.com/Project-MONAI/MONAI
其他技巧: https://www.kaggle.com/c/trends-assessment-prediction/discussion/147797
(感谢 @shentao !!)

关于分数

所有的 3D 模型在 CV/LB 分数上表现都不是很好。大多数模型的 CV 分数在 0.171 ~ 0.175 左右,即使是最好的模型也只能达到 CV 0.17074(SEResNet18,调整大小,float 32)。
然而,集成这些模型大大提高了分数。事实上,单个 3D CNN 模型(ResNet18,float 32,无归一化)(LB 0.1675)与 “RAPIDS Ensemble for TReNDS Neuroimaging” 的内核预测(LB 0.1595)按 0.2 : 0.8 加权平均,得到了 LB 0.1582。
最终,堆叠我们各种各样的模型极大地提高了 LB 分数。

关于 3D 数据

在比赛的早期阶段,我将 3D 数据保存为 float 16 格式(浅蓝色模型)。这是因为这使学习过程快得多,并允许我训练大量模型。训练一个模型(5 折,每折 10 个 epoch)大约需要 5 ~ 10 小时才能完成。如果是 float 32,则需要 2 ~ 3 倍的时间。
然而,以 float 32 格式训练会更准确,因此重要的红色部分是用 float 32 格式训练的。

关于调整大小

为了创建多样化的模型预测,我将 3D 数据从 (50, 63, 53) 调整为 (75, 94, 79)。这有助于提高 CV 分数和集成效果。

关于站点归一化

测试数据集中有两种类型的数据:站点 2 和未公开(站点 1 或站点 2)。队友们发现,通过将站点 2 的分布移近站点 1 的分布(图中称为“shift”),使用 loading 和 fnc 的模型获得了更好的 LB 分数(例如,最佳内核 0.1590 -> 0.1586)。
为了在 3D CNN 模型中实现类似的效果,我按每个站点的均值和标准差对 3D 数据进行了归一化。站点 1 的数据使用站点 1 的均值和标准差,站点 2 使用站点 2 的均值和标准差。
我的一位队友制作了一个模型来预测数据是站点 1 还是站点 2(准确率超过 0.94),我使用他的预测以同样的方式对未公开的数据进行了归一化。
这种“站点归一化”并没有提高 CV 分数,但改善了 LB 分数。

DenseNet, float 16, 无调整大小
无归一化: CV 0.1722 -> LB 0.1684
站点归一化: CV 0.1742 -> LB 0.1680

think
同比赛其他方案