Почему на выходе VQ-Wav2Vec из FairSeq отсутствуют кадры?

Я использую библиотеку 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-wav2vec обрабатывает каждые 10 мс входной речи (предполагается, что она выбирается с частотой 16K выборок в секунду) и выводит вектор признаков размером [512] выборок для каждой из этих 10 мс речи. Таким образом, учитывая, что входная речь составляет 10000 выборок, мы должны получить 62 кадра ( 62 * 160 = 9920 выборок).

Почему я вижу только 60 кадров?

1 ответ

Решение

Из статьи (arxiv.org/pdf/1904.05862.pdf): "Выходной сигнал кодировщика - это низкочастотное представление функции zi ∈Z, которое кодирует около 30 мс звука с частотой 16 кГц, и в результате шага отображаются представления zi каждые 10 мс." => Окна перекрываются, и это объясняет, почему вы получаете на 2 кадра меньше. Действительно, мы перемещаем окно 30 мс с шагом 10 мс. В вашем примере окно 30 мс занимает 60 различных позиций.

Другие вопросы по тегам