[ICML 2026] ECG-R1: Protocol-Guided and Modality-Agnostic MLLM for Reliable ECG Interpretation
66
stars
9
commits
Python
primary language
Jun 8, 2026
updated
Jiarui Jin, Haoyu Wang, Xingliang Wu, Xiaocheng Fang, Xiang Lan, Zihan Wang
Deyun Zhang, Bo Liu, Yingying Zhang, Xian Wu, Hongyan Li, Shenda Hong
Electrocardiography (ECG) serves as an indispensable diagnostic tool in clinical practice, yet existing multimodal large language models (MLLMs) remain unreliable for ECG interpretation, often producing plausible but clinically incorrect analyses. To address this, we propose ECG-R1, the first reasoning MLLM designed for reliable ECG interpretation via three innovations. First, we construct the interpretation corpus using Protocol-Guided Instruction Data Generation, grounding interpretation in measurable ECG features and monograph-defined quantitative thresholds and diagnostic logic. Second, we present a modality-decoupled architecture with Interleaved Modality Dropout to improve robustness and cross-modal consistency when either the ECG signal or ECG image is missing. Third, we present Reinforcement Learning with ECG Diagnostic Evidence Rewards to strengthen evidence-grounded ECG interpretation. Additionally, we systematically evaluate the ECG interpretation capabilities of proprietary, open-source, and medical MLLMs, and provide the first quantitative evidence that severe hallucinations are widespread, suggesting that the public should not directly trust these outputs without independent verification. Code and data are publicly available at Github and HuggingFace, and an online platform can be accessed at ECG-R1-Online-Platform.
Stay tuned for updates!
git clone https://github.com/PKUDigitalHealth/ECG-R1
cd ECG-R1
conda create -n ecg_r1 python=3.10 -y
conda activate ecg_r1
pip install -e .
pip install -r requirements.txt
pip install -e ./ecg_r1 # ECG-R1 vLLM support
Please download required data:
ECG:
Images:
After downloading all of them, organize the data as follows in ./data,
├── ecg_timeseries
└── champan-shaoxing
└── code15
└── cpsc2018
└── ptbxl
└── georgia
└── mimic-iv
├── ecg_images
└── cod15_v4
└── csn_aug_all_layout_papersize
└── csn_ori_layout_papersize
└── csn_part_noise_layout_papersize
└── gen_images
└── mimic_gen
└── mimic
└── mimic_v4
└── ptb-xl
├── ecg_bench
├── ptb-test.jsonl
├── cpsc-test.jsonl
├── code15-test.jsonl
├── csn-test-no-cot.jsonl
└── g12-test-no-cot.jsonl
├── ecg_jsons
├── train_set
│ ├── ECG-Protocol-Guided-Grounding-CoT-30k.jsonl
│ ├── ECG-Protocol-Guided-Grounding-CoT-RL-4k.jsonl
│ └── ECGInstruct.jsonl
└── test_set
├── ecg-grounding-test-mimiciv_full.jsonl
├── ecg-grounding-test-mimiciv_ecg_missing25.jsonl
├── ...
├── ecg-grounding-test-mimiciv_image_missing25.jsonl
└── ...
Pretrained ECG Encoder:
cpt_wfep_epoch_20.pt, place it in ecg_coca/open_clip/checkpoint
For SFT training from scratch:
scripts/shells/sft_train.shbash scripts/shells/sft_train.shFor RL training from scratch:
scripts/shells/rl_train_rollout.sh and scripts/shells/rl_train_dapo.shscripts/shells/rl_train_rollout.shscripts/shells/rl_train_dapo.shFor ECG Interpretation:
scripts/shells/inference.shscripts/evaluation/grounded_interpretation/generate_volcengine_evaluation_result_batch.pyscripts/evaluation/grounded_interpretation/compute_metrics.pyFor Modality Missing:
--val_dataset to ecg-grounding-test-mimiciv_ecg_missing100.jsonl in scripts/shells/inference.sh--val_dataset to ecg-grounding-test-mimiciv_image_missing100.jsonl in scripts/shells/inference.shscripts/evaluation/modality_missing/compute_score.pyFor ECGBench:
scripts/ecgbench/extract_img.pyscripts/shells/ecgbench_inference.shecgbench_convert_scripts.shscripts/evaluation/ecgbench/compute_metrics.pyNote
If you find ECG-R1 helpful for your research and applications, please cite our paper:
@misc{jin2026ecgr1,
title={ECG-R1: Protocol-Guided and Modality-Agnostic MLLM for Reliable ECG Interpretation},
author={Jiarui Jin and Haoyu Wang and Xingliang Wu and Xiaocheng Fang and Xiang Lan and Zihan Wang and Deyun Zhang and Bo Liu and Yingying Zhang and Xian Wu and Hongyan Li and Shenda Hong},
year={2026},
eprint={2602.04279},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2602.04279},
}
We thank the authors of PULSE, ECG-Chat, GEM, and Swift for their publicly released models, datasets, and training codes.
9 commits
Python
97.8%
MDX
1.9%
[ICML 2026] ECG-R1: Protocol-Guided and Modality-Agnostic MLLM for Reliable ECG Interpretation
66
stars
9
commits
Python
primary language
Jun 8, 2026
updated
Jiarui Jin, Haoyu Wang, Xingliang Wu, Xiaocheng Fang, Xiang Lan, Zihan Wang
Deyun Zhang, Bo Liu, Yingying Zhang, Xian Wu, Hongyan Li, Shenda Hong
Electrocardiography (ECG) serves as an indispensable diagnostic tool in clinical practice, yet existing multimodal large language models (MLLMs) remain unreliable for ECG interpretation, often producing plausible but clinically incorrect analyses. To address this, we propose ECG-R1, the first reasoning MLLM designed for reliable ECG interpretation via three innovations. First, we construct the interpretation corpus using Protocol-Guided Instruction Data Generation, grounding interpretation in measurable ECG features and monograph-defined quantitative thresholds and diagnostic logic. Second, we present a modality-decoupled architecture with Interleaved Modality Dropout to improve robustness and cross-modal consistency when either the ECG signal or ECG image is missing. Third, we present Reinforcement Learning with ECG Diagnostic Evidence Rewards to strengthen evidence-grounded ECG interpretation. Additionally, we systematically evaluate the ECG interpretation capabilities of proprietary, open-source, and medical MLLMs, and provide the first quantitative evidence that severe hallucinations are widespread, suggesting that the public should not directly trust these outputs without independent verification. Code and data are publicly available at Github and HuggingFace, and an online platform can be accessed at ECG-R1-Online-Platform.
Stay tuned for updates!
git clone https://github.com/PKUDigitalHealth/ECG-R1
cd ECG-R1
conda create -n ecg_r1 python=3.10 -y
conda activate ecg_r1
pip install -e .
pip install -r requirements.txt
pip install -e ./ecg_r1 # ECG-R1 vLLM support
Please download required data:
ECG:
Images:
After downloading all of them, organize the data as follows in ./data,
├── ecg_timeseries
└── champan-shaoxing
└── code15
└── cpsc2018
└── ptbxl
└── georgia
└── mimic-iv
├── ecg_images
└── cod15_v4
└── csn_aug_all_layout_papersize
└── csn_ori_layout_papersize
└── csn_part_noise_layout_papersize
└── gen_images
└── mimic_gen
└── mimic
└── mimic_v4
└── ptb-xl
├── ecg_bench
├── ptb-test.jsonl
├── cpsc-test.jsonl
├── code15-test.jsonl
├── csn-test-no-cot.jsonl
└── g12-test-no-cot.jsonl
├── ecg_jsons
├── train_set
│ ├── ECG-Protocol-Guided-Grounding-CoT-30k.jsonl
│ ├── ECG-Protocol-Guided-Grounding-CoT-RL-4k.jsonl
│ └── ECGInstruct.jsonl
└── test_set
├── ecg-grounding-test-mimiciv_full.jsonl
├── ecg-grounding-test-mimiciv_ecg_missing25.jsonl
├── ...
├── ecg-grounding-test-mimiciv_image_missing25.jsonl
└── ...
Pretrained ECG Encoder:
cpt_wfep_epoch_20.pt, place it in ecg_coca/open_clip/checkpoint
For SFT training from scratch:
scripts/shells/sft_train.shbash scripts/shells/sft_train.shFor RL training from scratch:
scripts/shells/rl_train_rollout.sh and scripts/shells/rl_train_dapo.shscripts/shells/rl_train_rollout.shscripts/shells/rl_train_dapo.shFor ECG Interpretation:
scripts/shells/inference.shscripts/evaluation/grounded_interpretation/generate_volcengine_evaluation_result_batch.pyscripts/evaluation/grounded_interpretation/compute_metrics.pyFor Modality Missing:
--val_dataset to ecg-grounding-test-mimiciv_ecg_missing100.jsonl in scripts/shells/inference.sh--val_dataset to ecg-grounding-test-mimiciv_image_missing100.jsonl in scripts/shells/inference.shscripts/evaluation/modality_missing/compute_score.pyFor ECGBench:
scripts/ecgbench/extract_img.pyscripts/shells/ecgbench_inference.shecgbench_convert_scripts.shscripts/evaluation/ecgbench/compute_metrics.pyNote
If you find ECG-R1 helpful for your research and applications, please cite our paper:
@misc{jin2026ecgr1,
title={ECG-R1: Protocol-Guided and Modality-Agnostic MLLM for Reliable ECG Interpretation},
author={Jiarui Jin and Haoyu Wang and Xingliang Wu and Xiaocheng Fang and Xiang Lan and Zihan Wang and Deyun Zhang and Bo Liu and Yingying Zhang and Xian Wu and Hongyan Li and Shenda Hong},
year={2026},
eprint={2602.04279},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2602.04279},
}
We thank the authors of PULSE, ECG-Chat, GEM, and Swift for their publicly released models, datasets, and training codes.
9 commits
Python
97.8%
MDX
1.9%