(Der Versuch, Audio-to-Audio-Generation zu unterstützen, befindet sich in meiner TODO-Liste, sodass Sie Musik-Tracks eingeben können und die LDM sie zusammenführen kann ~).
Das Einrichten ist super einfach! Befolgen Sie einfach die folgenden Anweisungen:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
Wir müssen zugeben, dass die UNET -Architektur immer noch einen gewissen Wahrscheinlichkeitsvorteil in der subjektiven Musikalität hat, dies wird jedoch nicht in der Metrik gemessen. Und wir hatten einige Modelle, die auf der Metrik besser waren oder länger trainiert wurden, aber wir beobachteten, dass die Modelle nach dem Training im Allgemeinen weniger Musikalität wurden . Wenn Sie mehr Modelle benötigen (extreme metrische Verfolgung oder extreme musikalische Verfolgung, kontaktieren Sie mich bitte).
Ohne ausgefallenes Design, nur eine hochwertige Injektion und genießen Sie Ihre schöne Musik
Der Hauptkontrollpunkt unseres QA-Mdt-Modells von https://huggingface.co/lichang0928/qa-mdt
Für chinesische Benutzer können Sie Ihren Checkpoint auch durch den folgenden Link herunterladen:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
Dieses Repository bietet eine Implementierung von QA-MDT, die hochmoderne Modelle für die Musikgenerierung integriert. Der Code und die Methoden basieren auf den folgenden Repositories:
Python 3.10
qamdt.yamlVor dem Training müssen Sie zusätzliche CKPTs herunterladen, die in ./audioldm_train/config/mos_as_token/qa_mdt.yaml und Offset_Petrier_Checkpoints.json benötigt werden
Bezeichneten: Alle oben genannten Kontrollpunkte können heruntergeladen werden von:
Flan-T5-Large
Clap_Music
Roberta-Base
andere
sh run.shUnser Modell ist bereits gut beruhigt. Wenn Sie es übergeben oder fein abteilen möchten, können Sie unsere QA-Strategie verwenden oder nicht verwenden. Wir bieten mehrere Schulungsstrategien an:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) Um zu trainieren oder zu feinstimmen, ändern Sie einfach "Your_Class" in audioldm_train.modules.diffusionmodules.PixArt.Your_Class in unserer Konfigurationsdatei.
Sie können auch versuchen, die Patchgröße, die Überlappungsgröße für Ihre beste Leistung und den Kompromiss für die Computerressourcen zu ändern (siehe unser Anhang in Arxiv Paper).
Wir verwenden das LMDB -Datensatzformat für das Training. Sie können den Dataloader entsprechend Ihren eigenen Trainingsanforderungen ändern.
Wenn Sie unserem Prozess befolgen möchten (obwohl wir ihn nicht empfehlen können, wie es komplex sein kann), können Sie ein Toy LMDB -Datensatz erstellen:
Erstellen Sie eine Proto -Datei
Erstellen Sie zunächst eine Datei namens datum_all.proto mit dem folgenden Inhalt:
syntax = "proto2" ;
message Datum_all {
repeated float wav_file = 1 ;
required string caption_original = 2 ;
repeated string caption_generated = 3 ;
required float mos = 4 ;
}Python -Bindungen erzeugen
(Ihre Protoc -Version sollte 3.4 sein, und Sie können sie hier herunterladen)
Führen Sie den folgenden Befehl in Ihrem Terminal aus, um Python -Bindungen zu erzeugen:
protoc --python_out=./ datum_all.protoDadurch wird eine Datei namens datum_all_pb2.py erstellt. Wir haben diese Datei auch in unserem Datasets -Ordner bereitgestellt und Sie können überprüfen, ob sie dem von Ihnen erzeugten übereinstimmt. Versuchen Sie niemals, diese Datei zu ändern, da dies zu Fehlern führen kann.
Das folgende Python -Skript zeigt, wie Sie Ihren Datensatz im LMDB -Format vorbereiten:
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 ' )Andernfalls können Sie den Dataloader in Audioldm verwenden
Geben Sie Ihren generierten LMDB -Pfad und seinen entsprechenden Schlüsseldateipfad in die Konfiguration ein
Beginnen Sie Ihr Training
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 Dies ist das erste Mal, dass ich ein solches Projekt, den Code, die Organisation, die Open Source möglicherweise nicht perfekt ist. Wenn Sie Fragen zu unserem Modell, Code und Datensätzen haben, können Sie mich über die folgenden Links kontaktieren, und ich freue mich auf alle Vorschläge:
Ich werde mein Bestes geben, um in Zukunft mehr Projekte für Musik und Audio bereitzustellen ~
Wenn Sie dieses Projekt nützlich finden, erwägen Sie bitte:
@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}
}