18+
реклама
18+
Бургер менюБургер меню

Александр Иванов – Python в аудио-спецэффектах. Как работают нейросети изнутри. (страница 3)

18

Как устроена эта книга

Книга состоит из девяти глав. Мы начнём с самого простого — одного искусственного нейрона, — и дойдём до создания собственных нейросетевых аудиоэффектов.

В первой главе мы познакомимся с фундаментом: что такое искусственный нейрон, как из нейронов собирается сеть, что такое обучение и функция потерь. Мы напишем простую полносвязную сеть на PyTorch и научим её классифицировать звуки — отличать речь от музыки, музыку от шума. Это даст нам базовый инструментарий, с которым мы будем работать всю книгу.

Во второй главе мы перейдём к ключевой идее нейросетевой обработки звука: спектрограмма как изображение. Мы узнаем, почему звук для нейросети удобно представлять в виде картинки, и как свёрточные нейросети, изначально придуманные для анализа изображений, оказались невероятно эффективны для анализа звука.

В третьей главе мы углубимся в свёрточные сети. Мы разберём, как они выделяют паттерны на спектрограмме — форманты гласных, обертоны, шумовые всплески, — и используем эти паттерны для классификации и обработки. Мы напишем свёрточную сеть, которая распознаёт музыкальные инструменты по звуку.

В четвёртой главе мы изучим автокодировщики — архитектуру, которая сжимает данные в компактное представление и восстанавливает обратно. Мы применим автокодировщик к спектрограммам и увидим, как он учится выделять самое важное и отбрасывать шум.

В пятой главе мы перейдём к разделению источников. Мы разберём архитектуры вроде Open-Unmix и Demucs, которые способны взять смесь голоса и музыки и разделить её на отдельные дорожки. Мы запустим предобученную модель и разберёмся, как она устроена внутри.

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

В седьмой главе мы займёмся синтезом речи. Мы узнаем, как работают модели Text-to-Speech, и научимся клонировать голос — создавать синтезированную речь, которая звучит как конкретный человек.

В восьмой главе мы переключимся на анализ эмоций в голосе. Мы обучим модель, которая по аудиозаписи определяет, радуется человек, грустит, злится или говорит нейтрально. Мы разберёмся с тем, какие признаки в голосе выдают эмоции.

В девятой главе мы создадим свой уникальный нейросетевой аудиоэффект. Мы придумаем творческую задачу — например, превращение голоса в звук музыкального инструмента или создание гибридного тембра, — и решим её с помощью нейросети.

Бонусная глава соберёт всю трилогию воедино. Мы посмотрим на путь, который мы прошли: от вызова готовых функций в первой книге до создания нейросетевых эффектов в третьей.

Что вам понадобится

Для работы с книгой вам нужен Python 3.9 или новее. Я предполагаю, что у вас уже установлены библиотеки из первых двух книг: numpy, librosa, soundfile, scipy, matplotlib. Если нет — установите их одной командой:

bash

pip install numpy librosa soundfile scipy matplotlib

Главная новая библиотека — PyTorch. Установка зависит от вашей системы, но для большинства пользователей подойдёт:

bash

pip install torch torchaudio

Если у вас есть видеокарта NVIDIA и вы хотите использовать её для ускорения обучения, установите версию с поддержкой CUDA. Инструкции есть на официальном сайте pytorch.org. Если видеокарты нет — не страшно. Все примеры в книге работают на обычном процессоре, просто обучение может занять чуть больше времени.

Вам также понадобится torchaudio — библиотека для работы со звуком, интегрированная с PyTorch. Она умеет загружать аудиофайлы, вычислять спектрограммы и применять аудиоэффекты — и всё это в виде тензоров PyTorch, готовых для подачи в нейросеть.

Для некоторых глав нам понадобятся предобученные модели. Я дам ссылки для скачивания и код для загрузки. Ничего покупать не нужно — всё бесплатно и открыто.

Как читать эту книгу

Главы построены последовательно: каждая следующая опирается на предыдущие. Если вы новичок в нейросетях, читайте по порядку. Если у вас уже есть опыт — можете переходить к интересующим главам, но имейте в виду, что в первой главе вводятся базовые понятия, которые используются дальше.

Каждая глава завершается творческим заданием. Не пропускайте их. Нейросети — это область, где понимание приходит через практику. Можно прочитать десять книг и всё равно не уметь обучить модель. А можно обучить одну модель своими руками — и понять больше, чем из всех книг вместе.

И, как всегда, экспериментируйте. Меняйте параметры. Ломайте код и чините. Нейросети — это не хрупкие конструкции. Они либо работают, либо нет. Когда не работают — это не провал, а приглашение к исследованию.

Пара слов перед стартом

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

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

Глава 1. От нейрона к сети: учим компьютер слышать

«Нейросеть — не чёрный ящик. Это конструктор. Ты можешь собрать его сам»

О чём эта глава

Всё, что мы будем делать в этой книге, строится на одном фундаменте: искусственных нейронных сетях. Шумоподавление, разделение источников, синтез речи, детектор эмоций — все эти впечатляющие технологии начинаются с одной простой идеи. С идеи о том, что компьютер может учиться на примерах. Не выполнять заранее написанные инструкции, а самостоятельно находить закономерности в данных.

В этой главе мы начнём с самого простого — с одного искусственного нейрона. Мы поймём, как он работает, как принимает решения и, главное, как он учится. Мы напишем нейрон на чистом Python, без единой строчки из библиотек глубокого обучения. Мы научим его различать громкий и тихий звук — задача простая, но она даст нам понимание механики обучения.

Затем мы соберём из нейронов полносвязную сеть. Мы узнаем, что такое скрытые слои, функции активации и обратное распространение ошибки. Мы познакомимся с PyTorch — фреймворком, который станет нашим основным инструментом на всю книгу. Мы напишем первую настоящую нейросеть, которая будет классифицировать аудиофрагменты — отличать речь от музыки, а музыку от шума.

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

Зачем нейросети звук

Прежде чем погружаться в нейроны и слои, давайте ответим на простой вопрос: зачем вообще применять нейросети к звуку? У нас уже есть классические алгоритмы. Фильтры. Свёртка. Спектральное вычитание. Они работают. Они понятны. Они не требуют обучающих данных и видеокарт. Зачем усложнять?

Представьте, что вы хотите написать программу, которая отличает лай собаки от плача ребёнка. С помощью классических алгоритмов вы бы пошли примерно таким путём. Вы бы записали десятки примеров лая и плача. Вы бы посмотрели на их спектрограммы. Вы бы заметили, что у лая есть характерные паттерны — короткие всплески в среднем диапазоне частот, у плача — более продолжительные звуки с модуляцией высоты. Вы бы придумали правила: если средняя частота выше X и длительность меньше Y, то это лай. Если есть периодическая модуляция с частотой Z, то это плач.

Этот подход работает. Но у него есть проблемы. Каждый новый звук требует нового набора правил. Плач одного ребёнка может сильно отличаться от плача другого. Лай таксы не похож на лай овчарки. Шум дождя можно спутать с шипением радио. Вам придётся придумывать и настраивать правила для каждого случая, и в какой-то момент сложность станет неуправляемой.

Нейросеть решает эту проблему иначе. Вы не придумываете правила. Вы собираете dataset — набор примеров: тысячу записей лая, тысячу записей плача, тысячу записей шума. Вы показываете их нейросети, и она сама находит закономерности, которые отличают один класс от другого. Ей не нужны формулы для средней частоты и длительности. Она сама выяснит, какие признаки важны, а какие нет.

Более того, нейросеть может найти закономерности, которые человек вообще не замечает. Мелкие детали в фазовом спектре. Тонкие корреляции между далёкими частотами. Паттерны, которые не видны на спектрограмме невооружённым глазом. Именно поэтому нейросетевое шумоподавление работает лучше классического, а нейросетевой синтез речи звучит естественнее, чем механическая сборка из фонем.

Один нейрон: модель, которая учится

Давайте начнём с самого простого строительного блока нейросети — искусственного нейрона. Биологический нейрон получает сигналы от других нейронов через дендриты, обрабатывает их в теле клетки и, если суммарный сигнал достаточно силён, посылает импульс по аксону. Искусственный нейрон работает похоже, но проще.