(オーディオツーオーディオの生成をサポートしようとすることは私の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_pretrained_checkpoints.jsonに必要な追加のckptsをダウンロードする必要があります
注意してください:上記のすべてのチェックポイントは以下からダウンロードできます。
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)トレーニングまたは微調整するには、 audioldm_train.modules.diffusionmodules.PixArt.Your_Classで"Your_Class"構成ファイルの変更します。
また、パッチサイズ、オーバーラップサイズの最良のパフォーマンス、コンピューティングリソースのトレードオフを変更することもできます(Arxiv Paperの付録を参照)
トレーニングにはLMDBデータセット形式を使用します。あなた自身のトレーニングのニーズに応じてDataloaderを変更できます。
プロセスをフォローしたい場合(複雑になる可能性があるため、お勧めしませんが)、Toy LMDBデータセットを作成する方法は次のとおりです。
protoファイルを作成します
まず、次のコンテンツで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 ' )それ以外の場合は、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}
}