返回列表

9th Place Solution

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

开始: 2025-10-21 结束: 2026-01-22 医学影像分析 数据算法赛
第 9 名解决方案
标题: 第 9 名解决方案
作者: YumeNeko (Grandmaster)
发布时间: 2026-01-26
比赛排名: 第 9 名

首先,我想向所有参与本次比赛的选手致敬。
我也要感谢主办方组织了这次有趣的任务竞赛。

概述

Overview

我的解决方案包含一个两阶段流程:图像校正和信号重建。

对于图像校正,我首先基于图像匹配使用单应性变换进行粗略对齐,然后检测网格点坐标并使用分段仿射变换进行精确对齐。

对于信号重建,我扩展了 UNet 的解码器,添加了一个信号重建模块,直接从图像输出信号,并训练模型以优化信噪比 (SNR)。

流程

1. 图像校正

1.a 图像类型分类

  • 由于单独处理某些图像类型(006)时性能更稳定,因此首先按类型对图像进行分类。
  • 仅使用比赛数据进行训练,训练了一个以 convnext_large_384_in22ft1k 为骨干的简单分类模型。
  • 这里没有什么特别之处,但模型在 CV 上达到了约 99.9% 的准确率。

1.b 图像匹配

Image Matching

  • 使用 ALIKED + LightGlue 与模板图像进行特征点匹配,然后通过 RANSAC 估计的单应性变换进行粗略对齐。
    • 模板图像是通过平均比赛数据中图像类型 001 的图像创建的。
    • ALIKED 和 LightGlue 均直接使用公开可用的预训练权重。
  • 为了同时校正旋转,输入图像分别旋转 0°、90°、180°、270°,对每个旋转进行匹配,并选择匹配数量最多的旋转。
  • 虽然在此阶段仍存在一些 distortion,但几乎所有图像都与模板 (001) 对齐到相同的方向和构图,这稳定了下游的训练和推理。

1.c 网格检测

  • 构建了一个模型来从投影变换后的图像中检测网格点坐标。
    • 使用带有 ResNeSt-14d 编码器的 UNet。
  • 仅使用约 22,000 张合成图像进行训练。
    • 由于图像匹配已经大致标准化了输入图像,仅对合成数据进行增强足以泛化到真实数据。
    • 未对真实数据进行标注,显著降低了标注成本。
  • 对于图像类型 006,由于摩尔纹有时会发生误检,因此在使用 UHDM 去除摩尔纹后应用网格检测。

1.d 精确对齐

  • 最后,基于图像匹配和网格检测的输出,使用分段仿射变换 (Piecewise Affine transformation) 进行精确对齐。
  1. 从图像匹配获得的对应点中,选择重投影误差小且失真最小的区域作为初始区域。使用匈牙利算法将这些区域中检测到的网格点与理想网格点进行匹配。
  2. 从初始对应点开始,假设网格间距约为 40 像素,使用广度优先搜索 (BFS) 在上/下/左/右方向上将对应点逐步扩展到相邻网格点。
  3. 最终的一组对应点用作控制点,应用分段仿射变换以校正整个图像的失真。

2. 信号重建

Network

架构

  • 基于带有 ResNeSt-14d 骨干的 UNet,设计了一种架构,通过添加专用模块直接从解码器输出估计信号。
    • UNet 解码器的特征图沿时间轴(W 方向)扩展 6 倍,然后与采样频率 (fs) 和导联类型作为特征进行拼接。
    • 拼接后,沿 W 方向应用卷积,以输出表示每个 x 列沿 y 方向“信号相似度”的 logits。
    • 从 y 方向 logits 计算两个软期望:一个偏向顶部边缘,一个偏向底部边缘,并且门控函数预测 (0–1) 每个 x 使用哪一个。
    • 最终估计的 y(像素坐标)基于 ECG 绘图几何形状(纸张大小/分辨率/行布局)转换为 mV 单位的信号值。

输入、输出和损失函数

  • 输入

    • 每个导联的裁剪图像
      • 固定裁剪大小:H×W = 600×491
      • RGB 图像添加了 x 和 y 方向的位置编码, resulting in 5-channel input
      • 长导联 (II) 被 split into 4 parts 以匹配其他导联的时间长度
    • 目标采样频率 (fs)
    • 导联类型
      • 添加目标 fs 和导联类型作为输入特征使 CV 性能提高了约 +1.8 dB,但不幸的是没有在 LB 上产生明显的改进。
  • 输出

    • 分割图
      • 三类:背景、要重建的目标信号和非目标信号
    • 重建信号波形
  • 损失

    • 分割损失:Dice + CE,权重 0.5 : 0.5
    • 波形损失:在插值预测波形以匹配 GT 长度后,使用基于 SNR 的损失作为主要损失,并添加 L1 损失作为辅助项
    • 最终损失是加权和,强调波形重建 (SNR 损失)

多阶段训练

训练分三个阶段进行,逐渐切换数据集和增强策略。

这种多阶段训练从第 1 阶段预训练中获得约 +1.0 dB 的提升,并在第 3 阶段的图像类型特定微调中获得额外的 +0.2 dB,在公开和私有数据集上均保持一致。

第 1 阶段训练 (使用合成数据预训练)

  • 使用约 21,000 张从 PTB-XL (500 Hz) 生成的合成图像进行训练,排除与比赛数据重叠的部分。
  • 仅图像增强包括模糊、亮度变化、通过分段仿射变换网格坐标偏移最多 1 像素,以及自定义增强如 DirtPatch / CreaseWrinkles。
  • 图像和信号联合增强包括随机段 dropout 和垂直/水平翻转。
  • GT 信号使用 scipy.resample_poly 随机重采样到 [250, 256, 512, 500, 1000, 1025] 之一。
  • 训练 15 个 epochs,lr = 4e-4。

第 2 阶段训练 (主训练)

  • 使用第 1 阶段的权重初始化,仅使用比赛数据进行训练。
  • 不应用仅图像增强;仅使用第 1 阶段的图像 + 信号增强。
  • 训练 30 个 epochs,lr = 1e-4。

第 3 阶段训练 (图像类型特定微调)

  • 使用第 2 阶段的权重初始化,仅使用图像类型 006 数据进一步训练。
  • 增强设置与第 2 阶段相同。
  • 训练 50 个 epochs,lr = 1e-4。
  • 虽然其他图像类型的 CV 性能也有所提高,但 LB 改进不稳定,因此最终提交仅对图像类型 006 使用第 3 阶段模型,对其他类型使用第 2 阶段模型。

TTA (测试时增强)

  • 在推理期间,对原始图像以及左右翻转、上下翻转和两者都翻转进行预测,总共 4 种模式,并对结果取平均。
  • 此 TTA 在公开和私有数据集上一致提供约 +0.15–0.2 dB 的改进。

得分

# 合成数据预训练 (第 1 阶段) 006 微调 (第 3 阶段) TTA 全数据训练 使用目标 fs 使用导联 id 公开榜 私有榜
1 20.17 20.11
2 20.32 20.26
3 21.43 21.30
4 21.54 21.38
5 21.80 21.60
6 21.66 21.56
7 21.81 21.71

最终提交
集成 #5 + #6 + #7

  • 公开榜:22.04
  • 私有榜:21.92
同比赛其他方案