返回列表

5th place solution - my part

434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification

开始: 2021-01-26 结束: 2021-05-11 生命科学 数据算法赛
第5名方案 - 我的部分

第5名方案 - 我的部分

作者: narsil (jobs-in-data.com) | 发布时间: 2021-05-12

首先,我要感谢我出色的队友 @its7171@tivfrvqhs5。我们在截止日期前5天才意识到必须重新计算所有内容,并且我们成功做到了,在截止日期前1小时选定了我们的提交。这能成功简直是个奇迹。

热烈祝贺 @bestfitting,他再次展现了非凡的实力,这并不让人感到意外 :) 即使我们在公共排行榜(Public LB)上排名更高时,我们也早就怀疑你是第一名了。

祝贺所有其他团队——很高兴能与你们同台竞技。

最后,我要感谢主办方为我们创造了这样一个有趣的问题来解决。

我将分享我方案中带来最大分数提升的关键部分。我模型的其他组件相当标准:

1. 细胞级模型与渐进式伪标签

我最初使用在整张图像级别训练的模型,然后转向在单细胞级别训练的模型。在为单细胞图像分配标签时,我使用了以下方法:

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:

  • 整张图像在该类别的标签为1
  • 该特定细胞在图像所有细胞中对该类别的预测值最高,或者预测值高于0.9,或者比该图像上此类别的平均预测值高出0.5个标准差

这些参数是根据排行榜(LB)的反馈进行调优的。我进行了3次迭代 -> 模型 -> 预测 -> 标签。这是我模型得分提升最大单一来源。

2. 过滤掉由分割模型检测到但人眼不可见的细胞

当蓝色通道非常弱时,主办方提供的官方分割模型有时会检测到一个细胞,即使它几乎在人眼不可见的情况下,并且肯定会被人工标注员移除。这是我使用的一个简单条件,它在LB上带来了约0.04的提升(我假设蓝色是第2个通道):

cell_img[2,:,:][cell_img[2,:,:]>5] < 25 

此类细胞已从预测中移除。

3. 有丝分裂纺锤体的手动审查

我忍不住 :) 我花了几个晚上手动审查了所有包含有丝分裂纺锤体(class_11 的标签 == 1)的图像以及一些对 class 0 预测值较高的图像。这将纺锤体的得分从 0.024 提高到了 0.032。如果有人感兴趣,我可以发布这个数据集。

同比赛其他方案