
? Atualizamos o treinamento e a documentação de treinamento e ajuste fino do CLMP! Venha conferir ~ [2024-11-09]
? Lançamos o conjunto de dados do melodyset. [2024-11-08]
? Lançamos o conjunto de dados do musicset! Venha e experimente ~? [2024-11-05]
→ ← Clique aqui!
→ ← Clique aqui!
→ ← Clique aqui!
→ ← Clique aqui!
Esse repositório contém a implementação do modelo de geração musical MG 2 , a primeira abordagem nova usando a melodia para orientar a geração musical que, apesar de um método bastante simples e recursos extremamente limitados, atinge excelente desempenho.
Qualquer pessoa pode usar esse modelo para gerar músicas de fundo personalizadas para seus vídeos curtos em plataformas como Tiktok, shorts do YouTube e Meta bobinas. Além disso, é muito econômico ajustar o modelo com seu próprio conjunto de dados de música privada.
Você pode assistir ao vídeo de introdução em
→ ← Clique aqui!
→ ← Clique aqui!
Agora você pode experimentar a geração musical com seu próprio prompt em nosso
→ ← Clique aqui!
Dicas : para gerar músicas de alta qualidade usando o MG 2 , você gostaria de criar instruções detalhadas e descritivas que fornecem contexto rico e elementos musicais específicos.
Para começar com o MG 2 , siga as etapas abaixo:
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_startApresentamos o recém-proposto o conjunto de dados do MusicSet, com aproximadamente 150.000 pares de texto musical de alta qualidade de alta qualidade.
Propomos CLMP (pré-treinamento de linguagem-música contrastiva) para alinhar a descrição do texto, a forma de onda musical e a melodia antes do treinamento do módulo de difusão. Utilizamos o WebDataSet como um Dataloader para a Music Waveform e o Text Description, e usamos outro Dataloader para Melody. O musicset foi orginizado como seguindo para a transmissão do 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/A estrutura do conjunto de dados do módulo de difusão é o seguinte:
(Observou que você deve converter arquivos .flac em formato .wav .)
Awesome-Music-Generation/
└── data/
└── dataset/
└── audioset/
└── wav/00040020.wav
00009570.wav
...
└── metadata/dataset_root.json
└── MusicSet/
└── datafiles/train.json
valid.json
test.jsonAbaixo está um exemplo 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 " : " "
}
}
}
}Abaixo está um exemplo 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. "
}
]
} Lançaremos o melodyset, contendo melodias processadas para músicas e música musical. Extraímos as melodias usando o arremesso básico e as organizamos usando trigêmeos de melodia. Melodyset é um subconjunto do musicset cada arquivo de forma de onda .wav possui um arquivo de melodia correspondente .txt com o mesmo prefixo de nome do arquivo. Por exemplo, 00040020.wav corresponde a 00040020.txt , e todas as melodias são colocadas em um único diretório.
A orginização da forma de onda e a descrição do texto é a mesma que no musicset. Assim, mostramos apenas a estrutura do conjunto de dados da parte da melodia como seguinte:
your_path/
└── melody_text/00040020.txt
00009570.txtAbaixo está um exemplo de melodia, que consiste em trigêmeos de melodia:
<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>Supondo que você tenha passado pelo guia de início rápido, vamos mergulhar no processo de treinamento e ajuste fino!
conda activate MMGen_quickstartEsta seção abrange o processo de treinamento e ajuste fino para o CLMP.
cd your_path/MMGen_train/modules/clmpAntes de executar o script de treinamento, revise e atualize ( crucial ) os caminhos em geração de música incrível/mmgen_train/modules/clmp/ treinamento.sh , conforme necessário. Este arquivo contém os detalhes de treinamento necessários.
bash training.shDa mesma forma, revise e atualize ( crucial ) os caminhos em Geração Awesome-Music/mmgen_train/Modules/CLMP/ fine_tuning.sh antes de prosseguir com o ajuste fino.
bash fine_tuning.shApós o treinamento do modelo CLMP ou o ajuste fino, você precisará gerar incorporações e construir índices de FAISS para permitir pesquisas eficientes de similaridade durante a fase de treinamento em difusão latente. Siga este processo de duas etapas:
Gere incorporação de CLMP Habilite a incorporação de extração adicionando o seguinte sinalizador à sua configuração de treinamento:
--collect-audio-melody-feature TrueExecute o script de treinamento ou ajuste fino com esta bandeira:
bash training.sh # or fine_tuning.shO modelo gerará o recurso de áudio e melodia incorporando no diretório a seguir:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/clmp_embeddingsConstruir os índices FAISS navegando até o diretório de indexação e execute o script de construção de í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 O script gerará índices de FAISS otimizados em:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/faiss_indicesAntes do treinamento ou Finetuning do módulo de difusão, você deve preparar os arquivos necessários e substituir os caminhos de arquivo correspondentes nos scripts.
Primeiro, você deve definir o modo. No script MMGen_train/train/latent_diffusion.py , para fins de avaliação, defina only_validation = True ; Para fins de treinamento, defina only_validation = False .
Em seguida, você deve preparar os arquivos necessários para o banco de dados do Melody Vector, incluindo .faiss e .npy , que podem ser encontrados no HuggingFace. Substitua o caminho de .faiss e .npy no 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 " )Depois, você pode executar o seguinte comando para treinar do zero:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yamlEm relação ao conjunto de dados de treinamento, consulte a seção do conjunto de dados
Você também pode finalizar com o nosso modelo pré-terenciado, o ponto de verificação é mg2-diffusion-checkpoint.ckpt , que pode ser encontrado aqui.
Em seguida, você pode executar o seguinte comando para Finetune seu próprio modelo:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yaml --reload_from_ckpt data/checkpoints/mg2-diffusion-checkpoint.ckptObservou que o MG 2 não é permitido para uso comercial.
Agradecemos sinceramente os desenvolvedores das seguintes bases de código de código aberto. Esses recursos são faíscas inestimáveis que acendem a inovação e o progresso no mundo real?!
A pesquisa é apoiada pelo Programa de Pesquisa e Desenvolvimento das Tecnologias -Chave sob a concessão nº 2020YFC0832702 e pela National Natural Science Foundation of China sob a concessão nos. 71910107002, 62376227, 61906159, 62302400, 62176014, e Sichuan Science and Technology Program and Technology Program. 2023NSFSC0114 e Projeto de talentos de Guanghua da Universidade de Finanças e Economia do Sudoeste.
@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 } ,
}