Buckets:

hf-doc-build/doc / diffusers /main /tr /api /pipelines /stable_audio.md
mishig's picture
|
download
raw
15.1 kB
# Stable Audio
Stable Audio, Zach Evans ve diğerleri tarafından [Stable Audio Open](https://huggingface.co/papers/2407.14358) 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 metriklerde son teknolojiyle rekabet edebilir olduğunu göstermektedir. Özellikle raporlanan FDopenl3 sonuçları (üretimin 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](https://huggingface.co/ylacombe) tarafından katkı sağlanmıştır. Orijinal kod tabanı [Stability-AI/stable-audio-tools](https://github.com/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 prompt'u 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](../../quantization/overview) genel bakışına başvurun. Aşağıdaki örnek, bitsandbytes ile çıkarım için kuantize edilmiş bir [StableAudioPipeline](/docs/diffusers/main/tr/api/pipelines/stable_audio#diffusers.StableAudioPipeline) yüklemenin nasıl yapılacağını göstermektedir.
```py
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[[diffusers.StableAudioPipeline]]
#### diffusers.StableAudioPipeline[[diffusers.StableAudioPipeline]]
```python
diffusers.StableAudioPipeline(vae: AutoencoderOobleck, text_encoder: T5EncoderModel, projection_model: StableAudioProjectionModel, tokenizer: T5Tokenizer, transformer: StableAudioDiTModel, scheduler: EDMDPMSolverMultistepScheduler)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_audio/pipeline_stable_audio.py#L78)
**Parametreler:**
vae ([AutoencoderOobleck](/docs/diffusers/main/tr/api/models/autoencoder_oobleck#diffusers.AutoencoderOobleck)) : Görüntüleri gizil (latent) temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) modeli.
text_encoder ([T5EncoderModel](https://huggingface.co/docs/transformers/main/en/model_doc/t5#transformers.T5EncoderModel)) : Donmuş metin kodlayıcı. StableAudio, [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel) kodlayıcısını, özellikle de [google-t5/t5-base](https://huggingface.co/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 modeline girdi olarak verilir.
tokenizer ([T5Tokenizer](https://huggingface.co/docs/transformers/main/en/model_doc/t5#transformers.T5Tokenizer)) : Donmuş metin kodlayıcısı için metni belirteçlere ayırmak (tokenize) üzere kullanılan belirteç ayırıcı (tokenizer).
transformer ([StableAudioDiTModel](/docs/diffusers/main/tr/api/models/stable_audio_transformer#diffusers.StableAudioDiTModel)) : Kodlanmış ses latentlerini gürültüden arındırmak için kullanılan bir `StableAudioDiTModel`.
scheduler ([EDMDPMSolverMultistepScheduler](/docs/diffusers/main/tr/api/schedulers/edm_multistep_dpm_solver#diffusers.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](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline) sınıfından devralınmıştı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__[[diffusers.StableAudioPipeline.__call__]]
```python
__call__(prompt: str | list[str] = None, audio_end_in_s: float | None = None, audio_start_in_s: float | None = 0.0, num_inference_steps: int = 100, guidance_scale: float = 7.0, 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, initial_audio_waveforms: typing.Optional[torch.Tensor] = None, initial_audio_sampling_rate: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, negative_attention_mask: typing.Optional[torch.LongTensor] = None, return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int | None = 1, output_type: str | None = 'pt')
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_audio/pipeline_stable_audio.py#L462)
**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`, *opsiyonel*, varsayılan 7.0) : Daha yüksek bir guidance scale değeri, modelin ses kalitesinin düşmesi pahasına, `prompt` ile yakından ilişkili ses üretmesini teşvik eder. 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 istem veya istemler. Tanımlanmadıysa bunun yerine `negative_prompt_embeds` parametresini geçmeniz 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](https://huggingface.co/papers/2010.02502) makalesindeki eta (η) parametresine karşılık gelir. Yalnızca [DDIMScheduler](/docs/diffusers/main/tr/api/schedulers/ddim#diffusers.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 bir [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html).
latents (`torch.Tensor`, *isteğe bağlı*) : Ses üretimi için girdi olarak kullanılacak, Gauss dağılımından örneklenen önceden oluşturulmuş gürültülü latentler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele `generator` kullanılarak örneklem yoluyla bir latentler 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 dalgıları. Şekli `(batch_size, num_channels, audio_length)` veya `(batch_size, audio_length)` olmalıdır; 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`'e uygulanacak ö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`'e uygulanacak önceden hesaplanmış dikkat maskesi.
return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : Düz bir tuple yerine [StableDiffusionPipelineOutput](/docs/diffusers/main/tr/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.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` fonksiyonunun ç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"` arasında seçim yapın. Latent difüzyon modeli (LDM) çıktısını döndürmek için `"latent"` olarak ayarlayın.
**Dönüş:** [StableDiffusionPipelineOutput](/docs/diffusers/main/tr/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) veya `tuple`
`return_dict` `True` ise [StableDiffusionPipelineOutput](/docs/diffusers/main/tr/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.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:
```py
>>> 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)
```

Xet Storage Details

Size:
15.1 kB
·
Xet hash:
d689155bed6d9f7e9b68156b9bfb0f6f5a70c5134c6b2941dbe77947be979ec1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.