A Beamspace Echocardiography Dataset for Cardiac Motion, Flow, and Function
EchoXFlow provides echocardiography recordings stored as Croissant metadata and Zarr recording stores.
This repo supports parsing, visualisation and dataloading of time-resolved 1D, 2D, and 3D B-mode and Doppler data.
- Read EchoXFlow data from Croissant metadata and Zarr stores
- Discover recordings directly from metadata
- Load typed streams for imaging, Doppler, and ECG
- Render frames and videos for inspection
- Use scaffolded examples for segmentation and prediction tasks
Task 1: Tissue Velocity
|
Task 2: Blood Flow
|
Task 3: LV Segmentation
|
Download the dataset from:
🤗 https://huggingface.co/datasets/Ahus-AIM/EchoXFlow
Then set the dataset root in src/echoxflow/config/defaults.yml:
data:
root: "/path/to/EchoXFlow"Alternatively, set:
export ECHOXFLOW_DATA_ROOT=/path/to/EchoXFlowGenerate the dataset statistics table with scripts/croissant_summary_table.py:
uv run python scripts/croissant_summary_table.py /path/to/EchoXFlow/croissant.jsonRun the benchmark matrix with scripts/run_full_benchmark.sh:
scripts/run_full_benchmark.sh --data-root /path/to/EchoXFlow --cv --gpus 0,1,2uv venv
uv pip install --editable . --requirement requirements-dev.txtfrom pathlib import Path
from echoxflow import (
find_recordings,
load_croissant,
open_recording,
render_recording_video,
)
catalog = load_croissant("/path/to/EchoXFlow/croissant.json")
records = find_recordings(
croissant=catalog,
array_paths=(
"2d_brightness_mode",
"2d_color_doppler_velocity",
"2d_color_doppler_power",
),
require_all=True,
)
record = records[0]
output = Path("outputs/color_doppler.mp4")
render_recording_video(record, output, view_mode="both")
store = open_recording(record)
power = store.load_stream("2d_color_doppler_power")
print(power.data.shape)uv run pre-commit install
uv run pre-commit run --all-files@misc{stenhede_2026_echoxflow,
title = {EchoXFlow: A Beamspace Echocardiography Dataset for Cardiac Motion, Flow, and Function},
author = {Stenhede, Elias and Sulkowska, Joanna and Orstad, Eivind Bj{\o}rkan and Schirmer, Henrik and Ranjbar, Arian},
year = {2026},
eprint = {2605.05447},
doi = {10.48550/arXiv.2605.05447},
url = {https://arxiv.org/abs/2605.05447}
}