YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Maestro REMI Fine-tuned VA

Este es un modelo GPT-2 fine-tuneado para generación de música simbólica usando la representación REMI (Revamped MIDI-derived events) con conditioning emocional Valencia-Activación (VA).

Modelo en Hugging Face: mmayorga/maestro-remi-finetuned-va

Características Principales

Generación controlada por emociones: El modelo incluye 18 tokens especiales para controlar la valencia (valence) y activación (arousal) de la música generada.

  • Valencia: Dimensión emocional de positivo/negativo (-4 a +4)
  • Activación: Nivel de energía/intensidad de la música (-4 a +4)

Descripción del Modelo

  • Modelo Base: Natooz/Maestro-REMI-bpe20k
  • Arquitectura: GPT2LMHeadModel
  • Dataset: Lakh Piano Dataset con labels VA generados heurísticamente
  • Parámetros:
    • Embedding dimension: 512
    • Attention heads: 8
    • Layers: 12
    • Context length: 2048 tokens
    • Vocabulary size: 20,018 tokens (20,000 base + 18 conditioning tokens)

Entrenamiento

El modelo fue fine-tuneado con los siguientes parámetros:

  • Dataset: Lakh Piano Dataset (4,284 archivos MIDI procesados)
  • Ejemplos de entrenamiento: 12,820
  • Ejemplos de validación: 1,396
  • Épocas: 5
  • Learning rate: 5e-5
  • Train batch size: 4 (por dispositivo)
  • Eval batch size: 4 (por dispositivo)
  • Gradient accumulation steps: 2
  • Precision: FP16

Conditioning Tokens

El modelo incluye 18 tokens especiales para controlar la emoción de la música:

  • Valencia (Valence): 9 tokens [VAL=-4] a [VAL=+4]

    • Valores negativos: música triste, melancólica, menor
    • Valores positivos: música alegre, optimista, mayor
  • Activación (Arousal): 9 tokens [ARO=-4] a [ARO=+4]

    • Valores bajos: música calmada, lenta, suave
    • Valores altos: música energética, rápida, intensa

Token IDs: 20000-20017 (extendido del vocabulario base)

Formato de uso: Los tokens de conditioning se añaden al inicio de la secuencia: [VAL=X] [ARO=Y] <música>

Resultados

  • Train Loss: 0.432
  • Eval Loss: 1.942
  • Perplexity: 6.98
  • Tiempo de entrenamiento: ~97 minutos (1.63 horas en GPU Tesla T4)

Uso

Instalación

pip install transformers torch miditok

Generación de música

from transformers import AutoModelForCausalLM, AutoTokenizer
from miditok import REMI
import torch

# Cargar el modelo y tokenizer
model_name = "mmayorga/maestro-remi-finetuned-va"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Configurar dispositivo
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)

# Generar música con conditioning emocional
# Ejemplo: música alegre (valence +3) y energética (arousal +3)
prompt = "[VAL=+3] [ARO=+3] Bar_None"
input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device)

# Generar tokens
output = model.generate(
    input_ids,
    max_new_tokens=512,
    do_sample=True,
    temperature=2.5,
    top_k=15,
    top_p=0.95,
    pad_token_id=tokenizer.pad_token_id
)

# Decodificar resultado
generated_sequence = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_sequence)

Ejemplos de Conditioning

# Música triste y calmada (balada lenta)
prompt = "[VAL=-3] [ARO=-2] Bar_None"

# Música alegre y energética (pop/rock animado)
prompt = "[VAL=+3] [ARO=+3] Bar_None"

# Música neutral y moderada
prompt = "[VAL=0] [ARO=0] Bar_None"

# Música melancólica pero intensa (drama, tensión)
prompt = "[VAL=-2] [ARO=+2] Bar_None"

# Música tranquila y positiva (ambiente, chill)
prompt = "[VAL=+2] [ARO=-2] Bar_None"

Convertir a MIDI

Para convertir la salida del modelo a un archivo MIDI:

from miditok import REMI
from pathlib import Path

# Inicializar el tokenizer REMI
midi_tokenizer = REMI()

# Decodificar tokens a MIDI
tokens = tokenizer.convert_ids_to_tokens(output[0].tolist())
midi = midi_tokenizer.tokens_to_midi([tokens])

# Guardar archivo MIDI
midi.dump("output.mid")

Parámetros de Generación

Los parámetros recomendados para la generación están configurados en generation_config.json:

  • temperature: 2.5 (mayor creatividad)
  • top_k: 15 (limita a los 15 tokens más probables)
  • top_p: 0.95 (nucleus sampling)
  • max_new_tokens: 512

Puedes ajustar estos parámetros según tus necesidades:

  • Temperatura más baja (1.0-1.5): Generaciones más conservadoras y predecibles
  • Temperatura más alta (2.0-3.0): Generaciones más creativas y variadas
  • top_k más bajo (5-10): Menor diversidad
  • top_k más alto (20-50): Mayor diversidad

Formato REMI

REMI (Revamped MIDI-derived events) es una representación de música simbólica que incluye:

  • Bar: Marcadores de compás
  • Position: Posición dentro del compás
  • Tempo: Cambios de tempo
  • Pitch: Notas musicales
  • Velocity: Intensidad de las notas
  • Duration: Duración de las notas

Esta representación permite una generación más natural y musicalmente coherente.

Dataset

El modelo fue entrenado usando el Lakh Piano Dataset, un subconjunto del Lakh MIDI Dataset enfocado en música de piano:

  • Archivos procesados: 4,284 archivos MIDI
  • Labels VA: Generados heurísticamente a partir de características musicales
    • Tempo → Arousal
    • Velocity media → Arousal
    • Distribución de pitches → Valence
  • Preprocesamiento:
    • Tokenización REMI
    • Normalización de pitches (21-108)
    • Windowing con overlap (1024 tokens, stride 512)
    • Split por archivo (sin data leakage)

Distribución Emocional

El dataset muestra una distribución característica:

  • Valence: Sesgo hacia valores negativos (música contemplativa/melancólica)
  • Arousal: Distribución más uniforme
  • Media de longitud: ~945 tokens por ejemplo

Limitaciones

  • La temperatura alta (2.5) produce resultados variados pero puede generar secuencias menos coherentes
  • El modelo está optimizado para el dominio específico de los datos de entrenamiento (Lakh Piano Dataset)
  • Los labels de Valencia-Activación fueron generados heurísticamente a partir de características musicales (tempo, velocity, pitch), por lo que pueden no reflejar perfectamente la percepción emocional humana
  • La distribución del dataset tiene un sesgo hacia valence negativo (música contemplativa), lo que puede afectar la generación con valores de valencia positiva
  • El modelo está diseñado específicamente para música de piano

Licencia

Por favor, verifica la licencia del modelo base Natooz/Maestro-REMI-bpe20k y del Lakh MIDI Dataset.

Notas Técnicas

  • Conditioning tokens: Los 18 tokens de Valencia-Activación están integrados en el vocabulario del tokenizer (IDs 20000-20017)
  • Compatibilidad: Compatible con el tokenizador base de Maestro-REMI, con extensión para conditioning
  • Reproducibilidad: Seeds fijados para shuffle y generación de labels VA heurísticos
  • Normalización: Los pitches están normalizados al rango 21-108 para evitar tokens fuera de rango

Citas

Si usas este modelo, considera citar el trabajo original de REMI y MidiTok:

@inproceedings{miditok2021,
    title={{MidiTok}: A Python package for {MIDI} file tokenization},
    author={Fradet, Nathan and Briot, Jean-Pierre and Chhel, Fabien and El Fallah Seghrouchni, Amal and Gutowski, Nicolas},
    booktitle={Extended Abstracts for the Late-Breaking Demo Session of the 22nd International Society for Music Information Retrieval Conference},
    year={2021},
    url={https://archives.ismir.net/ismir2021/latebreaking/000005.pdf},
}

@inproceedings{raffel2016lakh,
  title={Learning-Based Methods for Comparing Sequences, with Applications to Audio-to-MIDI Alignment and Matching},
  author={Raffel, Colin},
  year={2016},
  school={Columbia University}
}
Downloads last month
3
Safetensors
Model size
49.1M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support