425. VinBigData Chest X-ray Abnormalities Detection | vinbigdata-chest-xray-abnormalities-detection
在这次比赛中,我很高兴能与 Kaggle 街头最“危险”的团伙之一组队,他们是 @christofhenkel、@ilu000、@philippsinger。
由于测试集是通过不同的标注过程生成的,而且 Public LB(公开排行榜)因为规模太小而不可信,因此很难进行可靠的交叉验证(CV)。我们首先注意到我们的 LB 分数远低于 CV 分数。这在某种程度上是合理的,但差距确实很大,因此我们调查了数据。我们在训练集和测试集图像上训练了一个对抗验证模型。它的 AUC 为 0.61。该模型几乎可以肯定能区分出某些训练集图像和测试集,但其余部分看起来像是随机分割的。这些可区分的图像全部由 R8-R9-R10 标注并带有发现结果。因此,不同的数据来源并没有均匀地分布在各位放射科医生之间。这一发现并没有真正帮助我们,因为我们没有奢侈到可以删除带有标注的数据。因此,我们试图消除偏差。这些图像都有黑色的角落覆盖了一些信息。给每张图像的角落添加相同的黑框是有道理的,但这并没有消除偏差。然后我们尝试了 gradCAM,根据它的结果,偏差存在于图像的各个角落,使其难以消除。
我们训练了另一个模型来检测是哪位放射科医生标注了图像。该模型在区分 R1-7 与其他医生方面非常准确。由于 R1-7 没有任何标签,我们也从训练集中移除了它们,希望能解决一些偏差问题。知道偏差遍布图像各处,而不是在特定位置,我们认为风格迁移可能会解决这个问题,结果得到了这幅艺术作品。
这并没有起作用(显而易见 :D)。
在消除更多偏差的希望破灭后,我们专注于改进我们的 CV,更加关注 R11-17。我们训练了几个具有不同主干和标准增强的 EfficientDet。如果图像有发现结果,则针对每位放射科医生对数据进行采样,否则该图像在每个 epoch 期间采样一次。我们还有一个 YOLO 模型,表现比我们的 EfficientDet 差。使用 WBF@0.4 将它们全部集成给了我们最好的分数。一些在 R8-10 上预训练、在 R11-17 上微调并在训练前通过加权 R11-17 应用 WBF 的实验在 Public LB 上效果不佳,因此我们没有使用它们。但它们在 Private LB 上似乎效果要好得多,比如从 0.224 提升到了 0.275。
我们注意到这个类别有些问题,因为我们的 LB 分数远低于 CV 分数。考虑到这可能是测试集中标注框的方式导致的,我们对它们进行了后处理,这在 Public 上给了我们额外的 0.01 分,在 Private 上给了 0.005 分。
sub.loc[sub.class_id==0, "y_max"] += 110
sub.loc[sub.class_id==0, "x_min"] += 40