Heart Murmur Detection from Phonocardiogram Recordings: The George B. Moody PhysioNet Challenge 2022
- Knowledge about Heart Murmur
- The Conference
- Final Scores
- Top Team Papers
- Official Phase Leaderboards
- Miscellaneous
- Citation
utils/HeartMurmur.md contains knowledge about heart murmur collected from various sources.
Poster created with baposter using the Overleaf template
Final scores are released in https://physionetchallenges.org/2022/results/ in 5 .tsv files.
These files were gathered in one .xlsx file,
which was uploaded into Google Sheets.
Click to expand!
Final score files would keep on changing for some time as unofficial teams are having their rebuttals against the organizers.
Final score files were frozen from 2022/09/18 (Updated again....).
One can load the 5 tables all at once via
pd.read_excel("./results/final_scores.xlsx", engine="openpyxl", sheet_name=None)One can get a digest of the scores and rankings of all metrics (Weighted Accuracy, Cost, etc.) for the murmur task and the outcome task via
from utils._final_results import get_team_digest
get_team_digest("Revenger", fmt="pd", latest=True) # pandas DataFrame format
get_team_digest("Revenger", fmt="tex", latest=True) # latex format (string)Click to view!
Click to expand!
The leaderboards can be loaded via
# beautifulsoup4 and html5lib required
import pandas as pd
outcome_url = "https://docs.google.com/spreadsheets/u/0/d/e/2PACX-1vRNBATogMRsfio3938bU4r6fcAad85jNzTbSRtRhQ74xHw9shuYoP4uxkK6uKV1zw8CKjPC3AMm33qn/pubhtml/sheet?headers=false&gid=1883863848"
murmur_url = "https://docs.google.com/spreadsheets/u/0/d/e/2PACX-1vRNBATogMRsfio3938bU4r6fcAad85jNzTbSRtRhQ74xHw9shuYoP4uxkK6uKV1zw8CKjPC3AMm33qn/pubhtml/sheet?headers=false&gid=0"
df_outcome = pd.read_html(outcome_url, flavor="bs4", header=[1], index_col=[0])[0].reset_index(drop=True).dropna()
df_outcome.Rank = df_outcome.Rank.astype(int)
# df_outcome.set_index("Rank", inplace=True) # Rank has duplicates
df_murmur = pd.read_html(murmur_url, flavor="bs4", header=[1], index_col=[0])[0].reset_index(drop=True).dropna()
df_murmur.Rank = df_murmur.Rank.astype(int)
# df_murmur.set_index("Rank", inplace=True) # Rank has duplicatespattern for the content of email announcing the submission scores:
from string import punctuation
team_name_pattern = f"""[\\w\\s{punctuation}]+"""
email_pattern = (
f"""We processed an entry from Team (?P<team_name>{team_name_pattern}) """
"""for the Official phase of the George B\\. Moody PhysioNet Challenge 2022\\. """
"""This entry was submitted on (?P<submission_time>[\\d]{1,2}/[\\d]{1,2}/2022 [\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2} ET) """
f"""with ID (?P<submission_id>{team_name_pattern}_[\\d]{{1,5}}_[\\d]{{1,3}})\\.[\\n]+"""
"""We successfully evaluated your entry, which received the score (?P<outcome_cost>[\\d\\.]+) and """
"""(?P<murmur_weighted_accuracy>[\\d\\.]+) using the Challenge evaluation metric on the validation set\\. """
"""This entry was your team's (?P<submission_number>[\\d]{1,2})/10 entry for the Official phase\\."""
)
# usage:
# list(re.finditer(email_pattern, email_content))[0].groupdict()Click to view!
The file test_docker.py along with the docker CI and Test action can almost guarantee that the Challenge submissions won't raise errors, except for CUDA (GPU) errors. For possible CUDA errors, detect with test_local.py.
pcg_springer_features re-implements the feature extraction part of David Springer's logistic regression-HSMM-based reart sound segmentation algorithm.
Inside utils, there's also a copy of pcg_springer_features.
A Docker image was built and pushed to Docker Hub using GitHub Action.
If you find this repository useful for your research, please consider citing the following paper:
@inproceedings{wen_cinc2022,
title = {{Searching for Effective Neural Network Architectures for Heart Murmur Detection from Phonocardiogram}},
author = {WEN, Hao and Kang, Jingsu},
booktitle = {{2022 Computing in Cardiology Conference (CinC)}},
series = {{CinC2022}},
issn = {2325-887X},
doi = {10.22489/cinc.2022.130},
publisher = {{Computing in Cardiology}},
year = {2022},
month = {12},
collection = {{CinC2022}},
location = {Tampere, Finland},
pages = {1-4}
}