(Intentar apoyar la generación de audio a audio está en mi lista de TODO, de modo que puede ingresar pistas de música y el LDM ayudará a fusionarlas ~)
¡Configurar es súper fácil! Simplemente siga las instrucciones a continuación:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
Tenemos que admitir que la arquitectura de Unet todavía tiene alguna ventaja de probabilidad en la musicalidad subjetiva, pero esto no se mide en la métrica. Y teníamos algunos modelos que estaban mejores en la métrica o entrenados durante más tiempo, pero observamos que los modelos generalmente se volvieron menos musicales después del entrenamiento demasiado tiempo, por lo que elegimos un modelo que era moderado en la métrica como muestra de código abierto . Si necesita más modelos (búsqueda métrica extrema o búsqueda musicalmente extrema, contácteme)
sin ningún diseño elegante, solo una inyección de calidad, y disfruta de tu hermosa música
Abajo el punto de control principal de nuestro modelo QA-MDT de https://huggingface.co/lichang0928/qa-mdt
Para los usuarios chinos, también puede descargar su punto de control a través del siguiente enlace:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
Este repositorio proporciona una implementación de QA-MDT, que integran modelos de vanguardia para la generación de música. El código y los métodos se basan en los siguientes repositorios:
Python 3.10
qamdt.yamlAntes del entrenamiento, debe descargar CKPTs adicionales necesarios en ./audioldm_train/config/mos_as_token/qa_mdt.yaml y offset_pretherened_checkpoints.json
Señaló que: todos los puntos de control anteriores se pueden descargar desde:
flan-t5-grande
plap_music
Base Roberta
otros
sh run.shNuestro modelo ya está bien pretrionado. Si desea volver a entrenarlo o ajustarlo, puede elegir usar o no usar nuestra estrategia de control de calidad. Ofrecemos varias estrategias de capacitación:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) Para entrenar o ajustar, simplemente cambie "Your_Class" en audioldm_train.modules.diffusionmodules.PixArt.Your_Class en nuestro archivo de configuración.
También puede intentar modificar el tamaño del parche, el tamaño de la superposición para su mejor rendimiento y la compensación de recursos informáticos (consulte nuestro apéndice en el documento ARXIV)
Utilizamos el formato de conjunto de datos LMDB para capacitación. Puede modificar el dataloader de acuerdo con sus propias necesidades de capacitación.
Si desea seguir nuestro proceso (aunque no lo recomendamos, ya que puede ser complejo), así es como puede crear un conjunto de datos LMDB de juguete:
Crear un archivo proto
Primero, cree un archivo llamado datum_all.proto con el siguiente contenido:
syntax = "proto2" ;
message Datum_all {
repeated float wav_file = 1 ;
required string caption_original = 2 ;
repeated string caption_generated = 3 ;
required float mos = 4 ;
}Generar enlaces de pitón
(Su versión de protocas debe ser 3.4, y puede descargarla aquí)
Ejecute el siguiente comando en su terminal para generar enlaces de Python:
protoc --python_out=./ datum_all.protoEsto creará un archivo llamado datum_all_pb2.py . También hemos proporcionado este archivo en nuestra carpeta DataSets, y puede verificar si coincide con el que generó. Nunca intente modificar este archivo, ya que hacerlo podría causar errores.
El siguiente script de Python demuestra cómo preparar su conjunto de datos en el 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 ' )De lo contrario, puede usar el DataLoader en Audioldm
Ingrese su ruta LMDB generada y su ruta de archivo clave correspondiente en la configuración
Comience su entrenamiento
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 Esta es la primera vez que abre el código de este tipo, el código, la organización, el código abierto puede no ser perfecto. Si tiene alguna pregunta sobre nuestro modelo, código y conjuntos de datos, no dude en contactarme a través de enlaces a continuación, y espero tener cualquier sugerencia:
Haré todo lo posible para proporcionar más proyectos sobre música y audio en el futuro ~
Si encuentra útil este proyecto, 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}
}