Midify · Исследование

AI Audio to MIDI: как мы обучили модель на синтетике с проверенной разметкой

Beatloo · 14 минут чтения · Все статьи

Мы сделали MIDI extractor — инструмент экосистемы Beatloo, который переводит в MIDI запись партии гитары, фортепиано или синтезатора. Главное отличие — данные: основа обучения — 160 часов синтетики, отрендеренной 2 271 тембром программного синтезатора, где каждая нота разметки проверена по звуку. Большую модель мы затем дообучили на 85 часах живых записей гитары и фортепиано.

Внутри две модели: Midify Mini на 16 796 параметров по мотивам Spotify Basic Pitch (16 782) и Midify на 4,1 млн. На синтетике с невиденными тембрами Midify набирает note F1 0,848 против 0,557 у Basic Pitch, на живой гитаре из GuitarSet — 0,918 против 0,771, на живом фортепиано из MAESTRO — 0,855 против 0,649. Сравнение неравное в обе стороны: Basic Pitch учился на GuitarSet, а пороги мы подбирали только своим моделям (раздел 1.2).

Расскажем, как из 10 052 тембров мы отобрали 2 856, как устроены модели и какие эксперименты не сработали.

Некоторые результаты оказались неожиданными. Чаще всего модель ошибается не высотой: она дописывает призрачную гармонику — ноту на октаву выше или ниже сыгранной. Живые записи улучшили длительности нот на живой гитаре сильнее, чем всё остальное вместе: F1 с окончаниями вырос с 0,55 до 0,78. Все аудиоаугментации вместе добавили меньше 0,01 F1. Проверку «неслышных» повторных ударов опровергла сама модель.

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

Результаты и сравнение с Basic Pitch

1.1 Итоговый результат

Basic Pitch — последняя публичная модель Spotify для перевода аудио в MIDI; с публикации на ICASSP её веса не обновлялись. Метрика — note F1 по онсетам из mir_eval: допуск ±50 мс по началу ноты и ±50 центов по высоте. Считаем её на четырёх наборах: синтетика с невиденными тембрами и мелодиями (1 267 примеров), поп-мелодии из MIDI-пака (раздел 3.1) на невиденных тембрах (715), живая гитара — GuitarSet, гитарист 05 (60 записей), и живое фортепиано — 40 исполнений из тестовой части MAESTRO (5 ч). На рисунке 1 — среднее по четырём наборам. Пороги у Basic Pitch по умолчанию. У Midify Mini пороги подобраны на синтетической валидации, для живых записей — на гитаристе 04 GuitarSet и валидации MAESTRO. У Midify один набор порогов и правил постобработки для всех наборов, подобранный на тех же гитаристе 04 и валидации MAESTRO.

Рисунок 1. Note F1 в среднем по четырём наборам. Наши замеры.

Мини-модель почти совпадает с Basic Pitch по архитектуре и числу параметров, поэтому её отрыв — 0,17 на синтетике, около 0,10 на гитаре и 0,07 на фортепиано — в основном эффект данных. Большая добавляет ещё 0,12 на синтетике, 0,05 на живой гитаре и 0,14 на живом фортепиано. На поп-мелодиях Basic Pitch пишет много лишних нот (precision 0,427 при recall 0,634), на синтетике примерно поровну пропускает и добавляет (0,545 и 0,569).

Рисунок 2 разбивает результат по категориям инструментов. Синтетические категории посчитаны по всем нотам первых двух наборов — это 285 невиденных тембров; живые гитара и фортепиано — отдельными строками.

Рисунок 2. Note F1 по категориям инструментов. Наши замеры: 285 невиденных тембров, GuitarSet и MAESTRO.

Midify лидирует во всех категориях. Сильнее всего отрыв от Basic Pitch на струнных и духовых, пэдах и басе — 0,35–0,37, меньше всего на живой гитаре — 0,15 и живом фортепиано — 0,21. Слабые места у всех трёх моделей одни и те же: пэды и перегруженная гитара (раздел 1.3).

1.2 Оговорки к сравнению

Basic Pitch учился на GuitarSet, MAESTRO, Slakh, iKala и MedleyDB; GuitarSet при этом не делили по гитаристам, так что записи гитариста 05 он, вероятно, слышал. Midify дообучена на гитаристах 00–03 GuitarSet и 500 исполнениях из обучающей части MAESTRO; гитарист 05 и тестовые исполнения MAESTRO не попадали в обучение ни одной нашей модели. Синтетике помогает домен: тембры теста невиденные, но из того же синтезатора. Подобранные пороги важны мини-модели: с порогами от синтетики она получает на GuitarSet 0,847 вместо 0,870. Midify с порогами из обучения даёт почти то же, что с подобранными: 0,914 на GuitarSet и 0,854 на MAESTRO. Разметка MAESTRO держит ноту, пока нажата педаль sustain, как принято в работах по транскрипции фортепиано; поэтому F1 с окончаниями на фортепиано у всех моделей низкий.

1.3 Где модели ошибаются

Слабее всего у Midify на синтетике перегруженная гитара (0,71) и пэды — тембры с медленной атакой (0,73), см. рисунок 2; пэдов в тесте к тому же больше всего. На перегрузе много лишних нот — по-видимому, это частоты интермодуляции нот аккорда. На живом фортепиано Midify пропускает 22% нот, и девять из десяти пропусков — аккорды от четырёх нот и повторные удары, слитые с предыдущей нотой. Лишних нот на живых записях 6–8% от выданных, из них призрачных гармоник — 2–3%; что мы с ними делали — в разделах 4.6–4.8.

Модели и обучение

Вход у моделей общий: CQT — спектр с логарифмической шкалой частот — аудио 22 050 Гц от ноты A0, 3 бина на полутон, шаг около 11,6 мс. Затем гармонический стекинг: копии спектра сдвигаются так, чтобы гармоники 0,5, 1, 2, …, 7 каждой ноты легли на её основную частоту, и обертоны одной ноты попадают под одну свёртку.

Midify Mini — полностью свёрточная сеть с выходами онсета (88 клавиш), звучания ноты по кадрам (88) и контура высоты (264). Midify — CRNN из четырёх свёрточных блоков (48–96 каналов) и двунаправленного GRU с выходами онсета, звучания, окончания и громкости на 88 клавиш, 4,1 млн параметров. Декодер открывает ноту по пику онсета выше порога и держит её, пока звучание выше второго порога. Для Midify добавлены два правила: слабая нота на октаву, дуодециму или две октавы выше более уверенной отбрасывается, а у клавиш от C6 свой порог онсета. Пороги и правила подбираются сеткой на dev-наборах.

Таблица 1. Характеристики моделей; скорость — во сколько раз быстрее реального времени на CPU

Midify MiniMidify
Параметры16 7964 107 728
Размер файла84 КБ16 МБ
Скорость на CPU~160×~60–90×

Перед долгим запуском модель переобучается на одном батче: если F1 не подходит к единице, ищем ошибку в данных, а не в гиперпараметрах (сейчас — 0,994 за 300 шагов). Учим на случайных окнах 2–4 с: BCE для онсетов (с повышенным весом), звучания и окончаний, MSE для громкости в кадрах онсетов; AdamW, косинусный learning rate, bf16. Midify учится в четыре этапа. Сначала 150 тысяч шагов с нуля на синтетике — около 5,5 часа на одной RTX 5080, чекпойнт выбираем по note F1 на невиденных тембрах валидации. Затем 30 тысяч шагов дообучения, где 60% окон — синтетика, а по 20% — живая гитара и живое фортепиано (раздел 3.4). Потом ещё 40 тысяч шагов с упором на слабые места: 30% окон — живое фортепиано, 10% — пэды (раздел 4.7). Последний этап — ещё 40 тысяч шагов, где в синтетику добавлены мелодии, прогрессии и 808 из архива битмейкеров (раздел 4.8). Чекпойнты дообучения выбираем по гитаристу 04 GuitarSet.

Аугментации считаются на лету — и для синтетики, и для живых записей: реверберация, дилей, дисторшн, хорус, фэйзер, эквалайзер, компрессор, шум и гул 50/60 Гц, срез верхов, mp3-сжатие. Эхо дилея не размечается: модель выписывает только сыгранные ноты.

Данные: мелодии, тембры, разметка

Ниже клип — фрагмент MIDI на 10–30 с, пример — клип, отрендеренный одним тембром, с разметкой. Синтезатор играет не всегда то, что ему прислали: тембр может звучать октавой выше или ниже, «съесть» ноту при нехватке голосов, задержать атаку, замолкнуть раньше note off. Поэтому разметку мы переносим в диапазон тембра и поправляем на всё перечисленное, а затем проверяем каждую ноту на слышимость; примеры, где хоть одна нота не слышна, выбрасываем — это 8–14%.

3.1 Мелодии

Генератор выдал 20 000 клипов в двух стилях:

Хуманизация — темп 50–200 BPM, свинг, сдвиг ±10–20 мс, разброс velocity. Гитарный профиль играет на виртуальном грифе: 6 струн, лады 0–19, только берущиеся аппликатуры, одна нота на струну. Приёмы — бой с задержкой 10–40 мс между струнами, перебор, глушёные удары.

Второй источник — пак реальных MIDI-мелодий: 2 755 файлов, 2 102 клипа, около 8,7 часа. И сгенерированные клипы, и мелодии пака делятся на обучение, валидацию и тест; копии одной мелодии, даже транспонированные, попадают в одну часть.

Третий источник — архив битмейкеров: 65 535 MIDI-файлов мелодий, аккордов и барабанов. Отбор выбросил ударные — по каналу, по имени файла (хеты, кики, клэпы, снейры) и по рисунку нот (роллы хетов: одна нота в узком регистре и частые удары), — а также партии на одной-двух нотах, одиночные аккорды и гаммы, точные и транспонированные дубликаты. Осталось 8 889 файлов; больше половины из них — аккордовые прогрессии, их мы проредили вдвое, и в обучение пошли 6 220. Короткие лупы на 1–8 тактов повторяем до 20 с: вышло 6 709 клипов, около 35 часов.

3.2 Тембры

Робот прокликал браузер пресетов программного синтезатора и захватил 10 052 тембра. Каждый сдаёт экзамен:

По находкам из раздела 3.3 мы позже расширили проверку слоёв (0,33·f0 и 0,25·f0) и добавили проверку эха — повторов в хвосте короткой ноты на одинаковых задержках у двух разных нот.

Рисунок 3. Воронка отбора тембров. QC тембров синтезатора.

Основной экзамен отсеивает около 70% тембров. Эхо нашлось у 227 тембров, но часть из них отсеяли раньше, поэтому последний шаг убирает 214. Сплит — по тембрам: 2 284 в обучении, 284 в валидации, 288 в тесте.

3.3 Рендер и проверка выравнивания

Рендер идёт в 12 процессов, суммарно в 70–95 раз быстрее реального времени. Всего отрендерено больше 200 часов, в обучении — 160: 27 295 примеров на 2 271 из 2 284 обучающих тембров.

Для 20 случайных примеров каждой партии рендера мы накладываем пианорол разметки на CQT-спектрограмму; картинки разбирают ИИ-агенты, часть смотрим сами. Так нашёлся тембр со скрытым слоем на две октавы ниже ноты и тише её на 15–19 дБ: звук есть, а ноты в разметке нет. Ещё нашёлся саксофон с эхом примерно каждые 0,5 с.

3.4 Живые записи

Для дообучения Midify мы взяли два открытых набора с точной разметкой. GuitarSet — акустическая гитара, разметку к которой сняли с гексафонного звукоснимателя: гитаристы 00–03 (2 ч) идут в обучение, 04 — в подбор порогов, 05 — только в тест. MAESTRO v3 — исполнения на рояле Disklavier, где MIDI записан самим инструментом. Из архива на 108 ГБ мы по HTTP Range вытащили 555 исполнений (90 ч) по официальному сплиту: 500 в обучение, 15 в подбор, 40 в тест; одна композиция всегда в одной части. Ноту MAESTRO держим, пока нажата педаль sustain: звук и правда тянется.

Эксперименты: что сработало и что нет

Поколения большой модели мы сравнивали на фиксированном тесте — тестовых тембрах из первых 815, прошедших экзамен; отсюда расхождение в тысячных с синтетическим тестом из раздела 1.

По версиям Midify: v1 0,785 → v2 0,815 → v3 0,833 → v4 0,840 при 34 → 72 → 112 → 178 ч обучающего аудио. Midify Mini при росте данных с 34 до 112 ч прибавила 0,002 (0,725 → 0,727): 17 тысяч параметров данные уже не вмещают. Большая архитектура на тех же данных дала +0,060, следующие +0,055 — три шага по данным при той же архитектуре. В шаге «тембры и аугментации» (+0,018) почти весь прирост дали новые тембры (раздел 4.2). Дальше v5 — архитектура в полтора раза шире, обученная с нуля, — 0,851; v6 — v5 после дообучения на живых записях — 0,844 на этом синтетическом тесте, зато +0,02 на живой гитаре и +0,07 на живом фортепиано (раздел 4.5); v7 — дообучение с упором на фортепиано и пэды — ещё +0,025 на живом фортепиано без потерь в остальном (раздел 4.7); v8 — дообучение с архивом битмейкеров — ещё +0,006 на живом фортепиано и +0,003 на поп-мелодиях (раздел 4.8).

4.1 Модель запоминала клипы

Первая большая модель давала 0,875 на обучающих клипах и 0,785 на тесте. Новые клипы на обучающих тембрах она распознавала почти так же плохо, как невиденные тембры: разрыв с обучающими — около 0,08. Гипотеза: модель запоминает клипы — каждый она видела около 24 раз. Мы добавили 15 000 клипов (они входят в 20 000 из раздела 3.1): тест вырос до 0,815, разрыв сократился до 0,05.

4.2 Аудиоаугментации

Реальные записи приходят с реверберацией, перегрузом и mp3-сжатием. Мы ждали прироста на живой гитаре и обучили одну модель с аугментациями из раздела 2 и без них. Прирост — +0,006 на синтетике и +0,008 на GuitarSet. Результат не совпал с ожиданием, но объяснение есть: GuitarSet записан чисто и не проверяет то, от чего защищают аугментации. Аугментации мы оставили.

4.3 Реальные мелодии из MIDI-пака

Генератор не знает, как устроены настоящие песни: плотность, ритм, голосоведение. Гипотеза: реальные мелодии в обучении поднимут качество на поп-мелодиях. Пак из раздела 3.1 дал +0,031 на поп-мелодиях, а основной синтетический тест не просел (v3 → v4: 0,833 → 0,840). Оговорка: тестовые и обучающие поп-мелодии — из одного пака, хоть и без общих мелодий, так что часть прироста внутридоменная. Пак мы оставили в обучении.

4.4 Повторные удары в пэдах: эксперимент, который не сработал

Две трети нот в пэдах — повторные удары той же высоты, пока предыдущая нота звучит на релизе; модель пропускает около половины из них. Гипотеза: часть ударов синтезатор не озвучивает новой атакой, и разметка врёт. Мы сделали проверку: повторный удар без подъёма энергии на онсете удаляется из звука и разметки, пример перерендеривается. В юнит-тестах на искусственных сигналах проверка работала, а на рендерах датасета пометила неслышными 55% повторных ударов — даже на фортепиано.

Мы сверили проверку с моделью: та находит 68% «неслышных» ударов (95% у баса и органа) и 83% «слышимых». Признак группы почти не разделяет, поэтому проверку мы выключили, а не удалили около миллиона правильных нот. Довод не безупречен: модель могла угадывать повтор по ритму.

4.5 Шире, с нуля и с живыми записями

Мы обучили с нуля две версии на всех данных: прежнюю архитектуру (2,6 млн параметров) и в полтора раза шире (4,1 млн). Широкая на одинаковых шагах шла впереди на 0,01–0,015 и выиграла все тесты: синтетика 0,851 против 0,843, поп-мелодии 0,840 против 0,830, живая гитара 0,888 против 0,874. Затем широкую дообучили 30 тысяч шагов на смеси с живыми записями. Синтетика просела на 0,008, живая гитара выросла до 0,910, живое фортепиано — с 0,763 до 0,834, а F1 с окончаниями на гитаре — с 0,55 до 0,76: живые записи научили модель, где на самом деле заканчивается нота.

4.6 Призрачные гармоники

Разбор лишних нот показал: чаще всего модель ошибается не высотой, а дописывает гармонику — ноту на октаву, дуодециму или две октавы от сыгранной. У прежней Midify это 5% всех выданных нот на синтетике, в основном октава вверх (обертон), и 7–8% на живой гитаре, в основном вниз (субгармоника). Мы попробовали два средства. Первое — штраф в лоссе: молчащие клавиши на этих интервалах от звучащей ноты весят вчетверо больше. Гармоник стало на треть меньше, но на фортепиано выросли пропуски, и средний F1 не изменился, поэтому в релиз пошла модель без штрафа. Второе — правило декодера: слабая нота над более уверенной на гармоническом интервале отбрасывается. Вместе с широкой моделью и живыми записями доля гармоник на живой гитаре упала с 5,4% до 1,9% выданных нот.

4.7 Больше фортепиано и пэдов

После первого дообучения слабыми местами оставались живое фортепиано — пропуски в плотных аккордах и слитые повторные удары — и пэды. Мы докачали MAESTRO до 500 обучающих исполнений (83 ч вместо 25), подняли долю фортепиано в окнах обучения с 20 до 30% и добавили отдельный поток пэдов — 10% окон; тестовые и валидационные исполнения при этом не изменились. Ещё 40 тысяч шагов дообучения дали +0,025 на живом фортепиано (0,824 → 0,849), +0,007 на живой гитаре и +0,004–0,008 на синтетике и поп-мелодиях; пэды выросли с 0,717 до 0,729. Неверных нот стало меньше везде: на живом фортепиано их доля упала с 9,7% до 6,3% выданных нот, на живой гитаре — с 10,4% до 8,9%.

4.8 Мелодии битмейкеров

Чаще всего в MIDI переводят партии из битов: мелодии, аккорды и 808. В генераторе и MIDI-паке таких партий мало, поэтому мы взяли архив битмейкеров (раздел 3.1), отрендерили из него 41 час на тембрах обучения — пятую часть всей синтетики — и ещё 40 тысяч шагов дообучали модель. Тестовую часть архива мы отложили: 578 примеров на невиденных тембрах. На ней F1 вырос с 0,842 до 0,853, на поп-мелодиях — с 0,846 до 0,849, на живом фортепиано — с 0,849 до 0,855, на живой гитаре — с 0,916 до 0,918; синтетика не изменилась. Лишних нот снова стало меньше: на живом фортепиано — 5,6% выданных нот вместо 6,3%, на живой гитаре — 8,3% вместо 8,9%.

Как пользоваться

Перетащите в окно MIDI extractor аудиофайл (mp3, wav, flac, ogg или m4a), а готовый MIDI — из окна в DAW. Ползунки порогов пересобирают ноты без повторного запуска модели — плотность нот подстраивается на слух.

Трёхминутный трек Midify расшифровывает на CPU за 2–3 с. Midify Mini весит 84 КБ и справляется примерно за 1 с.

Если инструментов несколько, включите отделение гитары или фортепиано — дорожку выделит открытая модель разделения на дорожки. Фортепиано она отделяет с протечками, о чём приложение предупреждает.

Попробуйте сами

Перевести аудио в MIDI можно прямо в браузере, ничего не устанавливая. Перетащите MP3 или WAV — и получите MIDI с темпом и тональностью, готовый для любой DAW. Файл нужен только для расшифровки: сервер Beatloo удаляет его сразу после чтения.

Попробовать AI Audio to MIDIВсе статьи