L’Automatic Music Transcription (AMT) consiste nel convertire un segnale audio in note simboliche, in genere in formato MIDI. Sebbene la trascrizione per singoli strumenti funzioni abbastanza bene, trascrivere un mix multistrumentale resta arduo. Per chiudere questa lacuna, Kyutai e il team Mirelo hanno rilasciato MuScriptor, un modello decoder-only basato su Transformers, addestrato su registrazioni multistrumentali di molti generi musicali.
Questo articolo illustra in dettaglio il funzionamento di MuScriptor, i risultati dei test di benchmarking e le istruzioni per utilizzarlo.
Che cos’è MuScriptor?
Al suo cuore, MuScriptor è un Transformer decoder-only progettato specificatamente per la trascrizione musicale. Il modello inizia leggendo un mel-spectrogramma di un breve segmento audio, quindi predice autoregressivamente token MIDI come pitch, timing e strumento. In pratica, la trascrizione diventa un compito di modellazione linguistica, seguendo la tokenizzazione MTP.
Il rilascio include tre varianti dei pesi disponibili su Hugging Face.
- small (103M parametri)
- medium (307M parametri, predefinito)
- large (1.4B parametri)
I codici di inferenza sono distribuiti con licenza MIT, mentre i pesi seguono licenza CC BY-NC 4.0, rendendo l’utilizzo commerciale vietato.
La Pipeline a Tre Fasi
L’idea chiave dietro MuScriptor non è l’architettura ma i dati. L’addestramento procede in tre fasi, ciascuna costruita sulla precedente:
Preliminary Training utilizza DSynth, un set costituito da circa 1,45 milioni di file MIDI. Durante l’addestramento, i dati vengono sintetizzati in tempo reale con modifiche come variazioni di tono, velocità di battuta, intensità e randomizzazione degli strumenti.
Più di 250 soundfonts più detuning casuale generano un'enorme varietà di versioni audio.
Finetuning utilizza DReal, un interno di 170.000 registrazione audio, per un totale di più di 11.000 ore con annotazioni sincronizzate. La sincronizzazione viene ottenuta attraverso metodi di interpolazione e Dynamic Time Warping (DTW). Vengono filtrate le coppie con problemi di sincronia in base alla distanza di DTW e un fattore massimo di dilatazione temporale.
Post-training con Algoritmo Genetico utilizza DRL, 300 tracce verificate a mano. Il team applica un metodo simile a GRPO, combinando REINFORCE con normalizzazione dell’avantage relativo in base al gruppo. La funzione di ricompensa somma tre punteggi F:onset, frame e offset, risultando in una maggiore precisione complessiva.
Prestazioni
Per l’evaluazione, il team ha utilizzato DTest, una serie di 372 tracce con annotazioni precise. I dati mostrano i risultati rispetto al benchmark YourMT3+, utilizzando il modello più grande.
| Modello (DTest) | Onset F1 | Frame F1 | Offset F1 | Drums F1 | Multi F1 |
|---|---|---|---|---|---|
| YourMT3+ (base) | 32.5 | 45.5 | 17.8 | 41.4 | 21.9 |
| MuScriptor · DSynth | 34.5 | 48.9 | 16.1 | 21.0 | 16.2 |
| MuScriptor · DSynth + DReal | 54.4 | 69.3 | 42.3 | 43.3 | 41.6 |
| MuScriptor · DSynth + DReal + DRL | 60.4 | 73.3 | 49.0 | 50.2 | 48.2 |
Ogni fase miglior i risultati, con i dati reali che incidono principalmente. Il modello addestrato solo su dati sintetici mostra un buon frame F1, ma punteggi bassi in onset e Multi. Aggiungendo DReal, i risultati salgono di circa il 20%. Alla fine, la formazione post-training con RL riduce i falsi negativi e migliora la precisione nei punti iniziali.
Test Incrociato su Dataset
I test incrociati seguono la medesima tendenza. Ad esempio, su Dagstuhl ChoirSet, il frame F1 cresce da 51.0 a 80.7. Nonostante ciò, i risultati onset e offset restano bassi per stili complessi come i cori. Questi dati rivelano che MuScriptor si adatta meglio ai brani di tipo più semplice, ma presenta lacune in quelli con dinamicità e strumentali complessi.
Avvio e Utilizzo
L’installazione richiede un unico comando, seguito da streaming diretto degli eventi musicali:
```python
Copy Code
Copied
Use a different Browser
pip install muscriptor # o: uv add muscriptor.
from pathlib import Path
from muscriptor import TranscriptionModel.
model = TranscriptionModel.load_model().
for event in model.transcribe("audio.wav", instruments=["acoustic_piano", "drums"]):
print(event). # Emettici: NoteStartEvent / NoteEndEvent / ProgressEvent.
Path("out.mid").writebytes(model.transcribeto_midi("audio.wav"))
```
Dai modelli rilasciati, mantenersi su un coefficiente cfg_coef a 1, in quanto già addestrati post RL. Inoltre, uvx muscriptor serve avvia un’interfaccia web con live piano roll.
Applicazioni e Uso Pratico
La sua uscita MIDI rende accessibili molteplici workflow:
- I produttori possono estrarre una traccia MIDI della bassline da uno strumento e riaggiornarla in un DAW.
- Gli esperti di musica possono trasformare registrazioni storiche in spart