448. SIIM-FISABIO-RSNA COVID-19 Detection | siim-covid19-detection
首先,我要感谢主办方组织了这场非常有趣的比赛。
同时,我无法表达对 IanPan 的足够感谢。在我们组队后,我们的分数就像变魔术一样迅速提升。在这次比赛中,我从他那里学到了很多。
以下是我的部分。
・Swin Transformer
在我的环境中,Swin Transformer 效果最好。cait 也不错,但 aux loss 在 cait 上效果不佳,所以我选择了 Swin Transformer。
我将分辨率保持在 384。我尝试了 768,但结果稍差。我也做了一些裁剪,所以 384 似乎已经足够了。
・使用 CheXpert 数据进行预训练。
这是 Ian 的想法。该数据与 ImageNet 差异很大。我们可以通过预训练获得良好的初始权重。
此外,在使用 CheXpert 进行训练之前,先使用 RSNA 2018 竞赛数据进行进一步的预训练,相比于仅使用 CheXpert,CV(交叉验证)分数略有提高。
我使用了稍后会提到的裁剪方法,并且没有使用 aux loss。
・5个类别
我在类别中加入了 'none'(无)。
・使用检测和分割进行裁剪
通过使用检测预测结果进行裁剪,我能够将检测模型的智慧应用于分类模型。我还使用了由 VinBigData 数据集训练的肺部分割器。我仅裁剪图像中存在检测框(置信度 > 0.3)或分割掩码的区域。
如果直接使用检测框,例如胸腔积液可能会导致图像难以区分,因此检测框被填充了 100 个像素。
・mixup
Mixup 带来了微小的改进。最后,在我的部分,我使用了两个不同的模型,一个使用了 Mixup,另一个没有。
在不使用 aux loss 的阶段,resize mix 效果最好,但最终 mixup 效果更好。
・aux loss(辅助损失)
我使用了 binary_cross_entropy_with_logits。
在两个模型中的一个,我将负样本图像的损失设置为零。
・无伪标签
我尝试了各种方法,但结果都稍差。
・5折模型在四个类别上的 mAP 平均值为 0.397。
・YOLOV5
我使用了 l6 和 l 版本。
・使用 RSNA 2018 数据进行预训练。
原因与研究级别相同。
・mixup: 0.5
有轻微的改进。
・使用 none 预测
对于每张图像,我发现以下方法最能提高分数:
detection_conf = detection_conf * (1 - image none prediction) ** 0.4
我像这样结合使用了分类模型和检测模型的预测:
none_pred = cl_none_pred * 0.7 + (1 - image_conf_max) * 0.3
以下是来自 Ian 的信息。
我要感谢 Yuji 同意与我组队。我在比赛后期才联系他,当时他即使没有我也已经表现得非常出色。我从他那里学到了很多,这次比赛提醒了我,在 Kaggle 上组队是多么有趣和具有启发性。
对于分类,我训练了一个5类分类器:4个研究标签 + 图像级别的 'none'(相对于 opacity)。我们仅在每项研究的1张图像上进行训练。由于绝大多数研究只有一张独特的图像,这并不是真正的问题。
首先,我在 RSNA 2018 肺炎检测挑战赛的3个类别上对分类器进行了预训练。然后,我在本次比赛的数据上对这些权重进行了微调。这显著提高了性能。
我训练了一个混合分类-分割模型。一种架构使用了 EfficientNet-B6 和 DeepLabV3+,另一种使用了 Swin Transformer 和 FPN。这些是使用很棒的 Segmentation Models PyTorch 库训练的。
模型使用 AdamW 优化器、512x512 图像进行训练,并使用 albumentations 进行数据增强,包括对比度/亮度调整、随机噪声和缩放/平移/旋转。
我对分类(尽管可以使用交叉熵,但我发现 BCE 对该评估指标效果更好)和分割都使用了 BCE 损失,权重为 1:1。模型的分割部分只有1个类别(opacity)。分割标签是使用边界框标签生成的。我将边界框转换为椭圆,并将其用作训练标签。
我也使用了 mixup,这显示了显著的改进。EfficientNet-B6/DeepLabV3+ 和 Swin/FPN 模型的5折集成(共10个模型)在研究标签分类上达到了 0.408 的 LB 分数。