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
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 duplicates
pattern 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.