(Попытка поддержать поколение аудио-ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааафов
Настройка очень просто! Просто следуйте инструкциям ниже:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
Мы должны признать, что у Unet Architecture все еще есть некоторое вероятное преимущество в субъективной музыкальности, но это не измеряется в метрике. И у нас были некоторые модели, которые были лучше на метрике или дольше обучались, но мы наблюдали, что модели обычно стали менее музыкальностью после слишком долгого обучения, поэтому мы выбрали модель, которая была умеренной на метрике в качестве образца с открытым исходным кодом Полем Если вам нужно больше моделей (экстремальное метрическое преследование или экстремальное музыкальное преследование, пожалуйста, свяжитесь со мной)
Без какого -либо причудливого дизайна, просто качественной инъекции и наслаждайтесь своей прекрасной музыкой
Вниз по основной контрольной точке нашей модели QA-MDT от https://huggingface.co/lichang0928/qa-mdt
Для китайских пользователей вы также можете загрузить свою контрольную точку по следующей ссылке:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
Этот репозиторий обеспечивает реализацию QA-MDT, интегрируя современные модели для поколения музыки. Код и методы основаны на следующих репозиториях:
Python 3.10
qamdt.yamlПеред обучением вам нужно загрузить дополнительные CKPT, необходимые в ./audioldm_train/config/mos_as_token/qa_mdt.yaml и offset_pretriend_checkpoints.json
Отмечалось, что: все вышеперечисленные контрольно -пропускные пункты можно скачать с:
Flan-T5-Large
clap_music
Роберта-баз
другие
sh run.shНаша модель уже хорошо представлена. Если вы хотите переучить или точно настроить его, вы можете использовать или не использовать нашу стратегию QA. Мы предлагаем несколько стратегий обучения:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) Чтобы тренировать или настраивать, просто измените "Your_Class" в audioldm_train.modules.diffusionmodules.PixArt.Your_Class в нашем файле конфигурации.
Вы также можете попробовать изменить размер патча, размер перекрытия для лучшей производительности и вычислительных ресурсов обменяться (см. Наше приложение в Arxiv Paper)
Мы используем формат набора данных LMDB для обучения. Вы можете изменить DataLoader в соответствии с вашими собственными потребностями в обучении.
Если вы хотите следовать нашему процессу (хотя мы не рекомендуем его, так как это может быть сложным), вот как вы можете создать набор данных Toy LMDB:
Создать прото -файл
Во -первых, создайте файл с именем datum_all.proto со следующим контентом:
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
(Ваша версия протока должна быть 3.4, и вы можете скачать ее здесь)
Запустите следующую команду в вашем терминале для генерации привязки Python:
protoc --python_out=./ datum_all.protoЭто создаст файл с именем datum_all_pb2.py . Мы также предоставили этот файл в нашей папке наборов данных, и вы можете проверить, соответствует ли он тот, который вы сгенерировали. Никогда не пытайтесь изменить этот файл, так как это может вызвать ошибки.
Следующий скрипт Python демонстрирует, как подготовить ваш набор данных в формате 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 ' )В противном случае вы можете просто использовать DataLoader в Audioldm
Введите свой сгенерированный путь LMDB и его соответствующий путь файла ключа в конфигурацию
Начните свое обучение
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 Это первый раз, когда я открываю такой проект, код, организация, открытый исходный код может быть не идеальным. Если у вас есть какие -либо вопросы о нашей модели, коде и наборах данных, не стесняйтесь обращаться ко мне по ссылкам ниже, и я с нетерпением жду любых предложений:
Я постараюсь предоставить больше проектов по музыке и аудио в будущем ~
Если вы найдете этот проект полезным, рассмотрите возможность ссылаться:
@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}
}