Transformers documentation
DAC
このモデルは2023年6月11日にHF papersで公開され、2024年8月19日にHugging Face Transformersに貢献されました。
DAC
概要
DACモデルは、Rithesh Kumar、Prem Seetharaman、Alejandro Luebs、Ishaan Kumar、Kundan Kumar による Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN で提案されました。
Descript Audio Codec (DAC) モデルは、音声データを圧縮するための強力なツールであり、ストレージや伝送において非常に効率的です。44.1 KHz の音声をわずか 8kbps の帯域幅でトークンに圧縮することで、DAC モデルはデータサイズを大幅に削減しながら、高品質な音声処理を可能にします。これは、ストリーミングアプリケーション、リモート会議、大規模な音声データセットのアーカイブなど、帯域幅が制限されている場合やストレージ容量が重要なシナリオで特に有用です。
論文の抄録は以下の通りです。
言語モデルは、画像、音声、音楽などの自然シグナルのモデリングに成功裏に活用されてきました。これらのモデルの重要な構成要素は、高次元の自然シグナルを低次元の離散トークンに圧縮できる高品質なニューラル圧縮モデルです。この目的のため、44.1 KHz の音声をわずか 8kbps の帯域幅でトークンに圧縮し、約 90 倍の圧縮率を実現する、高忠実度の汎用ニューラル音声圧縮アルゴリズムを導入します。これは、高忠実度の音声生成の進歩と、画像分野からのより優れたベクトル量子化技術、さらに改善された敵対的損失と再構成損失を組み合わせることで実現しています。単一の汎用モデルですべてのドメイン(音声、環境音、音楽など)を圧縮するため、すべての音声の生成モデリングに広く適用できます。競合する音声圧縮アルゴリズムと比較したところ、本手法がそれらを大幅に上回ることを確認しました。すべての設計判断について徹底的なアブレーション分析を行い、オープンソースのコードと学習済みモデルの重みも提供します。本作業が、次世代の高忠実度音声モデリングの基盤となることを期待しています。
このモデルはKamil Akesbiによって提供されました。 元のコードはこちらで確認できます。
モデル構造
Descript Audio Codec (DAC) モデルは、3つの異なる段階で構成されています。
- Encoder Model: この段階では、入力オーディオを圧縮し、サイズを縮小しながらも本質的な情報を保持します。
- Residual Vector Quantizer (RVQ) モデル: エンコーダーと連携して動作し、音声の潜在コードを量子化します。これにより圧縮が洗練され、高品質な再構築が保証されます。
- Decoder Model:この最終段階では、圧縮された形式からオーディオを再構築し、元の入力に非常に近い状態に復元します。
使用例
このモデルを使用してオーディオをエンコードおよびデコードする簡単な例を以下に示します。
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_valuesDacConfig
クラス transformers.DacConfig
< source >( 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 )
パラメータ
- encoder_hidden_size (
int、任意、デフォルトは64) — 隠れ表現の次元数。 - downsampling_ratios (
list[int]、任意、デフォルトは[2, 4, 8, 8]) — エンコーダーにおけるダウンサンプリングの比率です。デコーダーにおけるアップサンプリングには、これらの比率を逆順で使用します。 - decoder_hidden_size (
int、任意、デフォルトは1536) — 隠れ表現の次元数です。 - n_codebooks (
int、任意、デフォルトは9) — モデルが使用する並列コードブックの数です。 - codebook_size (
int、任意、デフォルトは1024) — モデルが使用する並列コードブックの数です。 - codebook_dim (
int、任意、デフォルトは8) — 各コードブック埋め込みベクトルの次元数。 - quantizer_dropout (
bool、任意、デフォルト値は 0)— 量子化器に dropout を適用するかどうかを指定します。 - commitment_loss_weight (
float、任意、デフォルト値は 0.25)— VQVAE の損失関数における commitment loss 項の重み。 - codebook_loss_weight (
float、任意、デフォルト値は 1.0) — VQVAE の損失関数における codebook 損失項の重み。 - sampling_rate (
int、任意、デフォルトは16000) — オーディオファイルをデジタル化するためのサンプリングレート (Hz)。
これは DacModel の設定を保存するための設定クラスです。指定された引数に基づいて Dac モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、descript/dac_16khz と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> 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.configDacFeatureExtractor
class transformers.DacFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 16000padding_value: float = 0.0hop_length: int = 512**kwargs )
Dacのフィーチャーエクストラクターを構築します。
このフィーチャーエクストラクターは、主要なメソッドの大部分を含む SequenceFeatureExtractor を継承しています。これらのメソッドに関する詳細については、このスーパークラスを参照してください。
__call__
< source >( 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 )
パラメータ
- raw_audio (
np.ndarray、list[float]、list[np.ndarray]、list[list[float]]) — 処理対象のシーケンスまたはシーケンスのバッチです。各シーケンスは、numpy 配列、float 値のリスト、numpy 配列のリスト、または float 値のリストのリストであることができます。モノラル音声(feature_size = 1)の場合、numpy 配列の形状は(num_samples,)である必要があります。ステレオ音声(feature_size = 2)の場合、形状は(2, num_samples)である必要があります。 - padding (
bool,strまたは PaddingStrategy, 省略可, デフォルトはTrue) — 返されるシーケンスのパディング戦略(モデルのパディング側およびパディングインデックスに従う)として、以下から選択します:Trueまたは'longest': バッチ内の最長のシーケンスの長さにパディングします(単一のシーケンスのみが提供された場合は、パディングを行いません)。'max_length': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長までパディングします。Falseまたは'do_not_pad'(デフォルト):パディングを行いません(つまり、長さが異なるシーケンスのバッチを出力できます)。
- truncation (
bool、任意、デフォルトはFalse) —max_lengthを超える入力シーケンスをmax_lengthに切り詰めるための切り詰め処理を有効にします。 - max_length (
int, 任意) — 返されるリストの最大長、および必要に応じてパディングの長さ(上記を参照)。 - return_tensors (
strまたは TensorType, 省略可, デフォルトは 'pt') — 設定すると、Python の整数のリストではなくテンソルを返します。指定可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': Numpy のnp.ndarrayオブジェクトを返します。
- sampling_rate (
int, 任意) —audio入力がサンプリングされたレートです。サイレントエラーを防ぐため、forward 呼び出し時にsampling_rateを渡すことを強く推奨します。
1つ以上のシーケンスを特徴量化し、モデル用に準備するための主要なメソッド。
DacModel
class transformers.DacModel
< source >( config: DacConfig )
パラメータ
- config (DacConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
DAC(Descript Audio Codec)モデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
decode
< source >( quantized_representation: typing.Optional[torch.Tensor] = Noneaudio_codes: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None ) → DacDecoderOutput or tuple(torch.FloatTensor)
パラメータ
- quantized_representation (
torch.Tensor、形状(batch_size, dimension, time_steps)、任意) — 入力の量子化された連続表現です。 - audio_codes (
torch.Tensor、形状(batch_size, num_codebooks, time_steps)、任意) — 各コードブックのコードブックインデックスであり、入力の量子化された離散表現を表します。オーディオコードから直接デコードしたい場合は、このパラメータを指定してください(quantized_representation を上書きします)。 - return_dict (
bool、省略可、デフォルトはTrue) —DacDecoderOutputを返すか、通常のタプルを返すかを指定します。
戻り値
DacDecoderOutput または tuple(torch.FloatTensor)
DacDecoderOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(DacConfig)や入力に応じて、さまざまな要素で構成されます。
- audio_values (
torch.FloatTensor、形状(batch_size, input_length)、任意) — Dac のデコーダー部分を使用して取得したデコード済みオーディオ値。
encode
< source >( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacEncoderOutput or tuple(torch.FloatTensor)
パラメータ
- input_values (
torch.Tensor of shape(batch_size, 1, time_steps)`) — エンコードする入力音声データ、 - n_quantizers (
int, 任意) — 使用する量子化器の数。None の場合は、すべての量子化器が使用されます。デフォルトは None です。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。
戻り値
DacEncoderOutput または tuple(torch.FloatTensor)
DacEncoderOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(DacConfig)と入力に応じて、さまざまな要素で構成されます。
- loss (
torch.FloatTensor, optional) — エンコーダーモデルからの損失。コミットメント損失とコードブック損失の重み付き組み合わせで構成されます。 - quantized_representation (
torch.Tensor、形状(batch_size, dimension, time_steps)、任意) — 入力の量子化された連続表現。 - audio_codes (
torch.Tensor、shape(batch_size, num_codebooks, time_steps)、optional) — 各 codebook に対する codebook インデックス(入力の量子化された離散表現)。 - projected_latents (
torch.Tensor、形状(batch_size, num_codebooks * dimension, time_steps)、任意) — 投影された潜在変数(量子化前の入力の連続表現)。
forward
< source >( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacOutput or tuple(torch.FloatTensor)
パラメータ
- input_values (
torch.Tensor、形状(batch_size, 1, time_steps)) — エンコードするオーディオデータ。 - n_quantizers (
int, 任意) — 使用する量子化器の数。Noneの場合、すべての量子化器が使用されます。デフォルトはNoneです。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。
戻り値
DacOutput または tuple(torch.FloatTensor)
DacOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(DacConfig)や入力に応じて、さまざまな要素で構成されます。
DacModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- loss (
torch.FloatTensor, optional) — エンコーダーモデルからの損失。コミットメント損失とコードブック損失の重み付き組み合わせで構成されます。 - audio_values (
torch.Tensor、形状(batch_size, input_length)) — 再構成されたオーディオデータ。 - quantized_representation (
torch.Tensor、形状(batch_size, dimension, time_steps)) — 入力の量子化された連続表現。 - audio_codes (
torch.LongTensor、shape(batch_size, num_codebooks, time_steps)) — 各コードブックのインデックス(入力の量子化された離散表現)。 - projected_latents (
torch.Tensor、形状(batch_size, num_codebooks * dimension, time_steps)) — 投影された潜在変数(量子化前の入力の連続表現)。
例:
>>> 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