
? ¡Hemos actualizado el código y la documentación de capacitación y ajuste fino de CLMP! Ven a verlo ~ [2024-11-09]
? Hemos lanzado el conjunto de datos Melodyset. [2024-11-08]
? ¡Hemos lanzado el conjunto de datos de Musicset! Ven y prueba ~? [2024-11-05]
→ ← Haga clic aquí!
→ ← Haga clic aquí!
→ ← Haga clic aquí!
→ ← Haga clic aquí!
Este repositorio contiene la implementación del Modelo MG 2 de generación de música, el primer enfoque novedoso que usa Melody para guiar la generación de música que, a pesar de un método bastante simple y recursos extremadamente limitados, logra una excelente actuación.
Cualquiera puede usar este modelo para generar música de fondo personalizada para sus videos cortos en plataformas como Tiktok, Shorts de YouTube y Meta Reels. Además, es muy rentable ajustar el modelo con su propio conjunto de datos de música privada.
Puedes ver el video de introducción en
→ ← Haga clic aquí!
→ ← Haga clic aquí!
Ahora puedes probar la generación musical con tu propio mensaje en nuestro
→ ← Haga clic aquí!
Consejos : para generar música de alta calidad usando MG 2 , desea crear indicaciones detalladas y descriptivas que proporcionen un contexto rico y elementos musicales específicos.
Para comenzar con MG 2 , siga los pasos a continuación:
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_startPresentamos el recién propuesto conjunto de datos de Musics, que presenta aproximadamente 150,000 pares de texto musical de 10 segundos de alta calidad.
Proponemos CLMP (prisión por música de lenguaje contrastante) para alinear la descripción del texto, la forma de onda musical y la melodía antes del módulo de entrenamiento del módulo de difusión. Utilizamos el WebDataSet como DataLoader para la forma de onda de la música y la descripción del texto, y utilizamos otro dataloader para la melodía. La música ha sido orginizada como seguimiento para la transmisión de CLMP:
# 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/La estructura del conjunto de datos del módulo de difusión es la siguiente:
(Notó que debe convertir archivos .flac en formato .wav .)
Awesome-Music-Generation/
└── data/
└── dataset/
└── audioset/
└── wav/00040020.wav
00009570.wav
...
└── metadata/dataset_root.json
└── MusicSet/
└── datafiles/train.json
valid.json
test.jsonA continuación se muestra un ejemplo de 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 " : " "
}
}
}
}A continuación se muestra un ejemplo de 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. "
}
]
} Lanzaremos el Melodyset, que contiene melodías procesadas para MusicCaps y MusicBench. Extraemos las melodías usando Pitch Basic y las organizamos usando trillizos de melodía. Melodyset es un subconjunto de la música cada archivo de forma de onda .wav tiene un archivo de melodía correspondiente .txt con el mismo prefijo de nombre de archivo. Por ejemplo, 00040020.wav corresponde a 00040020.txt , y todas las melodías se colocan en un solo directorio.
La organización de la forma de onda musical y la descripción del texto son las mismas que en las musicales. Por lo tanto, solo mostramos la estructura del conjunto de datos de la parte de la melodía como lo siguiente:
your_path/
└── melody_text/00040020.txt
00009570.txtA continuación se muestra un ejemplo de melodía, que consiste en trillizos de melodía:
<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>Suponiendo que haya pasado por la Guía de inicio rápido, ¡sumamos el proceso de entrenamiento y ajuste!
conda activate MMGen_quickstartEsta sección cubre el proceso de capacitación y ajuste fino para el CLMP.
cd your_path/MMGen_train/modules/clmpAntes de ejecutar el script de capacitación, revise y actualice ( crucial ) las rutas en la impresionante generación de música/mmgen_train/módulos/clmp/ entrenador.sh según sea necesario. Este archivo contiene detalles de capacitación necesarios.
bash training.shDel mismo modo, revise y actualice ( crucial ) las rutas en impresionante-musica-generación/mmgen_train/modules/clmp/ fine_tuning.sh antes de continuar con el ajuste fino.
bash fine_tuning.shDespués de la capacitación del modelo CLMP o el ajuste fino, deberá generar incrustaciones y construir índices FAISS para permitir una búsqueda de similitud eficiente durante la fase de entrenamiento de difusión latente. Siga este proceso de dos pasos:
Genere los incrustaciones de CLMP habiliten la extracción de incrustación agregando el siguiente indicador a su configuración de entrenamiento:
--collect-audio-melody-feature TrueEjecutar el script de entrenamiento o ajuste con esta bandera:
bash training.sh # or fine_tuning.shEl modelo generará incrustaciones de características de audio y melodía en el siguiente directorio:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/clmp_embeddingsConstruya los índices FAISS Navegue al directorio de indexación y ejecute el script de construcción del índice:
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 El script generará índices FAISS optimizados en:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/faiss_indicesAntes de la capacitación o el módulo de difusión del módulo de difusión, debe preparar los archivos requeridos y reemplazar las rutas de archivos correspondientes en los scripts.
Primero, debe configurar el modo. En el script MMGen_train/train/latent_diffusion.py , para fines de evaluación, establezca only_validation = True ; Para fines de entrenamiento, establezca only_validation = False .
Luego, debe preparar los archivos requeridos para la base de datos de vector de melodía, incluidas .faiss y .npy , que se pueden encontrar en Huggingface. Reemplace la ruta de .faiss y .npy en script 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 " )Posteriormente, puede ejecutar el siguiente comando para entrenar desde cero:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yamlCon respecto al conjunto de datos de capacitación, consulte la sección del conjunto de datos
También puede Finetune con nuestro modelo previo a la aparición, el punto de control es mg2-diffusion-checkpoint.ckpt , que se puede encontrar aquí.
Luego, puede ejecutar el siguiente comando para Finetune su propio modelo:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yaml --reload_from_ckpt data/checkpoints/mg2-diffusion-checkpoint.ckptSeñaló que Mg 2 no está permitido para uso comercial.
Reconocemos sinceramente a los desarrolladores de las siguientes bases de código de código abierto. ¡Estos recursos son chispas invaluables que encienden la innovación y el progreso en el mundo real?
La investigación está respaldada por el Programa de Investigación y Desarrollo de Tecnologías clave bajo la subvención No. 2020YFC0832702, y la Fundación Nacional de Ciencias Naturales de China bajo Grant Nos. 71910107002, 62376227, 61906159, 62302400, 62176014 y el Programa de Ciencias y Tecnología de Sichuan bajo el Programa de Beca No. 2023NSFSC0032, 2023NSFSC0114, y el Proyecto de Talento Guanghua de la Universidad Southwestern de Finanzas y Economía.
@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 } ,
}