686. PhysioNet - Digitization of ECG Images | physionet-ecg-image-digitization
我们要感谢 PhysioNet 和 Kaggle 组织这次 ECG 信号预测竞赛。特别感谢 @hengck23 分享图像校正 pipeline。该 pipeline 包括阶段 0(图像旋转和单应性变换)和阶段 1(校正单应性变换后的图像)。我们将这两个阶段整合到了我们的工作流程中,并开发了一种策略,直接从这些校正后的图像预测所有 ECG 导联。
为了验证模型,前十个训练样本被用作验证集。
使用了两种方法来生成预测模型的输入图像。第一种方法通过单应性矩阵将旋转后的图像转换为 3200x2400 分辨率,随后进行网格点重映射。第二种方法使用单应性矩阵重新缩放网格点,并直接在旋转后的图像上执行重映射。在这两种情况下,包含 ECG 信号的下部区域被裁剪以供使用,而包含个人信息的上部部分被丢弃。
随后,图像被转换为灰度,并与基于坐标的特征连接作为模型输入,为网络提供视觉强度和空间上下文,以确保更准确的 ECG 信号预测。
骨干网络最后一个和倒数第二个 block 的特征被用作数值预测的输入。由于 ECG 图像由四个垂直堆叠的数据组组成,这些特征按高度分为四段。这些段随后被扩展为输入图像宽度的四倍。
骨干网络最后一个 block 的特征被用作数值预测的输入。鉴于 ECG 图像包含四个垂直堆叠的数据组,特征按高度分为四段。这些段随后被扩展为输入图像宽度的四倍。
骨干网络最后一个 block 的特征被用作数值预测的输入。与策略 1 和策略 2 不同,不是按高度划分特征,而是首先使用最大池化合并高度维度。然后将通道分为四段,并扩展为输入图像宽度的四倍。
基于模型输出,选择中间的 10,000、15,000 或 20,000 个输出,随后进行重采样。此后,基于 ECG 特性和爱因托芬定律(Einthoven's Law)执行三种类型的导联混合,以优化信号:
共实施了三种测试时增强 (TTA) 策略。这些涉及用于亮度控制的 gamma 调整(1.0、0.9 和 1.1),以及阶段 1 输入的裁剪和调整大小。
使用 SmoothL1Loss 作为损失函数,AdamW 作为优化器,batch size 为 1。学习率设置为 1e-4,并由 cosine 学习率调度管理。
生成合成空白 ECG 图像,以防止模型在遇到遮挡或噪声时预测异常值。还对 ground truth 数据应用了随机变化以增加多样性。此外,引入了摩尔纹(Moiré patterns)、 flare 和叠加的非校正图像,以增加训练难度并增强模型鲁棒性。
共集成了十个模型。对于验证,从十个图像 ID 中选取三个段(0006、0009 和 0012),共 30 张图像。
TTA 的实施使整体性能提高了 0.07,而基于爱因托芬定律的校正提供了额外的 0.06 提升。
| 模型 | 验证集 | LB (Private) | 骨干网络 | 输入尺寸 | 输出尺寸 | 预测策略 | 集成权重 |
|---|---|---|---|---|---|---|---|
| 1 | 26.79 | convnextv2_tiny | 5056x1280 | 4x20000 | 策略 1 | 20 | |
| 2 | 26.21 | convnextv2_base | 2528x1280 | 4x10000 | 策略 1 | 32 | |
| 3 | 26.50 | tf_efficientnetv2_m | 5056x1280 | 4x20000 | 策略 2 | 30 | |
| 4 | 26.03 | hgnetv2_b6 | 5056x1280 | 4x20000 | 策略 2 | 11 | |
| 5 | 26.46 | mambaout_base | 5056x1280 | 4x20000 | 策略 2 | 8 | |
| 6 | 25.65 | caformer_m36 | 2528x1280 | 4x10000 | 策略 2 | 9 | |
| 7 | 26.77 | 22.98 (22.75) | convnextv2_tiny | 5056x1280 | 4x15000 | 策略 3 | 31 |
| 8 | 26.56 | inception_next_small | 5056x1280 | 4x15000 | 策略 3 | 23 | |
| 9 | 26.76 | inception_next_base | 5056x1280 | 4x20000 | 策略 3 | 27 | |
| 10 | 26.78 | inception_next_base | 5056x1280 | 4x20000 | 策略 1 | 25 |
为了评估模型鲁棒性,使用 ECG-Image-Kit 选择了导联重叠或交叉的案例。结果表明,即使在 Lead V3 和 Lead II 部分相交的情况下,模型仍然能够生成准确的预测。
比较了使用 scipy.signal.resample 和线性插值进行后处理的 SNR 差异。(仅在本地测试了一张图像)
| Scipy.signal.resample | 线性插值 | |
|---|---|---|
| SNR | 23.834 | 22.176 |
比较了从高分辨率和低分辨率图像重映射的 SNR 差异。(仅在本地测试了一张图像)
| 从高分辨率重映射 | 从低分辨率重映射 | |
|---|---|---|
| SNR | 23.834 | 21.267 |
实施了两种主要增强功能以改进原始校正方法的输出质量:
图像 3 是通过扫描图像 1 生成的,但我们发现图像 3 中网格和信号之间的偏移与图像 1 中的不同。