(Mencoba mendukung generasi audio-to-audio ada dalam daftar TODO saya, sehingga Anda dapat memasukkan trek musik dan LDM akan membantu menggabungkannya ~)
Pengaturan sangat mudah! Ikuti saja instruksi di bawah ini:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
Kita harus mengakui bahwa arsitektur UNET masih memiliki beberapa keunggulan probabilitas dalam musikalitas subyektif, tetapi ini tidak diukur dalam metrik. Dan, kami memang memiliki beberapa model yang lebih baik pada metrik, atau dilatih lebih lama, tetapi kami mengamati bahwa model umumnya menjadi lebih sedikit musikalitas setelah pelatihan terlalu lama, jadi kami memilih model yang moderat pada metrik sebagai sampel open source sampel terbuka . Jika Anda membutuhkan lebih banyak model (pengejaran metrik ekstrem atau pengejaran musik yang ekstrem, silakan hubungi saya)
Tanpa desain mewah, hanya suntikan berkualitas, dan nikmati musik indah Anda
Di bawah pos pemeriksaan utama model QA-MDT kami dari https://huggingface.co/lichang0928/qa-mdt
Untuk pengguna Cina, Anda juga dapat mengunduh pos pemeriksaan melalui tautan berikut:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
Repositori ini menyediakan implementasi QA-MDT, mengintegrasikan model canggih untuk generasi musik. Kode dan metode didasarkan pada repositori berikut:
Python 3.10
qamdt.yamlSebelum pelatihan, Anda perlu mengunduh ckpts tambahan yang diperlukan di ./audioldm_train/config/mos_as_token/qa_mdt.yaml dan offset_pretred_checkpoints.json
Dicatat bahwa: semua pos pemeriksaan di atas dapat diunduh dari:
Flan-T5-Large
clap_music
Roberta-Base
yang lain
sh run.shModel kami sudah diisi dengan baik. Jika Anda ingin melatih kembali atau menyempurnakannya, Anda dapat memilih untuk menggunakan atau tidak menggunakan strategi QA kami. Kami menawarkan beberapa strategi pelatihan:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) Untuk melatih atau menyempurnakan, cukup ubah "Your_Class" di audioldm_train.modules.diffusionmodules.PixArt.Your_Class di file konfigurasi kami.
Anda juga dapat mencoba memodifikasi ukuran tambalan, ukuran tumpang tindih untuk pertukaran sumber daya terbaik dan komputasi Anda (lihat Lampiran kami di Kertas Arxiv)
Kami menggunakan format dataset LMDB untuk pelatihan. Anda dapat memodifikasi Dataloader sesuai dengan kebutuhan pelatihan Anda sendiri.
Jika Anda ingin mengikuti proses kami (meskipun kami tidak merekomendasikannya, karena bisa rumit), inilah cara Anda dapat membuat dataset mainan LMDB:
Buat file proto
Pertama, buat file bernama datum_all.proto dengan konten berikut:
syntax = "proto2" ;
message Datum_all {
repeated float wav_file = 1 ;
required string caption_original = 2 ;
repeated string caption_generated = 3 ;
required float mos = 4 ;
}Menghasilkan binding python
(Versi protoc Anda harus 3.4, dan Anda dapat mengunduhnya di sini)
Jalankan perintah berikut di terminal Anda untuk menghasilkan binding python:
protoc --python_out=./ datum_all.protoIni akan membuat file yang disebut datum_all_pb2.py . Kami juga telah menyediakan file ini di folder Dataset kami, dan Anda dapat memeriksa apakah itu cocok dengan yang Anda hasilkan. Jangan pernah mencoba memodifikasi file ini, karena hal itu dapat menyebabkan kesalahan.
Script Python berikut menunjukkan cara menyiapkan dataset Anda dalam 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 ' )Jika tidak, Anda bisa menggunakan Dataloader di AudiOldm
Masukkan jalur LMDB yang Anda hasilkan dan jalur file kunci yang sesuai ke dalam konfigurasi
Mulailah pelatihan Anda
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 Ini adalah pertama kalinya saya open source proyek seperti itu, kode, organisasi, open source mungkin tidak sempurna. Jika Anda memiliki pertanyaan tentang model, kode, dan set data kami, jangan ragu untuk menghubungi saya melalui tautan di bawah ini, dan saya menantikan saran apa pun:
Saya akan mencoba yang terbaik untuk menyediakan lebih banyak proyek tentang musik dan audio di masa depan ~
Jika Anda menemukan proyek ini bermanfaat, silakan pertimbangkan mengutip:
@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}
}