第19名解决方案:重复伪标签
第19名解决方案:重复伪标签
作者:moritake04(Kaggle Master)
排名:第19名
发布时间:2023-08-01
首先,我要感谢比赛主办方组织这次比赛,也感谢各位参与者。
在shake-down阶段被淘汰出金牌区后我很失望,但这次比赛对于实例分割来说是一次非常棒的学习经历。
概述
我的最终提交是一个Cascade Mask R-CNN的单模型(骨干网络:ConvNeXt-tiny)。
然而,训练过程分为多个阶段。图1概述了训练和提交流程。
.png?generation=1690860001136772&alt=media)
图1:训练和提交流程
- 第一阶段训练:
使用Dataset 1和2训练Cascade Mask R-CNN。使用了三种不同的骨干网络(ConvNext-tiny、ResNext-101、Resnet-50)。
使用这三个模型对Dataset 3进行伪标签处理,仅提取置信度大于0.5的标签。在伪标签过程中还执行了TTA和NMS。
- 第二阶段训练:
使用Dataset 1和2,以及第一阶段创建的伪标签Dataset 3训练ConvNeXt骨干网络模型。本阶段对第一阶段训练的模型进行微调。
- 第三阶段训练:
仅使用Dataset 1微调第二阶段训练的模型。这样做是为了使模型输出更接近Dataset 1的标注质量。
使用这里创建的模型对Dataset 2和3进行伪标签处理,仅提取置信度大于等于0.95的标签。在伪标签过程中也执行了TTA和NMS。
- 最终训练阶段:
使用Dataset 1和第三阶段创建的伪标签Dataset 2和3训练ConvNeXt骨干网络模型。这里使用第二阶段训练的模型进行微调。
- 提交:
使用最终训练阶段开发的模型推断测试数据集;这是一个Cascade Mask R-CNN单模型(骨干网络:ConvNeXt-tiny),但我们执行了TTA和NMS。
我的方法
我专注于每个数据集的标注质量来训练模型。以下是本比赛数据集的描述引用。
比赛数据包含从五个全切片图像(WSI)中提取的分块,分为两个数据集。Dataset 1中的分块具有专家审核的标注。Dataset 2包含来自相同WSI的其余分块,包含未经专家审核的稀疏标注。
所有测试集分块均来自Dataset 1。
两个WSI构成训练集,两个WSI构成公共测试集,一个WSI构成私有测试集。
训练数据包含来自公共测试WSI的Dataset 2分块,但不包含来自私有测试WSI的分块。
我们还包括作为Dataset 3的来自另外九个WSI的分块。这些分块尚未标注。您可能希望对这些数据应用半监督或无监督学习技术来支持您的预测。
这意味着:
- Dataset 1 → 准确的标注,与测试数据集具有相同的标注质量
- Dataset 2 → 不太准确的标注
- Dataset 3 → 无标注
因此,我决定信任Dataset 1,并尝试提高模型输出的标注质量,使其更接近Dataset 1。我还尝试充分利用剩余的Dataset 2和3。基于这一策略,我进行了实验。
- 模型
- 主要使用convnext-tiny
- 也使用了resnet和resnext,但最终没有使用,因为它们与伪标签一起使用时效果不佳
- 使用了mmdetection 3.x
- 标注类型
- 仅使用blood_vessel
- 完全不使用unsure和glomerulus
- 数据增强
- 训练期间将图像随机增强至多个尺度,如下所示
- scales=[(640, 640), (768, 768), (896, 896), (1024, 1024), (1152, 1152), (1280, 1280), (1408, 1408), (1536, 1536)]
- 测试时增强(TTA)
- 使用来自多个尺度输出结果的集成
- scales=[(1024, 1024), (1280, 1280), (1536, 1536)]
- 后处理
- 伪标签
- 如图1所示,伪标签分为两部分。对三种不同图像尺寸执行TTA,scales=[(1024, 1024), (1280, 1280), (1536, 1536)],并对集成使用NMS
- 交叉验证(CV)策略
- CV设置为与私有LB相似
- 源WSI == 1 且 数据集 == 1 → 验证集
- 源WSI == 1 且 数据集 != 1 → 不用于CV
- 其他 → 训练集
- 提交时,所有数据都用于训练
- CV与Public LB并不总是相关。然而,随着实验进行到后半部分,相关性变得更强
哪些方法有效
- 伪标签
- 信任Dataset 1的标注质量
- TTA
- NMS
- 放大图像
哪些方法无效
- 参数规模较大的模型
- mask2former, convnext-small
- 可能是因为缺乏参数调优...?
- 使用unsure和glomerulus进行训练
- 膨胀
- 当使用原始dataset 2作为训练数据时,LB有效
- 当仅使用dataset 1作为训练数据时,LB下降
- 翻转数据增强
- 加权框融合(WBF)(我的实现可能有问题...)
- 边缘平滑推理(我的实现可能有问题...)
- 与其他模型集成
代码