mir_eval Documentation
repository·main·Indexed 20 days ago
https://github.com/mir-evaluation/mir_evalA Python library for computing common heuristic accuracy scores for music/audio information retrieval (MIR) and signal processing tasks. It provides standardized implementations of MIR metrics, task-specific evaluation functions, preprocessing utilities, and tools for loading data, sonification, and plotting annotations.
What's inside mir_eval
- mir_eval is a Python library designed for computing common heuristic accuracy scores used in music and audio information retrieval (MIR) and signal processing tasks. It provides a standardized implementation of various MIR metrics.
Understand the mir_eval module structure
mainThe
mir_evallibrary is organized into submodules based on MIR tasks. Each task submodule follows a consistent pattern:- Metric Functions: Individual functions for calculating specific metrics.
evaluate()function: A convenience function that returns a dictionary of all metrics implemented for that task.- Preprocessing Functions: Utilities for common data cleaning or preparation steps.
Additional Submodules:
mir_eval.io: Functions for loading task-specific data from common file formats.mir_eval.util: Shared miscellaneous functionality.mir_eval.sonify: Methods for synthesizing annotations for 'evaluation by ear'.mir_eval.display: Functions for plotting annotations.
Evaluate MIR tasks using the evaluate() function
mainFor a quick evaluation of a specific task (like beat tracking), use the
evaluate()function within the task's submodule. This function accepts reference and estimated annotations and returns a dictionary where keys are metric names and values are the calculated scores.Example for beat tracking:
import mir_eval reference_beats = mir_eval.io.load_events('reference_beats.txt') estimated_beats = mir_eval.io.load_events('estimated_beats.txt') scores = mir_eval.beat.evaluate(reference_beats, estimated_beats)import mir_eval reference_beats = mir_eval.io.load_events('reference_beats.txt') estimated_beats = mir_eval.io.load_events('estimated_beats.txt') scores = mir_eval.beat.evaluate(reference_beats, estimated_beats)Install mir_eval and its dependencies
mainmir_eval requiresScipy,Numpy, anddecorator. You can typically install it via PyPI. For detailed installation instructions, refer to the official documentation at https://mir-evaluation.github.io/mir_eval/.Install mir_eval
mainYou can install
mir_evalusingpip,conda, or from source.Using pip:
python -m pip install mir_evalUsing conda (via conda-forge):
conda install -c conda-forge mir_evalFrom source:
python setup.py installpython -m pip install mir_evalUse specific metric functions and preprocessing steps
mainInstead of using the bulk
evaluate()function, you can call specific metric functions and preprocessing utilities directly from the task submodules. This is useful for fine-grained control over your evaluation pipeline.Example of trimming beats and computing a specific F-measure:
import mir_eval reference_beats = mir_eval.io.load_events('reference_beats.txt') estimated_beats = mir_eval.io.load_events('estimated_beats.txt') # Preprocessing: Crop out beats before 5s reference_beats = mir_eval.beat.trim_beats(reference_beats) estimated_beats = mir_eval.beat.trim_beats(estimated_beats) # Compute a specific metric f_measure = mir_eval.beat.f_measure(reference_beats, estimated_beats)import mir_eval reference_beats = mir_eval.io.load_events('reference_beats.txt') estimated_beats = mir_eval.io.load_events('estimated_beats.txt') # Crop out beats before 5s, a common preprocessing step reference_beats = mir_eval.beat.trim_beats(reference_beats) estimated_beats = mir_eval.beat.trim_beats(estimated_beats) # Compute the F-measure metric and store it in f_measure f_measure = mir_eval.beat.f_measure(reference_beats, estimated_beats)