speechbrain.lobes.models.discrete.dac 模块
该模块支持集成预训练的离散DAC模型。 参考: http://arxiv.org/abs/2306.06546 参考: https://descript.notion.site/Descript-Audio-Codec-11389fce0ce2419891d6591a68f814d5 参考: https://github.com/descriptinc/descript-audio-codec
- Author
舒巴姆·古普塔 2023
摘要
类:
用于音频数据编码和解码的离散自动编码器编解码器 (DAC)。 |
|
一个用于DAC解码器部分的PyTorch模块。 |
|
一个表示解码器架构中块的PyTorch模块。 |
|
一个用于DAC编码器部分的PyTorch模块。 |
|
用于卷积神经网络的编码器块模块。 |
|
用于卷积神经网络的残差单元模块。 |
|
在SoundStream中引入:一个端到端的神经音频编解码器 https://arxiv.org/abs/2107.03312 |
|
一个PyTorch模块,实现了1D中的Snake激活函数。 |
|
向量量化的实现 |
函数:
对一维卷积层应用权重归一化。 |
|
将权重归一化应用于一维转置卷积层。 |
|
根据模型类型、比特率和标签下载指定的模型文件,并将其保存到本地路径。 |
|
初始化一维卷积层的权重。 |
参考
- speechbrain.lobes.models.discrete.dac.download(model_type: str = '44khz', model_bitrate: str = '8kbps', tag: str = 'latest', local_path: Path = None)[source]
根据模型类型、比特率和标签下载指定的模型文件,并将其保存到本地路径。
- Parameters:
- Returns:
模型保存的本地路径。
- Return type:
路径
- Raises:
ValueError – 如果模型类型或比特率不受支持,或者无法找到或下载模型。
- class speechbrain.lobes.models.discrete.dac.VectorQuantize(input_dim: int, codebook_size: int, codebook_dim: int)[source]
基础:
Module向量量化的实现
实现类似于Karpathy的仓库的VQ: https://github.com/karpathy/deep-vector-quantization 此外,使用了改进的VQGAN中的以下技巧 (https://arxiv.org/pdf/2110.04627.pdf):
- Factorized codes: Perform nearest neighbor lookup in low-dimensional space
为了提高码本的使用
- l2-normalized codes: Converts euclidean distance to cosine similarity which
提高训练稳定性
- forward(z: Tensor)[source]
使用固定码本量化输入张量并返回相应的码本向量
- Parameters:
z (torch.Tensor[B x D x T])
- Returns:
torch.Tensor[B x D x T] – 输入的量化连续表示
torch.Tensor[1] – 训练编码器以预测更接近码本条目的向量的承诺损失
torch.Tensor[1] – 更新码本的码本损失
torch.Tensor[B x T] – 码本索引(输入的量化离散表示)
torch.Tensor[B x D x T] – 投影的潜在变量(量化前的输入的连续表示)
- embed_code(embed_id: Tensor)[source]
使用码本权重嵌入ID。
此方法利用码本权重来嵌入给定的ID。
- Parameters:
embed_id (torch.Tensor) – 包含需要嵌入的ID的张量。
- Returns:
应用码本权重后的嵌入输出张量。
- Return type:
torch.Tensor
- class speechbrain.lobes.models.discrete.dac.ResidualVectorQuantize(input_dim: int = 512, n_codebooks: int = 9, codebook_size: int = 1024, codebook_dim: int | list = 8, quantizer_dropout: float = 0.0)[source]
基础:
Module在SoundStream中引入:一个端到端的神经音频编解码器 https://arxiv.org/abs/2107.03312
- Parameters:
Example
使用预训练的RVQ单元。
>>> dac = DAC(load_pretrained=True, model_type="44KHz", model_bitrate="8kbps", tag="latest") >>> quantizer = dac.quantizer >>> continuous_embeddings = torch.randn(1, 1024, 100) # Example shape: [Batch, Channels, Time] >>> discrete_embeddings, codes, _, _, _ = quantizer(continuous_embeddings)
- forward(z, n_quantizers: int = None)[source]
使用一组固定的
n码本对输入张量进行量化,并返回相应的码本向量- Parameters:
z (torch.Tensor) – 形状 [B x D x T]
n_quantizers (int, 可选) –
使用的量化器数量 (n_quantizers < self.n_codebooks 例如:用于量化器丢弃) 注意:如果
self.quantizer_dropout为 True,则忽略此参数在训练模式下,使用随机数量的量化器。
- Returns:
z (torch.Tensor[B x D x T]) – 输入的量化连续表示
codes (torch.Tensor[B x N x T]) – 每个码本的码本索引 (输入的量化离散表示)
latents (torch.Tensor[B x N*D x T]) – 投影的潜在表示(量化前的输入的连续表示)
vq/commitment_loss (torch.Tensor[1]) – 训练编码器以预测更接近码本条目的向量的承诺损失
vq/codebook_loss (torch.Tensor[1]) – 更新码本的码本损失
- class speechbrain.lobes.models.discrete.dac.Snake1d(channels)[source]
基础:
Module一个实现一维Snake激活函数的PyTorch模块。
- Parameters:
channels (int) – 输入张量中的通道数。
- class speechbrain.lobes.models.discrete.dac.ResidualUnit(dim: int = 16, dilation: int = 1)[source]
基础:
Module卷积神经网络的残差单元模块。
- class speechbrain.lobes.models.discrete.dac.EncoderBlock(dim: int = 16, stride: int = 1)[source]
基础:
Module卷积神经网络的编码器块模块。
该模块构建了一个由一系列ResidualUnits和一个最终的Snake1d激活函数组成的编码器块,随后是一个加权归一化的一维卷积。该块可以用作自动编码器等架构中编码器的一部分。
- class speechbrain.lobes.models.discrete.dac.Encoder(d_model: int = 64, strides: list = [2, 4, 8, 8], d_latent: int = 64)[source]
基础:
Module一个用于DAC编码器部分的PyTorch模块。
- Parameters:
Example
创建一个编码器实例 >>> encoder = Encoder() >>> audio_input = torch.randn(1, 1, 44100) # 示例形状:[批次, 通道, 时间] >>> continuous_embedding = encoder(audio_input)
使用预训练的编码器。
>>> dac = DAC(load_pretrained=True, model_type="44KHz", model_bitrate="8kbps", tag="latest") >>> encoder = dac.encoder >>> audio_input = torch.randn(1, 1, 44100) # Example shape: [Batch, Channels, Time] >>> continuous_embeddings = encoder(audio_input)
- class speechbrain.lobes.models.discrete.dac.DecoderBlock(input_dim: int = 16, output_dim: int = 8, stride: int = 1)[source]
基础:
Module一个表示解码器架构中块的PyTorch模块。
- Parameters:
- class speechbrain.lobes.models.discrete.dac.Decoder(input_channel: int, channels: int, rates: List[int], d_out: int = 1)[source]
基础:
Module一个用于DAC解码器部分的PyTorch模块。
- Parameters:
Example
创建一个解码器实例
>>> decoder = Decoder(256, 1536, [8, 8, 4, 2]) >>> discrete_embeddings = torch.randn(2, 256, 200) # Example shape: [Batch, Channels, Time] >>> recovered_audio = decoder(discrete_embeddings)
使用预训练的解码器。请注意,实际输入应为适当的离散表示。 这里使用随机生成的输入来说明用法。
>>> dac = DAC(load_pretrained=True, model_type="44KHz", model_bitrate="8kbps", tag="latest") >>> decoder = dac.decoder >>> discrete_embeddings = torch.randn(1, 1024, 500) # Example shape: [Batch, Channels, Time] >>> recovered_audio = decoder(discrete_embeddings)
- class speechbrain.lobes.models.discrete.dac.DAC(encoder_dim: int = 64, encoder_rates: List[int] = [2, 4, 8, 8], latent_dim: int = None, decoder_dim: int = 1536, decoder_rates: List[int] = [8, 8, 4, 2], n_codebooks: int = 9, codebook_size: int = 1024, codebook_dim: int | list = 8, quantizer_dropout: bool = False, sample_rate: int = 44100, model_type: str = '44khz', model_bitrate: str = '8kbps', tag: str = 'latest', load_path: str = None, strict: bool = False, load_pretrained: bool = False)[source]
基础:
Module用于音频数据编码和解码的离散自动编码器编解码器 (DAC)。
该类实现了一种带有量化的自动编码器架构,用于高效的音频处理。 它包括一个编码器、量化器和解码器,用于将音频数据转换为压缩的潜在表示,并将其重构回音频。 此实现支持初始化新模型和加载预训练模型。
- Parameters:
encoder_dim (int) – 编码器的维度。
encoder_rates (List[int]) – 每个编码器层的下采样率。
latent_dim (int, optional) – 潜在空间的维度,如果为None则自动计算。
decoder_dim (int) – 解码器的维度。
decoder_rates (List[int]) – 每个解码器层的上采样率。
n_codebooks (int) – 用于向量量化的码本数量。
codebook_size (int) – 每个码本的大小。
quantizer_dropout (bool) – 是否在量化器中使用dropout。
sample_rate (int) – 音频数据的采样率。
model_type (str) – 要加载的模型类型(如果是预训练的)。
model_bitrate (str) – 要加载的模型的比特率(如果预训练)。
标签 (str) – 要加载的模型的特定标签(如果预训练)。
load_path (str, 可选) – 加载预训练模型的路径,如果为None则自动下载。
strict (bool) – 是否严格强制执行状态字典匹配。
load_pretrained (bool) – 是否加载预训练模型。
Example
创建一个新的DAC实例:
>>> dac = DAC() >>> audio_data = torch.randn(1, 1, 16000) # Example shape: [Batch, Channels, Time] >>> tokens, embeddings = dac(audio_data)
加载一个预训练的DAC实例:
>>> dac = DAC(load_pretrained=True, model_type="44KHz", model_bitrate="8kbps", tag="latest") >>> audio_data = torch.randn(1, 1, 16000) # Example shape: [Batch, Channels, Time] >>> tokens, embeddings = dac(audio_data)
上述或其他来源获得的标记和离散嵌入可以被解码:
>>> dac = DAC(load_pretrained=True, model_type="44KHz", model_bitrate="8kbps", tag="latest") >>> audio_data = torch.randn(1, 1, 16000) # Example shape: [Batch, Channels, Time] >>> tokens, embeddings = dac(audio_data) >>> decoded_audio = dac.decode(embeddings)
- encode(audio_data: Tensor, n_quantizers: int = None)[source]
对给定的音频数据进行编码并返回量化后的潜在代码
- Parameters:
audio_data (torch.Tensor[B x 1 x T]) – 要编码的音频数据
n_quantizers (int, 可选) – 使用的量化器数量,默认为 None 如果为 None,则使用所有量化器。
- Returns:
“z” (torch.Tensor[B x D x T]) – 输入的量化连续表示
”codes” (torch.Tensor[B x N x T]) – 每个码本的码本索引 (输入的量化离散表示)
”latents” (torch.Tensor[B x N*D x T]) – 投影的潜在表示(量化前的输入的连续表示)
”vq/commitment_loss” (torch.Tensor[1]) – 训练编码器以预测更接近码本条目的向量的承诺损失
”vq/codebook_loss” (torch.Tensor[1]) – 更新码本的码本损失
”length” (int) – 输入音频中的样本数量
- decode(z: Tensor)[source]
解码给定的潜在代码并返回音频数据
- Parameters:
z (torch.Tensor) – 形状 [B x D x T] 输入的量化连续表示
- Returns:
torch.Tensor – 解码后的音频数据。
- Return type:
形状 B x 1 x 长度