This version introduces the following changes:
- in the frame-based majority metric
mpteval.metrics.majorityadded an additional step to smoothen out spuriously (by majority) introduced note events by thresholding notes to have need a minimal duration of 50ms and merging fragmented notes (reonset within 30ms) into one long note. Also changed the majority voting to be based on dilated (+- 15 frames) roles to consider for timing jitter introduced by transcription.
This version introduces the following changes:
Changed
- preprocessing:
added chordification and time normalisation fns in
mpteval.preprocessing.preprocess - alignment:
- added alignment function and wrapper for parallelized processing to align chordified performances via DTW in
mpteval.alignment.dtw_align - added custom distance metric in
mpteval.alignment.dtw_dist
- added alignment function and wrapper for parallelized processing to align chordified performances via DTW in
- clustering:
- added clustering fns in
mpteval.clustering.clusterto cluster transcriptions of the same piece into different performed structural realisations - added cluster evaluation in
mpteval.clustering.cluster_eval - added grid search for clustering parameters in
mpteval.clustering.cluster_gs
- added clustering fns in
- metrics:
- added majority based metric in
mpteval.metrics.majority: given multiple transcriptions and the source audio file, selects a base transcription by audio duration proximity, removes notes found in only a minority of transcriptions (likely false positives), and inserts notes found in the majority but missing from the base (likely negatives).
- added majority based metric in
- utils:
- added utility fns in
mpteval.utils:MusicEncoder: JSON encoder for numpy typesplot_piano_roll: Visualize piano rollscreate_note_list: Convert note arrays to structured lists with onset, offset, pitch, velocityis_monophonic: Check if a note array is monophonicmidi_to_piano_note: Convert MIDI numbers to human-readable note namesalignment_list_to_df: Convert alignment lists to pandas DataFramesgroup_by_structure: Group performance IDs by structural featurespairwise_distance_matrix: Compute pairwise distance matrices between sequencesaccumulated_cost_matrix: Compute DTW accumulated cost matrixoptimal_warping_path: Extract optimal warping path from accumulated cost matrixdynamic_time_warping: Vanilla dynamic time warping implementationfast_dynamic_time_warping: Fast approximate DTW using fastdtw librarygreedy_note_alignment: Extract note-level alignments from DTW warping pathsnotewise_alignment: Complete note-wise music alignment combining DTW with greedy matching
- added utility fns in
- moved all (global) configs to
config.py - renamed
mpteval.benchmarkstompteval.metrics.objective - use consistent voice separation function in
mpteval.metrics_feature.timingas inmpteval.metrics_feature.articulation
This version was used to measure how variations and shifts in both sound characteristics and musical distribution impact the robustness of several state-of-the-art piano transcription models, as described here. It introduced the following changes:
- added benchmark metrics from mir_eval for standard frame and notewise transcription evaluation, with an added option to compute notewise metrics considering only onset and velocity (ignoring offsets)
- updated partitura dependency to 1.7.0
mpteval.timing.timing_metrics_from_perf()returns only correlation metrics for melody, accompaniment and their ratio, and takes as additional argumentinclude_distanceto specify whether to compute DTW or histogram distance metrics (defaults to None)
- made timing, articulation and dynamics metrics robust to monophonic reference and polyphonic prediction.
This version contains the initial implementation of musically informed evaluation metrics for transcriptions of piano performances as described here. The metrics are defined to measure similarity between a predicted performance and a reference performance in terms of timing, articulation, dynamics, and harmony.