Releases: ShaneBreazeale/openstetho
Release list
openstetho v0.4.0-murmur-ensemble — clean 3-seed ensemble (5s)
Clean public-data murmur model upgrade: a 3-seed bagged CNN+BiGRU ensemble (5 s / 78-frame), shipped as one fused Core ML package.
Model: transferred best-F1 0.5972 → 0.6439, OoF AUROC 0.8172 → 0.8415, Platt ECE 0.040 → 0.019 (5-fold patient-level CV, gate-verified). No teacher distillation.
Operating point: Youden default, sensitivity 0.724 / specificity 0.829 (screening-leaning); metadata-tunable.
Asset MurmurCNN.mlpackage.zip bundles:
MurmurCNN.mlpackage— fused 3-model probability-mean ensemble (5 s / 78-frame), sidecarn_frames:78,murmur_threshold:0.535999.S3CNN_v2.mlpackage— unchanged from v0.3.1.
stetho-ui auto-upgrades via /releases/latest/download/; the engine reads window length + threshold from the sidecar metadata.
See PR #1 for the regression-gate harness and full provenance.
openstetho v0.3.1-murmur-bigru — 5s top-k murmur model
Model release
Publishes the current GUI-downloadable model bundle:
MurmurCNN.mlpackage: 5s log-mel CNN+BiGRU murmur detector.MurmurCNN.openstetho.json: app sidecar withn_frames=78,murmur_aggregation=topk_mean,murmur_topk=4, andmurmur_threshold=0.3433690369.S3CNN_v2.mlpackage: bundled sibling S3 detector from the prior release path.
Asset:
MurmurCNN.mlpackage.zip
The app downloader expects that asset name and will discover the bundled sidecar and S3 package after extraction.
Murmur benchmark
Best selected operating point from the held-out validation tuning run:
- Aggregation:
top4_mean - Threshold:
0.343369 - Sensitivity:
0.667 - Specificity:
0.942 - F1:
0.703 - Counts: TP
58, FP20, TN323, FN29
Core ML all-recording benchmark using the baked sidecar rule:
- Recordings:
2964 - AUROC:
0.909 - Sensitivity:
0.749 - Specificity:
0.936 - Precision:
0.749 - F1:
0.749 - Counts: TP
454, FP152, TN2206, FN152
Threshold sweep reference on the same all-recording Core ML benchmark:
- Best F1: threshold
0.384910, sensitivity0.715, specificity0.955, F10.756 - Specificity >= 0.95: threshold
0.377398, sensitivity0.719, specificity0.952, F10.755
Core ML export parity check:
- max absolute logit diff:
7.6e-04
Caveats
This remains an experimental model trained on public CirCor data, not a clinically validated detector. The held-out validation result is the selection metric; the all-recording benchmark is a sanity check for the exported Core ML package and app-side aggregation rule, not an independent clinical estimate.
openstetho v0.3.0-murmur-bigru — CNN+BiGRU murmur model
Model release
Publishes the current GUI-downloadable model bundle:
MurmurCNN.mlpackage: 5s log-mel CNN+BiGRU murmur detector.MurmurCNN.openstetho.json: app sidecar withn_frames=78,murmur_aggregation=topk_mean,murmur_topk=4, andmurmur_threshold=0.3433690369.S3CNN_v2.mlpackage: bundled sibling S3 detector from the prior release path.
Asset:
MurmurCNN.mlpackage.zip
The app downloader expects that asset name and will discover the bundled sidecar and S3 package after extraction.
Murmur benchmark
Best selected operating point from the held-out validation tuning run:
- Aggregation:
top4_mean - Threshold:
0.343369 - Sensitivity:
0.667 - Specificity:
0.942 - F1:
0.703 - Counts: TP
58, FP20, TN323, FN29
Core ML all-recording benchmark using the baked sidecar rule:
- Recordings:
2964 - AUROC:
0.909 - Sensitivity:
0.749 - Specificity:
0.936 - Precision:
0.749 - F1:
0.749 - Counts: TP
454, FP152, TN2206, FN152
Threshold sweep reference on the same all-recording Core ML benchmark:
- Best F1: threshold
0.384910, sensitivity0.715, specificity0.955, F10.756 - Specificity >= 0.95: threshold
0.377398, sensitivity0.719, specificity0.952, F10.755
Core ML export parity check:
- max absolute logit diff:
7.6e-04
Caveats
This remains an experimental model trained on public CirCor data, not a clinically validated detector. The held-out validation result is the selection metric; the all-recording benchmark is a sanity check for the exported Core ML package and app-side aggregation rule, not an independent clinical estimate.
openstetho v0.2.0-s3 — parallel S3 + murmur detection
Adds a synthetic-S3-augmented third-heart-sound (S3) detector that runs
in parallel with the existing MurmurCNN murmur classifier in stetho-ui.
What's in the asset
`MurmurCNN.mlpackage.zip` now bundles two Core ML packages:
- MurmurCNN.mlpackage — unchanged murmur classifier from v0.1.0-circor.
- S3CNN_v2.mlpackage — new S3 detector. ANE-friendly (Conv2D, Conv1D,
BatchNorm, ReLU, AdaptiveAvgPool, Linear). Trained on CirCor 2022 +
PhysioNet/CinC 2016 + PASCAL 2011 with synthetic S3 injection,
HSMM-segmented S2-anchored 1.5 s crops, and S4 confounder negative
mining.
The UI loads both opportunistically — both probabilities render side
by side in the top status bar. Missing S3 file = silent murmur-only mode.
Validation
Real-world held-out tests against three public cardiologist-labeled
auscultation libraries (UW Physical Diagnosis, U Michigan Heart Sound &
Murmur Library, two MEDZCOOL / educational YouTube clips):
- n = 41 clips, 5 S3-positive
- AUROC ≈ 0.97 on the combined real set
- Youden's J max at threshold 0.93 → sensitivity 1.0, specificity 0.92
- Best F1 at threshold 0.99 → sensitivity 0.80, specificity 1.0
See `docs/real_validation_results.md` in the repo for the per-clip
table and operating-threshold discussion. The stetho-ui readout colors
S3 amber 0.50–0.93 and red ≥ 0.93 to reflect the calibrated range.
Important caveats
- Not a clinical device. Educational / research use only.
- Trained on synthetic S3 injection. Cycle-level cardiologist-labeled
ground truth does not exist in our public corpora yet — the annotation
pipeline (`docs/s3_annotation_pipeline.md`) is the next step before
any clinical claim. - Threshold ≠ 0.5. Synthetic-set calibration does not transfer to
real audio. Use 0.93 (high-sensitivity) or 0.99 (high-specificity).
How to upgrade
Existing UI installs will auto-download this bundle on next launch
because the download URL resolves to `/releases/latest/download/MurmurCNN.mlpackage.zip`.
The murmur path is unchanged behaviorally — same model file, same
sliding-window cadence. The S3 readout appears as soon as the S3
`.mlpackage` lands next to the murmur model.
openstetho v0.1.0-circor
Initial Core ML model release. Trained on CirCor 2022 public PCG dataset. Asset: MurmurCNN.mlpackage.zip (zipped Core ML .mlpackage). UI auto-downloads via OPENSTETHO_MODEL_DOWNLOAD_URL default.