Blendshape-дистилляция: как GALA ускорила анимацию аватаров в 7000 раз

Blendshape-дистилляция: как GALA ускорила анимацию аватаров в 7000 раз

Гауссовы аватары научились рисовать фотореалистичные лица быстрее, чем большинство нейросетевых подходов, и на этом их преимущество обычно заканчивается. Рендеринг действительно дешёвый, а вот анимация нет: чтобы перевести выражение лица в новое положение гауссовых примитивов, многие модели прогоняют на каждом кадре полноценную нейросеть. Исследователи из Кореи показали, что 99,9% этой работы избыточны. Их метод GALA заменяет покадровое вычисление линейной комбинацией заранее найденных базисных форм и разгоняет анимацию с 154 миллисекунд до 5,5 на кадр для одной из моделей, что даёт прирост почти в 30 раз на CPU и до 60 кадров в секунду на телефоне.

Что такое гауссовы аватары и почему они медленно анимируются

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

Проблема начинается, когда нужно заставить аватар двигаться. Анимационные параметры приходят из параметрических моделей лица и тела: FLAME для головы, SMPL-X для тела. Это десятки чисел, описывающих выражение, поворот челюсти, позу скелета. Но между этими числами и атрибутами десятков тысяч гауссов стоит обученный декодер, который нужно прогонять для каждого кадра заново.

Авторы называют этот участок вычислений animation path и показывают его цену в таблице: у DynaAvatar, полной модели тела с динамикой одежды, один шаг анимации на CPU занимает 42 917 миллисекунд, то есть больше сорока секунд. Четыре секунды на кадр при 40 тысячах гауссов и двадцати трансформерных блоках: это не анимация, а пакетный рендеринг. Для запуска на телефоне или в браузере такой путь закрыт полностью.

Идея GALA: деформации живут в линейном подпространстве

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

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

Это не то же самое, что классические blendshapes из индустрии анимации. В традиционном подходе формы рисуют вручную или подгоняют под конкретного актёра, и они не переносятся на другое лицо. Здесь базис извлекается из уже обученной модели и по построению общий для всех идентичностей: авторы называют GALA первым методом, который вытаскивает и использует blendshape-базис, разделяемый между людьми. Исходные модели при этом не переобучаются вообще, что для практики важнее большинства архитектурных деталей.

Как строится базис: PCA, чувствительная к рендерингу

Первый шаг: собрать остатки. Исследователи прогоняют обученную модель на большом наборе пар «идентичность, параметры анимации», вычитают нейтральное состояние и получают матрицу отклонений. Дальше по этой матрице строится базис усечённым сингулярным разложением: по теореме Эккарта–Янга это оптимальное приближение заданного ранга в смысле наименьших квадратов.

Наивное решение с глобальным PCA авторы отвергают сразу. Простой базис на весь аватар проигрывает их методу 9,7, 11,5 и 13,2 децибела PSNR на трёх разных моделях, и это разрыв между узнаваемым лицом и мусором. Причина в том, как расходуется память. Глобальные компоненты смешивают группы атрибутов с разными единицами измерения: положение измеряется в метрах, прозрачность в безразмерных числах от нуля до единицы, цвет в коэффициентах сферических гармоник. Дисперсия цвета оказывается на порядки больше дисперсии положения, и разложение тратит весь бюджет на цвет, который почти не влияет на картинку, оставляя геометрию без точности.

Решение: разбить аватар на 32 пространственных блока и строить отдельный базис для каждой группы атрибутов внутри каждого блока. При 32 блоках PSNR растёт до 42,57 против 34,35 при одном блоке для AGORA, и эта зависимость монотонна: 4, 8, 16 блоков дают 37,0, 38,0 и 40,5 децибела соответственно. Локальность важна ещё и потому, что движения лица локальны по своей природе: поднятая бровь не должна менять гауссовы примитивы на затылке.

Второй элемент: метрика, по которой оценивается важность компоненты. Вместо объяснённой дисперсии авторы берут чувствительность отрендеренного изображения к возмущению конкретного атрибута. Формально это диагональный блок матрицы Гессе отображения атрибутов в пиксели, то есть квадрат якобиана рендеринга. Полную матрицу построить невозможно, поэтому её оценивают стохастически: пропускают через рендерер случайный вектор со значениями плюс-минус единица и накапливают блочные произведения. Шестнадцати таких проб на кадр достаточно. Отсюда прямое следствие: компонента, которая двигает гауссов примитив в области, закрытой от камеры или визуально незначимой, получает низкий приоритет независимо от амплитуды движения.

Третий элемент, распределение бюджета. Число компонент на каждую группу и блок выбирается жадно по метрике полезности под фиксированный лимит памяти: 48 мегабайт для двух моделей головы и 88,3 для полной модели тела. Итоговые базисы содержат 1016, 4860 и 2686 компонент соответственно, хранятся в половинной точности для голов и в одинарной для тела. Отдельный контрольный эксперимент показывает, что использование объяснённой дисперсии вместо этой метрики стоит 5,3, 2,7 и 13,3 децибела: метрика важнее, чем кажется.

Сеть коэффициентов: маленькая вместо большой

Когда базис зафиксирован, остаётся задача предсказать коэффициенты по параметрам анимации. Здесь работает обычная регрессия: неглубокая полносвязная сеть с двумя скрытыми слоями, а для полной модели тела с двумя временными свёртками, потому что динамика одежды зависит от истории поз. Обучение идёт на парах, сгенерированных прогоном исходной модели, с функцией потерь в виде среднеквадратичного отклонения от проекции остатка на базис.

Размеры получились на удивление скромными. Для AGORA сеть коэффициентов содержит 0,8 миллиона параметров и занимает 1,6 мегабайта, для FlexAvatar 2,96 миллиона и 5,9 мегабайта, для DynaAvatar 15,2 миллиона и 60,7 мегабайта. Обучение занимает 11 минут на одной видеокарте для первой модели, 5 минут для второй и 45 секунд для третьей. У FlexAvatar дополнительно есть шаг подгонки под конкретного человека: сеть дообучается на выходах исходной модели, потому что этот метод изначально устроен как подгонка идентичности под входные изображения.

Цифры: что даёт дистилляция

Сравнение идёт по каждой модели на её собственном бенчмарке, и картина повторяется трижды.

Для AGORA на FFHQ метрика качества FID ухудшается с 3,17 до 3,47, точность выражения почти не меняется (0,682 против 0,705), а согласованность идентичности даже улучшается с 0,75 до 0,76. Одновременно частота кадров на настольной видеокарте растёт с 250 до 1275, а на телефоне в браузере модель выдаёт 60 кадров в секунду против одной у исходной. Один кадр на телефоне против шестидесяти: это граница между слайд-шоу и живым видео.

Для DynaAvatar на 4D-Dress качество анимации падает совсем немного: PSNR 23,22 против 23,86, LPIPS 0,066 против 0,063. Зато шаг анимации сжимается с 42 917 миллисекунд до 6,1, то есть примерно в 7000 раз, а мобильный браузер выдаёт стабильные 60 кадров в секунду, чего исходная модель не могла вообще.

Для FlexAvatar на портретной анимации VFHQ PSNR снижается с 23,29 до 22,31, а ключевая метрика сохранения личности CSIM даже растёт: с 0,652 до 0,680. Скорость поднимается с 140 до 1296 кадров в секунду на видеокарте и до 60 в мобильном браузере.

Метрики нужно расшифровать, иначе таблица читается как набор чисел. FID сравнивает распределения сгенерированных и реальных изображений: в диапазоне трёх-четырёх значения этого порядка считаются хорошими, а рост на 0,3 почти неразличим на глаз. PSNR измеряет попиксельную близость в децибелах, и потеря 0,6 децибела при анимации это меньше процента. LPIPS оценивает перцептуальное расстояние через признаки нейросети, и рост с 0,063 до 0,066 лежит в шуме измерения. CSIM это косинусная близость признаков распознавания лиц: рост здесь означает, что дистиллированная модель реже теряет лицо человека при сильных изменениях выражения.

Что показали абляции

Помимо разбиения на блоки авторы проверили, что базис действительно хорош, а не просто «достаточен». Сравнение идёт по PSNR между рендерами их модели с спроецированными коэффициентами и выходами исходной модели на отложенных идентичностях, при одинаковом бюджете памяти для всех вариантов.

Если отказаться от покомпонентного распределения памяти, потеря составит от 3,6 до 8,8 децибела. Если оценивать компоненты по объяснённой дисперсии вместо чувствительности рендеринга, потеря достигает 13,3 децибела. Если использовать общий базис вместо разбиения по группам атрибутов, проигрыш ещё больше. Полная конфигурация даёт 42,57, 33,09 и 34,62 децибела для трёх моделей. Сама чувствительная к рендерингу метрика по сравнению с евклидовым PCA добавляет 0,25, 0,35 и 0,58 децибела, то есть основной выигрыш даёт не она, а структура базиса и распределение бюджета.

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

Где метод ломается

Честный раздел ограничений начинается с коэффициентов. Если подставлять точные спроецированные коэффициенты, модель воспроизводит учителя практически идеально. Если использовать предсказанные сетью, PSNR падает на 5,7 децибела для AGORA и на 12,3 для FlexAvatar при бюджете 48 мегабайт. То есть узкое место теперь не в представлении, а в регрессии: сама линейная модель достаточно выразительна, а вот угадать коэффициенты по параметрам анимации сложнее. Увеличение бюджета помогает в основном точным коэффициентам и почти не улучшает предсказанные.

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

В дополнительных материалах есть и прямой пример отказа: для одного из отложенных субъектов сеть коэффициентов выдаёт 23,6 децибела PSNR относительно учителя против 40,2 при точных коэффициентах. Разница в 16,6 децибела между «идеально» и «как получилось» показывает, что регрессия коэффициентов это главный незакрытый участок.

Что это означает на практике

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

Отсюда следуют вполне конкретные сценарии: виртуальные примерочные, где лицо покупателя должно двигаться локально; цифровые ассистенты в приложениях; телеконференции с аватарами; игровые персонажи. Ограничение тоже честное: дистилляция ускоряет компоненту, отвечающую за положение гауссов, но не рендеринг и не передачу данных. Базис на 48-88 мегабайт нужно один раз загрузить, что для мобильного веба терпимо, а для встраиваемых устройств уже нет.

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

Часто задаваемые вопросы

Зачем дистиллировать аватар, если гауссовы модели и так быстрые?

Быстрый у них только рендеринг. Анимация это отдельный участок: чтобы из выражения лица получить новые атрибуты десятков тысяч гауссов, многие модели прогоняют нейросеть на каждом кадре. У DynaAvatar один такой шаг занимает 42,9 секунды на CPU, и никакой быстрый растеризатор это не компенсирует.

Нужно ли переобучать исходную модель?

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

Почему линейное приближение вообще работает для нелинейной сети?

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

Что здесь сложнее всего воспроизвести?

Предсказание коэффициентов. Точные коэффициенты дают почти идеальное совпадение с учителем, а предсказанные сетью теряют от 5,7 до 12,3 децибела, и на отдельных людях разрыв достигает 16,6 децибела. Именно поэтому авторы называют улучшение регрессии главным направлением дальнейшей работы.

Итог

GALA показывает, что дорогое в аватарных моделях не то, что кажется дорогим. Десятки тысяч гауссов рендерятся быстро, а вся стоимость сидит в покадровом прогоне декодера, и этот прогон заменяется линейной комбинацией из общего базиса. Результат: сохранение почти всего качества, ускорение на CPU до трёх порядков и работа на 60 кадрах в секунду в мобильном браузере без единого запуска исходной сети.

Если вы занимаетесь интерактивными аватарами, стоит присмотреться не к самой замене декодера, а к её следствию. Линейность итогового представления означает, что модель можно обучать сразу с базисом внутри, и тогда дистилляция превращается из сжатия готовой сети в проектное решение. А это уже вопрос архитектуры, а не оптимизации.

← Все записи