返回列表

10th Place Solution - Yolo+Unet

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

开始: 2025-10-21 结束: 2026-01-22 医学影像分析 数据算法赛
第 10 名解决方案 - Yolo+Unet

第 10 名解决方案 - Yolo+Unet

使用 Yolo 进行关键点检测 + 使用 Unet 进行水平和垂直线分割的图像校正 + 使用 Unet 进行信号提取

作者: Giba (Grandmaster)
发布时间: 2026-01-27
竞赛排名: 第 10 名

感谢 Kaggle 和赞助商举办这场精彩有趣的比赛。这是一次很棒的学习经历。我在比赛开始和结束阶段投入了一些时间,但不幸的是,为了去度假,我不得不在结束前 10 天停止模型开发,所以我会简短说明。

我的解决方案由两种方法组成,每种方法使用略微不同的 3 阶段流程。
两种方法都使用关键点检测与线性变换、网格校正和信号提取阶段。

两种方法的主要区别在于,一种方法基于水平和垂直线的交点进行图像校正,加上德劳内三角化(Delaunay triangularization)将点转换回原始位置。第二种校正方法使用分割 Unet 多标签模型,训练用于枚举所有垂直和水平网格线,并根据线段掩码找到每个线像素的位置以转换回原始位置。

  1. 关键点检测与图像变换:
    此阶段使用 Yolo v12 检测图像中的 22 个重要关键点。利用检测到的关键点位置,可以估计单应性矩阵(Homography matrix),以移动、旋转和缩放关键点,使其最佳匹配每个关键点的理想位置。理想位置由每个关键点在 0001 类型(原始)图像中的位置给出。所以基本上,这个阶段会自动旋转图像并将关键点放置在尽可能接近正确位置的地方,而不会扭曲图像。由于这是线性变换,它将保留图像中的所有失真。此阶段主要是为了旋转图像并将所有关键点大致放置在正确位置。
    为了训练 Yolo 关键点检测器,基本上,我使用了所有 977 张 0001 类型的图像,并应用了几种增强技术,以模拟尽可能多的图像类型、缩放和旋转。这出乎意料地很好地检测了所有图像类型的关键点。此外,即使未检测到某些关键点,单应性 + warpPerspective 变换仍然效果很好。

  2. 网格校正:
    此阶段的目标是去除图像中的所有空间失真。为了实现这一点,我训练了一个 Unet 多标签分割模型来检测图像中所有 54 条垂直线和 42 条水平线的掩码。每条线都标有索引标签,因此 Unet 预测线号和每条线对应的分割掩码,这使得可以将每个像素映射到原始的、未失真位置。
    在挑战开始时,我使用了一个简单的 2 通道 Unet 分割模型,在一个通道中分割所有垂直线,在另一个通道中分割所有水平线。给定预测掩码,我计算了水平和垂直网格线的所有交点,并根据空间位置进行枚举。这提供了一个网格图,我用它来使用德劳内算法创建三角形,然后将每 3 个点移动到 0001 类型图像的正确位置。
    接近挑战结束时,我投入了一些时间创建了一个更好的校正算法,提出了网格线多标签方法,这将我的公共榜单结果从 18dB 范围提高到了 21dB 范围。

  3. 信号提取:
    每张心电图图像包含 16 个小段,我所做的是将每张完整图像分割成 16 个较小的图像,每个形状为 640x984,并用相应的段名称命名每个图像:I, II, III, avR, avL, V1 等。因此,每张图像生成 16 个新的小段图像,我将它们输入到 Unet 模型中预测心电图信号掩码,然后应用垂直 argmax 提取每个 x 位置最可能的垂直像素位置。使用较小的图像更好地管理训练批量大小,并避免使用极大的图像。

ps. 因为我还在度假,我会定期更新这段文字。

同比赛其他方案