(พยายามที่จะสนับสนุนการสร้างเสียงสู่ Audio อยู่ในรายการสิ่งที่ต้องทำของฉันซึ่งคุณสามารถป้อนแทร็กเพลงและ LDM จะช่วยรวมพวกเขา ~)
การตั้งค่าเป็นเรื่องง่ายสุด ๆ ! เพียงทำตามคำแนะนำด้านล่าง:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
เราต้องยอมรับว่าสถาปัตยกรรม UNET ยังคงมีความได้เปรียบบางอย่างในละครเวที แต่ไม่ได้วัดในตัวชี้วัด และเรามีแบบจำลองบางอย่างที่ดีกว่าในการวัดหรือฝึกฝนมานานกว่า แต่เราสังเกตว่าแบบจำลองโดยทั่วไปจะกลายเป็นละครเพลงน้อยลงหลังจากการฝึกซ้อมนานเกินไปดังนั้นเราจึงเลือกแบบจำลองที่อยู่ในระดับปานกลางในการวัดเป็นตัวอย่างโอเพนซอร์ส . หากคุณต้องการแบบจำลองเพิ่มเติม (การติดตามวัดสุดขีดหรือการแสวงหาทางดนตรีสุดขีดโปรดติดต่อฉัน)
โดยไม่มีการออกแบบแฟนซีเพียงแค่ฉีดคุณภาพและเพลิดเพลินกับเพลงที่สวยงามของคุณ
ลงจุดตรวจสอบหลักของรุ่น QA-MDT ของเราจาก https://huggingface.co/lichang0928/qa-mdt
สำหรับผู้ใช้ภาษาจีนคุณสามารถดาวน์โหลดจุดตรวจสอบของคุณผ่านลิงค์ต่อไปนี้:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw?pwd=9nkt
พื้นที่เก็บข้อมูลนี้ให้การใช้งาน QA-MDT ซึ่งเป็นการรวมโมเดลที่ทันสมัยสำหรับการสร้างเพลง รหัสและวิธีการขึ้นอยู่กับที่เก็บต่อไปนี้:
Python 3.10
qamdt.yamlก่อนการฝึกอบรมคุณจะต้องดาวน์โหลด ckpts พิเศษที่จำเป็นใน ./audioldm_train/config/mos_as_token/qa_mdt.yaml และ Offset_pretrained_checkpoints.json
สังเกตว่า: จุดตรวจทั้งหมดข้างต้นสามารถดาวน์โหลดได้จาก:
Flan-T5 ขนาดใหญ่
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)
เราใช้รูปแบบชุดข้อมูล LMDB สำหรับการฝึกอบรม คุณสามารถแก้ไข Dataloader ตามความต้องการการฝึกอบรมของคุณเอง
หากคุณต้องการทำตามกระบวนการของเรา (แม้ว่าเราจะไม่แนะนำเพราะมันซับซ้อน) นี่คือวิธีที่คุณสามารถสร้างชุดข้อมูลของเล่น 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}
}