434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification
[更新]:
关于解决方案文章的最新版本,请查看 GitHub 仓库 README。那里应该包含所有的图表,但我不再维护当前帖子中图表的外部托管链接。如果有任何问题,请随时通过 Kaggle 给我发私信或在 GitHub 上提出 Issue。谢谢!
大家好!
首先,我要祝贺获奖者!能向你们的解决方案学习是一种荣幸!
其次,我要感谢比赛的组织者!感谢你们在论坛上亲切、细心和负责任的态度!
还要感谢我所有的 HPA 竞赛伙伴们!😊 多亏了你们,感觉就像是一个由志同道合、热情洋溢的同事组成的超棒团队。正如 Darek @thedrcat 所说,真希望我们能见面庆祝一下。希望这能在未来的某个线下 KaggleDays 黑客马拉松上实现 😉
与 Paweł @narsil 的帖子类似,我的方法是非常以数据为中心且理论上严谨的。
我解决方案的核心是去噪,包括基于图拉普拉斯正则化理论的去噪。去噪本身使我能够在没有计算密集型大型模型、没有启发式方法(如排名、预测值相乘等)的情况下获得具有竞争力的位置。
图片:
我设法实现了这篇论文中的计算高效图信号去噪算法。我的 Python 实现可以在这里找到。论文中的算法强制执行标签稀疏性,以便每个对象在去噪后都有一个单一的置信标签。因此,去噪的输出没有被直接使用。我关注的是在去噪软标签中具有最高众数的一组细胞。例如,我从最高的去噪标签中添加了大约 500 个细胞:
图片:

我假设标签具有独立性,估计了负标签概率:
$$ P_{neg} = \prod_{c\ in\ patterns} (1 - P_{c}) $$。
用这种方式估计 P_{neg} 而不是试图预测负标签,将我的公共 LB 分数从 0.517 提高到了 0.523。
更新:我注意到我错误地没有将基于独立性的估计包含在最终提交中。在与我的私有 LB 排名对应的提交中,我估计负标签概率为:
$$ P_{neg} = \min_{c\ in\ patterns} (1 - P_{c}) $$。
这种估计 P_{neg} 的方式在公共 LB 上比基于独立性的估计差了 0.0007。但幸运的是,结果证明它在私有 LB 上好了 0.0003。
我实现了边界细胞的移除。我还修改了小细胞核的移除方式,基于中等细胞核大小而不是硬编码的阈值来进行。这些修改将我的公共 LB 分数从 0.523 提升到了 0.527。
5 折交叉验证,使用由 Shubin @bestfitting 提供的 DenseNet121,在《Nature》论文和论坛中均有引用。感谢你的出色工作,Shubin
同比赛其他方案