(Tentando oferecer suporte à geração de áudio-audio está na minha lista de tarefas, de modo que você pode inserir faixas musicais e o LDM ajudará a mesclá-las ~)
A configuração é super fácil! Basta seguir as instruções abaixo:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
Temos que admitir que a arquitetura UNET ainda tem alguma vantagem de probabilidade na musicalidade subjetiva, mas isso não é medido na métrica. E, tivemos alguns modelos que eram melhores na métrica ou treinados por mais tempo, mas observamos que os modelos geralmente se tornavam menos musicalidade depois de treinar por muito tempo, então escolhemos um modelo que era moderado na métrica como uma amostra de código aberto . Se você precisar de mais modelos (busca métrica extrema ou extrema busca musicalmente, entre em contato comigo)
Sem nenhum design sofisticado, apenas uma injeção de qualidade e aproveite sua bela música
No ponto de verificação principal do nosso modelo de controle de qualidade de https://huggingface.co/lichang0928/qa-mdt
Para usuários chineses, você também pode baixar seu ponto de verificação no seguinte link:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
Este repositório fornece uma implementação de QA-MDT, integrando modelos de ponta para geração de música. O código e os métodos são baseados nos seguintes repositórios:
Python 3.10
qamdt.yamlAntes do treinamento, você precisa baixar ckpts extras necessários em ./audioldm_train/config/mos_as_token/qa_mdt.yaml e offset_pretring_checkpons.json
Observou que: todos os pontos de verificação acima podem ser baixados de:
Flan-T5-Large
clap_music
Roberta-Base
outros
sh run.shNosso modelo já está bem pré-adquirido. Se você deseja treinar novamente ou ajustá-lo, pode optar por usar ou não usar nossa estratégia de controle de qualidade. Oferecemos várias estratégias de treinamento:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) Para treinar ou ajustar, basta alterar "Your_Class" em audioldm_train.modules.diffusionmodules.PixArt.Your_Class em nosso arquivo de configuração.
Você também pode tentar modificar o tamanho do patch, o tamanho da sobreposição para o seu melhor desempenho e recursos de computação (consulte nosso apêndice em papel Arxiv)
Utilizamos o formato do conjunto de dados LMDB para treinamento. Você pode modificar o Dataloader de acordo com suas próprias necessidades de treinamento.
Se você deseja seguir nosso processo (embora não o recomendemos, pois pode ser complexo), eis como você pode criar um conjunto de dados de brinquedos LMDB:
Crie um arquivo proto
Primeiro, crie um arquivo chamado datum_all.proto com o seguinte conteúdo:
syntax = "proto2" ;
message Datum_all {
repeated float wav_file = 1 ;
required string caption_original = 2 ;
repeated string caption_generated = 3 ;
required float mos = 4 ;
}Gerar ligações de Python
(Sua versão de protocismo deve ser 3.4 e você pode fazer o download aqui)
Execute o seguinte comando em seu terminal para gerar ligações de Python:
protoc --python_out=./ datum_all.protoIsso criará um arquivo chamado datum_all_pb2.py . Também fornecemos esse arquivo em nossa pasta de dados e você pode verificar se ele corresponde ao que você gerou. Nunca tente modificar esse arquivo, pois isso pode causar erros.
O script Python a seguir demonstra como preparar seu conjunto de dados no formato LMDB:
import torch
import os
import lmdb
import time
import numpy as np
import librosa
import os
import soundfile as sf
import io
from datum_all_pb2 import Datum_all as Datum_out
device = 'cpu'
count = 0
total_hours = 0
# Define paths
lmdb_file = '/disk1/changli/toy_lmdb'
toy_path = '/disk1/changli/audioset'
lmdb_key = os . path . join ( lmdb_file , 'data_key.key' )
# Open LMDB environment
env = lmdb . open ( lmdb_file , map_size = 1e12 )
txn = env . begin ( write = True )
final_keys = []
def _resample_load_librosa ( path : str , sample_rate : int , downmix_to_mono : bool , ** kwargs ):
"""Load and resample audio using librosa."""
src , sr = librosa . load ( path , sr = sample_rate , mono = downmix_to_mono , ** kwargs )
return src
start_time = time . time ()
# Walk through the dataset directory
for root , _ , files in os . walk ( toy_path ):
for file in files :
audio_path = os . path . join ( root , file )
key_tmp = audio_path . replace ( '/' , '_' )
audio = _resample_load_librosa ( audio_path , 16000 , True )
# Create a new Datum object
datum = Datum_out ()
datum . wav_file . extend ( audio )
datum . caption_original = 'audio' . encode ()
datum . caption_generated . append ( 'audio' . encode ())
datum . mos = - 1
# Write to LMDB
txn . put ( key_tmp . encode (), datum . SerializeToString ())
final_keys . append ( key_tmp )
count += 1
total_hours += 1.00 / 60 / 10
if count % 1 == 0 :
elapsed_time = time . time () - start_time
print ( f' { count } files written, time: { elapsed_time :.2f } s' )
txn . commit ()
txn = env . begin ( write = True )
# Finalize transaction
try :
total_time = time . time () - start_time
print ( f'Packing completed: { count } files written, total_hours: { total_hours :.2f } , time: { total_time :.2f } s' )
txn . commit ()
except :
pass
env . close ()
# Save the LMDB keys
with open ( lmdb_key , 'w' ) as f :
for key in final_keys :
f . write ( key + ' n ' )Caso contrário, você pode simplesmente usar o Dataloader no Audioldm
Insira seu caminho LMDB gerado e seu caminho de arquivo de chave correspondente na configuração
Comece seu treinamento
sh infer/infer.sh
# you may change the infer.sh for witch quality level you want to infer
# defaultly, it should be set to 5 which represent highest quality
# Additionally, it may be useful to change the prompt with text prefix "high quality",
# which match the training process and may further improve performance É a primeira vez que abro um projeto, o código, a organização, o código aberto pode não ser perfeito. Se você tiver alguma dúvida sobre nosso modelo, código e conjuntos de dados, não hesite em entrar em contato comigo através dos links abaixo e estou ansioso por quaisquer sugestões:
Vou tentar o meu melhor para fornecer mais projetos sobre música e áudio no futuro ~
Se você achar esse projeto útil, considere citar:
@article{li2024quality,
title={Quality-aware Masked Diffusion Transformer for Enhanced Music Generation},
author={Li, Chang and Wang, Ruoyu and Liu, Lijuan and Du, Jun and Sun, Yixuan and Guo, Zilu and Zhang, Zhenrong and Jiang, Yuan},
journal={arXiv preprint arXiv:2405.15863},
year={2024}
}