Простое введение в синтез звуковой речи

Дипфейки - это реалистичные видео или аудио, созданные на основе выходных данных глубокой нейронной сети. Как и любая технология, в них есть потенциал как для злого умысла, так и для великой доброты. Преступник может использовать ваш голос, чтобы обманом заставить членов вашей семьи отправить им деньги, или врач может использовать ваш голос, чтобы дать кому-то голос, который они потеряли. Сегодня, когда на YouTube и других сайтах по обмену видео доступно огромное количество данных, он становится все более доступным для обучения моделей публичных персонажей. Вы должны использовать это ответственно.

Как

Мы будем создавать персонализированную речь из письменного текста. Это займет несколько часов на настройку и пару ночей тренировок. Однако есть один шаг, о котором нам нужно позаботиться в первую очередь.

Английский может быть сложным. Почему с в кошке произносится как к, а с в сотовом телефоне произносится как с? Эти несоответствия затрудняют изучение английского языка для лиц, не являющихся носителями языка, и, соответственно, модели также затрудняют его понимание. К счастью для нас, на самом деле существует алфавит звуков под названием ARPABET, который может переводить любые стандартные английские слова в соответствующие им звуки. Мы будем использовать это в качестве промежуточного шага, чтобы научить модель, какие звуки мы ищем.

После этого мы будем использовать TacoTron2 + WaveGlow (2018) в качестве нашей модельной архитектуры для генерации речи. Ему несколько лет, но на данный момент это все еще одно из лучших решений для синтеза публичной речи.

TacoTron2 предсказывает визуальное представление речи, называемое мел-спектрограммой, из введенного текста. Это план того, какие частоты нужно включить в любое время. Затем WaveGlow берет эту мел-спектрограмму и синтезирует из нее речь.

Мы можем обучать как Tacotron2, так и WaveGlow, но обучение довольно дорогое (поскольку для этого требуются графические процессоры и время), поэтому мы можем использовать некоторые предварительно обученные контрольные точки модели, которые уже были опубликованы в качестве отправной точки.

Поскольку mel-спектрограмма является более важной из двух при воссоздании чьего-либо голоса, мы сосредоточимся на обучении только Tacotron2 и будем использовать только общедоступную предварительно обученную настройку для WaveGlow.

Шаг 1. Получите набор данных и очистите его (~ 1 час)

Подготовка набора данных обычно является наиболее важной частью этого процесса. Если данные настроены неправильно, модели сложно научиться хорошо учиться.

Для обучения Tacotron2 нам понадобится чистый и отформатированный набор данных речи нашего докладчика. Оптимально, у нас будет пара часов клипов по 2–10 секунд с минимальным фоновым шумом или без него и соответствующими транскрипциями ARPABET. Хотя в некоторых случаях это не всегда возможно.

Кроме того, модели гораздо проще учиться на более мелких сегментах данных, чем вводить данные целиком, почти как карточки для людей. Однако, в отличие от человеческой памяти, модель не понимает, что составляет речь, поэтому мы также хотим минимизировать любые внешние звуки, поскольку модель может случайно уловить и имитировать их.

На первый взгляд это может показаться сложной задачей, но мы будем использовать субтитры YouTube, чтобы создавать эти клипы.

  1. Найдите видео с актером, персонажем или человеком, чей голос вы хотите синтезировать. Опять же, попробуйте найти видео только этого человека с небольшим фоновым звуком. Это не всегда возможно.
    Я, например, воспользуюсь этим видео Робина Уильямса. Поскольку его больше нет с нами, сейчас не так много отличных длинных клипов, поэтому мне может потребоваться дополнительная очистка, чтобы удалить части, где есть довольно много фонового шума, такого как смех или аплодисменты.
  2. Загрузите видео и прилагаемый к нему файл .srt (субтитры). Есть много веб-сайтов, которые сделают это за вас, вот первый от Google.
  3. Разделите аудиоклип на более мелкие части. Вот небольшой фрагмент кода, который вы можете использовать. Это также поместит файлы в правильный формат для обучения. (Скачать с Github)
// splits audio file into multiple smaller wav files and generates a text file with the transcript
python3 srt-parse.py audio.mp4 audio.srt

4. Разделите наборы для обучения и проверки. Данные проверки используются для оптимизации параметров обучения. Данные тестирования и, в меньшей степени, данные проверки, как правило, в большей степени отражают производительность, чем обучение, поскольку они гарантируют, что модель обобщает, а не просто запоминает выходные данные обучающих данных (переобучение). (Скачать с Github)

// takes in a 'csv' file (or any other file with the transcript) and splits it into a training list and a validation list
python3 split.py ./out/out.csv

5. Конвертируйте в ARPABET. (Скачать с Github)

// Add arpabet translations to both train and validation datasets
python3 arpabet.py [directory]/val.txt --out-file [directory]/val-arpa.txt
python3 arpabet.py [directory]/train.txt --out-file [directory]/train-arpa.txt

6. Убедитесь, что звук имеет правильный формат (.wav, частота дискретизации 22050 Гц). Запустите это в терминале из вашего каталога с файлами .wav.

#!/bin/bash

for filename in *.wav; do
    echo "Converting $filename"
    ffmpeg -y -i $filename -ac 1 -acodec pcm_s16le -ar 22050 -sample_fmt s16 converted/$filename    
done

Большой! Теперь мы готовы тренироваться.

Шаг 2. Обучение TacoTron2 (~ 10–16 часов)

Для обучения мы будем использовать этот Google Colab из этого открытого сообщества. В нем много подробностей о том, как настроить TacoTron2 и Waveglow на бесплатных графических процессорах, а также сохранить модели на вашем Google Диске. Вот связанный с ним Tensorboard для отслеживания прогресса.

Обязательно укажите в процессе обучения train-arpa.txt и val-arpa.txt, которые вы создали ранее с файлами .wav из видео YouTube после их загрузки на Google Диск.

Обычно я оставляю его включенным на ночь (и проверяю, не переходит ли мой компьютер в спящий режим). Количество итераций и время, необходимое для обучения, могут сильно различаться, но вы захотите увидеть наклон 1 на графике выравнивания, когда модели будут готовы. Однако, если вы тренировались довольно долго и не видите снижения потерь при проверке, возможно, вам придется вернуться, чтобы просмотреть свои данные. Если в какой-то момент модель прекратит обучение или вы отключитесь, вы всегда можете начать с более поздней контрольной точки, чтобы ваш прогресс не был потерян. Просто не забудьте переименовать выходную папку, чтобы предыдущий прогресс не был перезаписан.

Шаг 3. Синтезируйте голос из спектрограмм (~ 5 минут)

В самом конце обучения Colab вы сможете синтезировать звук и протестировать его. Когда вы будете довольны ходом, вы можете сохранить аудиоклипы в файл.

Заключение

Поздравляю! Сегодня вы:

  1. Изучены различные возможности использования синтеза речи, например, в биотехнологиях.
  2. Узнали, как мы можем использовать YouTube в качестве источника для наборов данных для глубокого обучения.
  3. Понял концепции, лежащие в основе TacoTron2 и WaveGlow в конвейере синтеза речи.
  4. Узнал о ARPABET другом представлении слов
  5. Прочтите о мел-спектрограммах, распространенном способе обработки звука для машинного обучения.
  6. Обученная и усовершенствованная ваша собственная модель речи

Это активная область исследований, которая постоянно совершенствуется. В прошлом году была выпущена новая модель архитектуры под названием ForwardTacoTron, которая синтезирует звук из слов за один прямой проход. Есть и более универсальные альтернативы ARPABET, такие как IPA.

Если вас интересуют другие подобные статьи, не стесняйтесь отправить мне сообщение о том, что вы хотите прочитать дальше!