Paper to Pulse — v4 reproducibility release

Evidence-aligned source, frozen inference assets, reviewer demo, and verified result artifacts for the V23 ECG image-digitization pipeline accompanying the manuscript Paper to Pulse: Height-Aware Spatiotemporal Architecture with Physics-Informed Refinement for Robust ECG Digitization.

Primary independent result: official private-leaderboard SNR 19.742 dB, rank 24 / 1,425, in the PhysioNet — Digitization of ECG Images challenge (public leaderboard: 20.051 dB, rank 23).

Result hierarchy

Evidence Cohort Result Interpretation
Official private challenge leaderboard hidden challenge test set 19.742 dB; rank 24 / 1,425 Primary independent challenge result
LUDB v1.0.1 external waveforms 200 / 200 records mean record SNR 21.393 dB (95% bootstrap CI 20.854–21.904) Waveform-cohort transfer through the same renderer
ECG-Image-Kit robustness 20 records × 4 profiles; 80 / 80 successful runs clean 23.19, mild 22.35, moderate 21.77, severe 20.35 dB Paired, same-renderer degradation study
Automated interval consistency 190–197 valid pairs, depending on interval HR MAE 0.174 bpm; other MAEs 1.85–10.95 ms Algorithmic consistency only, not clinical validation

Scope of "external." LUDB supplies waveform-disjoint records from a source not listed among the training databases. Those waveforms were rendered through the same ECG-Image-Kit generator used by the imaging pipeline, pinned to commit 27b90f56896c9fc78b05a83ca14844ea2637aa0b. These experiments therefore do not establish cross-generator, scanner, paper-vendor, or acquisition-device generalization.

Quick reviewer demo

Open demo.ipynb in Google Colab or Kaggle and run all cells. It is preconfigured for this repository and downloads the included inference-only V23 export, both rectifier checkpoints, and the public challenge demo assets. A free GPU is sufficient; CPU execution is slower.

The demo assets are for interactive illustration and pipeline checking only. They are not the LUDB external cohort and are not used to substantiate the v4 external, robustness, or interval results.

Frozen model and rectifier assets

The repository includes the assets needed for reviewer inference:

File Bytes SHA-256
v23_paper_to_pulse.pth 365,826,091 2ac8acab2c06644661e7ef93c2304ffa3b3966c2139e4dbbe531238025448b45
rectifier/weight/stage0-last.checkpoint.pth 57,420,817 b7360dfce9c49305b54272cf242e93e5728823f439a8e5ad59c03b073988cfc9
rectifier/weight/stage1-last.checkpoint.pth 97,834,657 313f1e5dafdc212977e4586ce118453866830be0fa32664e36054f7f4568a46a

The archived full competition checkpoint was named v23_epoch038.pth and has SHA-256 e290465929654083db9956bbbfb6886c31a9e0aa6d0fe8bbc150eded397a609e. The smaller file released here is an inference-only export. Its 489-tensor state dictionary is byte-canonically identical to the audited epoch-38 checkpoint; the canonical tensor SHA-256 is c8c7ccfcc542d2d9beef9f9151a33391b1a3e2b5c9aee043cfba013dab0c87fb. See results/weight_manifest.json and docs/PROVENANCE.md.

Frozen medal pipeline

The competition path performs:

  1. Stage-0 orientation correction, with fallback to the input image;
  2. Stage-1 grid rectification, with fallback to the Stage-0 image;
  3. four-row V23 inference with a ConvNeXt-based encoder and DSNT coordinate head;
  4. standard 3 × 4 lead segmentation, using row four as the full Lead-II rhythm strip; and
  5. direct signal export with no smoothing, algebraic lead projection, baseline-offset correction, or short/long Lead-II blend.

The output-free audited Kaggle source is in notebooks/medal_pipeline.ipynb. The simpler repository-native execution path is demo.ipynb.

External LUDB result

The 200-record run used LUDB v1.0.1 (500 Hz, ten-second, 12-lead waveforms), no post-processing, and the competition-aligned metric with up to 0.2 s temporal alignment plus constant-offset alignment.

Metric Result
Successful records 200 / 200
Mean record SNR 21.3927 dB
Median record SNR 22.2024 dB
95% bootstrap CI for mean SNR [20.8542, 21.9037] dB
Pooled SNR 20.3311 dB
Mean PCC 0.99255
Mean NMSE 0.01232

External LUDB performance

Record-level and per-lead artifacts are in results/external/.

Post-processing ablation

All modes were evaluated on the same 200 LUDB records. The frozen no-post path was best; smoothing and the algebraic constraint variants reduced SNR on this cohort.

Mode Mean SNR (dB) Paired change vs no post (dB)
none 21.393 0.000
smooth 19.082 -2.311
partial projection 19.395 -1.997
full projection 19.367 -2.026
Lead-II blend 21.382 -0.011
smooth + projection + blend 17.457 -3.935

This is a component ablation, not a claim that every physiological constraint is harmful in every setting.

Same-renderer robustness

The robustness run used only supported ECG-Image-Kit options at the pinned commit—no separate renderer and no custom image overlay. Twenty paired LUDB records were rendered under four profiles.

Profile Successful runs Mean SNR (dB) Paired change vs clean (dB)
clean 20 / 20 23.19 0.00
mild 20 / 20 22.35 -0.85
moderate 20 / 20 21.77 -1.42
severe 20 / 20 20.35 -2.85

Paired robustness

Exact profile arguments, record-level values, and confidence intervals are in docs/METHODS.md and results/robustness/.

Automated interval consistency

The same NeuroKit2 delineator was applied to native LUDB Lead II and to the digitized Lead II.

Quantity Valid pairs MAE
HR 197 0.174 bpm
RR 197 1.85 ms
QRS 190 7.18 ms
PR 190 9.11 ms
QT 196 10.26 ms
QTc 196 10.95 ms

These values measure automated-analysis consistency. They are not an independent cardiologist reading study, diagnostic-accuracy result, or clinical ground truth for the digitizer. Comparisons with LUDB annotations remain in the released tables so the delineator's own error is visible.

Historical internal aggregate: 23.08 dB

The previously circulated 23.08 dB number is only an internal arithmetic aggregate of 13 listed per-lead values. No released record manifest, record-level predictions, evaluation output, or checkpoint metadata links it to a held-out cohort. It is not treated here as a validation, external-test, or challenge result, and it does not appear in the manuscript.

Note that per-lead averaging is systematically optimistic relative to the record-level metric used by the challenge: on the released LUDB run the mean of the twelve per-lead SNRs is 22.38 dB, against a record-level mean of 21.39 dB.

Verify the released numbers

The artifact checks use only the Python standard library:

python3 scripts/verify_results.py
python3 scripts/render_summary.py

The output-free notebook notebooks/reproduce_results.ipynb runs the same checks interactively. GPU/remote notebooks preserve the exact source used for the reported analyses:

Raw LUDB waveforms, rendered LUDB images, and prediction caches are not redistributed. The remote notebooks obtain the public waveform source at runtime and assert the pinned renderer commit before generation.

Repository contents

demo.ipynb                     repository-native reviewer demo
demo_data/                     public challenge demo assets only
v23_paper_to_pulse.pth         inference-only V23 state export
rectifier/                     Stage-0/Stage-1 source, weights, offline wheel
docs/                          provenance, methods, and limitations
notebooks/                     output-free medal and LUDB analysis notebooks
results/                       verified CSV, JSON, and PNG artifacts
scripts/                       standard-library verification utilities

Data source for external evaluation: LUDB v1.0.1, DOI 10.13026/eegm-h675.

License and provenance notes

The bundled rectifier code and weights derive from a publicly released challenge baseline and retain their upstream terms. The demo assets originate from the public PhysioNet/Kaggle challenge and are provided for reviewer verification. Model weights and repository-authored notebooks are released for research and review. See the upstream sources and challenge terms before redistribution or commercial use.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support