33 / 33 · Генерация звука
Генерация звука: синтез речи и музыка
Инструменты курса в применении к звуку: формы волны и мел-спектрограммы, конвейер синтеза речи, Glow-TTS как нормализующий поток с априорным распределением, заданным текстом, и поиском монотонного выравнивания, нейросетевые аудиокодеки с остаточным векторным квантованием и MusicGen — один трансформер над параллельными потоками кодов с условием на текст, мелодию или начало записи.
Авторегрессионные трансформеры: ImageGPT, VQGAN, DALL·E и Parti · Архитектуры потоков · Варианты VAE: β-VAE и VQ-VAE · Латентная диффузия и Stable Diffusion
На этой странице 11
Предыдущая заметка превращала изображения в последовательности дискретных токенов и генерировала их трансформером, управляя сэмплированием с помощью температуры, top- и classifier-free guidance. Звук ставит ту же задачу в большем масштабе. Одна секунда звука — это десятки тысяч чисел, больше, чем в небольшом изображении, а музыкальное произведение длится минуты. В этой заметке разобраны два ответа. Синтез речи сохраняет непрерывное промежуточное представление — мел-спектрограмму (mel spectrogram), и Glow-TTS генерирует её нормализующим потоком (normalizing flow), априорное распределение которого задаётся текстом. Генерация музыки сжимает форму волны нейросетевым кодеком в несколько параллельных потоков токенов, и MusicGen моделирует их все одним трансформером с условием на текст, мелодию или начало записи.
Обозначения. Форма волны (waveform) — это секунд звука, дискретизированного с частотой отсчётов в секунду. Мел-спектрограмма состоит из частотных полос и кадров. Текст — последовательность токенов : фонем для речи, подслов для описаний музыки. Кодек кодирует форму волны в латентных кадров с частотой кадров и квантует каждый кадр с помощью словарей кодов (codebooks) по векторов в каждом, что даёт коды . Как и в заметках о потоках, поток отображает латентную переменную в данные, , а второй аргумент — дисперсия.
Звук как сигнал#
Микрофон записывает давление воздуха. Если измерять его раз в секунду, получается форма волны — последовательность чисел из , и по теореме отсчётов (теореме Котельникова, sampling theorem) сохраняются частоты до . Речь обычно дискретизируют с частотой от 16 до 22.05 кГц; музыке нужен весь слышимый диапазон, и её записывают с частотой 44.1 или 48 кГц (Copet et al., 2023, §1). Набор данных LJ Speech, стандартный корпус с одним диктором, хранит 16-битный монофонический звук с частотой 22 050 Гц: 352 800 бит и 22 050 чисел в секунду (Ito and Johnson, 2017). Авторегрессионная модель над отдельными отсчётами, например WaveNet (van den Oord et al., 2016), делает один проход сети на отсчёт — 22 050 проходов на секунду речи.
Спектрограмма описывает тот же звук через то, какие частоты в какой момент присутствуют. Оконное преобразование Фурье (short-time Fourier transform, STFT) разрезает форму волны на перекрывающиеся окна и берёт преобразование Фурье каждого из них; амплитуды образуют частотно-временное изображение. Например, при окне в 1024 отсчёта (46.4 мс при 22 050 Гц) и шаге (hop) в 256 отсчётов (11.6 мс) получается кадра в секунду.
Мел-спектрограмма сжимает ось частот так, как это делает слух. Восприятие высоты тона примерно линейно ниже 1 кГц и логарифмично выше, и мел-шкала следует ему; одна из распространённых форм — , она переводит 1000 Гц в 1000 мел, а 11 025 Гц — в 3176 мел. Банк треугольных фильтров, равномерно расположенных по мел-шкале, суммирует амплитуды в полос, узких на низких частотах и широких на высоких, и результат переводится в логарифмическую шкалу. При полосах секунда речи превращается в число вместо 22 050, примерно в 3.2 раза меньше, а соседние кадры сильно коррелированы, что облегчает моделирование последовательности.
Цена — фаза. Амплитуды говорят, сколько в сигнале каждой частоты, но не говорят, как выровнены волны, а банк фильтров к тому же отбрасывает детали, так что мел-спектрограмма не определяет свою форму волны однозначно. Подходящую форму волны должен построить вокодер (vocoder). Классический метод Гриффина–Лима (Griffin and Lim, 1984) поочерёдно переходит между временной и частотной областями, сохраняя заданные амплитуды и заново оценивая фазу; он не требует обучения, но фаза получается лишь приближённой, и в результате слышны артефакты. Нейросетевые вокодеры обучаются этому отображению на данных.
Отсюда два пути этой заметки. Синтез речи генерирует мел-спектрограмму и передаёт её вокодеру. Генерация музыки обучает дискретный код самой формы волны, как VQGAN делал это для изображений, и генерирует код.
Конвейер синтеза речи#
Система синтеза речи по тексту (text-to-speech, TTS) превращает письменный текст в форму волны поэтапно, и каждый этап — условная модель.
- Нормализация текста записывает словами то, что пишется не так, как произносится: числа, даты, сокращения, символы. «Dr. Smith paid £5 on 3 May» нужно превратить в слова, прежде чем что-либо произносить. LJ Speech хранит текст каждого фрагмента дважды: в исходном виде и в нормализованном, где числа, порядковые числительные и денежные единицы записаны словами.
- Преобразование графем в фонемы (grapheme-to-phoneme, G2P) переводит буквы в фонемы, например в символы Международного фонетического алфавита. Английская орфография неоднозначна: «read» произносится двумя способами, а в «though», «through» и «tough» окончание «ough» обозначает три разных гласных. Фонемизатор на правилах, например eSpeak, или обученная модель G2P снимает эту нагрузку с акустической модели.
- Лингвистический и фонетический анализ добавляет то, чего не говорят фонемы: ударение, границы фраз, интонацию. В нейросетевых системах это по большей части неявно делает акустическая модель.
- Акустическая модель переводит последовательность фонем в мел-спектрограмму.
- Вокодер переводит мел-спектрограмму в форму волны.
Акустическая модель сталкивается с главной трудностью TTS — выравниванием (alignment). На входе десятки фонем, на выходе сотни кадров, и сколько кадров длится каждая фонема, в данных не указано. Tacotron 2 (Shen et al., 2018) декодирует кадры авторегрессионно и обучает внимание по входным токенам, которое кадр за кадром решает, какой из них сейчас произносится; затем вокодер WaveNet строит форму волны. Генерация последовательна, а ошибки внимания приводят к пропуску или повтору слов, особенно на длинных или повторяющихся входах (Kim et al., 2020, §1). FastSpeech (Ren et al., 2019) генерирует все кадры параллельно: регулятор длины (length regulator) повторяет скрытый вектор каждой фонемы столько раз, какова её предсказанная длительность. Однако целевые длительности для него берутся из внимания предобученной авторегрессионной модели-учителя, так что параллельная модель всё ещё зависит от внешнего источника выравнивания.
Вокодеры охватывают семейства курса. WaveNet — авторегрессионная модель над отсчётами. WaveGlow (Prenger, Valle and Catanzaro, 2019) — нормализующий поток из гауссовского шума в форму волны с условием на мел-спектрограмму, обученный методом максимального правдоподобия. Быстрее всех GAN-вокодеры: HiFi-GAN (Kong, Kim and Bae, 2020) обучает свёрточный генератор против многомасштабного дискриминатора и многопериодного дискриминатора (multi-period discriminator), поддискриминаторы которого смотрят на каждый -й отсчёт при , чтобы уловить периодическую структуру вокализованной речи; к этому добавляются функция потерь на мел-спектрограммах и функция потерь сопоставления признаков (feature matching). На LJ Speech средняя экспертная оценка (mean opinion score, MOS), которую ему дают слушатели, 4.36, приближается к 4.45 у записей, а работает он в 167.9 раза быстрее реального времени на одном GPU V100. Multi-band MelGAN (Yang et al., 2020) — более лёгкий GAN-вокодер того же рода, а LPCNet (Valin and Skoglund, 2019) сочетает классическое линейное предсказание с небольшой рекуррентной сетью и достаточно дёшев для телефонов и встраиваемых устройств.
Конвейер можно и свернуть в одну модель. VITS (Kim, Kong and Son, 2021) — условный VAE, априорное распределение которого — нормализующий поток с условием на фонемы, а декодер — генератор HiFi-GAN, обучаемый состязательно; он сразу выдаёт форму волны. Голос диктора (speaker identity) — ещё одно условие. Модель с несколькими дикторами либо обучает эмбеддинг для каждого идентификатора диктора, как VITS для 109 дикторов корпуса VCTK, либо получает эмбеддинг диктора, вычисленный отдельным энкодером диктора по эталонной записи. YourTTS (Casanova et al., 2022) строится на VITS с таким энкодером, поэтому короткой записи голоса, которого не было при обучении, достаточно, чтобы синтезировать им новый текст.
Glow-TTS: поток с априорным распределением, заданным текстом#
Glow-TTS (Kim et al., 2020) — параллельная акустическая модель, которая сама обучается выравниванию. Она сочетает две идеи курса: точное правдоподобие нормализующего потока и поиск по выравниваниям с помощью динамического программирования.
Правдоподобие#
Декодер — обратимый поток из латентной последовательности , , в мел-спектрограмму. Для фиксированного выравнивания латентных кадров с токенами текста, определённого ниже, замена переменных даёт
Декодер не видит текста. Текст входит через априорное распределение: текстовый энкодер читает фонемы и выдаёт для каждого токена среднее и стандартные отклонения . Выравнивание указывает, к какому токену относится каждый латентный кадр, и априорное распределение — произведение гауссиан:
Человек читает текст по порядку, не пропуская слов, поэтому от требуется быть монотонным (оно никогда не возвращается назад) и сюръективным (каждый токен получает хотя бы один кадр).
Максимизировать одновременно по параметрам и выравниванию вычислительно неразрешимо (intractable), поэтому обучение чередует два шага. При фиксированных находим наиболее вероятное выравнивание ; при фиксированном делаем градиентный шаг по . Поскольку и логарифм определителя не зависят от , на первом шаге достаточно максимизировать априорное слагаемое. Это обучение по Витерби (Viterbi training): оно максимизирует — правдоподобие при единственном лучшем выравнивании, которое находит описанный ниже поиск. Маргинальное правдоподобие при одном тексте, , потребовало бы модели выравниваний и суммы по всем ним.
Поиск монотонного выравнивания#
Монотонных сюръективных выравниваний — по одному на каждый выбор кадров, с которых начинается новый токен. Для примерно 50 фонем и 430 кадров, пяти секунд речи, это . Поиск монотонного выравнивания (monotonic alignment search, MAS) находит лучшее из них динамическим программированием. Пусть — наибольшее логарифмическое правдоподобие первых кадров, выровненных с первыми токенами так, что кадр приходится на токен . Монотонность и сюръективность оставляют кадру только два варианта, токен или токен , поэтому
Таблица содержит клеток, 21 500 в примере выше. Выравнивание восстанавливается обратным проходом: начинаем с и на каждом предыдущем кадре берём того из двух предшественников, у которого больше. По данным статьи, на CPU это занимает меньше 20 мс на итерацию, менее 2% времени обучения, а при инференсе MAS не нужен.
Разобранный пример. Возьмём три токена с одномерными средними и — значение, которое статья фиксирует при обучении, — и шесть латентных кадров . При имеем , а каждое выравнивание использует каждый кадр ровно один раз, поэтому максимизировать — то же самое, что минимизировать сумму квадратов расстояний , где :
| токен 1, | 0.04 | 0.13 | 5.89 | 6.70 | 20.39 | 37.20 |
| токен 2, | — | 2.93 | 0.29 | 1.50 | 4.39 | 8.80 |
| токен 3, | — | — | 5.49 | 9.90 | 1.59 | 1.60 |
Обратный проход из угла, 1.60, выбирает выделенные клетки: , длительности , суммарная стоимость 1.60 и логарифм априорной плотности . Кадр ближе к (квадрат расстояния 0.81), чем к (1.21). Если отнести каждый кадр к ближайшему среднему, получится с меньшей суммой, 1.20, но это выравнивание возвращается от токена 2 к токену 1, чего читающий человек никогда не делает. MAS платит 1.60 за лучшее из допустимых выравниваний.
Длительности и сэмплирование#
При инференсе нет мел-спектрограммы, с которой можно было бы выравнивать, поэтому выравнивание приходится предсказывать. MAS даёт целевые значения для обучения: длительность токена — число выровненных с ним кадров, , в примере . Предсказатель длительностей (duration predictor) , два свёрточных слоя поверх выхода энкодера , обучается с квадратичной ошибкой на логарифмах длительностей,
где остановка градиента (stop-gradient) не даёт этой функции потерь менять энкодер, который обучается через правдоподобие.
Дальше синтез параллелен. Энкодер даёт ; предсказатель даёт длительности, которые округляются вверх и разворачивают средние и стандартные отклонения в последовательность кадров, как это делает регулятор длины в FastSpeech; латентная переменная сэмплируется как с ; один проход декодера даёт . Температура масштабирует стандартные отклонения априорного распределения. В экспериментах статьи стандартное отклонение фиксировано: (Kim et al., 2020, §4); так же сделано в опубликованной авторами конфигурации и по умолчанию в Coqui TTS (mean_only): энкодер предсказывает только средние, латентная переменная равна , и — стандартное отклонение, используемое при сэмплировании, как в формуле 8 статьи. Разный шум даёт разные акценты и интонацию одного и того же предложения, изменение одного лишь сдвигает высоту тона, сохраняя похожую интонацию, а умножение всех длительностей на константу меняет темп речи; статья показывает множители от 0.5 до 1.25. Слушатели выше всего оценили .
Внутри декодера#
Декодер — стек в стиле Glow (архитектуры потоков). Сначала пары соседних 80-полосных кадров сжимаются (squeeze) в одиночные 160-канальные кадры, что вдвое сокращает длину. Затем каждый из 12 блоков применяет слой ActNorm, обратимую свёртку и аффинный слой связи (affine coupling layer), масштаб и сдвиг которого вычисляет свёрточная сеть в духе WaveNet, как в WaveGlow. Свёртка удешевлена: 160 каналов делятся на 40 групп по четыре, которые перемешиваются одной общей матрицей , так что логарифм её определителя равен , умноженному на число сжатых кадров и на одной матрицы . Энкодер — энкодер Transformer с относительными позиционными представлениями, 6 блоков ширины 192. Во всей модели 28.6 миллиона параметров — меньше, чем 30.1 миллиона у FastSpeech.
На LJ Speech (13 100 фрагментов, около 24 часов) с вокодером WaveGlow слушатели дали Glow-TTS среднюю экспертную оценку 4.01 против 3.88 у Tacotron 2. Записи получили 4.54, а записи, переведённые в мел-спектрограммы и обратно вокодером WaveGlow, — 4.19. Это базовый уровень реконструкции для этого вокодера в этом тесте: точность вокодера — практическое узкое место для любой акустической модели, которая его питает, но оценка, измеренная на восстановленных записях, — не доказанный максимум по всем спектрограммам, которые может выдать акустическая модель, и, как любая оценка слушателей, она несёт неопределённость от слушателей и предложений. Glow-TTS генерировал мел-спектрограммы в 15.7 раза быстрее Tacotron 2, почти за постоянные 40 мс независимо от длины; на минуту речи весь синтез занимал 1.5 секунды, 96% из которых приходилось на вокодер. На длинных предложениях доля ошибок в символах (character error rate) у Tacotron 2 начинала расти примерно после 260 символов, а Glow-TTS оставался устойчивым, потому что жёсткое монотонное выравнивание не может ничего пропустить или повторить. Как собирают и сравнивают такие оценки слушателей, разбирается в заметке об оценке людьми.
Нейросетевые аудиокодеки: звук как токены#
Музыке нужна полная полоса частот и множество перекрывающихся инструментов, а авторегрессионному трансформеру нужны дискретные токены. Ответ, найденный для изображений, переносится и сюда: обучить автоэнкодер с дискретным узким местом (bottleneck), здесь на форме волны, и моделировать его коды. Тридцать секунд музыки при 32 кГц — это 960 000 отсчётов; кодек должен сократить это число на порядки, сохранив звук.
EnCodec#
EnCodec (Défossez et al., 2023) следует SoundStream (Zeghidour et al., 2022). Энкодер — одномерная свёрточная сеть: первая свёртка с 32 каналами, затем четыре блока из остаточного модуля и свёртки с шагом (strided convolution) 2, 4, 5 и 8, причём при каждом понижении разрешения число каналов удваивается, затем двухслойная LSTM и последняя свёртка в каналов. Общий шаг равен отсчётам, так что звук с частотой 24 кГц даёт 75 латентных кадров в секунду, а с частотой 48 кГц — 150. Декодер зеркально повторяет энкодер с транспонированными свёртками. Между ними остаточный векторный квантизатор (residual vector quantizer) превращает каждый кадр в кодов.
Функции потерь — те же, что в семействе VQGAN, адаптированные к звуку. Реконструкция измеряется расстоянием на форме волны и расстояниями и между 64-полосными мел-спектрограммами на семи разрешениях, с окнами от до отсчётов. Многомасштабный STFT-дискриминатор — пять свёрточных сетей одинаковой структуры, работающих на спектрограммах с окнами от 2048 до 128 отсчётов, — добавляет состязательную кусочно-линейную функцию потерь (hinge loss) и функцию потерь сопоставления признаков. Квантизатор добавляет слагаемое привязки (commitment loss). Балансировщик функций потерь (loss balancer) нормирует градиент каждой функции потерь по выходу на его скользящую норму, так что каждая функция потерь вносит в суммарный градиент долю, пропорциональную своему весу, каков бы ни был её естественный масштаб; веса равны 0.1 для временной области, 1 для частотной, 3 для состязательной функции потерь и 3 для сопоставления признаков.
Одна модель обслуживает несколько битрейтов: при обучении в каждом батче сохраняется случайно выбранное число словарей — 2, 4, 8, 16 или 32 при 24 кГц. Необязательный небольшой трансформер предсказывает коды для энтропийного кодирования и экономит ещё до 40%. В тестах прослушивания потоковых моделей (MUSHRA, баллы от 0 до 100) при 6 кбит/с EnCodec получил 83.1 на чистой речи и 92.9 на музыке против 30.1 и 20.6 у кодека Opus при том же битрейте. Внутри MusicGen используется 32-килогерцовый монофонический EnCodec с шагом 640, то есть 50 кадрами в секунду, и четырьмя словарями по 2048 векторов (Copet et al., 2023, §3.1).
Остаточное векторное квантование#
VQ-VAE заменяет каждый вектор энкодера ближайшим элементом одного словаря. Остаточное векторное квантование (residual vector quantization, RVQ) снова и снова квантует то, что при этом остаётся. Для кадра
а декодер получает сумму выбранных векторов,
Сумма телескопически сокращается, поэтому ошибка квантования в точности равна последнему остатку. Код кадра — список из индексов, и этапу нужно описать лишь то, что упустили этапы : его словарь обучается на остатках, которые меньше самих кадров. При это VQ-VAE, и обучение то же: прямой проброс градиента (straight-through estimator) через argmin, слагаемое привязки на каждом этапе, , и словари, обновляемые как скользящие средние назначенных им векторов, причём неиспользуемые элементы заменяются векторами из текущего батча.
Остаточное квантование: три словаря по четыре вектора
Разобранный пример. Рисунок прослеживает один вектор игрушечного облака через три словаря по четыре элемента, каждый из которых подобран k-means к остаткам предыдущих этапов (значения округлены до двух знаков). Вектор с ближе всего к элементу 2 первого словаря, , что оставляет с . Второй словарь выбирает элемент 1, , и остаётся с квадратом нормы 0.51. Третий выбирает элемент 4, , и остаётся с квадратом нормы 0.11. Код — , шесть бит, и декодер восстанавливает . По всем 160 точкам среднеквадратичная ошибка на координату падает с 1.396 (дисперсия облака) до 0.394, 0.137 и 0.051: каждый этап убирает от 63 до 72% оставшегося.
Почему не один большой словарь? Это объясняет пример из SoundStream (Zeghidour et al., 2022, §III-C). При 6 кбит/с и 75 кадрах в секунду на каждый кадр приходится бит. Одному словарю понадобилось бы элементов; восемь остаточных этапов по элемента тратят те же 80 бит, храня 8192 вектора и вычисляя 8192 расстояния на кадр. При том же числе бит один словарь не хуже: возможных сумм RVQ образуют один конкретный словарь такого размера с жадным поиском, поэтому лучший словарь размера по меньшей мере так же хорош. Игрушечное облако показывает разрыв. С 2000 обучающих и 2000 тестовых точек из одного распределения (дисперсия на тесте 1.525 на координату):
| Бит на точку | RVQ: этапы × элементы | Ошибка на тесте | Один словарь: элементы | Ошибка на тесте |
|---|---|---|---|---|
| 2 | 1 × 4 | 0.447 | 4 | 0.447 |
| 4 | 2 × 4 | 0.165 | 16 | 0.139 |
| 6 | 3 × 4 | 0.066 | 64 | 0.044 |
RVQ расплачивается некоторой ошибкой на бит за словарь, который растёт линейно по числу бит, а не экспоненциально. Зато оно даёт ещё два свойства. Первые коды несут больше всего информации, поэтому потоки упорядочены от грубого к точному. А обучение со случайным числом этапов для каждого примера, которое в SoundStream называется дропаутом квантизатора (quantizer dropout), даёт одну модель для многих битрейтов, поскольку отбрасывание последних этапов убирает лишь уточнения.
Сколько бит#
Кодек с словарями по элементов при кадрах в секунду тратит
| Кодек | Частота дискретизации | Шаг | Кадров в секунду | Бит на кадр | Битрейт | ||
|---|---|---|---|---|---|---|---|
| SoundStream, 6 кбит/с | 24 кГц | 320 | 75 | 8 | 1024 | 80 | 6 кбит/с |
| EnCodec, 24 кГц | 24 кГц | 320 | 75 | от 2 до 32 | 1024 | от 20 до 320 | от 1.5 до 24 кбит/с |
| EnCodec, 48 кГц, стерео | 48 кГц | 320 | 150 | от 2 до 16 | 1024 | от 20 до 160 | от 3 до 24 кбит/с |
| EnCodec в MusicGen | 32 кГц | 640 | 50 | 4 | 2048 | 44 | 2.2 кбит/с |
Для кодека MusicGen бит в секунду против для 16-битных отсчётов: в 233 раза меньше. Как последовательность одна секунда — это 200 кодов вместо 32 000 отсчётов. Трансформеру, который, как MusicGen, выдаёт за шаг один кадр из четырёх кодов, нужно 50 шагов на секунду — в 640 раз меньше, чем модели над отдельными отсчётами.
MusicGen: один трансформер над параллельными потоками#
MusicGen (Copet et al., 2023) генерирует четыре потока кодов этого кодека одним авторегрессионным декодером-трансформером с условием на текстовое описание и, по желанию, на мелодию, а затем декодирует коды с помощью EnCodec. Более ранние системы строили над такими потоками каскады из нескольких моделей: MusicLM (Agostinelli et al., 2023) моделирует семантические и акустические токены иерархией трансформеров, а VALL-E (Wang et al., 2023), модель речи, генерирует первый словарь авторегрессионно, а остальные — второй, неавторегрессионной моделью. Вопрос MusicGen — как уложить параллельных потоков так, чтобы их могла предсказывать одна модель.
Чередование словарей#
Точный ответ — развернуть (flatten) коды в одну последовательность, кадр за кадром и внутри кадра словарь за словарём: . Тогда формула умножения вероятностей (chain rule) точно факторизует совместное распределение, как для пикселей, но в последовательности шагов, 6000 на 30 секунд, и выигрыш от низкой частоты кадров частично теряется.
Дешёвый ответ предсказывает несколько кодов за один шаг по одному и тому же прошлому. Предсказывать все кодов кадра вместе — значит моделировать
что точно, только если коды кадра независимы при условии прошлого. В RVQ это не так: этап кодирует в точности то, что упустили этапы до него. Статья описывает все такие варианты как схему (pattern): последовательность множеств , разбивающих клетки , причём каждый словарь входит в каждое множество не более одного раза. На шаге модель параллельно предсказывает все клетки по клеткам . Четыре схемы:
- Развёртка (flattening), по одной клетке на шаг: .
- Параллельная схема (parallel), : , и коды кадра выбираются независимо друг от друга.
- Сначала грубая (coarse first): весь словарь 1, затем словари со 2 по параллельно, кадр за кадром: . Это схема VALL-E в одной модели.
- Задержка (delay), (Copet et al., 2023, формула 6): словарь сдвинут на шагов, поэтому .
Четыре способа уложить четыре потока кодов в шаги генерации
В схеме с задержкой код предсказывается на шаге , после кодов словарей того же кадра, которые приходятся на шаги . Поэтому он видит более грубые коды своего кадра — ту зависимость, которую создаёт RVQ, — почти по цене параллельной схемы. Не видит он более точных кодов последних кадров: код словаря 1 кадра предсказывается на том же шаге, что и код словаря 2 кадра , словаря 3 кадра и словаря 4 кадра . Абляция в статье (таблица 4, модель с 300 миллионами параметров, 30-секундные фрагменты) измеряет этот компромисс расстоянием Фреше для звука (Fréchet audio distance, FAD) — аналогом FID для звука, который вычисляется на эмбеддингах аудиоклассификатора VGGish (Kilgour et al., 2018). Развёртка даёт 0.86 при 6000 шагах, задержка — 0.96 при 1500, «сначала грубая» — 1.98 при 3000, параллельная схема — 2.58 при 1500. Слушатели оценили развёртку и задержку одинаково, в 79.7, а параллельную схему ниже, в 72.2. Схема с задержкой даёт почти то же качество, что и точная факторизация, за четверть её шагов, и MusicGen использует именно её.
Трансформер и его целевая функция#
На шаге вход — сумма эмбеддингов размерности , равной ширине трансформера, по одному из собственной таблицы каждого словаря из элементов; словарь, отсутствующий в , вносит специальный пустой токен. Добавляется синусоидальное кодирование номера . Каждый из слоёв содержит каузальный self-attention по предыдущим шагам, перекрёстное внимание (cross-attention) к условию и полносвязный блок из ширины в и обратно, с нормализацией слоя перед каждым блоком. Выход подаётся на линейных выходных слоёв (heads), по одному на словарь; каждый выдаёт логитов для клетки своего словаря в . Обучение минимизирует кросс-энтропию каждого кода при условии предыдущих шагов,
где — условие. Модели имеют 300 миллионов параметров (, 16 голов, 24 слоя), 1.5 миллиарда (1536, 24, 48) и 3.3 миллиарда (2048, 32, 48). Их обучали на 30-секундных фрагментах 20 000 часов лицензированной музыки (10 000 высококачественных треков и 390 000 инструментальных треков из стоковых коллекций), сведённых в моно при 32 кГц, в течение миллиона шагов с AdamW и батчами по 192.
Условие на текст#
Описание вроде «90s rock song with a guitar riff» кодируется предобученным энкодером T5 (Raffel et al., 2020), который в опубликованных моделях заморожен, и линейно проецируется на ширину декодера: получается последовательность векторов , по одному на токен описания. Каждый слой декодера читает её через перекрёстное внимание: запросы — из звуковых шагов, ключи и значения — из текста, как в U-Net латентной диффузии. Статья пробовала также FLAN-T5 и CLAP — совместный текстово-звуковой эмбеддинг. T5 и FLAN-T5 показали себя одинаково (FAD 3.12 и 3.36 на MusicCaps), CLAP — хуже (4.16). Обучающие описания аугментируются: с вероятностью 0.25 к описанию добавляются метаданные, например жанр, тональность и темп, затем с вероятностью 0.5 отбрасывается само описание, а отдельные слова отбрасываются с вероятностью 0.3.
Classifier-free guidance на логитах#
Как и в латентной диффузии, при обучении условие отбрасывается, здесь с вероятностью 0.2, так что одна сеть учит и , и ; в опубликованных реализациях пустое условие — нулевое текстовое представление. При сэмплировании для каждого кода два набора логитов экстраполируются с масштабом guidance :
Логиты — это логарифмы вероятностей с точностью до своей константы для каждого распределения: и . Отсюда , и softmax убирает константу:
Это тот же наклон (tilt), который направленный score имеет на каждом уровне шума в диффузии, и здесь он точен для одного шага: при данных предыдущих кодах каждый код вытягивается из наклонённого условного распределения. Для всей последовательности сэмплируемое распределение — произведение этих наклонов, каждый из которых нормирован отдельно, и в общем случае это не наклон всей последовательности с одной нормировкой — так же, как диффузия с guidance в общем случае не сэмплирует наклонённое конечное распределение. Записав по формуле Байеса , получаем : безусловное распределение, перевзвешенное неявным классификатором в степени . MusicGen сэмплирует с .
Разобранный пример. Возьмём три кода с и . При ненормированные веса равны , и , что после нормировки даёт . Код, который условие предпочитает сильнее, чем безусловное распределение, забирает почти всю массу, а энтропия падает с 1.49 до 0.50 бита: guidance заставляет сэмплы точнее следовать тексту и меньше различаться между собой. Каждый шаг стоит двух прямых проходов, которые выполняются одним батчем.
Условие на мелодию#
Текст описывает стиль, но не мотив. MusicGen может также следовать мелодии эталонной записи через её хромаграмму (chromagram) — энергию в каждом из 12 звуковысотных классов (pitch classes: C, C♯, …, B, все октавы вместе) во времени. Эталон сначала разделяется на источники с помощью Demucs (Défossez et al., 2019), и его ударные и бас отбрасываются, потому что они доминируют в хромаграмме. Хромаграмма вычисляется с окнами в отсчётов и шагом (0.128 с, около 7.8 кадра в секунду), и в каждом кадре сохраняется только самый сильный звуковысотный класс. Это информационное узкое место важно: с полной хромаграммой модель научилась восстанавливать эталон вместо того, чтобы сочинять. Квантованная хромаграмма подаётся как префикс ко входу декодера, а не через перекрёстное внимание; в опубликованной мелодической модели в тот же префикс помещено и текстовое представление. Размеченные данные о мелодии не нужны. Для модели с 1.5 миллиарда параметров косинусное сходство хромаграмм эталона и выхода выросло с 0.10 без условия на мелодию до 0.66 с ним, а оценки слушателей за соответствие мелодии — с 64.4 до 72.9 (таблица 2).
Продолжение записи#
Кодек работает и в обратном направлении. Первые секунды записи кодируются в коды, укладываются по схеме с задержкой и подаются как начало последовательности; модель продолжает её, с текстовым описанием или без него, и EnCodec декодирует начало и продолжение вместе. Это достраивание изображений из ImageGPT, только со звуком. Ограничения — те же, что у постановки обучения: позиции обучались на 30-секундных фрагментах, 1500 кадрах, и звуковой промпт входит в это число.
Сэмплирование и результаты#
Коды сэмплируются с фильтрацией top-, из 2048 кодов, при температуре 1, после guidance. На бенчмарке MusicCaps модель с 3.3 миллиарда параметров получила лучшее общее качество в тесте прослушивания, 84.8 из 100 против 80.5 у MusicLM, а модель с 1.5 миллиарда — лучшее соответствие тексту, 83.7 (таблица 1). По FAD модель с 300 миллионами параметров, 3.1, превзошла MusicLM, 4.0, но не диффузионную модель Noise2Music, 2.1. Масштаб помогает тексту больше, чем звуку: на тестовом наборе авторов общее качество было максимальным при 1.5 миллиарда параметров (81.9 против 78.3 и 79.2), а соответствие тексту улучшалось монотонно (82.5, 82.9, 83.5; таблица 5).
Что изменилось#
| Трансформеры для изображений (предыдущая заметка) | Glow-TTS | MusicGen | |
|---|---|---|---|
| Генерируемый сигнал | изображение | мел-спектрограмма речи | форма волны музыки при 32 кГц |
| Представление | сетка кодов из одного словаря | непрерывные кадры, в секунду | 4 параллельных потока RVQ, 50 кадров в секунду |
| Генератор | каузальный трансформер, один токен за шаг | нормализующий поток, все кадры за один проход | каузальный трансформер, один шаг по кадрам за проход |
| Правдоподобие | точное по токенам | точное по мел-кадрам при лучшем выравнивании | точное, коды одного шага моделируются как независимые |
| Условие | текстовые токены в последовательности или энкодер | априорные средние из текстового энкодера, длительности из предсказателя | замороженный T5 через перекрёстное внимание; префикс хромаграммы; звуковой префикс |
| Выравнивание с текстом | не нужно | поиск монотонного выравнивания | нет: решает внимание |
| Управление | top-, top-, guidance, переранжирование | температура априорного распределения, масштаб длительностей | top- с , guidance с |
| От кодов к сигналу | декодер VQGAN | отдельный вокодер | декодер EnCodec |
Ограничения#
- Вокодер — узкое место. Записи, пропущенные через мел-спектрограммы и обратно, получили 4.19 против 4.54 у оригиналов; на практике двухэтапную систему ограничивает её второй этап, и оценка реконструкции — обычный ориентир, а не доказанный максимум (как сравнивают такие оценки).
- Один ритм на предложение. Glow-TTS предсказывает длительности детерминированно, поэтому предложение всегда произносится с одними и теми же длительностями; с шумом меняется только интонация. Именно поэтому в VITS добавлен стохастический предсказатель длительностей. Кроме того, обучение по Витерби учится только на лучшем выравнивании.
- Кодек — узкое место. Как FID реконструкций VQGAN служит практическим ориентиром для его трансформера изображений, так качество реконструкции EnCodec при 2.2 кбит/с на практике ограничивает MusicGen.
- Факторизация приближённая. Коды, предсказываемые на одном шаге, считаются независимыми при условии прошлого; схема с задержкой сокращает разрыв с точной развёрткой (FAD 0.96 против 0.86), но не устраняет его.
- Длина. Обучение на 30-секундных фрагментах ограничивает генерацию 30 секундами; более длинные произведения строятся многократным продолжением, без модели их общей формы.
- Последовательное сэмплирование. MusicGen нужно 50 проходов декодера на секунду звука, и каждый — по удвоенному батчу с guidance.
- Управление и данные. Текст даёт грубое управление, в основном через масштаб guidance. Обучающая музыка в основном западная, а самый крупный жанр — Dance/EDM. Клонирование голоса по короткой записи упрощает выдачу себя за другого человека, а речевые корпуса с немногими дикторами приводят к тому, что их голоса легко начинают использоваться слишком широко.
Итоги#
- Звук длинный: от 22 050 до 48 000 отсчётов в секунду. Системы синтеза речи сокращают его мел-спектрограммой, около 6900 чисел на секунду речи, а вокодер восстанавливает фазу; системы генерации музыки обучают дискретный код самой формы волны.
- Конвейер TTS — это нормализация текста, преобразование графем в фонемы, акустическая модель и вокодер. Его главная трудность — выравнивание между десятками фонем и сотнями кадров.
- Glow-TTS — нормализующий поток из мел-кадров в гауссовское априорное распределение, средние которого даёт текстовый энкодер. Поиск монотонного выравнивания находит наиболее вероятное монотонное выравнивание динамическим программированием за ; при инференсе его заменяет предсказатель длительностей, а поток генерирует все кадры за один проход.
- Нейросетевые кодеки, такие как EnCodec, — это VQ-VAE, обучаемые с функциями потерь GAN на формах волны. Остаточное векторное квантование кодирует каждый кадр словарями, каждый из которых квантует остаток предыдущих; ошибка равна последнему остатку, а битрейт — , 2.2 кбит/с для кодека MusicGen.
- MusicGen предсказывает четыре потока кодов одним трансформером. Схема с задержкой сдвигает словарь на шагов, так что каждый код видит более грубые коды своего кадра, а шагов нужно вместо .
- Текст входит через замороженный энкодер T5 и перекрёстное внимание, мелодия — через префикс из argmax-хромаграммы, запись — через свои коды в качестве префикса. Classifier-free guidance на логитах сэмплирует каждый код из при данных предыдущих кодах, с и top- 250.
Ноутбук#
Ноутбук о генерации звука из репозитория HSE-LAMBDA Deep Generative Models запускает синтез речи с библиотекой Coqui TTS и генерацию музыки с MusicGen в Hugging Face Transformers (ячейки нумеруются с 1, считая все ячейки подряд, включая текстовые).
- Ячейки 1–2: конвейер TTS. Оглавление и четыре этапа: предобработка текста с нормализацией и G2P, лингвистический и фонетический анализ, акустическая модель (Tacotron, FastSpeech или VITS) и вокодер (WaveGlow, HiFi-GAN или LPCNet).
- Ячейки 3–5: подготовка. Устанавливаются
transformers,datasets[audio]и пакетTTSот Coqui, а также фонемизатор eSpeak, который Coqui использует для G2P в английском. - Ячейки 6–9: инференс предобученных моделей.
tts --list_modelsпечатает реестр моделей Coqui. Ячейка 8 синтезирует «hello world» модельюtts_models/en/ljspeech/glow-tts— Glow-TTS, обученной на LJ Speech, которой реестр по умолчанию сопоставляет вокодер multi-band MelGAN; ячейка 9 воспроизводит результат. - Ячейки 10–14: идентификаторы дикторов. У модели с одним диктором один голос; модель с несколькими дикторами принимает диктора как условие.
--list_speaker_idxsвыводит дикторовtts_models/en/vctk/vits— сквозной модели VITS, обученной на VCTK, а ячейка 13 синтезирует предложение голосом диктораp341. - Ячейки 15–18: клонирование голоса. Ячейка 16 скачивает энкодер диктора, его конфигурацию и один фрагмент LJ Speech. Ячейка 17 запускает YourTTS (
tts_models/multilingual/multi-dataset/your_tts) с--speaker_wav, указывающим на этот фрагмент, и--language_idx en: энкодер диктора превращает фрагмент в эмбеддинг, который служит условием синтеза. - Ячейки 19–22: данные. LJ Speech скачивается и распаковывается в
tts_train_dir, аBaseDatasetConfigприменяет кmetadata.csvформаттерljspeech; форматтер читает столбец с нормализованным текстом. - Ячейки 23–25: конфигурация обучения.
GlowTTSConfigс размером батча 32 (16 для оценки), 4 процессами загрузки данных, включённой оценкой, синтезом тестовых предложений с первой эпохи (test_delay_epochs=-1), 100 эпохами, очисткой текстаphoneme_cleaners(раскрытие чисел и сокращений), фонемами дляen-usс кэшем фонем, строкой лога каждые 25 шагов, смешанной точностью и контрольной точкой каждые 1000 шагов. Сама модель сохраняет значения библиотеки по умолчанию: 12 блоков потока ширины 192, шестислойный энкодер Transformer с относительными позициями и двумя головами, априорное распределение с , как в статье (mean_only=True), 10 шагов инициализации ActNorm по данным и RAdam с шагом обучения и прогревом Noam на 4000 шагов. - Ячейки 26–28: аудиопроцессор.
AudioProcessor.init_from_configс настройками звука по умолчанию: 22 050 Гц, окно и FFT в 1024 отсчёта, шаг 256, 80 мел-полос от 0 Гц до частоты Найквиста, логарифмические амплитуды, нормированные в , и Griffin–Lim с 60 итерациями для обращения. Это те же настройки, что в разобранных числах раздела «Звук как сигнал». Ячейка 27 фиксируетnumpy==1.21.0(см. проблемы ниже). - Ячейки 29–30: токенизатор.
TTSTokenizer.init_from_configстроит словарь фонем МФА и фонемизатор eSpeak и возвращает обновлённую конфигурацию. - Ячейки 31–32: разбиение.
load_tts_samplesоткладывает для оценки 1% по умолчанию — 131 из 13 100 фрагментов. Примеры — это словари Python с ключамиtext,audio_file,speaker_nameиroot_path; текстовая ячейка 31 всё ещё описывает их как списки. - Ячейки 33–34: модель.
GlowTTS(config, ap, tokenizer, speaker_manager=None)— модель с одним диктором. - Ячейки 35–38: проверка на одном батче. Текстовая ячейка предлагает переобучить модель на одном батче,
train_samples[:batch_size], с помощью «TrainingArgs». Ячейка 36 создаётTrainerArgs(shuffle=False, steps_per_epoch=1, epochs=100, output_path="output/", lr=1e-4, save_step=100, save_optimizer_state=True)иTrainerнаtrain_samples[:1]иeval_samples[:1]; ячейка 37 вызываетtrainer.fit(), а ячейка 38 открывает TensorBoard наtts_train_dir. - Ячейки 39–44: тестирование. Текстовая ячейка говорит, что переобученная модель запоминает своё единственное предложение. Ячейка 41 собирает пути к контрольным точкам и конфигурациям с помощью
glob, но не использует их. Ячейка 43 синтезирует «This is the test script for the GlowTTS model» из жёстко заданной контрольной точки/content/tts_train_dir/run-February-28-2025_01+53PM-0000000/best_model_1624.pth, а ячейка 42 предлагает контрольную точку после 20 эпох по пустой ссылке. Без--vocoder_pathкомандаttsобращает мел-спектрограмму методом Гриффина–Лима, поэтому качество этого теста ограничено восстановлением фазы, как бы хорошо ни была обучена модель. Температура сэмплирования — параметр конфигурацииinference_noise_scale, которыйGlowTTSConfigобъявляет дважды, со значениями 0.33 и затем 0.0; действует второе объявление, так что обученная модель синтезирует из априорных средних, . - Ячейки 45–46: MusicGen в теории. Три части (текстовый энкодер, авторегрессионный декодер, EnCodec), энкодер, квантизатор и декодер EnCodec, подсчёт 4 словаря × 50 кадров = 200 токенов в секунду против 32 000 отсчётов, рекурсия RVQ и сумма , трансформер с эмбеддингами кодов, позициями, self- и cross-attention, кросс-энтропийная целевая функция, схемы чередования и список проектных решений.
- Ячейки 47–52: загрузка.
facebook/musicgen-small, модель с 300 миллионами параметров (комментарий перечисляет medium 1.5B, melody 1.5B и large 3.3B), переносится на GPU, если он есть. - Ячейки 53–54: конфигурация генерации.
model.generation_configсодержитdo_sample=True,guidance_scale=3.0,max_length=1500(30 секунд), а также начальный токен и токен паддинга 2048 — следующий номер после последнего кода. - Ячейки 55–61: безусловная генерация.
get_unconditional_inputs(num_samples=1)даёт нулевое текстовое представление и guidance 1;generate(..., do_sample=True, max_new_tokens=256); звук воспроизводится с частотой кодека 32 000 Гц и сохраняется с помощьюscipy.io.wavfile.write; ячейка 61 вычисляет длительность как256 / frame_rate= 5.12 с. - Ячейки 62–66: генерация по тексту. Процессор токенизирует с паддингом два промпта, романтическую балладу с акустической гитарой и синтвейв-трек в стиле 80-х, и
generate(..., do_sample=True, guidance_scale=3, max_new_tokens=256)генерирует оба; ячейка 66 объясняет масштаб guidance: значения больше 1 включают classifier-free guidance, бо́льшие значения точнее следуют тексту ценой некоторой потери качества, а 3 — рекомендуемое значение по умолчанию. - Ячейки 67–68: генерация по звуковому промпту. Первый фрагмент потоково загружаемой копии GTZAN (999 фрагментов с частотой 32 кГц — той, которую требует процессор) обрезается до первой половины, около 15 секунд, и кодируется вместе с текстом «add heavy drums»;
generateпродолжает его с guidance 3 на 256 шагов. Возвращённый звук содержит промпт, за которым следует продолжение. - Ячейка 69: заключение.
Сохранённые выходы. Их нет: ни одна ячейка ноутбука не запускалась, поэтому он документирует процедуры, и цитировать нечего — ни звуковых сэмплов, ни значений функций потерь, ни времени выполнения.
Проблемы ноутбука.
TrainerArgsне принимает эти аргументы. В пакетеtrainerот CoquiTrainerArgs— это dataclass с полями вродеrestore_path,overfit_batchиsmall_run; полейshuffle,steps_per_epoch,epochs,output_path,lr,save_stepиsave_optimizer_stateу него нет, поэтому ячейка 36 останавливается сTypeError.epochs,lr,save_stepиoutput_path— поля конфигурации модели (GlowTTSConfigих наследует), а остальных трёх нет нигде. Рабочая версия задаёт их в конфигурации и вызываетTrainerArgs()илиTrainerArgs(overfit_batch=True), что обучает на одном батче, как и задумано в текстовой ячейке.- Один пример, а не один батч.
train_samples[:1]обучает на одном фрагменте;train_samples[:batch_size]из текстовой ячейки дал бы батч из 32. - NumPy 1.21.0. Ячейка 27 фиксирует версию, для которой есть сборки (wheels) только под Python 3.7–3.9, а сам
TTS0.22.0 от Coqui требуетnumpy==1.22.0на Python 3.10 иnumpy>=1.24.3на более новых версиях, так что фиксация либо не собирается, либо конфликтует с пакетом. Исходный пакетTTSподдерживает только Python 3.9–3.11 и больше не выпускается; на более новом Python поддерживаемый форкcoqui-ttsустанавливает тот же модульTTSи командуtts. - Энкодер для клонирования голоса. YourTTS поставляется с собственным энкодером диктора и использует его, когда задан только
--speaker_wav;--encoder_pathв ячейке 17 заменяет его энкодером, отдельно скачанным в ячейке 16. (--encoder_configработает как сокращение--encoder_config_path.) - VITS — не акустическая модель. Ячейка 2 относит VITS к моделям, предсказывающим мел-спектрограмму; VITS сразу выдаёт форму волны.
- Две из четырёх схем описаны неверно. Ячейка 46 называет развёрткой «все токены из словаря 1, затем все токены из словаря 2»; развёртка в статье чередует словари внутри каждого кадра, как описано выше. «Схема VALL-E» из первой версии статьи (в окончательной версии она переименована в coarse first) генерирует словарь 1 для всех кадров, а затем остальные параллельно, за шагов; это не вариант параллельной схемы со сдвигами.
- Другие неточности в ячейке 46. Опубликованные модели MusicGen кодируют текст с помощью T5; BART не используется; кодек — 32-килогерцовый EnCodec (48 кГц — стереомодель из статьи об EnCodec); энкодер EnCodec свёрточный с LSTM, а трансформер есть только в его необязательном энтропийном кодере. RVQ не точнее одного словаря при том же битрейте; его преимущество — словарь, который можно хранить и в котором можно искать, как показано выше.
- Top- отличается от статьи. Конфигурация генерации не задаёт
top_k, поэтому Transformers использует своё значение по умолчанию, 50 кодов, тогда как статья и исходная реализация сэмплируют из 250 наиболее вероятных. Передачаtop_k=250вgenerateвоспроизводит настройку статьи. - Длительность немного меньше. С начальным токеном и схемой с задержкой 256 шагов содержат полных кадра, 5.06 с, а не 5.12 с, как в ячейке 61.
- «add heavy drums» — это описание. MusicGen обучался на описаниях звучащей музыки, а не на инструкциях по редактированию, поэтому промпт запрашивает музыку с тяжёлыми ударными, а не правку фрагмента.
Курс в одном абзаце#
Шесть семейств моделей из курса по-разному отвечают на один и тот же вопрос: как обучить генератор, если неизвестно. VAE оценивают правдоподобие снизу с помощью энкодера. GAN обходятся без правдоподобия и обучаются в противостоянии с дискриминатором; те же состязательные функции потерь переводят изображения из одного домена в другой. Нормализующие потоки вычисляют правдоподобие точно с помощью обратимых слоёв. Модели, основанные на энергии, позволяют любой сети задать плотность с точностью до нормирующей константы и расплачиваются за это марковскими цепями при обучении и сэмплировании. Диффузионные модели снова оценивают правдоподобие снизу, с фиксированным энкодером — цепочкой зашумления, — так что оценка сводится к регрессии на шум, или, что то же самое, на score. Авторегрессионные модели вычисляют его точно как произведение условных распределений и платят за это при сэмплировании. Самые большие модели сочетают семейства: дискретный или непрерывный автоэнкодер сжимает изображение или звук, а диффузионная модель или авторегрессионный трансформер генерирует в его латентном пространстве. Все они оцениваются одними и теми же метриками — от Inception Score до точности и полноты и оценки людьми, — и все опираются на KL-дивергенцию и родственные ей величины.
Литература#
- J. Kim, S. Kim, J. Kong, S. Yoon. Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search. NeurIPS, 2020. Поиск монотонного выравнивания — в §3.2 и алгоритме 1; гиперпараметры — в приложении A.2.
- J. Copet, F. Kreuk, I. Gat, T. Remez, D. Kant, G. Synnaeve, Y. Adi, A. Défossez. Simple and Controllable Music Generation. NeurIPS, 2023. MusicGen; схемы укладки кодов — в §2.2, постановка экспериментов — в §3.1, абляции — в §4.4 и приложении A.
- A. Défossez, J. Copet, G. Synnaeve, Y. Adi. High Fidelity Neural Audio Compression. Transactions on Machine Learning Research, 2023. EnCodec.
- N. Zeghidour, A. Luebs, A. Omran, J. Skoglund, M. Tagliasacchi. SoundStream: An End-to-End Neural Audio Codec. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 30, 2022. Остаточное векторное квантование и дропаут квантизатора — в §III-C.
- J. Kong, J. Kim, J. Bae. HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis. NeurIPS, 2020.
- R. Prenger, R. Valle, B. Catanzaro. WaveGlow: A Flow-based Generative Network for Speech Synthesis. ICASSP, 2019.
- A. van den Oord, S. Dieleman, H. Zen, K. Simonyan, O. Vinyals, A. Graves, N. Kalchbrenner, A. Senior, K. Kavukcuoglu. WaveNet: A Generative Model for Raw Audio. arXiv, 2016.
- J. Shen et al. Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions. ICASSP, 2018. Tacotron 2.
- Y. Ren, Y. Ruan, X. Tan, T. Qin, S. Zhao, Z. Zhao, T.-Y. Liu. FastSpeech: Fast, Robust and Controllable Text to Speech. NeurIPS, 2019.
- G. Yang, S. Yang, K. Liu, P. Fang, W. Chen, L. Xie. Multi-band MelGAN: Faster Waveform Generation for High-Quality Text-to-Speech. arXiv, 2020.
- J.-M. Valin, J. Skoglund. LPCNet: Improving Neural Speech Synthesis Through Linear Prediction. ICASSP, 2019.
- J. Kim, J. Kong, J. Son. Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech. ICML, 2021. VITS.
- E. Casanova, J. Weber, C. Shulby, A. Candido Junior, E. Gölge, M. A. Ponti. YourTTS: Towards Zero-Shot Multi-Speaker TTS and Zero-Shot Voice Conversion for everyone. ICML, 2022.
- D. Griffin, J. Lim. Signal Estimation from Modified Short-Time Fourier Transform. IEEE Transactions on Acoustics, Speech, and Signal Processing, 32(2), 1984.
- K. Ito, L. Johnson. The LJ Speech Dataset. 2017.
- C. Wang et al. Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers. arXiv, 2023. VALL-E.
- A. Agostinelli et al. MusicLM: Generating Music From Text. arXiv, 2023.
- C. Raffel, N. Shazeer, A. Roberts, K. Lee, S. Narang, M. Matena, Y. Zhou, W. Li, P. J. Liu. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR, 21(140), 2020. T5.
- K. Kilgour, M. Zuluaga, D. Roblek, M. Sharifi. Fréchet Audio Distance: A Metric for Evaluating Music Enhancement Algorithms. arXiv, 2018.
- A. Défossez, N. Usunier, L. Bottou, F. Bach. Music Source Separation in the Waveform Domain. arXiv, 2019. Demucs.
- J. Ho, T. Salimans. Classifier-Free Diffusion Guidance. NeurIPS Workshop on Deep Generative Models, 2021.