
Wavegrad
Реализация (PYTORCH) Google Brain Brain с высокой точки зрения волнового вокадера (бумага). Первая реализация на GitHub с высококачественным поколением для 6-прежни.
Статус
Фактор в реальном времени (RTF)
Количество параметров : 15.810.401
| Модель | Стабильный | RTX 2080 TI | Тесла К80 | Intel Xeon 2,3 ГГц* |
|---|
| 1000 итераций | + | 9.59 | - | - |
| 100 итераций | + | 0,94 | 5.85 | - |
| 50 итераций | + | 0,45 | 2.92 | - |
| 25 итераций | + | 0,22 | 1.45 | - |
| 12 итераций | + | 0,10 | 0,69 | 4.55 |
| 6 итераций | + | 0,04 | 0,33 | 2.09 |
* Примечание : использовал старую версию процессора Intel Xeon.
О
WaveGrader-это условная модель для генерации формы волны посредством оценки градиентов плотности данных с качеством отбора проб Wavenet. Этот вокадер не является ни Ган, ни нормализующим потоком, ни классической авторегрессивной моделью . Основная концепция Vocoder основана на вероятностных вероятностных моделях диффузии (DDPM), в которых используются рамки динамики Langevin и сопоставление счетов . Кроме того, по сравнению с классическим DDPM, Wavegrad достигает сверхбычной конвергенции (6 итераций и, вероятно, более низких) схемы итерационной выборки динамики WRT Langevin.
Установка
- Клонировать это репо:
git clone https://github.com/ivanvovk/WaveGrad.git
cd WaveGrad
- Установить требования:
pip install -r requirements.txt
Обучение
1 Подготовка данных
- Сделайте поезда и тестируйте файлы ваших аудиоданных, как включенные в папку
filelists . - Сделайте файл конфигурации* в папке
configs .
* Примечание. Если вы собираетесь изменить hop_length для STFT, то убедитесь, что продукт ваших factors UPSampling в конфигурации равен вашему новой hop_length .
2 однократные и распределенные обучение графического процессора
- Открыть сценарий
runs/train.sh и укажите видимые устройства GPU и путь к вашему файлу конфигурации. Если вы указали более одного графического процессора, обучение будет работать в распределенном режиме. - Run
sh runs/train.sh
3 Тенсорсор и регистрация
Чтобы отслеживать процесс обучения запустите Tensorboard от tensorboard --logdir=logs/YOUR_LOGDIR_FOLDER . Вся информация о журнале и контрольные точки будет сохранена в logs/YOUR_LOGDIR_FOLDER . logdir указан в файле конфигурации.
4 Поиск сетки с расписанием шума
После обучения модели поиск в сетке для лучшего графика* для необходимого количества итераций в notebooks/inference.ipynb . Код поддерживает параллелизм, поэтому вы можете указать более одного количества заданий для ускорения поиска.
* Примечание : поиск сетки необходим только для небольшого количества итераций (например, 6 или 7). Для большего числа просто попробуйте Fibonacci Sequence benchmark.fibonacci(...) Инициализация: я использовал его для 25 итерации, и она работает хорошо. Например, из хорошего графика на 25 эксплуатации вы можете построить график более высокого порядка, копируя элементы.
Расписание шума для предварительной модели
- 6-й график был получен с использованием поиска сетки. После, основываясь на полученной схеме, я обнаружил немного лучшее приближение.
- 7-й график был получен таким же образом.
- График 12-й управления был получен таким же образом.
- 25-й график был получен с использованием
benchmark.fibonacci(...) . - 50-й график был получен путем повторяющихся элементов из 25 схемы управления.
- Расписание 100 эксплуатации было получено таким же образом.
- График на 1000 деятелей был получен таким же образом.
Вывод
Кли
Поместите свои мель-спектрограммы в какую-то папку. Сделайте файл. Затем запустите эту команду со своими собственными аргументами:
sh runs/inference.sh -c < your-config > -ch < your-checkpoint > -ns < your-noise-schedule > -m < your-mel-filelist > -v " yes "
Жюрит -тетрадь
Больше деталей вывода приведены в notebooks/inference.ipynb . IPYNB. Там вы также можете найти, как установить график шума для модели и сделать поиск сетки лучшей схемы.
Другой
Сгенерированные звуки
Примеры сгенерированных аудио представлены в папке generated_samples . Деградация качества между выводами 1000 и 6 на 6-й владение не заметна, если найдено наилучшим графиком для последнего.
Предварительные контрольно -пропускные пункты
Вы можете найти предварительно проведенный файл контрольной точки* на LJSPEECH (22 кГц) через эту ссылку Google Drive.
* Примечание : загруженная контрольная точка - это dict с одним ключом 'model' .
Важные детали, проблемы и комментарии
- Во время обучения WaveGrad используется график шума по умолчанию с 1000 итераций и бета-версией линейного масштаба из диапазона (1E-6, 0,01). Для вывода вы можете установить другое расписание с меньшим количеством итераций. Тщательно настройте бета -версии, качество вывода действительно зависит от этого.
- По умолчанию модель работает по смешанному определению. Размер партии модифицируется по сравнению с бумагой (256 -> 96), поскольку авторы обучали свою модель на TPU.
- После ~ 10 тыс. Обучающих итераций (1-2 часа) на одном графическом процессоре модель выполняет хорошее поколение для вывода 50 эксплуатации. Общее время обучения составляет около 1-2 дней (для абсолютной конвергенции).
- В какой -то момент обучение может начать вести себя странно и сумасшедшее (потеря взрывается), поэтому я ввел планирование уровня обучения (LR) и градиент. Если потери взрываются для ваших данных, попробуйте немного уменьшить LR -планировщик Gamma. Это должно помочь.
- По умолчанию длину прыга STFT равна 300 (таким образом, общий коэффициент роста). Другие случаи не проверены, но вы можете попробовать. Помните, что этот общий коэффициент роста должен быть равен вашей новой длине Hop.
История обновлений
- ( Новое : 24.10.2020) Огромное обновление. Распределенная подготовка обучения и смешанного назначения. Более правильная позиционная кодировка. CLI поддержка вывода. Параллельный поиск сетки. Размер модели значительно снизился.
- Новая информация RTF для GPU -карты NVIDIA TESLA K80 (популярная в Google Colab Service) и CPU Intel Xeon 2,3 ГГц.
- Огромное обновление. Новый 6-цепный пример сгенерированного образца. Новый расписание шума API. Добавлен лучший код поиска сетки.
- Улучшение обучения путем введения умного планировщика ставок обучения. Полученный синтез с высокой точностью.
- Стабильное обучение и вывод из многоподобного. 6-й построение шумоподавления поддерживается.
- Стабильное обучение и вывод о фиксированной деятельности со значительным фоновым статическим шумом осталось. Все проблемы позиционного кодирования решаются.
- Стабильное обучение моделей 25-, 50- и 1000-фиксированных данных. Не обнаружил линейного масштабирования (C = 5000 из бумаги) позиционного кодирования (ошибка).
- Стабильное обучение моделей 25-, 50- и 1000-фиксированных данных. Фиксированное позиционное кодирование. Параллельная выборка сегмента заменяется на выборку с полной мелом.
- ( Выпуск, сначала на GitHub ). Параллельная выборка сегмента и разбитая позиционная кодировка. Плохое качество с кликами от конкатенации от генерации параллельного сегмента.
Ссылки
- Nanxin Chen et al., Wavegrad: оценка градиентов для генерации формы волны
- Jonathan Ho et al., Проблемные диффузионные модели
- Репозитория вероятностных диффузионных моделей (реализация TensorFlow), из которого были приняты расчеты диффузии