AI Audio to MIDI: как мы обучили модель на синтетике с проверенной разметкой
Мы сделали 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.
Midify — 0,868 note F1 в среднем, Basic Pitch от Spotify — 0,622
Среднее note F1 по четырём наборам: синтетика, поп-мелодии, живая гитара, живое фортепиано; шкала от 0 до 1
* С учётом GuitarSet, на котором Basic Pitch обучалась, — вероятно, завышено
Мини-модель почти совпадает с 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 невиденных тембров; живые гитара и фортепиано — отдельными строками.
Midify впереди во всех категориях; слабее всего — пэды и перегруженная гитара
Note F1 по онсетам, допуск 50 мс; категории синтезатора — на невиденных тембрах
* Вероятно, завышено: Basic Pitch обучалась на GuitarSet. Перегруженных гитар в тесте всего 6 тембров
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 Mini | Midify | |
|---|---|---|
| Параметры | 16 796 | 4 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 клипов в двух стилях:
- random, 30% — случайные высоты, длительности 30 мс – 4 с, 1–8 нот сразу, онсеты вне сетки; не даёт заучить шаблоны вместо слуха;
- musical, 70% — прогрессии с обращениями, арпеджио, мелодия над аккордами, бас, репетиции, трели, стаккато, паузы.
Хуманизация — темп 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 тембра. Каждый сдаёт экзамен:
- полифония и легато — играет аккорды и не склеивает ноты;
- число голосов — сколько нот звучит сразу без потерь;
- строй и октава — сдвиг высоты по pYIN, оценке основной частоты f0;
- диапазон, латентность, затухание — поправки разметки;
- скрытые слои — энергия на 0,5·f0 и 1,5·f0;
- мусор — длинная нота даёт ровно один онсет;
- velocity — зависит ли громкость от силы удара;
- дубликаты — по спектральным отпечаткам.
По находкам из раздела 3.3 мы позже расширили проверку слоёв (0,33·f0 и 0,25·f0) и добавили проверку эха — повторов в хвосте короткой ноты на одинаковых задержках у двух разных нот.
Из 10 052 тембров в обучение годятся 2 856 — 28 %
Тембров после каждого шага проверки; в скобках — доля от захваченных, справа — сколько отсеяно
Основной экзамен отсеивает около 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 удаляет его сразу после чтения.