mir_eval Documentation

repository·main·Indexed 20 days ago

https://github.com/mir-evaluation/mir_eval

A 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.

Tokens
962
Snippets
3
Records
6
Agent score
22%

What's inside mir_eval

  1. Overview of mir_eval

    main
    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.
  2. Understand the mir_eval module structure

    main

    The mir_eval library 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.
  3. Evaluate MIR tasks using the evaluate() function

    main

    For 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)
  4. Use specific metric functions and preprocessing steps

    main

    Instead 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)