434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification
首先,我要感谢我出色的队友 @its7171 和 @tivfrvqhs5。我们在截止日期前5天才意识到必须重新计算所有内容,并且我们成功做到了,在截止日期前1小时选定了我们的提交。这能成功简直是个奇迹。
热烈祝贺 @bestfitting,他再次展现了非凡的实力,这并不让人感到意外 :) 即使我们在公共排行榜(Public LB)上排名更高时,我们也早就怀疑你是第一名了。
祝贺所有其他团队——很高兴能与你们同台竞技。
最后,我要感谢主办方为我们创造了这样一个有趣的问题来解决。
我将分享我方案中带来最大分数提升的关键部分。我模型的其他组件相当标准:
我最初使用在整张图像级别训练的模型,然后转向在单细胞级别训练的模型。在为单细胞图像分配标签时,我使用了以下方法:
threshold_std_above_mean = 0.5
threshold_pred = 0.9
for i in range(num_classes):
cell_level_df[f'cell_label_class{i}'] = ((cell_level_df[f'gt_class_{i}'] == 1)
& ( (cell_level_df[f'img_pred_rank_{i}'] == 1)
| (cell_level_df[f'std_from_mean_{i}'] > threshold_std_above_mean)
| (cell_level_df[f'pred_class_{i}'] > threshold_pred) ) ).astype(int)
上述公式背后的逻辑如下:
我仅在满足以下条件时,将单细胞图像在给定类别的标签设为1:
这些参数是根据排行榜(LB)的反馈进行调优的。我进行了3次迭代 -> 模型 -> 预测 -> 标签。这是我模型得分提升最大单一来源。
当蓝色通道非常弱时,主办方提供的官方分割模型有时会检测到一个细胞,即使它几乎在人眼不可见的情况下,并且肯定会被人工标注员移除。这是我使用的一个简单条件,它在LB上带来了约0.04的提升(我假设蓝色是第2个通道):
cell_img[2,:,:][cell_img[2,:,:]>5] < 25
此类细胞已从预测中移除。
我忍不住 :) 我花了几个晚上手动审查了所有包含有丝分裂纺锤体(class_11 的标签 == 1)的图像以及一些对 class 0 预测值较高的图像。这将纺锤体的得分从 0.024 提高到了 0.032。如果有人感兴趣,我可以发布这个数据集。