第三名方案总结
第三名方案总结
作者: scumed (团队成员: @erniechiew, @css919, @zehuigong, @stephkua)
比赛: VinBigData Chest X-ray Abnormalities Detection
我们要感谢比赛主办方和 Kaggle 组织了这次比赛,并祝贺所有获胜者,以及所有从比赛中受益的人。特别感谢我的队友 @erniechiew, @css919, @zehuigong 和 @stephkua。
方案组成:
- 检测模型
- 针对主动脉增大的专用检测器
- 基于多标签分类器的后处理
1. 检测模型
边界框标注的预处理
我相信大多数参赛者都使用了 WBF(加权框融合)来合并原始框,就像这个 notebook 中那样。我应用了相同的思路,即如果框的 IOU 高于某个阈值(例如 0.2),则对它们的坐标进行平均。然后将这些预处理后的框作为我在本次比赛中的标注。
我们的 YOLO-V4 检测器
- 优化器: SGD, BS = 32, LR=0.001, CosineAnnealing。
- 图像尺寸: P6 版本为 1280,P7 版本为 1536。
- 数据增强:
- (1) 随机翻转 (p=0.5)
- (2) 随机缩放 (0.2-1.8)
- (3) Mosaic
- (4) Mixup(p=0.2)
- (5) 随机平移 (0.5)
1.1 基于单个放射科医生标注框的训练 (LB 0.274)
我们注意到训练集和测试集之间标注的处理方法不同(参见这个 讨论)。因此,我们分析了每位放射科医生标注的图像数量,发现 8、9 和 10 号医生标注了大部分边界框。因此,我们分别为 8、9 和 10 号医生训练了三个检测器。单独检测器的得分如下(CV/LB/Private):
- Rad 8: 0.498 / 0.252 / 0.233
- Rad 9: 0.376 / 0.213 / 0.234
- Rad 10: 0.384 / 0.228 / 0.226
然后我想,为什么不试着把它们合并呢?合并后,我在 LB 上得到了 0.274 分,Private 得分为 0.248。
1.2 达到 LB 0.280
然后,我尝试在所有放射科医生的数据上训练检测器。这部分使用了 YOLO-V4 P6 和 P7 版本。(LB/Private):
- P6: 0.278 / 0.261
- P7: 0.264 / 0.263
在得到这些模型后,我将它们与第一步的提交结果合并,我们在 Public Leaderboard 上达到了 0.280,在 Private 上达到了 0.272。
无效的尝试:
- (1) Albu 数据增强,例如 CLAHE, RandomBrightness
- (2) 类别感知采样
- (3) 对 P6 使用更大的图像尺寸 1536 进行训练
- (4) Focal loss + BCE
- (5) 在 RSNA 数据集上预训练并在本次比赛的训练集上微调
- (6) 在测试集上进行伪标签
- (7) 仅针对 ILD 类别训练专用检测器
我们未详细尝试的方法:
- (1) 对 RSNA 或其他数据集进行伪标签,记为 PseData,并在 PseData + TrainSet 上训练,这将 CV 从 0.498 提高到 0.55+,但没有提高 LB,然而它确实提高了 Private 得分(0.250 vs. 0.255)。
- (2) 从异常图像中裁剪框并将其粘贴到正常图像上,对不同类别使用不同的采样比例。
2. 针对主动脉增大的专用检测器
正如比赛期间的讨论论坛