Diffusers documentation

Stable Audio

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Stable Audio

Stable Audio, Zach Evans ve diğerleri tarafından Stable Audio Open makalesinde önerilmiştir. Metin komutunu girdi olarak alır ve buna karşılık gelen ses veya müzik örneğini tahmin eder.

Stable Audio Open, metin istemlerinden 44.1kHz'de değişken uzunlukta (47 saniyeye kadar) stereo ses üretir. Üç bileşenden oluşur: dalga formlarını yönetilebilir bir dizi uzunluğuna sıkıştıran bir otoenkoder, metin koşullandırma için T5 tabanlı bir metin gömme ve otoenkoderin gizli uzayında çalışan transformer tabanlı bir difüzyon (DiT) modeli.

Stable Audio, yaklaşık 48 bin ses kaydından oluşan bir korpus üzerinde eğitilmiştir; bunların yaklaşık 47 bini Freesound'dan, kalanı ise Free Music Archive (FMA) kaynağındandır. Tüm ses dosyaları CC0, CC BY veya CC Sampling+ lisansları altında lisanslanmıştır. Bu veriler, oto-ansatörü (autoencoder) ve DiT'yi eğitmek için kullanılır.

Makalenin özeti aşağıdaki gibidir: Açık üretken modeller, topluluk için hayati önem taşır; yeni modeller sunulurken ince ayar yapılmasına olanak tanır ve referans noktası olarak hizmet eder. Ancak mevcut metinden sese dönüştürme modellerinin çoğu özel olup sanatçıların ve araştırmacıların üzerine inşa edebileceği şekilde erişilebilir değildir. Burada, Creative Commons verileriyle eğitilen yeni bir açık ağırlıklı metinden sese dönüştürme modelinin mimarisini ve eğitim sürecini tanımlıyoruz. Değerlendirmemiz, modelin performansının çeşitli metrikler açısından son teknolojiyle rekabet edebilir olduğunu göstermektedir. Özellikle raporlanan FDopenl3 sonuçları (üretkenliklerin gerçekçiliğini ölçen), 44.1kHz'de yüksek kaliteli stereo ses sentezi için potansiyelini ortaya koymaktadır.

Bu pipeline Yoach Lacombe tarafından katkı sağlanmıştır. Orijinal kod tabanı Stability-AI/stable-audio-tools adresinde bulunabilir.

İpuçları

Bir istem oluştururken şunları göz önünde bulundurun:

  • Açıklayıcı prompt girdileri en iyi sonucu verir; sesi tanımlamak için sıfatlar kullanın (örneğin, “yüksek kaliteli” veya “net”) ve mümkün olduğunca promptu bağlama özgü hale getirin (örneğin, “hızlı ritim ve sentezleyicilere sahip melodik techno”, “techno”dan daha iyi çalışır).
  • negatif istem kullanmak, üretilen sesin kalitesini önemli ölçüde artırabilir. “low quality, average quality” negatif istemini kullanmayı deneyin.

Çıkarım sırasında:

  • Oluşturulan ses örneğinin kalitesi, num_inference_steps argümanı ile kontrol edilebilir; daha yüksek adım sayısı, daha yavaş çıkarım maliyeti karşılığında daha yüksek kalitede ses sağlar.
  • Birden fazla dalga formu tek seferde oluşturulabilir: Bunu etkinleştirmek için num_waveforms_per_prompt değerini 1'den büyük bir değere ayarlayın. Oluşturulan dalga formları ile istem metni arasında otomatik puanlama yapılacak ve sesler buna göre en iyiden en kötüye sıralanacaktır.

Kantizasyon

Kantizasyon, model ağırlıklarını daha düşük hassasiyetli bir veri türünde saklayarak çok büyük modellerin bellek gereksinimlerini azaltmaya yardımcı olur. Ancak kantizasyonun video kalitesi üzerindeki etkisi, video modeline göre değişebilir.

Desteklenen kuantizasyon arka uçları ve kullanım durumunu destekleyen bir kuantizasyon arka ucunu seçme hakkında daha fazla bilgi edinmek için Quantization genel bakışına başvurun. Aşağıdaki örnek, bitsandbytes ile çıkarım için kuantize edilmiş bir StableAudioPipeline yüklemenin nasıl yapılacağını göstermektedir.

import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, StableAudioDiTModel, StableAudioPipeline
from diffusers.utils import export_to_video
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel

quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
    "stabilityai/stable-audio-open-1.0",
    subfolder="text_encoder",
    quantization_config=quant_config,
    dtype=torch.float16,
)

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = StableAudioDiTModel.from_pretrained(
    "stabilityai/stable-audio-open-1.0",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = StableAudioPipeline.from_pretrained(
    "stabilityai/stable-audio-open-1.0",
    text_encoder=text_encoder_8bit,
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

prompt = "The sound of a hammer hitting a wooden surface."
negative_prompt = "Low quality."
audio = pipeline(
    prompt,
    negative_prompt=negative_prompt,
    num_inference_steps=200,
    audio_end_in_s=10.0,
    num_waveforms_per_prompt=3,
    generator=generator,
).audios

output = audio[0].T.float().cpu().numpy()
sf.write("hammer.wav", output, pipeline.vae.sampling_rate)

StableAudioPipeline

sınıf diffusers.StableAudioPipeline

< >

( vae: AutoencoderOoblecktext_encoder: T5EncoderModelprojection_model: StableAudioProjectionModeltokenizer: T5Tokenizertransformer: StableAudioDiTModelscheduler: EDMDPMSolverMultistepScheduler )

Parametreler

  • vae (AutoencoderOobleck) — Gizil temsillerden görüntüleri kodlamak ve çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) modeli.
  • text_encoder (T5EncoderModel) — Donmuş metin kodlayıcı. StableAudio, T5 kodlayıcısını, özellikle de google-t5/t5-base varyantını kullanır.
  • projection_model (StableAudioProjectionModel) — Metin kodlayıcı modelinden gelen gizli durumları (hidden-states) ile başlangıç ve bitiş saniyelerini doğrusal olarak projekte etmek için kullanılan eğitilmiş bir model. Kodlayıcıdan gelen projekte edilmiş gizli durumlar ve koşullu saniyeler birleştirilerek transformer modelinin girdisi oluşturulur.
  • tokenizer (T5Tokenizer) — Donmuş metin kodlayıcısı için metni belirteçlere ayırmak üzere kullanılan belirteç ayırıcı.
  • transformer (StableAudioDiTModel) — Kodlanmış ses latentlerini gürültüden arındırmak için kullanılan bir StableAudioDiTModel.
  • scheduler (EDMDPMSolverMultistepScheduler) — Kodlanmış ses latentlerini gürültüden arındırmak için transformer ile birlikte kullanılacak bir zamanlayıcı.

StableAudio kullanılarak metinden ses üretimi için Pipeline.

Bu model DiffusionPipeline sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda bulabilirsiniz.

__call__

< >

( prompt: str | list[str] = Noneaudio_end_in_s: float | None = Noneaudio_start_in_s: float | None = 0.0num_inference_steps: int = 100guidance_scale: float = 7.0negative_prompt: str | list[str] | None = Nonenum_waveforms_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneinitial_audio_waveforms: typing.Optional[torch.Tensor] = Noneinitial_audio_sampling_rate: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonenegative_attention_mask: typing.Optional[torch.LongTensor] = Nonereturn_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int | None = 1output_type: str | None = 'pt' ) → StableDiffusionPipelineOutput or tuple

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — Ses üretimini yönlendirmek için istem veya istemler. Tanımlanmadıysa, prompt_embeds parametresini iletmeniz gerekir.
  • audio_end_in_s (float, isteğe bağlı, varsayılan 47.55) — Saniye cinsinden ses bitiş indeksi.
  • audio_start_in_s (float, isteğe bağlı, varsayılan 0) — Saniye cinsinden ses başlangıç indeksi.
  • num_inference_steps (int, isteğe bağlı, varsayılan 100) — Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek ses kalitesi sağlar.
  • guidance_scale (float, isteğe bağlı, varsayılan 7.0) — Daha yüksek bir guidance scale değeri, prompt ile yakından ilişkili ses üretmesini teşvik eder, ancak bu ses kalitesinin düşmesi pahasına olur. Guidance scale, guidance_scale > 1 olduğunda etkinleştirilir.
  • negative_prompt (str veya list[str], isteğe bağlı) — Ses üretiminde nelerin dahil edilmeyeceğini yönlendirmek için kullanılan istem veya istemler. Tanımlanmadıysa, bunun yerine negative_prompt_embeds parametresini iletmeniz gerekir. Yönlendirme kullanılmadığında (guidance_scale < 1) yok sayılır.
  • num_waveforms_per_prompt (int, isteğe bağlı, varsayılan 1) — Her istem için üretilecek dalga formu sayısı.
  • eta (float, isteğe bağlı, varsayılan 0.0) — DDIM makalesindeki eta (η) parametresine karşılık gelir. Yalnızca DDIMScheduler için geçerlidir ve diğer zamanlayıcılarda yok sayılır.
  • generator (torch.Generator veya list[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için kullanılan bir torch.Generator.
  • latents (torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenen, ses üretimi için girdi olarak kullanılacak önceden oluşturulmuş gürültülü latents. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklemeye dayalı bir latents tensörü oluşturulur.
  • initial_audio_waveforms (torch.Tensor, isteğe bağlı) — Üretim için başlangıç ses dalgası olarak kullanılacak isteğe bağlı başlangıç ses dalgaları. Şeklinin (batch_size, num_channels, audio_length) veya (batch_size, audio_length) olması gerekir; burada batch_size, modele iletilen istemlerin sayısına karşılık gelir.
  • initial_audio_sampling_rate (int, isteğe bağlı) — Sağlanırsa initial_audio_waveforms'ün örneklem hızı. Modelle aynı olmalıdır.
  • prompt_embeds (torch.Tensor, isteğe bağlı) — Metin kodlayıcı modelden önceden hesaplanmış metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından hesaplanır.
  • negative_prompt_embeds (torch.Tensor, isteğe bağlı) — Metin kodlayıcı modelden önceden hesaplanmış negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından hesaplanır.
  • attention_mask (torch.LongTensor, isteğe bağlı) — prompt_embeds uygulaması için önceden hesaplanmış dikkat maskesi. Sağlanmazsa, dikkat maskesi prompt girdi argümanından hesaplanır.
  • negative_attention_mask (torch.LongTensor, isteğe bağlı) — negative_text_audio_duration_embeds için uygulanacak önceden hesaplanmış dikkat maskesi.
  • return_dict (bool, isteğe bağlı, varsayılan True) — Düz bir tuple yerine StableDiffusionPipelineOutput döndürülüp döndürülmemesi.
  • callback (Callable, isteğe bağlı) — Çıkarım sırasında her callback_steps adımda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int, isteğe bağlı, varsayılan 1) — callback işlevinin çağrılma sıklığı. Belirtilmezse, callback her adımda çağrılır.
  • output_type (str, isteğe bağlı, varsayılan "pt") — Üretilen sesin çıktı biçimi. NumPy np.ndarray döndürmek için "np" veya PyTorch torch.Tensor nesnesi döndürmek için "pt" seçin. Latent difüzyon modeli (LDM) çıktısını döndürmek için "latent" olarak ayarlayın.

Dönüş değeri

StableDiffusionPipelineOutput veya tuple

return_dict True ise StableDiffusionPipelineOutput döndürülür, aksi halde ilk öğesi üretilen sesleri içeren bir liste olan bir tuple döndürülür.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:

>>> import scipy
>>> import torch
>>> import soundfile as sf
>>> from diffusers import StableAudioPipeline

>>> repo_id = "stabilityai/stable-audio-open-1.0"
>>> pipe = StableAudioPipeline.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_end_in_s=10.0,
...     num_waveforms_per_prompt=3,
...     generator=generator,
... ).audios

>>> output = audio[0].T.float().cpu().numpy()
>>> sf.write("hammer.wav", output, pipe.vae.sampling_rate)
Update on GitHub