Skip to content
ИССЛЕДОВАНИЯ
6 мин. чтенияЧитать на английском

Виртуальная примерка очков

Виртуальная примерка очков

Инпейнтинг в латентном пространстве с сохранением идентичности для предпросмотра очков в реальном времени

Автор: Alex Nix Статус: Опубликовано


Аннотация

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

В этом кейсе описана production-система примерки, построенная на ComfyUI-пайплайне, объединяющем LoRA-адаптацию под стили оправ, ControlNet canny для сохранения структуры лица и инпейнтинг в латентном пространстве для бесшовной интеграции. Система решает четыре технических вызова, специфичных для очков: рендеринг прозрачных линз в латентном пространстве, сохранение идентичности глаз при генерации, маскировку бровей для предотвращения деформации оправ и обработку нестандартизированных входных данных. Архитектура легла в основу двух обобщённых фреймворков — Lock Layer Pattern для сохранения идентичности и Typed Reference Composition для мульти-условной генерации.


1. Проблема

Почему очки сложнее одежды

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

Очки ломают это предположение. Оправы располагаются на лице, но глаза должны оставаться глазами пользователя. Линзы прозрачны — они не заменяют кожу, они находятся над ней и преломляют свет сквозь неё. Это создаёт три взаимосвязанных вызова:

  1. Рендеринг прозрачных линз. Латентные диффузионные модели плохо справляются с прозрачностью. Линза в латентном пространстве стремится либо к непрозрачности (закрывая глаз), либо к невидимости (линза не рендерится). У модели нет встроенного понятия «прозрачный материал, преломляющий то, что за ним».

  2. Сохранение идентичности глаз. Цвет глаз пользователя, рисунок радужки, размер зрачка и форма глаз — сигналы идентичности. Любая генерация, изменяющая их — даже незаметно — делает результат «непохожим». Пользователи не формулируют «цвет глаз сместился от орехового к коричневому»; они говорят «это не похоже на меня». Доверие рушится мгновенно.

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

Ограничение пользовательского доверия

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


2. Подход

Архитектура пайплайна

Система реализована как ComfyUI-граф с тремя ключевыми стадиями:

Пайплайн Glasses VTON: обнаружение лица → извлечение canny-контуров → LoRA-кондишнинг оправы → ControlNet-инпейнтинг → результат
Пайплайн Glasses VTON: обнаружение лица → извлечение canny-контуров → LoRA-кондишнинг оправы → ControlNet-инпейнтинг → результат

Стадия 1 — Анализ лица и генерация маски. Входной портрет анализируется на предмет позиций лицевых ориентиров. Генерируется точная маска инпейнтинга, покрывающая область глаз — оправы, линзы и окружающую зону — с исключением бровей (критический нюанс, обсуждаемый в §3.3).

Стадия 2 — Структурный кондишнинг через ControlNet. Canny-детектор извлекает структурные контуры лица: линию челюсти, переносицу, контур глазницы. ControlNet (canny-модель) получает эти контуры как структурное условие, обеспечивая соответствие генерации базовой геометрии лица. Canny-карта включает желаемую форму оправы из целевого стиля LoRA.

Стадия 3 — LoRA-обусловленный инпейнтинг. Инпейнтинговая диффузионная модель, кондиционированная на структурную карту ControlNet и LoRA-адаптер, обученный на целевом стиле оправы, генерирует область очков. LoRA кодирует геометрию оправы, материал и цвет; ControlNet привязывает её к лицу; инпейнтинговая модель вписывает результат в окружающий контекст.

Почему именно такая комбинация

  • LoRA вместо полного файн-тюнинга: Стили оправ меняются сезонно. LoRA-адаптеры обучаются на ~20-30 референсных изображений менее чем за час, в отличие от полного файн-тюнинга, требующего сотни изображений и часы вычислений. Новые стили поставляются как новые адаптеры.

  • ControlNet вместо чисто текстового кондишнинга: «Авиаторные очки на лице» — неоднозначно; модель не знает, какое лицо и какого размера. Canny-карта кодирует точную структуру лица и желаемое расположение оправы, устраняя неоднозначность.

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


3. Ключевые технические вызовы

3.1 Рендеринг прозрачных линз в латентном пространстве

Латентная диффузия работает в сжатом представлении. Прозрачность — свойство «показывать то, что позади, но модифицированно» — не имеет чистой кодировки в латентном пространстве. Модель склонна к одному из двух:

  • Заполнить область линзы непрозрачно, полностью закрывая глаз (модель воспринимает область линз как «очки = заполнено»)
  • Пропустить линзу, рендеря только оправы (модель не может примирить «присутствует, но прозрачно»)

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

3.2 Сохранение идентичности глаз

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

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

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

Эта техника непосредственно легла в основу Lock Layer Pattern — общего принципа разделения «что не должно измениться» и «что генерируется».

3.3 Маскировка бровей

Неожиданный мод отказа: без явного исключения бровей из маски инпейнтинга модель деформировала брови под форму оправы. Тонкие оправы утончали брови; массивные оправы утолщали их. Модель воспринимала всю замаскированную область как «относящуюся к очкам» и гармонизировала всё — включая не связанные с очками черты лица.

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

3.4 Обработка нестандартизированных входных данных

Пользовательские фотографии сильно варьируются: разное освещение, ракурсы, разрешения, фоны, частичная окклюзия (волосы на глазах), аксессуары (имеющиеся очки, солнцезащитные очки). Пайплайн справляется через:

  • Автоматическое обнаружение и выравнивание лица перед обработкой
  • Резервные пути для экстремальных ракурсов (более ~30° от оси — система помечает входные данные, а не выдаёт плохой результат)
  • Нормализующий препроцессинг по освещению и балансу белого, обеспечивающий стабильное поведение LoRA при различных входных условиях

4. Результаты

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

Система обеспечивает:

  • Сохранение идентичности глаз с пиксельной точностью — сгенерированные глаза совпадают с входными без заметного дрейфа в цвете, форме или положении.
  • Рендеринг прозрачных линз, воспринимаемый как «стекло поверх моих глаз», а не «цветные фильтры» или «отсутствующие линзы». Оттенок линз тонкий и реалистичный.
  • Интеграцию оправы, учитывающую геометрию лица — оправы корректно располагаются на переносице, заушники совпадают с шириной головы, тени и освещение согласованы.
  • Согласованность стилей между разными LoRA-адаптерами — смена стиля оправы даёт визуально связные результаты без перенастройки пайплайна.

5. Уроки и эволюция

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

Lock Layer Pattern. Техника блокировки глаз в латентном пространстве — ограничение определённых идентификационных признаков при генерации с одновременным допуском творческой вариации в остальных областях — обобщена в Lock Layer Pattern. Паттерн разделяет ограничения сохранения и генеративные инструкции, воспроизводя слой сохранения дословно на каждой генерации в batch'е. То, что началось как «не меняй глаза», стало «не меняй идентичность, бренд, продукт».

Typed Reference Composition. Мульти-условная архитектура — LoRA для стиля, ControlNet для структуры, маска инпейнтинга для региона — эволюционировала в Typed Reference Composition. Общий принцип: разные типы визуальной информации (стиль, структура, идентичность, регион) должны передаваться через выделенные типизированные каналы кондишнинга, а не конкурировать внутри одного промпта.

Определённые следующие шаги

  • Видео-примерка: Расширение однофреймового пайплайна до видео с временной согласованностью между кадрами.
  • Физическая точность: Замена перцептуальной аппроксимации линз на основанную на физике модель преломления для рендеринга линз более высокой точности.
  • Мультиракурсный синтез: Генерация результатов примерки с одного входного фото в нескольких ракурсах головы с использованием face-aware 3D-априори.

Литература

  • ControlNet: Zhang, Lv, et al. "Adding Conditional Control to Text-to-Image Diffusion Models." ICCV 2023.
  • LoRA: Hu, Shen, et al. "LoRA: Low-Rank Adaptation of Large Language Models." ICLR 2022.
  • ComfyUI: Node-based GUI for Stable Diffusion. github.com/comfyanonymous/ComfyUI