686. PhysioNet - Digitization of ECG Images | physionet-ecg-image-digitization
感谢组织者和 Kaggle 工作人员举办这场有趣的比赛。我还要感谢 @hengck23 提出的多阶段流水线想法。我的解决方案遵循该框架,但使用了不同的图像校正实现方法,这是我想在此分享的主要部分。
似乎许多团队使用机器学习模型来解决这一阶段,而我实施了一个仅利用 OpenCV 的解决方案:
模板掩膜
| 检测到的关键点与匹配 | 叠加模板网格点的单应性校正图像 |
|---|---|
![]() |
![]() |
此阶段侧重于在亚像素级别检测网格点并将其与模板网格匹配:
ecg-image-kit 绘图函数生成,其中概率基于像素强度计算。我构建了一个回归模型,直接从分割掩膜预测亚像素级坐标。
输入:(B, 1440, 1968) # [Batch, Height, Width]
---------------------------------------------------------------------------
1. 垂直 2D 卷积编码器 (折叠高度)
(B, 1, 1440, 1968) --> (B, 512, 1968) # 高度被压缩为 1
2. 带有 ROPE 的 CNN & Transformer (混合上下文)
(B, 512, 1968) --> (B, 512, 1968) # 时间/导联混合 (形状不变)
3. 细化 (跳跃连接)
(B, 1024, 1968) --> (B, 512, 1968) # 合并原始 + 混合特征
4. 上采样 (双倍宽度)
(B, 512, 1968) --> (B, 256, 3936) # Pixel Shuffle
5. 热力图 & Soft-Argmax (最终投影)
(B, 256, 3936) --> (B, 4, 256, 3936) # 拆分为 4 个导联 & 256 个 Bin
---------------------------------------------------------------------------
最终输出:(B, 4, 3936) # [Batch, Leads, Y-Coordinates]
使用了两种损失函数:预测 y 坐标的 MSE 损失 和转换信号值的 SNR 损失。