返回列表

7th place solution

686. PhysioNet - Digitization of ECG Images | physionet-ecg-image-digitization

开始: 2025-10-21 结束: 2026-01-22 医学影像分析 数据算法赛
第 7 名解决方案 - PhysioNet ECG 图像数字化

第 7 名解决方案

副标题:旋转、检测、分割、数字化等等!

作者: Bartley (brendanartley) & Harshit Sheoran (harshitsheoran)

竞赛排名: 第 7 名

发布时间: 2026-01-23

感谢 PhysioNet 主办方和 Kaggle 举办这场有趣的比赛。有许多阶段需要优化,我们抓住机会从所有阶段中学习尽可能多的知识。祝贺所有参赛者和,Harshit 和我都很兴奋能阅读所有的解决方案撰写!

简要总结

我们的管道使用旋转、导联检测、导联分割、数字化和分布外检测模型。我们修改了 ECG-image-kit 仓库来创建导联检测训练数据,依赖竞赛数据进行数字化,并使用分布外检测模型来优化我们的集成。更多细节请继续阅读!

交叉验证

为了验证实验,我们在所有样本上使用了 k 折交叉验证方案。我们在所有折上使用轻量级模型来检测边缘案例;对于计算成本更高的模型,我们只在 100 个样本上进行验证。我们发现 100 个样本足以获得强大的交叉验证/排行榜相关性,并提高了实验速度。

数据生成

接下来,由于竞赛数据中缺乏导联标注,我们修改了 ECG-image-kit 来创建用于旋转、导联检测和导联分割模型的数据。我们更新了代码库以将 ECG plot 插入背景中,模拟阴影,并在 ECG plot 中使用更多变的颜色和纹理。我们对代码库所做的所有修改都试图使 artifacts 更加真实。

我们使用 PTBXL 数据集 获取原始 ECG 值,使用 可描述纹理数据集 (DTD) 获取背景和阴影。以下是我们生成的一些样本,叠加了边界框和分割标签。

数据生成样本

旋转

管道中的第一个模型是一个简单的分类模型,用于预测图像何时需要旋转。我们使用 HGNet-V2 模型家族的 B4 和 B5 变体来预测 4 个类别(0、90、180 或 270 度旋转)。我们在训练数据集中检测到 69 张需要旋转的图像,并在推理期间首先应用此模型。

导联检测 / 分割

接下来,我们训练了一组混合导联检测/分割模型。这对我来说 (Bartley) 是一个很好的学习曲线,因为我一直想要没有混淆许可证的检测模型。为此,我们设计了一个模型来预测目标性、类别分数和偏移量。在边界框检测头中添加足够的容量(>=128 通道)对于模型能够学习信号非常重要。我们发现 ConvNeXt 模型家族效果最好,尽管该架构支持 timm 库中的任何骨干网络。

我们首先运行检测模型来定位 AOI(感兴趣区域)。然后我们裁剪图像并重新运行模型以获得更精确的结果。我们还添加了 16 像素的最小裁剪高度和 64 像素的宽度,以account for 小导联裁剪。这修复了我们在训练集中观察到的所有灾难性检测,并将排行榜提高了约 0.2-3。以下是训练集上的一些样本预测。

导联检测样本

我们还添加了一个分割分支来预测对应于 13 个不同导联类别的像素。我们将这个预测的分割作为输入提供给下一阶段的数字化模型。

数字化 (Bartley)

我们使用的第一个数字化模型是带有 1D UNet 解码器的 maxxvitv2_nano_rw_256.sw_in1k 模型。我们在将编码器特征传递给解码器之前对其进行池化。模型输入是一个 5 通道图像。三个 RGB 通道,一个用于目标导联概率,一个用于其他导联的最大概率。5 通道输入有助于在重叠导联的裁剪上生成更稳健的预测。

数字化模型架构

在训练期间,我们应用了重度颜色、失真、旋转、水平翻转、垂直翻转、偏移和细粒度粗 Dropout(以模拟笔迹)。我们还实现了一个自定义 Albumentations 模块来为每个图像添加 ECG 相关关键词/短语,尽管尚不清楚这种增强在多大程度上改进了模型。我们无法完全收敛此模型,并且在比赛结束时仍看到增益。我们相信更多的计算能力可以通过此架构带来进一步的性能改进。

我们使用了几种变体的 SNR 损失。在低分辨率阶段,我们使用了一种 SNR 损失变体,迫使模型学习最佳垂直偏移。在后期阶段(一旦学习了垂直偏移),我们使用了一种利用最佳垂直偏移来更紧密地与竞赛指标对齐的变体。后一种方法能够获得更高的最终分数。

对于 lead II 完整裁剪,我们使用带有线性头的 VIT 模型从补丁嵌入转到像素级预测。此架构与 Harshit 的相同,我们将在下一节中详细介绍。

数字化 (Harshit)

对于下一组数字化模型,我们依赖 Bartley 管道中的相同预处理步骤。这里的所有模型都使用 vit_small_patch16_dinov3.lvd1689m 编码器,训练设置略有不同。该架构 heavily inspired 由 Harshit 在 Yale 竞赛中的第一名解决方案 此处

Harshit 模型架构

我们开发了该模型的三个变体以提高多样性。虽然架构和训练方法保持一致,但我们改变了输入数据源(裁剪)和损失函数。我们在训练期间对源自以下来源的裁剪使用了随机填充增强。

模型版本 输入数据源 (裁剪) 损失函数
V27 train_crops5, train_bartley_crops3 MAE
V27-SNR train_crops5, train_bartley_crops3 SNR
V6 train_gen_crops1, train_crops4, train_bartley_crops2, train_bartley_crops4 MAE

此外,我们采用了多阶段训练方法,带有渐进式图像尺寸缩放,以确保稳定收敛。每个阶段由 20 个 epoch 组成,分辨率缩放如下:

224x896224x1782224x2688224x3584336x3584

我们故意保持增强最小化,在训练期间仅使用水平翻转。尽管增强管道较轻,模型仍有效收敛。为了测试此管道的鲁棒性,我们在不同显示器上拍摄 ECG plot 照片以模拟分布偏移。分数与竞赛集上的分数一致,表明模型具有鲁棒性。

集成

我们期望在结合我们的方法时获得大幅提升,因为我们使用了多样的架构、训练管道和损失函数。Harshit 的模型在分布内样本和信号存在显著漂移时表现出色。Bartley 的模型在分布外样本和重叠导联的裁剪上表现出色。我们管道的简单平均集成在公共/私有排行榜上得分 22.54/22.10

分布外 (OOD) 检测

为了进一步提高集成性能,我们实现了一个分布外 (OOD) 检测模型。由于 Harshit 的模型高度专门用于分布内样本,我们想要检测何时在推理期间屏蔽他的预测。

为此,我们使用 tf_efficientnetv2_s 和 ArcFace 损失训练了一个特征提取器。在推理期间,我们计算每个测试图像的嵌入,并将其与训练集中每种图像类型的平均嵌入进行比较。如果测试图像与任何平均嵌入之间的余弦相似度 <0.5,我们屏蔽 Harshit 的预测。此策略将我们的分数进一步提高到 22.80/22.48

我们在本次比赛中训练的所有模型(Harshit 和 Bartley)都使用了来自 timm 的 Muon 优化器。我们发现这显著优于所有其他优化器,认为值得一提。

最后说明

最后一件事,快速感谢 @TheoViel。我最近修改了我的训练管道,以遵循类似于他的 RSNA 2023 解决方案 的结构。这是一个优秀的仓库,我推荐查看。

感谢阅读,一如既往,Happy Kaggling!

同比赛其他方案