File size: 3,575 Bytes
60302c0
 
 
 
 
 
 
 
ef850c9
 
 
 
 
bd73ec6
ef850c9
bd73ec6
 
 
ef850c9
 
 
c5c661c
ef850c9
c5c661c
bd73ec6
c5c661c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60302c0
c5c661c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
---
license: apache-2.0
---

# Diagnosis of Acute Coronary Syndrome using ECG waveforms: A machine learning framework and benchmark dataset

Code repository: https://github.com/alexmschubert/ACS-BenchWork

## Project description
In this project, we benchmarked various machine learning (ML) approaches for detecting acute coronary syndrome (ACS) - commonly known as 'heart attack' - from 12-lead ECG waveforms. Our findings reveal that ML models can successfully identify large groups of high-risk patients who show no classical ECG features (e.g., ST-elevation or depression) typically associated with ACS by cardiologists. We are releasing the weights of our best-performing models to facilitate further development in data-driven ACS detection. The training dataset, ACS-BenchWork, is available on [Nightingale Open Science](https://docs.ngsci.org/datasets/ed-bwh-ecg/), and we invite researchers to build on these resources to improve the accuracy and utility of ECG-based ACS screening tools.

## Models

We are releasing the weights for the three best-performing models:

- **S4-ECG:** A Structured State Space model well-suited to ECG waveforms, capturing both local and long-range temporal features for robust ACS detection. Building upon work by [Strodthoff et al.](https://github.com/AI4HealthUOL/ECG-MIMIC).
- **ResNet-18:** A 1D convolutional residual network adapted for ECG data, leveraging skip connections to learn complex patterns without vanishing gradients.
- **HuBERT-ECG:** A transformer-based architecture originally designed for speech recognition, repurposed and fine-tuned on ECG signals for ACS prediction. Based on work by [Coppola et al.](https://github.com/Edoar-do/HuBERT-ECG/tree/master/code).

## Usage

Below are sample snippets for loading each model with its pretrained weights. Once loaded, you can run inference by passing your pre-processed ECG data to the model’s forward method. Please refer to the project’s GitHub repository for end-to-end examples demonstrating how to use these models.

### S4-ECG

```bash
import torch
import lightning.pytorch as pl
from src.lightning import S4Model

def load_from_checkpoint(pl_model, checkpoint_path):
    """ load from checkpoint function that is compatible with S4
    """
    lightning_state_dict = torch.load(checkpoint_path)
    state_dict = lightning_state_dict["state_dict"]
    
    for name, param in pl_model.named_parameters():
        param.data = state_dict[name].data
    for name, param in pl_model.named_buffers():
        param.data = state_dict[name].data

checkpoint_path = "path/to/your/benchmark_acs_state_v0/dmaxlwcg/checkpoints/epoch=49-step=1100.ckpt"

model = S4Model(init_lr=1e-4,
                d_input=3,
                d_output=1)

load_from_checkpoint(model, checkpoint_path)
```

### ResNet-18

```bash
import torch
import lightning.pytorch as pl
from src.lightning import ResNet18_1D

checkpoint_path = "path/to/your/benchmark_acs_resnet18_1d_final_vf/2vud5fft/checkpoints/epoch=37-step=418.ckpt"
model = ResNet18_1D.load_from_checkpoint(checkpoint_path)
```

### HuBERT-ECG

```bash
import torch
from hubert_ecg import HuBERTECG, HuBERTECGConfig
from hubert_ecg_classification import HuBERTForECGClassification

path = "path/to/your/hubert_3_iteration_300_finetuned_simdmsnv.pt"
checkpoint = torch.load(path, map_location='cpu')
config = checkpoint['model_config']
hubert_ecg = HuBERTECG(config)
hubert_ecg = HuBERTForECGClassification(hubert_ecg)
hubert_ecg.load_state_dict(checkpoint['model_state_dict'])
```

## Citation
*Paper currently under review*