Transformers documentation

DAC

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

and get access to the augmented documentation experience

to get started

Mô hình này được công bố trên HF papers vào ngày 2023-06-11 và được đóng góp cho Hugging Face Transformers vào ngày 2024-08-19.

DAC

Tổng quan

Mô hình DAC được đề xuất trong Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN bởi Rithesh Kumar, Prem Seetharaman, Alejandro Luebs, Ishaan Kumar, Kundan Kumar.

Mô hình Descript Audio Codec (DAC) là một công cụ mạnh mẽ để nén dữ liệu âm thanh, giúp tối ưu hóa hiệu quả cho việc lưu trữ và truyền tải. Bằng cách nén âm thanh 44.1 KHz thành các token với băng thông chỉ 8kbps, mô hình DAC cho phép xử lý âm thanh chất lượng cao trong khi giảm đáng kể kích thước dữ liệu. Điều này đặc biệt hữu ích trong các kịch bản có băng thông hạn chế hoặc không gian lưu trữ đắt đỏ, chẳng hạn như trong các ứng dụng phát trực tiếp, hội nghị từ xa và lưu trữ các bộ dữ liệu âm thanh lớn.

Tóm tắt từ bài báo như sau:

Các mô hình ngôn ngữ đã được sử dụng thành công để mô hình hóa các tín hiệu tự nhiên, chẳng hạn như hình ảnh, giọng nói và âm nhạc. Một thành phần chính của các mô hình này là mô hình nén neural chất lượng cao, có khả năng nén các tín hiệu tự nhiên nhiều chiều thành các token rời rạc ít chiều hơn. Hướng tới mục tiêu đó, chúng tôi giới thiệu một thuật toán nén âm thanh neural phổ dụng, độ trung thực cao, đạt được mức nén ~90 lần cho âm thanh 44,1 KHz thành các token với băng thông chỉ 8kbps. Chúng tôi đạt được điều này bằng cách kết hợp những tiến bộ trong tạo âm thanh độ trung thực cao với các kỹ thuật lượng tử hóa vector tốt hơn từ lĩnh vực hình ảnh, cùng với các tổn thất đối kháng và tái tạo được cải thiện. Chúng tôi nén tất cả các miền (giọng nói, môi trường, âm nhạc, v.v.) bằng một mô hình phổ dụng duy nhất, giúp nó có thể áp dụng rộng rãi cho việc mô hình hóa sinh của mọi âm thanh. Chúng tôi so sánh với các thuật toán nén âm thanh cạnh tranh và nhận thấy phương pháp của chúng tôi vượt trội hơn đáng kể. Chúng tôi cung cấp các phân tích ablation kỹ lưỡng cho mọi lựa chọn thiết kế, cũng như mã nguồn mở và trọng số mô hình đã được huấn luyện. Chúng tôi hy vọng công việc của mình có thể đặt nền móng cho thế hệ tiếp theo của việc mô hình hóa âm thanh độ trung thực cao.

Mô hình này được đóng góp bởi Kamil Akesbi. Mã nguồn gốc có thể được tìm thấy tại đây.

Cấu trúc mô hình

Mô hình Descript Audio Codec (DAC) được cấu trúc thành ba giai đoạn riêng biệt:

  1. Mô hình Encoder: Giai đoạn này nén âm thanh đầu vào, giảm kích thước của nó trong khi vẫn giữ lại các thông tin thiết yếu.
  2. Mô hình Lượng tử hóa Vector Dư (RVQ): Hoạt động song song với bộ mã hóa, mô hình này lượng tử hóa các mã ẩn của âm thanh, tinh chỉnh quá trình nén và đảm bảo tái tạo chất lượng cao.
  3. Mô hình Giải mã: Giai đoạn cuối cùng này tái tạo âm thanh từ dạng nén của nó, khôi phục về trạng thái gần giống với đầu vào ban đầu.

Ví dụ sử dụng

Dưới đây là một ví dụ nhanh về cách mã hóa và giải mã âm thanh bằng mô hình này:

from datasets import Audio, load_dataset

from transformers import AutoProcessor, DacModel


librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

model = DacModel.from_pretrained("descript/dac_16khz", device_map="auto")
processor = AutoProcessor.from_pretrained("descript/dac_16khz")
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[-1]["audio"]["array"]
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt").to(model.device)

encoder_outputs = model.encode(inputs["input_values"])
# Get the intermediate audio codes
audio_codes = encoder_outputs.audio_codes
# Reconstruct the audio from its quantized representation
audio_values = model.decode(encoder_outputs.quantized_representation)
# or the equivalent with a forward pass
audio_values = model(inputs["input_values"]).audio_values

DacConfig

lớp transformers.DacConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneencoder_hidden_size: int = 64downsampling_ratios: list[int] | tuple[int, ...] = (2, 4, 8, 8)decoder_hidden_size: int = 1536n_codebooks: int = 9codebook_size: int = 1024codebook_dim: int = 8quantizer_dropout: float | int = 0.0commitment_loss_weight: float = 0.25codebook_loss_weight: float = 1.0sampling_rate: int = 16000 )

Tham số

  • encoder_hidden_size (int, tùy chọn, mặc định là 64) — Kích thước của các biểu diễn ẩn.
  • downsampling_ratios (list[int], tuỳ chọn, mặc định là [2, 4, 8, 8]) — Tỷ lệ hạ mẫu trong encoder. Các tỷ lệ này được sử dụng theo thứ tự ngược lại để tăng mẫu trong decoder.
  • decoder_hidden_size (int, tùy chọn, mặc định là 1536) — Kích thước của các biểu diễn ẩn.
  • n_codebooks (int, tùy chọn, mặc định là 9) — Số lượng codebook song song được mô hình sử dụng.
  • codebook_size (int, tùy chọn, mặc định là 1024) — Số lượng codebook song song được mô hình sử dụng.
  • codebook_dim (int, tùy chọn, mặc định là 8) — Số chiều của mỗi vector nhúng trong codebook.
  • quantizer_dropout (bool, tùy chọn, mặc định là 0) — Có áp dụng dropout cho bộ lượng tử hóa hay không.
  • commitment_loss_weight (float, tùy chọn, mặc định là 0.25) — Trọng số của hạng mục commitment loss trong hàm mất mát VQVAE.
  • codebook_loss_weight (float, tùy chọn, mặc định là 1.0) — Trọng số của hạng mục tổn thất codebook trong hàm tổn thất VQVAE.
  • sampling_rate (int, tùy chọn, mặc định là 16000) — Tần số lấy mẫu (tính bằng hertz (Hz)) mà các tệp âm thanh cần được số hóa.

Đây là lớp cấu hình để lưu trữ cấu hình của một DacModel. Nó được sử dụng để khởi tạo một mô hình Dac theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của descript/dac_16khz

Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.

Ví dụ:

>>> from transformers import DacModel, DacConfig

>>> # Initializing a "descript/dac_16khz" style configuration
>>> configuration = DacConfig()

>>> # Initializing a model (with random weights) from the "descript/dac_16khz" style configuration
>>> model = DacModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

DacFeatureExtractor

lớp transformers.DacFeatureExtractor

< >

( feature_size: int = 1sampling_rate: int = 16000padding_value: float = 0.0hop_length: int = 512**kwargs )

Tham số

  • feature_size (int, tuỳ chọn, mặc định là 1) — Kích thước chiều của các đặc trưng đã trích xuất. Dùng 1 cho âm đơn, 2 cho âm stereo.
  • sampling_rate (int, tùy chọn, mặc định là 16000) — Tần số lấy mẫu mà tại đó dạng sóng âm thanh cần được số hóa, được biểu diễn bằng hertz (Hz).
  • padding_value (float, tùy chọn, mặc định là 0.0) — Giá trị được sử dụng để đệm.
  • hop_length (int, tùy chọn, mặc định là 512) — Chiều dài chồng lấp giữa các cửa sổ liên tiếp.

Tạo một bộ trích xuất đặc trưng Dac.

Feature extractor này kế thừa từ SequenceFeatureExtractor, bao gồm hầu hết các phương thức chính. Người dùng nên tham khảo lớp cha này để biết thêm thông tin về các phương thức đó.

__call__

< >

( raw_audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]padding: bool | str | transformers.utils.generic.PaddingStrategy | None = Nonetruncation: bool | None = Falsemax_length: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonesampling_rate: int | None = None )

Tham số

  • raw_audio (np.ndarray, list[float], list[np.ndarray], list[list[float]]) — Chuỗi hoặc lô các chuỗi cần được xử lý. Mỗi chuỗi có thể là một mảng numpy, một danh sách các giá trị float, một danh sách các mảng numpy hoặc một danh sách các danh sách giá trị float. Mảng numpy phải có hình dạng (num_samples,) cho âm thanh mono (feature_size = 1), hoặc (2, num_samples) cho âm thanh stereo (feature_size = 2).
  • padding (bool, str hoặc PaddingStrategy, tùy chọn, mặc định là True) — Chọn một chiến lược để đệm các chuỗi trả về (theo phía đệm và chỉ số đệm của mô hình) trong số các lựa chọn sau:
    • True hoặc 'longest': Lấp đầy đến trình tự dài nhất trong lô (hoặc không lấp đầy nếu chỉ có một trình tự được cung cấp).
    • 'max_length': Đệm (pad) đến độ dài tối đa được chỉ định bằng tham số max_length hoặc đến độ dài đầu vào tối đa mà mô hình chấp nhận được nếu tham số đó không được cung cấp.
    • False hoặc 'do_not_pad' (mặc định): Không đệm (tức là có thể xuất ra một lô với các chuỗi có độ dài khác nhau).
  • truncation (bool, tùy chọn, mặc định là False) — Bật tính năng cắt ngắn để giảm các chuỗi đầu vào dài hơn max_length xuống còn max_length.
  • max_length (int, tùy chọn) — Độ dài tối đa của danh sách trả về và tùy chọn độ dài padding (xem bên trên).
  • return_tensors (str hoặc TensorType, tùy chọn, mặc định là ‘pt’) — Nếu được đặt, sẽ trả về tensors thay vì danh sách các số nguyên Python. Các giá trị chấp nhận được là:
    • 'pt': Trả về các đối tượng torch.Tensor của PyTorch.
    • 'np': Trả về các đối tượng Numpy np.ndarray.
  • sampling_rate (int, tùy chọn) — Tần số lấy mẫu mà đầu vào audio được lấy mẫu. Rất khuyến nghị truyền sampling_rate trong lời gọi forward để ngăn các lỗi âm thầm.

Phương thức chính để tạo đặc trưng và chuẩn bị một hoặc nhiều chuỗi cho mô hình.

DacModel

lớp transformers.DacModel

< >

( config: DacConfig )

Tham số

  • config (DacConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.

Mô hình DAC (Descript Audio Codec).

Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)

Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

decode

< >

( quantized_representation: typing.Optional[torch.Tensor] = Noneaudio_codes: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None ) → DacDecoderOutput or tuple(torch.Tensor)

Tham số

  • quantized_representation (torch.Tensor có hình dạng (batch_size, dimension, time_steps), tùy chọn) — Biểu diễn liên tục đã lượng tử hóa của đầu vào.
  • audio_codes (torch.Tensor có hình dạng (batch_size, num_codebooks, time_steps), tùy chọn) — Chỉ số codebook cho từng codebook, đại diện cho biểu diễn rời rạc đã lượng tử hóa của đầu vào. Tham số này nên được cung cấp nếu bạn muốn giải mã trực tiếp từ mã âm thanh (nó sẽ ghi đè lên quantized_representation).
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một DacDecoderOutput thay vì một tuple thông thường hay không.

Trả về

DacDecoderOutput hoặc tuple(torch.Tensor)

Một DacDecoderOutput hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (DacConfig) và đầu vào.

  • audio_values (torch.Tensor có hình dạng (batch_size, input_length), tùy chọn) — Các giá trị âm thanh đã giải mã, thu được bằng cách sử dụng phần giải mã của Dac.

encode

< >

( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacEncoderOutput or tuple(torch.Tensor)

Tham số

  • input_values (torch.Tensor of shape (batch_size, 1, time_steps)`) — Dữ liệu âm thanh đầu vào để mã hóa,
  • n_quantizers (int, tùy chọn) — Số lượng quantizer cần sử dụng. Nếu là None, tất cả các quantizer sẽ được sử dụng. Mặc định là None.
  • return_dict (bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.

Trả về

DacEncoderOutput hoặc tuple(torch.Tensor)

Một DacEncoderOutput hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (DacConfig) và đầu vào.

  • loss (torch.Tensor, tuỳ chọn) — Mất từ mô hình encoder, bao gồm tổ hợp có trọng số của mất commitment và mất codebook.
  • quantized_representation (torch.Tensor có hình dạng (batch_size, dimension, time_steps), tùy chọn) — Biểu diễn liên tục đã lượng tử hóa của đầu vào.
  • audio_codes (torch.Tensor có hình dạng (batch_size, num_codebooks, time_steps), tùy chọn) — Chỉ số codebook cho từng codebook (biểu diễn rời rạc đã lượng tử hóa của đầu vào).
  • projected_latents (torch.Tensor có hình dạng (batch_size, num_codebooks * dimension, time_steps), tùy chọn) — Latents đã chiếu (biểu diễn liên tục của đầu vào trước khi lượng tử hóa).

forward

< >

( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacOutput or tuple(torch.Tensor)

Tham số

  • input_values (torch.Tensor có hình dạng (batch_size, 1, time_steps)) — Dữ liệu âm thanh cần mã hóa.
  • n_quantizers (int, tùy chọn) — Số lượng bộ lượng tử hóa cần sử dụng. Nếu là None, tất cả các bộ lượng tử hóa sẽ được sử dụng. Mặc định là None.
  • return_dict (bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.

Trả về

DacOutput hoặc tuple(torch.Tensor)

Một DacOutput hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (DacConfig) và đầu vào.

Phương thức forward của DacModel ghi đè phương thức đặc biệt __call__.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của Module sau đó thay vì gọi hàm này, vì instance Module sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.

  • loss (torch.Tensor, tuỳ chọn) — Mất từ mô hình encoder, bao gồm tổ hợp có trọng số của mất commitment và mất codebook.
  • audio_values (torch.Tensor có hình dạng (batch_size, input_length)) — Dữ liệu âm thanh được tái tạo.
  • quantized_representation (torch.Tensor có hình dạng (batch_size, dimension, time_steps)) — Biểu diễn liên tục đã lượng tử hóa của đầu vào.
  • audio_codes (torch.LongTensor có hình dạng (batch_size, num_codebooks, time_steps)) — Chỉ số codebook cho từng codebook (biểu diễn rời rạc đã lượng tử hóa của đầu vào).
  • projected_latents (torch.Tensor có hình dạng (batch_size, num_codebooks * dimension, time_steps)) — Latents đã chiếu (biểu diễn liên tục của đầu vào trước khi lượng tử hóa).

Ví dụ:

>>> from datasets import load_dataset, Audio
>>> from transformers import DacModel, AutoProcessor
>>> librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

>>> model = DacModel.from_pretrained("descript/dac_16khz")
>>> processor = AutoProcessor.from_pretrained("descript/dac_16khz")
>>> librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
>>> audio_sample = librispeech_dummy[-1]["audio"]["array"]
>>> inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")

>>> encoder_outputs = model.encode(inputs["input_values"])
>>> # Get the intermediate audio codes
>>> audio_codes = encoder_outputs.audio_codes
>>> # Reconstruct the audio from its quantized representation
>>> audio_values = model.decode(encoder_outputs.quantized_representation)
>>> # or the equivalent with a forward pass
>>> audio_values = model(inputs["input_values"]).audio_values
Update on GitHub