
? Wir haben das CLMP-Training und den Feinabstimmungscode und die Dokumentation aktualisiert! Kommen Sie und schauen Sie es sich an ~ [2024-11-09]
? Wir haben den Melodyset -Datensatz veröffentlicht. [2024-11-08]
? Wir haben den Musicset -Datensatz veröffentlicht! Komm und probiere es aus ~? [2024-11-05]
→ ← Klicken Sie hier!
→ ← Klicken Sie hier!
→ ← Klicken Sie hier!
→ ← Klicken Sie hier!
Dieses Repository enthält die Implementierung des Musikgenerierungsmodells MG 2 , dem ersten neuartigen Ansatz, der Melody verwendet, um die Musikgenerierung zu leiten, die trotz einer ziemlich einfachen Methode und extrem begrenzten Ressourcen eine hervorragende Leistung erzielt.
Jeder kann dieses Modell verwenden, um personalisierte Hintergrundmusik für seine kurzen Videos auf Plattformen wie Tiktok, YouTube -Shorts und Meta -Rollen zu generieren. Darüber hinaus ist es sehr kostengünstig, das Modell mit Ihrem eigenen privaten Musikdatensatz zu optimieren.
Sie können sich das Einführungsvideo ansehen
→ ← Klicken Sie hier!
→ ← Klicken Sie hier!
Jetzt können Sie die Musikgeneration mit Ihrer eigenen Eingabeaufforderung auf unserer ausprobieren
→ ← Klicken Sie hier!
Tipps : Um hochwertige Musik mit MG 2 zu generieren, möchten Sie detaillierte und beschreibende Aufforderungen erstellen, die einen umfangreichen Kontext und spezifische musikalische Elemente bieten.
Um mit MG 2 zu beginnen, befolgen Sie die folgenden Schritte:
git clone https://github.com/shaopengw/Awesome-Music-Generation.git
cd Awesome-Music-Generation # Create and activate the environment from the provided environment file
conda env create -f environment.yml
conda activate MMGen_quickstart # Ensure that the checkpoints are stored in the following directory structure
Awesome-Music-Generation/
└── data/
└── checkpoints/ # Update the paths to reflect your local environment setup
# Replace:
export PYTHONPATH=/mnt/sda/quick_start_demonstration/Awesome-Music-Generation: $PYTHONPATH
export PYTHONPATH=/mnt/sda/quick_start_demonstration/Awesome-Music-Generation/data: $PYTHONPATH
# With:
export PYTHONPATH=/your/local/path/Awesome-Music-Generation: $PYTHONPATH
export PYTHONPATH=/your/local/path/Awesome-Music-Generation/data: $PYTHONPATHchmod +x quick_start.shbash quick_start.shAwesome-Music-Generation/log/latent_diffusion/quick_start/quick_startWir stellen den neu vorgeschlagenen Musicset-Datensatz mit ungefähr 150.000 hochwertigen 10-Sekunden-Musik-Melody-Text-Paaren vor.
Wir schlagen CLMP (kontrastive Sprachmusik-Vorabbildung) vor, um die Textbeschreibung, Musikwellenform und Melodie vor dem Training des Diffusionsmoduls auszurichten. Wir verwenden den WebDataset als Dataloader für Musikwellenform und Textbeschreibung und verwenden einen anderen Dataloader für Melodie. Der Musiksatz wurde als folgt organisiert, um CLMP zu tranken:
# Ensure that the training data packaged with Webdataset format is orginized as following:
clmp/
└── dataset/
└── MusicSet/
└──train/pretrain0.tar
pretrain1.tar
pretrain2.tar
...
└──valid/
└──test/Die Datensatzstruktur des Diffusionsmoduls lautet wie folgt:
(Angewiesen, dass Sie .flac -Dateien in .wav -Format konvertieren müssen.)
Awesome-Music-Generation/
└── data/
└── dataset/
└── audioset/
└── wav/00040020.wav
00009570.wav
...
└── metadata/dataset_root.json
└── MusicSet/
└── datafiles/train.json
valid.json
test.jsonUnten finden Sie ein Beispiel für dataset_root.json:
{
" MusicSet " : " /mnt/data/wmz/Awesome-Music-Generation/data/dataset/audioset " ,
" comments " : {},
" metadata " : {
" path " : {
" MusicSet " : {
" train " : " ./data/dataset/metadata/MusicSet/datafiles/train.json " ,
" test " : " ./data/dataset/metadata/MusicSet/datafiles/test.json " ,
" val " : " ./data/dataset/metadata/MusicSet/datafiles/valid.json " ,
" class_label_indices " : " "
}
}
}
}Unten finden Sie ein Beispiel für Train.json:
{
" data " : [
{
" wav " : " wav/00040020.wav " ,
" seg_label " : " " ,
" labels " : " " ,
" caption " : " The song starts with the high and fuzzy tone of an alarm bell beeping until a button is pressed, which triggers the grungy sound of an electric guitar being played in a rock style. " , " The beat then counts to four, enhancing the overall rhythm. "
},
{
" wav " : " wav/00009570.wav " ,
" seg_label " : " " ,
" labels " : " " ,
" caption " : " This lively song features a male vocalist singing humorous lyrics over a medium-fast tempo of 106. " , " 0 beats per minute. " , " Accompanied by keyboard harmony, acoustic guitar, steady drumming, and simple bass lines, the catchy tune is easy to sing along with. " , " Set in the key of B major, the chord sequence includes Abm7, F#/G#, and Emaj7. " , " With its spirited and animated feel, this fun track is sure to keep listeners engaged from start to finish. "
}
]
} Wir werden den Melodyset veröffentlichen, der verarbeitete Melodien für Musikcaps und MusicBench enthält. Wir extrahieren die Melodien mit Basic-Pitch und organisieren sie mit Melodie-Tripletts. Melodyset ist eine Teilmenge des Musikset -jede Wellenformdatei .wav hat eine entsprechende Melodie -Datei .txt mit demselben Dateinamen -Präfix. Beispielsweise entspricht 00040020.wav 00040020.txt , und alle Melodien werden in einem einzigen Verzeichnis platziert.
Die Orginisierung von Musikwellenform und Textbeschreibung entspricht dem in Musicset. Daher zeigen wir nur die Datensatzstruktur des Melodie -Teils wie folgt:
your_path/
└── melody_text/00040020.txt
00009570.txtUnten ist ein Beispiel für Melodie, das aus Melodie -Drillingen besteht:
<G4>,<114>,<79>|<A4>,<119>,<81>|<B2>,<159>,<0>|<G4>,<117>,<62>|<A4>,<91>,<77>|<D3>,<202>,<0>|<B4>,<92>,<72>|<A4>,<95>,<77>|<B4>,<98>,<80>|<G3>,<200>,<0>|<A4>,<151>,<30>|<G4>,<95>,<77>|<A4>,<93>,<82>|<F#3>,<146>,<0>|<A2>,<201>,<0>|<G2>,<116>,<117>|<G3>,<149>,<0>|<B2>,<122>,<75>|<D3>,<110>,<77>|<B4>,<206>,<0>|<B4>,<113>,<111>|<B3>,<90>,<95>|<A3>,<110>,<57>|<E5>,<113>,<41>|<G3>,<177>,<0>|<D#5>,<119>,<73>|<B3>,<119>,<32>|<C4>,<108>,<78>|<E5>,<111>,<49>|<F#5>,<117>,<82>|<E5>,<111>,<78>|<F#5>,<114>,<82>|<G3>,<151>,<0>|<G5>,<95>,<73>|<F#5>,<91>,<81>|<G5>,<92>,<78>|<A3>,<143>,<43>|<E4>,<202>,<0>|<F#5>,<152>,<30>|<E5>,<98>,<86>|<D#4>,<139>,<8>|<B3>,<142>,<0>|<F#5>,<94>,<68>|<B3>,<111>,<120>|<G3>,<114>,<84>|<B3>,<118>,<83>|<E3>,<122>,<81>|<G5>,<231>,<0>|<E4>,<234>,<0>|<F#5>,<118>,<63>|<E5>,<114>,<79>|<G3>,<118>,<37>|<D5>,<122>,<76>|<C#5>,<119>,<78>|<E5>,<119>,<77>|<B3>,<100>,<78>|<B4>,<123>,<57>|<E5>,<112>,<71>|<A3>,<209>,<0>|<G5>,<123>,<105>|<A4>,<154>,<0>|<F#5>,<124>,<73>|<A3>,<136>,<22>|<C#4>,<205>,<0>|<E5>,<125>,<28>|<F#5>,<121>,<74>|<A5>,<115>,<72>|<D3>,<144>,<0>|<E3>,<95>,<81>|<E5>,<122>,<62>|<A5>,<115>,<76>|<F#3>,<106>,<84>|<D5>,<117>,<48>|<C5>,<125>,<74>|<D3>,<102>,<74>|<B4>,<120>,<50>|<A4>,<123>,<76>|<B4>,<116>,<80>|<D5>,<117>,<79>|<D4>,<319>,<0>|<A4>,<113>,<65>|<C4>,<114>,<42>|<D5>,<116>,<78>|<B3>,<108>,<84>|<G4>,<114>,<43>Angenommen, Sie haben den Schnellstart-Leitfaden durchgemacht, lassen Sie uns in den Training und den Feinabstimmungsprozess eintauchen!
conda activate MMGen_quickstartDieser Abschnitt deckt den Trainings- und Feinabstimmungsprozess für den CLMP ab.
cd your_path/MMGen_train/modules/clmpBevor Sie das Trainingsskript ausführen, überprüfen und aktualisieren Sie die Pfade in der Awesome-Music-Generation/mmgen_train/modules/clmp/ Training.sh nach Bedarf. Diese Datei enthält die erforderlichen Schulungsdetails.
bash training.shIn ähnlicher Weise werden die Pfade in der Awesome-Music-Generation/mmgen_train/modules/clmp/ fine_tuning.sh überprüft und aktualisiert ), bevor Sie mit Feinabstimmungen fortfahren.
bash fine_tuning.shNach dem CLMP-Modelltraining oder der Feinabstimmung müssen Sie Einbettungen erzeugen und FAISS-Indizes konstruieren, um eine effiziente Ähnlichkeitssuche während der latenten Diffusionstrainingsphase zu ermöglichen. Folgen Sie diesem zweistufigen Prozess:
Generieren Sie CLMP -Einbettungsdings Aktivieren Sie die Einbettungsextraktion, indem Ihre Trainingskonfiguration das folgende Flag hinzufügen:
--collect-audio-melody-feature TrueFühren Sie das Trainings- oder Feinabstimmungsskript mit dieser Flagge aus:
bash training.sh # or fine_tuning.shDas Modell generiert im folgenden Verzeichnis Audio- und Melodie -Feature -Einbettungen:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/clmp_embeddingsKonstrukt FAISS -Indizes navigieren zum Indexierungsverzeichnis und führen Sie das Indexkonstruktionsskript aus:
cd your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing # you should modify the path of embeddings in this script
python build_faiss_indices.py Das Skript erzeugt optimierte FAISS -Indizes in:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/faiss_indicesVor dem Training oder der Finetunierung des Diffusionsmoduls sollten Sie die erforderlichen Dateien vorbereiten und entsprechende Dateipfade in Skripten ersetzen.
Zunächst sollten Sie den Modus festlegen. Im Skript MMGen_train/train/latent_diffusion.py setze bitte nur only_validation = True ; Für Schulungszwecke setzen Sie bitte only_validation = False .
Anschließend sollten Sie die erforderlichen Dateien für die Melodie -Vektor -Datenbank vorbereiten, einschließlich .faiss und .npy , die in SuggingFace zu finden sind. Bitte ersetzen Sie den Pfad von .faiss und .npy in Skript MMGen_train/modules/latent_diffusion/ddpm.py
# change the melody_npy and melody.faiss to the local path
melody_npy = np.load( " MMGen/melody.npy " )
melody_builder = FaissDatasetBuilder(melody_npy)
melody_builder.load_index( " MMGen/melody.faiss " )Danach können Sie den folgenden Befehl ausführen, um von Grund auf zu trainieren:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yamlInformationen zum Schulungsdatensatz finden Sie im Abschnitt "Datensatz"
Sie können auch mit unserem vorgezogenen Modell beenden, der Checkpoint ist mg2-diffusion-checkpoint.ckpt , der hier zu finden ist.
Anschließend können Sie den folgenden Befehl ausführen, um Ihr eigenes Modell zu beenden:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yaml --reload_from_ckpt data/checkpoints/mg2-diffusion-checkpoint.ckptStellte fest, dass Mg 2 für den kommerziellen Gebrauch nicht zulässig ist.
Wir erkennen die Entwickler der folgenden Open-Source-Code-Grundlagen aufrichtig an. Diese Ressourcen sind unschätzbare Funken, die Innovation und Fortschritte in der realen Welt entzünden?!
Die Forschung wird durch das Forschungs- und Entwicklungsprogramm der Schlüsseltechnologien im Rahmen von Grant Nr. 2020YFC0832702 und die National Natural Science Foundation Chinas unter Grant Nr. 71910107002, 62376227, 61906159, 62302400, 62176014 sowie Sichuan -Science- und Technologieprogramm und Technologieprogramm für das Sichuan Science und das Studien- und Technikprogramm, das das Science -Nr. 2023NSFSC0114 und Guanghua Talent Project der Southwestern University of Finance and Economics.
@article { wei2024melodyneedmusicgeneration ,
title = { Melody Is All You Need For Music Generation } ,
author = { Shaopeng Wei and Manzhen Wei and Haoyu Wang and Yu Zhao and Gang Kou } ,
year = { 2024 } ,
eprint = { 2409.20196 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.SD } ,
url = { https://arxiv.org/abs/2409.20196 } ,
}