我正在使用fairseq库运行一个示例代码,用于使用VQ-Wav2Vec代码进行特征提取,如下所示:
In [6]: import torch
...: from fairseq.models.wav2vec import Wav2VecModel
In [7]: cp = torch.load('wav2vec_models/checkpoint_best.pt')
...: model = Wav2VecModel.build_model(cp['args'], task=None)
...: model.load_state_dict(cp['model'])
...: model.eval()
In [9]: wav_input_16khz = torch.randn(1,10000)
...: z = model.feature_extractor(wav_input_16khz)
...: f, idxs = model.vector_quantizer.forward_idx(z)
...: print(idxs.shape, f.shape)
>>>> torch.Size([1, 60, 4]) torch.Size([1, 512, 60])我的理解是,vq- each 2vec每10ms处理一次输入语音(假设以16K样本/秒的速度采样)样本,并为这10ms语音中的每一个输出512个样本的特征向量。因此,假设输入语音是10000个样本,我们应该获得62帧( 62 * 160 = 9920个样本)。
为什么我只看到60帧?
发布于 2020-06-15 04:12:31
来自文章(arxiv.org/pdf/1904.05862.pdf):“编码器的输出是一个低频特征表示zi kHz Z,它编码大约30毫秒的16 kHz音频和步进结果表示zi每10ms。”=>窗口是重叠的,这就解释了为什么你得到的帧减少了2帧。实际上,我们正在以10毫秒的步长移动30毫秒的窗口。在您的示例中,30ms窗口采用60个不同的位置。
https://stackoverflow.com/questions/62376687
复制相似问题