Buckets:
AudioLDM 2
قُدِّم AudioLDM 2 في AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining بواسطة Haohe Liu وآخرون. يستقبل AudioLDM 2 نصًا كمدخل ويتنبأ بالصوت المقابل. يمكنه توليد مؤثرات صوتية بشرط نصي، وكلام بشري، وموسيقى.
Inspired by Stable Diffusion, AudioLDM 2 is a text-to-audio latent diffusion model (LDM) that learns continuous audio representations from text embeddings. Two text encoder models are used to compute the text embeddings from a prompt input: the text-branch of CLAP and the encoder of Flan-T5. These text embeddings are then projected to a shared embedding space by an AudioLDM2ProjectionModel. A GPT2 language model (LM) is used to auto-regressively predict eight new embedding vectors, conditional on the projected CLAP and Flan-T5 embeddings. The generated embedding vectors and Flan-T5 text embeddings are used as cross-attention conditioning in the LDM. The UNet of AudioLDM 2 is unique in the sense that it takes two cross-attention embeddings, as opposed to one cross-attention conditioning, as in most other LDMs.
ملخص الورقة البحثية هو كالتالي:
على الرغم من أن توليد الصوت يتشارك أوجه تشابه عبر أنواع مختلفة من الصوت، مثل الكلام والموسيقى والمؤثرات الصوتية، فإن تصميم نماذج لكل نوع يتطلب مراعاة دقيقة للأهداف والتحيزات المحددة التي قد تختلف بشكل كبير عن تلك الخاصة بالأنواع الأخرى. ولإقناعنا بمنظور موحّد لتوليد الصوت، تقترح هذه الورقة إطار عمل يستخدم نفس طريقة التعلم لتوليد الكلام والموسيقى والمؤثرات الصوتية. يُقدّم إطار عملنا تمثيلاً عاماً للصوت يُسمى "لغة الصوت" (LOA). يمكن ترجمة أي صوت إلى LOA بناءً على AudioMAE، وهو نموذج تعلّم تمثيلات مُسبق التدريب ذاتي الإشراف. في عملية التوليد، نترجم أي أنماط إلى LOA باستخدام نموذج GPT-2، ونقوم بتعلم توليد الصوت ذاتي الإشراف باستخدام نموذج انتشار كامن مشروط على LOA. يجلب الإطار المقترح مزايا طبيعية مثل قدرات التعلم ضمن السياق، والنماذج المُسبقة التدريب ذاتية الإشراف القابلة لإعادة الاستخدام من AudioMAE ونماذج الانتشار الكامن. تُظهر التجارب على المعايير الرئيسية لتحويل النص إلى صوت، والنص إلى موسيقى، والنص إلى كلام أداءً متقدماً أو تنافسياً مقارنةً بالأساليب السابقة. كودنا، ونموذجنا المُسبق التدريب، وعرضنا التجريبي متاحة في هذا الرابط.
تمت مساهمة خط المعالجة هذا من قِبل sanchit-gandhi و Nguyễn Công Tú Anh. يمكن العثور على قاعدة الكود الأصلية في haoheliu/audioldm2.
نصائح
اختيار نقطة تفتيش
يتوفر AudioLDM2 بثلاثة متغيرات. يمكن تطبيق نقطتي تفتيش من هذه النقاط على المهمة العامة لتوليد الصوت من النص. أما نقطة التفتيش الثالثة فقد تم تدريبها حصريًا على توليد الموسيقى من النص.
تشارك جميع نقاط التفتيش (checkpoints) نفس حجم النموذج لمشفرات النص ووحدة VAE. وتختلف في حجم وعمق UNet. راجع الجدول أدناه للتفاصيل حول نقاط التفتيش الثلاث:
| نقطة التفتيش | المهمة | حجم نموذج UNet | الحجم الكلي للنموذج | بيانات التدريب / ساعة |
|---|---|---|---|---|
| audioldm2 | النص إلى الصوت | 350M | 1.1B | 1150k |
| audioldm2-large | النص إلى الصوت | 750M | 1.5B | 1150k |
| audioldm2-music | النص إلى الموسيقى | 350M | 1.1B | 665k |
| audioldm2-gigaspeech | النص إلى كلام | 350M | 1.1B | 10k |
| audioldm2-ljspeech | النص إلى كلام | 350M | 1.1B |
بناء الاستعلام
- تعمل مدخلات الأوامر الوصفية بشكل أفضل: استخدم الصفات لوصف الصوت (مثل "جودة عالية" أو "واضح") واجعل سياق الأمر محددًا (مثل "جريان الماء في الغابة" بدلاً من "جريان الماء").
- من الأفضل استخدام مصطلحات عامة مثل "cat" أو "dog" بدلاً من أسماء محددة أو كائنات مجردة قد لا يكون النموذج على دراية بها.
- يمكن أن يحسّن استخدام موجّه سلبي بشكل كبير من جودة الموجة الصوتية المولّدة، من خلال توجيه عملية التوليد بعيدًا عن المصطلحات التي تتوافق مع الصوت منخفض الجودة. جرّب استخدام موجّه سلبي هو "Low quality."
التحكم في الاستدلال
- يمكن التحكم في الجودة لعينة الصوت المتوقعة عبر الحجة
num_inference_steps؛ فزيادة عدد الخطوات تمنح صوتاً بجودة أعلى على حساب بطء الاستدلال. - يمكن التحكم في الطول لعينة الصوت المتوقعة عن طريق تغيير الحجة
audio_length_in_s.
تقييم الموجات المولّدة:
- يمكن أن يختلف مستوى جودة الموجات الصوتية المولّدة بشكل كبير اعتمادًا على البذرة (seed). جرّب التوليد ببذور مختلفة حتى تجد نتيجة توليد مرضية.
- يمكن توليد عدة موجات صوتية دفعة واحدة: اضبط
num_waveforms_per_promptعلى قيمة أكبر من 1. سيتم إجراء تقييم تلقائي بين الموجات الصوتية المولّدة ونص الأمر، ثم ترتيب المقاطع الصوتية من الأفضل إلى الأسوأ بناءً على ذلك.
يُظهر المثال التالي كيفية بناء موسيقى وكلام جيدين باستخدام النصائح المذكورة أعلاه: مثال.
تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.
AudioLDM2Pipeline[[diffusers.AudioLDM2Pipeline]]
diffusers.AudioLDM2Pipeline[[diffusers.AudioLDM2Pipeline]]
diffusers.AudioLDM2Pipeline(vae: AutoencoderKL, text_encoder: ClapModel, text_encoder_2: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.vits.modeling_vits.VitsModel, projection_model: AudioLDM2ProjectionModel, language_model: GPT2LMHeadModel, tokenizer: RobertaTokenizer, tokenizer_2: transformers.models.t5.tokenization_t5.T5Tokenizer | transformers.models.vits.tokenization_vits.VitsTokenizer, feature_extractor: ClapFeatureExtractor, unet: AudioLDM2UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, vocoder: SpeechT5HifiGan)
المعاملات:
vae (AutoencoderKL) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
text_encoder (ClapModel) : مُشفِّر النص المجمّد الأول. يستخدم AudioLDM2 نموذج التضمين المشترك للصوت والنص CLAP، وتحديداً النسخة laion/clap-htsat-unfused. يُستخدم فرع النص لتشفير موجه النص إلى تضمين موجه. ويُستخدم نموذج الصوت والنص الكامل لترتيب الموجات الصوتية المولّدة مقابل موجه النص من خلال حساب درجات التشابه.
text_encoder_2 ([~transformers.T5EncoderModel, ~transformers.VitsModel]) : مُشفِّر النص الثاني المُجمَّد. يستخدم AudioLDM2 مُشفِّر T5، وتحديداً النسخة google/flan-t5-large. يُستخدم مُشفِّر النص الثاني المُجمَّد لتوليد الكلام من النص. يستخدم AudioLDM2 مُشفِّر Vits.
projection_model (AudioLDM2ProjectionModel) : نموذج مُدرَّب يُستخدم لإسقاط الحالات المخفية (hidden-states) خطيًا من نموذجَي مُشفِّر النص الأول والثاني، وإدراج تمثيلات رموز SOS وEOS المُتعلَّمة. يتم دمج الحالات المخفية المُسقطة من مُشفِّري النص الاثنين لتكوين مدخل نموذج اللغة. تمثيل موضع مُتعلَّم للحالات المخفية الخاصة بـ Vits
language_model (GPT2Model) : نموذج لغوي ذاتي التوليد يُستخدم لتوليد تسلسل من حالات المخفية (hidden-states) مشروطًا بالمخرجات المُساقطة من مشفري النص.
tokenizer (RobertaTokenizer) : مُجزِّئ (Tokenizer) لتجزئة النص الخاص بمُشفِّر النص الأول المُجمَّد.
tokenizer_2 ([~transformers.T5Tokenizer, ~transformers.VitsTokenizer]) : مُجزِّئ (Tokenizer) لتجزئة النص الخاص بمُشفِّر النص الثاني المُجمَّد.
feature_extractor (ClapFeatureExtractor) : مستخرج ميزات لمعالجة الموجات الصوتية المولّدة مسبقًا وتحويلها إلى طيف لوجاريتمي-ميلي (log-mel spectrogram) من أجل التقييم التلقائي.
unet (UNet2DConditionModel) : نموذج UNet2DConditionModel لإزالة الضوضاء من الكامنات الصوتية المُرمّزة.
scheduler (SchedulerMixin) : مُجدول يُستخدم بالاقتران مع unet لإزالة الضوضاء من الكامنات الصوتية المُرمّزة. يمكن أن يكون أحد DDIMScheduler أو LMSDiscreteScheduler أو PNDMScheduler.
vocoder (SpeechT5HifiGan) : مُولّد صوت من فئة SpeechT5HifiGan لتحويل مُخرجات طيف الميّل إلى موجة الصوت النهائية.
خط أنابيب لتوليد الصوت من النص باستخدام AudioLDM2.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
call[[diffusers.AudioLDM2Pipeline.call]]
__call__(prompt: str | list[str] = None, transcription: str | list[str] = None, audio_length_in_s: float | None = None, num_inference_steps: int = 200, guidance_scale: float = 3.5, negative_prompt: str | list[str] | None = None, num_waveforms_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, generated_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_generated_prompt_embeds: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, negative_attention_mask: typing.Optional[torch.LongTensor] = None, max_new_tokens: int | None = None, return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int | None = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, output_type: str | None = 'np')
المعاملات:
prompt (str أو list[str]، اختياري) : الأمر أو الأوامر الموجِّهة لتوليد الصوت. إذا لم يُعرَّف، يجب عليك تمرير prompt_embeds.
transcription (str أو list[str]، اختياري) -- نصّ النصّ إلى كلام.
audio_length_in_s (int، اختياري، القيمة الافتراضية 10.24) : طول عينة الصوت المولّدة بالثواني.
num_inference_steps (int، اختياري، القيمة الافتراضية 200) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى جودة صوتية أعلى على حساب بطء الاستدلال.
guidance_scale (float، اختياري، القيمة الافتراضية 3.5) : تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صوت مرتبط ارتباطًا وثيقًا بنص prompt على حساب انخفاض جودة الصوت. يتم تفعيل مقياس التوجيه عندما يكون guidance_scale > 1.
negative_prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي توجّه ما يجب عدم تضمينه في توليد الصوت. إذا لم يُعرَّف، يجب عليك تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (guidance_scale < 1).
num_waveforms_per_prompt (int، اختياري، القيمة الافتراضية 1) : عدد الموجات الصوتية التي سيتم توليدها لكل موجه. إذا كان num_waveforms_per_prompt > 1، يتم إجراء تقييم تلقائي بين المخرجات المولّدة والموجه النصي. يقوم هذا التقييم بترتيب الموجات الصوتية المولّدة بناءً على تشابه جيب التمام (cosine similarity) بينها وبين المدخل النصي في فضاء التضمين المشترك للنص والصوت.
eta (float، اختياري، القيمة الافتراضية 0.0) : يتوافق مع المعامل eta (η) من ورقة DDIM. ينطبق فقط على DDIMScheduler، ويُتجاهل في جدولة أخرى.
generator (torch.Generator أو list[torch.Generator]، اختياري) : torch.Generator لجعل التوليد حتميًا.
latents (torch.Tensor، اختياري) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الطيف الصوتي. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كامنات من خلال الاستخراج باستخدام generator العشوائي المُقدَّم.
prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (وزن الأوامر). إذا لم تُقدَّم، يتم توليد تمثيلات النص من معامل الإدخال prompt.
negative_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لضبط مدخلات النص بسهولة (وزن الموجه). إذا لم تُقدَّم، يتم توليد negative_prompt_embeds من معامل الإدخال negative_prompt.
generated_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد التمثيلات النصية من معامل الإدخال prompt.
negative_generated_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية سالبة مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لضبط مدخلات النص بسهولة، مثلًا وزن الأوامر. إذا لم تُقدَّم، فسيتم حساب negative_prompt_embeds من معامل الإدخال negative_prompt.
attention_mask (torch.LongTensor، اختياري) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على prompt_embeds. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال prompt.
negative_attention_mask (torch.LongTensor، اختياري) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على negative_prompt_embeds. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال negative_prompt.
max_new_tokens (int، اختياري، القيمة الافتراضية هي None) : عدد الرموز الجديدة التي سيتم توليدها باستخدام نموذج اللغة GPT2. إذا لم يتم تقديمه، فسيتم أخذ عدد الرموز من إعدادات النموذج.
return_dict (bool، اختياري، القيمة الافتراضية True) : ما إذا كان يجب إرجاع StableDiffusionPipelineOutput بدلاً من tuple عادي.
callback (Callable، اختياري) : دالة تُستدعى كل callback_steps خطوات أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: callback(step: int, timestep: int, latents: torch.Tensor).
callback_steps (int، اختياري، القيمة الافتراضية 1) : التكرار الذي تُستدعى فيه دالة callback. إذا لم يُحدد، تُستدعى الدالة في كل خطوة.
cross_attention_kwargs (dict، اختياري) : قاموس kwargs يُمرَّر إلى AttentionProcessor إذا تم تحديده، كما هو معرّف في self.processor.
output_type (str، اختياري، القيمة الافتراضية "np") : صيغة مخرجات الصوت المولّد. اختر بين "np" لإرجاع مصفوفة NumPy np.ndarray أو "pt" لإرجاع كائن PyTorch torch.Tensor. اضبطه على "latent" لإرجاع مخرجات نموذج الانتشار الكامن (LDM).
يعيد: StableDiffusionPipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد StableDiffusionPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة تحتوي على الصوت المولّد.
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "cvssp/audioldm2"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # define the prompts
>>> prompt = "The sound of a hammer hitting a wooden surface."
>>> negative_prompt = "Low quality."
>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> # run the generation
>>> audio = pipe(
... prompt,
... negative_prompt=negative_prompt,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... num_waveforms_per_prompt=3,
... generator=generator,
... ).audios
>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio[0])
#Using AudioLDM2 for Text To Speech
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "anhnct/audioldm2_gigaspeech"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # define the prompts
>>> prompt = "A female reporter is speaking"
>>> transcript = "wish you have a good day"
>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> # run the generation
>>> audio = pipe(
... prompt,
... transcription=transcript,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... num_waveforms_per_prompt=2,
... generator=generator,
... max_new_tokens=512, #Must set max_new_tokens equa to 512 for TTS
... ).audios
>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("tts.wav", rate=16000, data=audio[0])
enable_model_cpu_offload[[diffusers.AudioLDM2Pipeline.enable_model_cpu_offload]]
enable_model_cpu_offload(gpu_id: int | None = None, device: typing.Union[torch.device, str] = 'cuda')
ينقل جميع النماذج إلى وحدة المعالجة المركزية (CPU) باستخدام accelerate، مما يقلل من استهلاك الذاكرة مع تأثير ضئيل على الأداء. مقارنةً بـ enable_sequential_cpu_offload، تنقل هذه الطريقة نموذجًا كاملًا واحدًا في كل مرة إلى وحدة معالجة الرسوميات (GPU) عند استدعاء طريقة forward الخاصة به، ويبقى النموذج في وحدة معالجة الرسوميات حتى تشغيل النموذج التالي. تكون وفورات الذاكرة أقل مما هي عليه مع enable_sequential_cpu_offload، لكن الأداء يكون أفضل بكثير بسبب التنفيذ التكراري لـ unet.
encode_prompt[[diffusers.AudioLDM2Pipeline.encode_prompt]]
encode_prompt(prompt, device, num_waveforms_per_prompt, do_classifier_free_guidance, transcription = None, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, generated_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_generated_prompt_embeds: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, negative_attention_mask: typing.Optional[torch.LongTensor] = None, max_new_tokens: int | None = None)
المعاملات:
prompt (str أو list[str]، اختياري) : النص الذي سيتم ترميزه
transcription (str أو list[str]) : نصّ يُحوَّل إلى كلام
device (torch.device) : جهاز torch
num_waveforms_per_prompt (int) : عدد الموجات الصوتية التي يجب توليدها لكل موجه
do_classifier_free_guidance (bool) : ما إذا كان سيتم استخدام التوجيه الحر للتصنيف أم لا
negative_prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي لا ينبغي أن توجه توليد الصوت. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يُتجاهل إذا كان guidance_scale أقل من 1).
prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية محسوبة مسبقًا من نموذج Flan T5. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الأوامر. إذا لم تُقدَّم، فسيتم حساب التمثيلات النصية من معامل الإدخال prompt.
negative_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية سالبة محسوبة مسبقًا من نموذج Flan T5. يمكن استخدامها لضبط مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم حساب negative_prompt_embeds من معامل الإدخال negative_prompt.
generated_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد التمثيلات النصية من معامل الإدخال prompt.
negative_generated_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية سالبة مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لضبط مدخلات النص بسهولة، مثلًا وزن الأوامر. إذا لم تُقدَّم، فسيتم حساب negative_prompt_embeds من معامل الإدخال negative_prompt.
attention_mask (torch.LongTensor، اختياري) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على prompt_embeds. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال prompt.
negative_attention_mask (torch.LongTensor، اختياري) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على negative_prompt_embeds. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال negative_prompt.
max_new_tokens (int، اختياري، القيمة الافتراضية هي None) : عدد الرموز الجديدة التي سيتم توليدها باستخدام نموذج اللغة GPT2.
يعيد: prompt_embeds (torch.Tensor)
تضمينات نصية من نموذج Flan T5. attention_mask (torch.LongTensor): قناع الانتباه الذي سيُطبَّق على prompt_embeds. generated_prompt_embeds (torch.Tensor): تضمينات نصية مُولَّدة من نموذج اللغة GPT2.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
مثال:
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "cvssp/audioldm2"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # Get text embedding vectors
>>> prompt_embeds, attention_mask, generated_prompt_embeds = pipe.encode_prompt(
... prompt="Techno music with a strong, upbeat tempo and high melodic riffs",
... device="cuda",
... do_classifier_free_guidance=True,
... )
>>> # Pass text embeddings to pipeline for text-conditional audio generation
>>> audio = pipe(
... prompt_embeds=prompt_embeds,
... attention_mask=attention_mask,
... generated_prompt_embeds=generated_prompt_embeds,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... ).audios[0]
>>> # save generated audio sample
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio)
generate_language_model[[diffusers.AudioLDM2Pipeline.generate_language_model]]
generate_language_model(inputs_embeds: Tensor = None, max_new_tokens: int = 8, **model_kwargs)
المعاملات:
inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)) : التسلسل المستخدم كموجّه (prompt) للتوليد.
max_new_tokens (int) : عدد الرموز الجديدة التي سيتم توليدها.
model_kwargs (dict[str, Any]، اختياري) : تخصيص مؤقت لمعاملات إضافية خاصة بالنموذج سيتم تمريرها إلى دالة forward في النموذج.
يعيد: inputs_embeds (torch.Tensorof shape(batch_size, sequence_length, hidden_size)`)
تسلسل حالات الخفاء المولّدة.
يولّد تسلسلاً من حالات الخفاء من نموذج اللغة، مشروطاً بمدخلات التضمين.
AudioLDM2ProjectionModel[[diffusers.AudioLDM2ProjectionModel]]
diffusers.AudioLDM2ProjectionModel[[diffusers.AudioLDM2ProjectionModel]]
diffusers.AudioLDM2ProjectionModel(text_encoder_dim, text_encoder_1_dim, langauge_model_dim, use_learned_position_embedding = None, max_seq_length = None)
المعاملات:
text_encoder_dim (int) : بُعد تمثيلات النص من مُشفِّر النص الأول (CLAP).
text_encoder_1_dim (int) : بُعد التضمينات النصية من مُشفِّر النص الثاني (T5 أو VITS).
langauge_model_dim (int) : بُعد التضمينات النصية من نموذج اللغة (GPT2).
نموذج إسقاط خطي بسيط لربط تضمينين نصيين بمساحة كامنة مشتركة. كما يقوم بإدراج متجهات تضمين متعلمة في بداية ونهاية كل تسلسل تضمين نصي على التوالي. يشير كل متغير مُضاف إليه _1 إلى المتغير المقابل في مُرمِّز النص الثاني. وإلا فهو من المُرمِّز الأول.
forward[[diffusers.AudioLDM2ProjectionModel.forward]]
forward(hidden_states: typing.Optional[torch.Tensor] = None, hidden_states_1: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, attention_mask_1: typing.Optional[torch.LongTensor] = None)
المعاملات:
hidden_states (torch.Tensor من الشكل (batch_size, sequence_length, text_encoder_dim)، اختياري) : تمثيلات النص من مُشفِّر النص الأول (CLAP).
hidden_states_1 (torch.Tensor من الشكل (batch_size, sequence_length_1, text_encoder_1_dim)، اختياري) : تمثيلات النص من مُشفِّر النص الثاني (T5 أو VITS).
attention_mask (torch.LongTensor من الشكل (batch_size, sequence_length)، اختياري) : قناع الانتباه لـ hidden_states.
attention_mask_1 (torch.LongTensor من الشكل (batch_size, sequence_length_1)، اختياري) : قناع الانتباه لـ hidden_states_1.
يعيد: AudioLDM2ProjectionModelOutput
تضمينات النص المُتوقَّعة لكلا مشفّري النص، مُلحقةً على طول بُعد التسلسل، وقناع الانتباه المُجمَّع لهما.
AudioLDM2UNet2DConditionModel[[diffusers.AudioLDM2UNet2DConditionModel]]
diffusers.AudioLDM2UNet2DConditionModel[[diffusers.AudioLDM2UNet2DConditionModel]]
diffusers.AudioLDM2UNet2DConditionModel(sample_size: int | None = None, in_channels: int = 4, out_channels: int = 4, flip_sin_to_cos: bool = True, freq_shift: int = 0, down_block_types: tuple[str] = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D'), mid_block_type: str = 'UNetMidBlock2DCrossAttn', up_block_types: tuple[str] = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D'), only_cross_attention: bool | tuple[bool] = False, block_out_channels: tuple[int] = (320, 640, 1280, 1280), layers_per_block: int | tuple[int] = 2, downsample_padding: int = 1, mid_block_scale_factor: float = 1, act_fn: str = 'silu', norm_num_groups: int | None = 32, norm_eps: float = 1e-05, cross_attention_dim: int | tuple[int] = 1280, transformer_layers_per_block: int | tuple[int] = 1, attention_head_dim: int | tuple[int] = 8, num_attention_heads: int | tuple[int] | None = None, use_linear_projection: bool = False, class_embed_type: str | None = None, num_class_embeds: int | None = None, upcast_attention: bool = False, resnet_time_scale_shift: str = 'default', time_embedding_type: str = 'positional', time_embedding_dim: int | None = None, time_embedding_act_fn: str | None = None, timestep_post_act: str | None = None, time_cond_proj_dim: int | None = None, conv_in_kernel: int = 3, conv_out_kernel: int = 3, projection_class_embeddings_input_dim: int | None = None, class_embeddings_concat: bool = False)
المعاملات:
sample_size (int أو tuple[int, int]، اختياري، القيمة الافتراضية None) : ارتفاع وعينة الإدخال/الإخراج.
in_channels (int، اختياري، القيمة الافتراضية 4) : عدد القنوات في العينة المدخلة.
out_channels (int، اختياري، القيمة الافتراضية 4) : عدد القنوات في المخرجات.
flip_sin_to_cos (bool، اختياري، القيمة الافتراضية False) : ما إذا كان يجب عكس sin إلى cos في تضمين الوقت.
freq_shift (int، اختياري، القيمة الافتراضية 0) : إزاحة التردد التي تُطبَّق على تضمين الوقت.
down_block_types (tuple[str]، اختياري، القيمة الافتراضية ("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) : مجموعة (tuple) من كتل التقليل (downsample blocks) التي سيتم استخدامها.
mid_block_type (str، اختياري، القيمة الافتراضية "UNetMidBlock2DCrossAttn") : نوع الكتلة في منتصف UNet، حيث يمكن أن يكون UNetMidBlock2DCrossAttn فقط في AudioLDM2.
up_block_types (tuple[str]، اختياري، القيمة الافتراضية ("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) : مجموعة (tuple) من كتل التوسيع (upsample blocks) التي سيتم استخدامها.
only_cross_attention (bool أو tuple[bool]، اختياري، الافتراضي False) : ما إذا كان يجب تضمين الانتباه الذاتي في كتل التحوّل الأساسية، راجع BasicTransformerBlock.
block_out_channels (tuple[int]، اختياري، القيمة الافتراضية هي (320, 640, 1280, 1280)) : مجموعة من القيم تمثل عدد قنوات الإخراج لكل كتلة.
layers_per_block (int، اختياري، القيمة الافتراضية 2) : عدد الطبقات في كل كتلة.
downsample_padding (int، اختياري، القيمة الافتراضية 1) : الحشو المستخدم لفولتير التجميع (downsampling convolution).
mid_block_scale_factor (float، اختياري، القيمة الافتراضية 1.0) : معامل المقياس المستخدم للكتلة الوسطى.
act_fn (str، اختياري، القيمة الافتراضية "silu") : دالة التنشيط المستخدمة.
norm_num_groups (int، اختياري، القيمة الافتراضية 32) : عدد المجموعات المستخدمة للتطبيع. إذا كانت None، يتم تجاوز طبقات التطبيع والتفعيل في المعالجة اللاحقة.
norm_eps (float، اختياري، القيمة الافتراضية 1e-5) : قيمة الإيبسلون المستخدمة في عملية التطبيع.
cross_attention_dim (int أو tuple[int]، اختياري، القيمة الافتراضية 1280) : بُعد ميزات الانتباه المتقاطع.
transformer_layers_per_block (int أو tuple[int]، اختياري، القيمة الافتراضية 1) : عدد كتل التحويل من النوع BasicTransformerBlock. لا ينطبق إلا على ~models.unet_2d_blocks.CrossAttnDownBlock2D، ~models.unet_2d_blocks.CrossAttnUpBlock2D، ~models.unet_2d_blocks.UNetMidBlock2DCrossAttn.
attention_head_dim (int، اختياري، القيمة الافتراضية 8) : بُعد رؤوس الانتباه.
num_attention_heads (int، اختياري) : عدد رؤوس الانتباه. إذا لم يُعرَّف، يكون الافتراضي attention_head_dim
resnet_time_scale_shift (str، اختياري، القيمة الافتراضية "default") : إعدادات إزاحة مقياس الوقت لكتل ResNet (انظر ResnetBlock2D). اختر من بين default أو scale_shift.
class_embed_type (str، اختياري، القيمة الافتراضية None) : نوع تضمين الفئة المستخدم، والذي يُجمع في النهاية مع تضمينات الوقت. اختر من بين None، "timestep"، "identity"، "projection"، أو "simple_projection".
num_class_embeds (int، اختياري، القيمة الافتراضية None) : بُعد المدخلات لمصفوفة التضمين القابلة للتعلم التي سيتم إسقاطها إلى time_embed_dim، عند تنفيذ التكييف حسب الفئة مع أن class_embed_type يساوي None.
time_embedding_type (str، اختياري، الافتراضي positional) : نوع تضمين الموضع المستخدم لخطوات الزمن. اختر من بين positional أو fourier.
time_embedding_dim (int، اختياري، القيمة الافتراضية None) : تجاوز اختياري لأبعاد تضمين الوقت المُسقَط.
time_embedding_act_fn (str، اختياري، القيمة الافتراضية None) : دالة تفعيل اختيارية تُستخدم مرة واحدة فقط على تضمينات الوقت قبل تمريرها إلى بقية UNet. اختر من بين silu، mish، gelu، وswish.
timestep_post_act (str، اختياري، القيمة الافتراضية None) : دالة التنشيط الثانية المستخدمة في تضمين خطوة الزمن. اختر من بين silu وmish وgelu.
time_cond_proj_dim (int، اختياري، القيمة الافتراضية None) : بُعد طبقة cond_proj في تضمين خطوة الزمن.
conv_in_kernel (int، اختياري، الافتراضي 3) : حجم النواة لطبقة conv_in.
conv_out_kernel (int، اختياري، الافتراضي 3) : حجم النواة لطبقة conv_out.
projection_class_embeddings_input_dim (int, اختياري) : بُعد مدخل class_labels عندما يكون class_embed_type="projection". مطلوب عندما يكون class_embed_type="projection".
class_embeddings_concat (bool، اختياري، الافتراضي False) : ما إذا كان يجب دمج تضمينات الوقت مع تضمينات الفئة.
نموذج UNet ثنائي الأبعاد مشروط يستقبل عينة ضجيجية، وحالة شرطية، وخطوة زمنية، ويعيد إخراجًا على شكل العينة. مقارنةً بنموذج UNet2DConditionModel الأساسي، يتضمن هذا المتغير اختياريًا طبقة انتباه ذاتي إضافية في كل كتلة Transformer، بالإضافة إلى طبقات انتباه متقاطعة متعددة. كما يسمح حتى بطبقتي تضمين انتباه متقاطع، وهما encoder_hidden_states وencoder_hidden_states_1.
يرث هذا النموذج من ModelMixin. راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).
forward[[diffusers.AudioLDM2UNet2DConditionModel.forward]]
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], encoder_hidden_states: Tensor, class_labels: typing.Optional[torch.Tensor] = None, timestep_cond: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True, encoder_hidden_states_1: typing.Optional[torch.Tensor] = None, encoder_attention_mask_1: typing.Optional[torch.Tensor] = None)
المعاملات:
sample (torch.Tensor) : المصفوفة المدخلة الضوضائية ذات الشكل التالي (batch, channel, height, width).
timestep (torch.Tensor أو float أو int) : عدد خطوات الزمن لإزالة الضوضاء من مدخل.
encoder_hidden_states (torch.Tensor) : حالات المُشفِّر المخفية (encoder hidden states) ذات الشكل (batch, sequence_length, feature_dim).
encoder_attention_mask (torch.Tensor) : يُطبَّق قناع الانتباه المتقاطع (cross-attention mask) ذو الشكل (batch, sequence_length) على encoder_hidden_states. إذا كان True يُحفظ القناع، وإلا إذا كان False يُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز "الاستبعاد".
return_dict (bool، اختياري، القيمة الافتراضية True) : ما إذا كان يجب إرجاع UNet2DConditionOutput بدلاً من tuple عادي.
cross_attention_kwargs (dict، اختياري) : قاموس kwargs يُمرَّر إلى AttnProcessor إذا تم تحديده.
encoder_hidden_states_1 (torch.Tensor، اختياري) : مجموعة ثانية من حالات المُشفِّر المخفية (encoder hidden states) ذات الشكل (batch, sequence_length_2, feature_dim_2). يمكن استخدامها لتكييف النموذج على مجموعة مختلفة من التضمينات (embeddings) عن encoder_hidden_states.
encoder_attention_mask_1 (torch.Tensor, اختياري) : يُطبَّق قناع الانتباه المتقاطع (cross-attention mask) ذو الشكل (batch, sequence_length_2) على encoder_hidden_states_1. إذا كان True يُحافظ على القناع، وإلا إذا كان False يُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز "الاستبعاد".
يعيد: UNet2DConditionOutput أو tuple
إذا كان return_dict صحيحًا، يُعاد UNet2DConditionOutput، وإلا يُعاد tuple يكون عنصره الأول هو متجه العينة.
طريقة AudioLDM2UNet2DConditionModel الأمامية.
AudioPipelineOutput[[diffusers.AudioPipelineOutput]]
diffusers.AudioPipelineOutput[[diffusers.AudioPipelineOutput]]
diffusers.AudioPipelineOutput(audios: ndarray)
المعاملات:
audios (np.ndarray) : قائمة بعينات الصوت بعد إزالة الضوضاء، على شكل مصفوفة NumPy بأبعاد (batch_size, num_channels, sample_rate).
فئة الإخراج لخطوط أنابيب الصوت.
Xet Storage Details
- Size:
- 48.3 kB
- Xet hash:
- b0f627d11b12e08b6223a2e8101c8cca370a6dfbf60f47b5439148d43d48a6f9
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.