speechbrain.lobes.models.huggingface_transformers.encodec 模块

该模块支持集成huggingface预训练的EnCodec。

EnCodec 使得将音频压缩成不同带宽的离散标记序列成为可能 - 并且可以从这些序列中重建音频,根据带宽的不同会有一些质量损失。

请注意,虽然encodec可以用于重建语音数据,但为了获得高质量的语音重建,建议使用专门训练的声码器,例如Vocos (speechbrain.lobes.models.huggingface_transformers.vocos)

仓库: https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec 论文: https://arxiv.org/abs/2210.13438

Authors
  • 阿尔乔姆·普洛日尼科夫 2023

摘要

类:

Encodec

HuggingFace encodec 模型的封装器

参考

class speechbrain.lobes.models.huggingface_transformers.encodec.Encodec(source, save_path=None, sample_rate=None, bandwidth=1.5, flat_embeddings=False, freeze=True, renorm_embeddings=True)[source]

基础类: HFTransformersInterface

HuggingFace encodec 模型的封装器

Parameters:
  • source (str) – 一个 HuggingFace 仓库标识符或路径

  • save_path (str) – 预训练模型将被保存的位置

  • sample_rate (int) – 音频采样率

  • 带宽 (float) – 编码带宽,单位为kbps(可选) 支持的带宽: 1.5, 3.0, 6.0, 12.0, 24.0

  • flat_embeddings (bool) – 如果设置为True,嵌入将被展平为 (Batch x Length x (Heads * Embedding))

  • freeze (bool) – 模型是否会被冻结(例如,如果用作训练另一个模型的一部分,则不可训练)

  • renorm_embeddings (bool) – 是否应该重新归一化嵌入。在原始模型中。

Example

>>> model_hub = "facebook/encodec_24khz"
>>> save_path = "savedir"
>>> model = Encodec(model_hub, save_path)
>>> audio = torch.randn(4, 1000)
>>> length = torch.tensor([1.0, .5, .75, 1.0])
>>> tokens, emb = model.encode(audio, length)
>>> tokens.shape
torch.Size([4, 4, 2])
>>> emb.shape
torch.Size([4, 4, 2, 128])
>>> rec = model.decode(tokens, length)
>>> rec.shape
torch.Size([4, 1, 1280])
>>> rec_emb = model.decode_emb(emb, length)
>>> rec_emb.shape
torch.Size([4, 1, 1280])
>>> rec_tokens = model.tokens(emb, length)
>>> rec_tokens.shape
torch.Size([4, 4, 2])
>>> model = Encodec(model_hub, save_path, flat_embeddings=True)
>>> _, emb = model.encode(audio, length)
>>> emb.shape
torch.Size([4, 4, 256])
calibrate(sample, length)[source]

校准声音样本的归一化

Parameters:
  • sample (torch.Tensor) – 一个 (Batch x Samples) 或 (Batch x Channel x Samples) 的音频样本

  • length (torch.Tensor) – 一个相对长度的张量

Returns:

  • emb_mean (torch.Tensor) – 嵌入均值

  • emb_std (torch.Tensor) – 嵌入标准差

forward(inputs, length)[source]

将输入音频编码为令牌

Parameters:
  • inputs (torch.Tensor) – 一个 (Batch x Samples) 或 (Batch x Channel x Samples) 的音频张量

  • length (torch.Tensor) – 一个相对长度的张量

Returns:

tokens – 一个 (Batch X Tokens) 的音频令牌张量

Return type:

torch.Tensor

encode(inputs, length)[source]

将输入音频编码为标记和嵌入

Parameters:
  • inputs (torch.Tensor) – 一个 (Batch x Samples) 或 (Batch x Channel x Samples) 的音频张量

  • length (torch.Tensor) – 一个相对长度的张量

Returns:

  • tokens (torch.Tensor) – 一个 (Batch x Tokens x Heads) 的音频令牌张量

  • emb (torch.Tensor) – 来自模型量化器的原始向量嵌入

embeddings(tokens)[source]

将标记索引转换为向量嵌入

Parameters:

tokens (torch.Tensor) – 一个 (Batch x Length x Heads) 的 token 索引张量

Returns:

emb – 一个 (Batch x Length x Heads x Embedding) 张量 来自模型的量化器码本的原始向量嵌入

Return type:

torch.Tensor

decode(tokens, length=None)[source]

从标记解码音频

Parameters:
  • tokens (torch.Tensor) – 一个 (Batch x Length x Heads) 的音频令牌张量

  • length (torch.Tensor) – 一个1维张量,表示相对长度

Returns:

audio – 重建的音频

Return type:

torch.Tensor

tokens(emb, length=None)[source]

将Comberts嵌入转换为原始标记

Parameters:
  • emb (torch.Tensor) – 原始嵌入

  • length (torch.Tensor) – 一个一维的相对长度张量。如果提供,填充的位置将被置零。

Returns:

tokens – 一个 (Batch x Length) 的 token 索引张量

Return type:

torch.Tensor

decode_emb(emb, length)[source]

将原始向量嵌入解码为音频

Parameters:
  • emb (torch.Tensor) – 一个 (Batch x Length x Heads x Embedding) 的张量,表示原始的向量嵌入

  • length (torch.Tensor) – 输入对应的长度。

Returns:

audio – 重建的音频

Return type:

torch.Tensor