565. HuBMAP - Hacking the Human Vasculature | hubmap-hacking-the-human-vasculature
感谢主办方举办这场比赛。
感谢 @nghiahoangtrung 分享的 notebook 和数据集,这帮助我在短时间内完成了提交。
我的最佳单模型训练代码已分享在 GitHub 上。(2023/08/12 更新)
推理 notebook 已公开 此处。
对于大多数实例分割模型,AP主要依赖于边界框(bbox)预测,而掩码预测的精度影响较小。此外,掩码预测可以通过其他模型(如Mask R-CNN的掩码头或任何语义分割模型)来处理。因此,在处理实例分割任务时,我通常将精力集中在优化边界框精度上。
在尝试了多个模型后,我发现RTMDet表现异常出色且训练速度快。因此,我选择RTMDet作为实验的主要模型。
我特别强调这一点,因为这是我实验中发现的最关键的技术。指数移动平均(EMA)模型不仅在验证集上表现出更高的精度,在训练集上也获得了更高的精度。在我的大多数实验中,我都使用EMA配合固定的学习率。这种方法为我进行各种实验提供了稳定的基础。

我使用dataset1和dataset2训练最终提交的模型。dataset1根据'i'位置分割为训练集和验证集。基于'i'的分割比随机分割更具挑战性。随机分割的验证分数约为(0.47 bbox_mAP, 0.72 segm_mAP60),而'i'分割的分数约为(0.43 bbox_mAP, 0.68 segm_mAP60)。
RTMDet-x是我的基准模型。我用所有3个类训练模型,输入尺寸为768。
在早期实验中,我比较了Faster R-CNN和Mask R-CNN,使用相同的Faster R-CNN预训练权重。后者表现出更高的bbox mAP,表明掩码标注的帮助性。
在不使用掩码监督的情况下,RTMDet-x已经比Mask R-CNN等模型实现了更高的bbox mAP。添加掩码监督进一步提升了性能。
有两种利用掩码标注的方式:
两种方法效果都很好。
| 随机旋转 | 掩码头 | bbox_mAP | segm_mAP60 |
|---|---|---|---|
| N | N | 0.424 | |
| Y | N | 0.434 | |
| N | Y | 0.43 | 0.68 |
| Y | Y | 0.432 | 0.688 |
由于实例重叠极少,掩码预测比典型的实例分割场景简单得多。我在训练中添加了一个简单的掩码头来增强bbox预测。令人惊讶的是,掩码头的预测结果并不差。使用相同的边界框,segm_mAP60略高于Mask R-CNN,而segm_mAP75略低于Mask R-CNN。未使用TTA的单折模型在private LB上得分0.565+,这已足以获得金牌。
我使用了强几何增强。
dict(type='RandomRotateScaleCrop',
img_scale=(768, 768),
angle_range=(-180, 180),
scale_range=(0.1, 2.0),
border_value=(114, 114, 114),
rotate_prob=0.5,
scale_prob=1.0,
hflip_prob=0.5,
rot90_prob=1.0,
),
我使用批量大小8进行训练,包含3张dataset1的图像和5张dataset2的图像。这种方法带来了轻微的性能提升。
我的最终模型是一个集成模型,其中边界框预测是3个RTMDet模型、一个YOLOX-x(带掩码监督)和一个Mask R-CNN的WBF集成。所有模型都有两个不同的权重(5折中的2折)。掩码预测由Mask R-CNN的掩码头使用输入尺寸1440生成,未使用TTA。
该集成模型在private LB上得分0.589,在public LB上得分0.317。
事实上,直到在比赛最后一天看到我的public分数,我才想起膨胀(dilation)。
在我的本地验证中,将wsi3dataset2添加到训练集提高了wsi1dataset1(所有wsi1保留)和wsi2dataset2(所有wsi2保留)的mAP。所以我选择相信wsi1dataset1和wsi2dataset2。
这主要是运气使然。如果我能早点提交,我可能会在实验中做出不同的选择。无论如何,我最后一定会保留一个不带膨胀的最终提交。
torch._foreach_lerp_ 计算EMA,可以节省一些时间