(Essayer de prendre en charge la génération audio-à-audio est dans ma liste de TODO, de sorte que vous pouvez saisir des pistes musicales et le LDM aidera à les fusionner ~)
La configuration est super facile! Suivez simplement les instructions ci-dessous:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
Nous devons admettre que l'architecture de l'ONE a encore un certain avantage de probabilité dans la musicalité subjective, mais cela n'est pas mesuré dans la métrique. Et, nous avions des modèles qui étaient meilleurs sur la métrique ou formés plus longtemps, mais nous avons observé que les modèles sont généralement devenus moins de musicalité après l'entraînement trop longtemps, nous avons donc choisi un modèle qui était modéré sur la métrique comme échantillon open source . Si vous avez besoin de plus de modèles (poursuite métrique extrême ou poursuite musicale extrême, veuillez me contacter)
Sans aucun design fantaisie, juste une injection de qualité et profitez de votre belle musique
En bas du point de contrôle principal de notre modèle QA-MDT à partir de https://huggingface.co/lichang0928/qa-mdt
Pour les utilisateurs chinois, vous pouvez également télécharger votre point de contrôle via le lien suivant:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
Ce référentiel fournit une implémentation de QA-MDT, intégrant des modèles de pointe pour la génération de musique. Le code et les méthodes sont basés sur les référentiels suivants:
Python 3.10
qamdt.yamlAvant l'entraînement, vous devez télécharger des CKPT supplémentaires nécessaires à ./audioldm_train/config/mos_as_token/qa_mdt.yaml et offset_pretraned_checkpoint.json
A noté que: tous les points de contrôle ci-dessus peuvent être téléchargés à partir de:
Flan-T5
clap_music
Roberta-base
autres
sh run.shNotre modèle est déjà bien suivi. Si vous souhaitez le recycler ou l'affiner, vous pouvez choisir d'utiliser ou de ne pas utiliser notre stratégie QA. Nous proposons plusieurs stratégies de formation:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) Pour s'entraîner ou affiner, modifiez simplement "Your_Class" dans audioldm_train.modules.diffusionmodules.PixArt.Your_Class dans notre fichier de configuration.
Vous pouvez également essayer de modifier la taille du correctif, la taille du chevauchement pour vos meilleures performances et les ressources informatiques élaborez (voir notre annexe dans le papier arxiv)
Nous utilisons le format de jeu de données LMDB pour la formation. Vous pouvez modifier le dataloader en fonction de vos propres besoins de formation.
Si vous souhaitez suivre notre processus (bien que nous ne le recommandez pas, car il peut être complexe), voici comment vous pouvez créer un ensemble de données LMDB jouet:
Créer un fichier Proto
Tout d'abord, créez un fichier nommé datum_all.proto avec le contenu suivant:
syntax = "proto2" ;
message Datum_all {
repeated float wav_file = 1 ;
required string caption_original = 2 ;
repeated string caption_generated = 3 ;
required float mos = 4 ;
}Générer des liaisons python
(Votre version de protoc doit être de 3,4, et vous pouvez le télécharger ici)
Exécutez la commande suivante dans votre terminal pour générer des liaisons Python:
protoc --python_out=./ datum_all.protoCela créera un fichier appelé datum_all_pb2.py . Nous avons également fourni ce fichier dans notre dossier de jeu de données et vous pouvez vérifier s'il correspond à celui que vous avez généré. N'essayez jamais de modifier ce fichier, car cela pourrait entraîner des erreurs.
Le script Python suivant montre comment préparer votre ensemble de données au format 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 ' )Sinon, vous pouvez simplement utiliser le dataloader dans Audioldm
Entrez votre chemin LMDB généré et son chemin de fichier de clé correspondant dans la configuration
Commencez votre formation
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 C'est la première fois que j'oublie un tel projet, le code, l'organisation, l'open source peuvent ne pas être parfaits. Si vous avez des questions sur notre modèle, notre code et nos ensembles de données, n'hésitez pas à me contacter via des liens ci-dessous, et j'attends avec impatience toutes les suggestions:
Je ferai de mon mieux pour fournir plus de projets sur la musique et l'audio à l'avenir ~
Si vous trouvez ce projet utile, veuillez envisager de citer:
@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}
}