Skip to content

Naive implementation#6

Open
ivanvikhrev wants to merge 4 commits into
itlab-vision:developfrom
ivanvikhrev:develop
Open

Naive implementation#6
ivanvikhrev wants to merge 4 commits into
itlab-vision:developfrom
ivanvikhrev:develop

Conversation

@ivanvikhrev
Copy link
Copy Markdown
Collaborator

Сконвертировал модель для аудио файлов длиной 10 мс и 20 мс. Стало известно несколько вещей:

  1. При конвертации модели мы указываем размер входа, например, для 10 с мы указываем параметр --input_shape "(1, 1000, 161). Соответственно, минимальный размер входа для модели мы можем указать (1, 1, 161), что соответствует 10 мс.
  2. С моделью для 10 мс не работают функции из features.py, похоже, в параметрах там указана минимальная длина аудиофайла и она соответствует 20 мс.
  3. Для модели 20 мс попытался реализовать простое разбиение исходного аудиофайла на блоки с поочередной их обработкой и далее склейкой обратно в целостный аудиофайл. Однако возникла проблема: выход модели длиннее на 160 фреймов, чем исходный аудиофайл. Так, для аудиофайла длиной 5 с и частотой дискретизации (sample rate) 16 кГц мы получаем массив данных размером (5*16000, 1) или (80000, 1). При разбиении на блоки по 20 мс получаем 250 блоков по 320 фреймов. А на выходе после инференса этот же блок уже имеет размер 480.
  4. При склеивании обратно "как есть" получаем замедленное аудио с плохим качеством. Если пытаться вырезать по 320 фреймов из начала, конца или середины страдает качество, но скорость получается нормальная.

@ivanvikhrev
Copy link
Copy Markdown
Collaborator Author

160 фреймов к выходу добавляется в любом случае, независимо от длины входа. Для модели на 10 секунд на вход подается массив (160000,1), а на выходе получаем (160160, 1)

Comment thread speech_denoising.py Outdated
for i in range(nblocks):
out = denoiser.denoise(data[i*block_size:(i+1)*block_size, 0]).reshape(-1, 1)
print(out.shape)
res = np.concatenate((res, out[:out.shape[0]]))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Накладывание текущего кадра на предыдущий

    if i > 0:
           print(i)
           tmpres = res[-160:]
           tmpres += out[:160]
           res[-160:] = tmpres
           res = np.concatenate((res, out[160:out.shape[0]]))
       else:
           res = np.concatenate((res, out[:out.shape[0]]))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants