(오디오 투-아우 디오 생성을 지원하려는 시도는 내 TODO 목록에 있으며, 음악 트랙을 입력 할 수 있고 LDM이 합병에 도움이 될 것입니다 ~)
설정은 매우 쉽습니다! 아래 지침을 따르십시오.
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
우리는 UNET 아키텍처가 여전히 주관적 음악에 대한 확률 이점이 있음을 인정해야하지만 이는 메트릭에서 측정되지 않습니다. 그리고 우리는 메트릭에서 더 나은 모델이 있거나 더 오래 훈련 된 모델을 가지고 있었지만, 모델이 일반적으로 훈련 후에도 음악이 덜 음악이되었음을 관찰 했으므로 오픈 소스 샘플로서 메트릭에서 중간 정도의 모델을 선택했습니다. . 더 많은 모델이 필요하다면 (극단적 인 메트릭 추구 또는 극단적 인 음악적 추구, 저에게 연락하십시오)
멋진 디자인 없이는 양질의 주입 만 즐기고 아름다운 음악을 즐기십시오.
https://huggingface.co/lichang0928/qa-mdt의 QA-MDT 모델의 메인 체크 포인트 아래
중국 사용자의 경우 다음 링크를 통해 검사 점을 다운로드 할 수도 있습니다.
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
이 저장소는 음악 생성을 위해 최첨단 모델을 통합하는 QA-MDT 구현을 제공합니다. 코드 및 방법은 다음 리포지토리를 기반으로합니다.
Python 3.10
qamdt.yaml교육을 받기 전에 ./audioldm_train/config/mos_as_token/qa_mdt.yaml 및 offset_pretraind_checkpoints.json에 필요한 추가 CKPT를 다운로드해야합니다.
언급 : 위의 모든 체크 포인트는 다음에서 다운로드 할 수 있습니다.
Flan-T5-Large
clap_music
Roberta-Base
기타
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) 훈련 또는 미세 조정하려면 구성 파일의 audioldm_train.modules.diffusionmodules.PixArt.Your_Class 에서 "Your_Class" 변경하십시오.
또한 패치 크기를 수정하고 최상의 성능을 위해 크기 크기를 겹치고 자원을 계산할 수도 있습니다 (Arxiv 용지의 부록 참조).
우리는 교육에 LMDB 데이터 세트 형식을 사용합니다. 자신의 교육 요구에 따라 데이터 로더를 수정할 수 있습니다.
우리의 프로세스를 따르고 싶다면 (복잡 할 수 있으므로 권장하지는 않지만) 장난감 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 ;
}파이썬 바인딩을 생성합니다
(Protoc 버전은 3.4이어야하며 여기에서 다운로드 할 수 있습니다).
파이썬 바인딩을 생성하려면 터미널에서 다음 명령을 실행하십시오.
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 ' )그렇지 않으면 Audioldm에서 Dataloader 만 사용할 수 있습니다
생성 된 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}
}