- BrainTools - https://www.braintools.ru -
В условиях жесткой конкуренции на рынке отделочных материалов любому магазину жизненно необходимо хоть какое-то осязаемое преимущество. Стандартными каталогами и скидками уже никого не удивить. Так у нас родилась идея: сделать онлайн-примерочную обоев. Кажется, звучит как киллер-фича — дать клиенту возможность до покупки увидеть, как конкретный паттерн будет смотреться в его реальном интерьере.
На тот момент на рынке вовсю хайповали генеративные модели (такие как «Nano Banana»). На первый взгляд казалось, что проблема решается в два клика. План был надежен, как швейцарские часы: получить API-ключ, отправить по эндпоинту фотографию интерьера и текстуру обоев, сопроводить это правильным промптом (с указанием учитывать перспективу, освещение и масштаб) и забирать готовый результат.
Но на практике оказалось, что задача не просто нетривиальная. Она вскрыла целый пласт проблем.
Наш первый кандидат — реальная и мощная модель Google Nano Banana Pro — сразу преподнес неприятный сюрприз. После первых тестов и долгих манипуляций с промптами нас ждало разочарование. Выяснилось, что Nano Banana Pro в некоторых случаях ведет себя слишком «творчески». Вместо аккуратной замены обоев она могла кардинально изменить планировку квартиры на ту, которая ей кажется более удобной, а большинство текстур натягивала как фотообои или огромное панно, полностью игнорируя реальные размеры паттерна (раппорт).

Для продакшена (да и даже для пилотного запуска) такие галлюцинации недопустимы. Мы поняли, что базовое решение не работает, и начали тестировать другие доступные альтернативы: от актуальных версий Flux Pro до свежих генеративок вроде ChatGPT Image 2, а также специализированные B2B-сервисы вроде Wizart.
Вот краткая сводка наших наблюдений.
Flux
Flux показал себя двояко. По размерам паттерна он в большинстве случаев выдавал более-менее приемлемый результат, но стабильно искажал саму текстуру. Местами обои превращались в откровенную «кашу», причем иногда на абсолютно ровном месте.
Стабильно покрывает все стены, отлично работает с естественным освещением и тенями.
Систематически дорисовывает лишние выключатели, розетки и фурнитуру. Нередко искажает рисунок (особенно ломаются сложные текстуры: дамаск, строгая геометрия). Периодически самовольно меняет цвет текстуры, делая ее темнее оригинала.

OpenAI (ChatGPT Image 2.0)
Модель от OpenAI приглянулась нам больше остальных. Она вроде бы справлялась с задачей концептуально, но мы решили провести стресс-тест на сложных паттернах.
Отлично удерживает геометрию помещения, не страдает галлюцинациями (не дорисовывает лишние элементы из воздуха), дает стабильное освещение.
Чаще остальных работает методом «приблизительной отрисовки». Рисунок остается узнаваемым, но искажается. Главная боль [1] — масштаб плавает. Нейросети просто «лень» возиться с мелким паттерном на дальней стене (где узор физически должен быть меньше из-за перспективы), поэтому она искусственно увеличивает размер текстуры. Возникает парадокс [2]: сам рисунок сохранен идеально, но на стене висит гигантское панно. В одном из кейсов модель вообще обрезала часть кадра.

Wizart
Последний мы тестировали как профильное решение. Но для продакшена в плане реалистичности он совершенно не подошел. Не совсем понятно, почему обойные фабрики ставят его себе на сайты (вероятно, подкупает удобная инфраструктура, готовый поиск и интеграции).
Очень бережно относится к самой текстуре (рисунок сохраняется почти всегда), не мусорит на стенах лишними объектами.
Неполное покрытие стен с «рваными» масками во всех наших тестах. Неестественное освещение и тени. Сильные перспективные искажения на углах.

Стало очевидно, что готовые генеративные модели слепы к строгой геометрии реального пространства. Они не учитывают масштаб раппорта обоев, «плывут» в перспективе конкретной стены.
Раскрывать полную архитектуру нашего движка и то, как именно мы процессим фотографии в реальном времени, я не буду — это тайна проекта RoomRUM. Но я расскажу о фундаменте, на котором этот движок работает.
Фундамент любой ML-модели — это данные. Вместо того чтобы городить сложные костыли вокруг готовых API, мы пошли по пути создания эталонного датасета. Мы принципиально отказались от академических выборок и собрали собственный коммерчески чистый массив. За основу взяли фотографии со стоков и открытые датасеты с лицензией Public Domain. Отфильтровали нужные нам интерьеры и приступили к разметке
Для сборки эталонного датасета, на котором мы планировали дообучать модель, мы автоматизировали всё, что только поддавалось автоматизации, а остальное дожимали руками, разбив процесс на четкие этапы:
Базовую разметку стен мы делали через связку Grounded-SAM (где Grounding DINO находит объекты по текстовому промпту «стена», а SAM вырезает их), чтобы сходу получать маски с ровными краями.
Для сохранения реализма использовали методы разделения изображения на составляющие. Программно извлекали из исходника приближенную маску теней и бликов и накладывали её поверх обоев через базовые режимы блендинга.
Автоматика часто ошибается на стыках с мебелью, вокруг окон и в углах. Поэтому мы посадили одного человека дочищать результат руками. Ювелирно правил маски, корректировал перспективные искажения паттерна на сложных углах и затирал артефакты теней.
Итог этой рутины — мы собрали и выверили около 1700 эталонных пар вида: Оригинальный интерьер ➔ Раппорт обоев ➔ Качественное наложение с визуально достоверным масштабом и перспективой.
Имея на руках этот чистый эталонный датасет, мы перешли к файн-тюнингу (в нашем случае — обучению [3] кастомных модулей ControlNet и Inpainting поверх базовой архитектуры Stable Diffusion). Разбили выборку на train и validation и начали «скармливать» эти пары нашему пайплайну. Главная задача состояла в том, чтобы заставить алгоритм на этих 1700 примерах выявить, как визуально соотносятся размер комнаты и масштаб паттерна. По 2D-фотографии невозможно вычислить абсолютный размер стены в сантиметрах, поэтому мы учили алгоритм не точной геометрии до миллиметра, а умению выстраивать правдоподобную перспективную логику [4] и масштаб текстуры. Обучение крутилось на арендованных кластерах с GPU A100. Мы прогнали около 100 эпох, пока метрика validation loss не вышла на стабильное плато. После этого перешли к визуальным тестам.
В результате наш алгоритм действительно научился автоматически удерживать масштаб текстур и аккуратно обходить препятствия. (Хотя, справедливости ради, до идеала было еще далеко: даже после такого обучения всплыли обидные артефакты, с которыми пришлось бороться отдельно).
Для академической статьи сравнивать нашу модель с универсальной генеративной моделью было бы некорректно. Но для бизнеса, который ищет готовое решение «из коробки», это абсолютно реальный выбор. Мы решили столкнуть лбами нашу модель и лучшее проприетарное API — ChatGPT Image 2.0 (использовались стандартные параметры генерации quality: "auto", при этом мы постарались выжать из OpenAI максимум через точный промпт-инжиниринг).
Условия бенчмарка (Май 2026):
Задача: Замена обоев на стенах в фотографиях жилых помещений.
Тестовый набор: 50 интерьерных фотографий с эталонной парой «исходное помещение / целевые обои». Сцены покрывают широкий диапазон: пустые и плотно заставленные комнаты, разный свет, колонны, ниши, зеркала. Текстуры — от однотонного льна до сложных дамасков.
Тип оценки: Ручная экспертная оценка (single-shot) по 4 критериям
Шкала: 0–2 (2 — без замечаний, 1 — частичное соответствие, 0 — критическое отклонение). Максимальный балл за одно фото: 8. Максимум для модели: 400.
Критерии оценки
|
Что оценивается |
2 балла (Идеал) |
1 балл |
0 баллов |
|
Color Сохранение оттенка |
Цвет идентичен эталону |
Заметный сдвиг (светлее/темнее) |
Цвет не сохранён вообще |
|
Texture |
Рисунок виден на всех планах |
Имитация: детализация теряется вдали |
Рисунок заменён на другой |
|
Size |
Совпадает с эталоном |
Незначительно крупнее |
Значительно крупнее (эффект панно) или меньше |
|
Geometry Пространство и объекты |
Геометрия сцены не изменена |
Мелкие баги (пропала труба/розетка) |
Изменены пропорции, заклеены двери |
Примечание: в этом тесте не оценивались время генерации и стоимость инференса. Также мы умышленно не выносили в отдельную метрику реалистичность освещения: современные генеративные модели сами по себе отлично справляются с тенями и релайтингом «из коробки». Мы сфокусировались на том, что ломается чаще всего — удержании масштаба и геометрии.
Сводные результаты
|
Категория |
ChatGPT Image 2.0 |
RoomRUM 1.0 |
|
Color (Цвет) |
99/100 (99%) |
94/100 (94%) |
|
Texture (Текстура) |
68/100 (68%) |
63/100 (63%) |
|
Size (Масштаб) |
46/100 (46%) |
94/100 (94%) |
|
Geometry (Геометрия) |
73/100 (73%) |
85/100 (85%) |
|
ИТОГО |
286/400 (71,5%) |
336/400 (84,0%) |
На отфильтрованном подмножестве фотографий, которые наш алгоритм признал пригодными для обработки, RoomRUM показал лучший score. В 31 сцене из 50 (62%) наша модель оказалась точнее, в 11 (22%) была ничья, и только в 8 сценах (16%) победила модель от OpenAI.
Но дьявол кроется в деталях. Давайте разберем каждую категорию отдельно.
1. Цвет (Паритет)
Обе модели уверенно работают с передачей оттенка. Критических промахов (оценка 0) не было ни у кого. Отклонения у RoomRUM связаны с легким осветлением или перенасыщением кадра, у ChatGPT — с редким затемнением. Для задачи «прикинуть цвет стен» годятся обе сети.
2. Текстура (Разные стратегии)
ChatGPT выиграл 5 пунктов, но распределение оценок обнажило разницу в архитектурном подходе:
ChatGPT чаще пытается воссоздать текстуру идеально (много оценок «2»), но если не справляется — галлюцинирует и подменяет рисунок на визуально похожий (пять провалов в «0»).
RoomRUM предпочитает безопасность. У нас почти нет нулей, но много единиц: модель дает «имитацию» — сохраняет общий характер рисунка, но теряет мелкую детализацию на удаленных планах при сложном паттерне.
3. Масштаб
Здесь проявилась главная слабость базовых моделей в интерьерных задачах. Разрыв составил 48 пунктов. У ChatGPT только в 18% случаев масштаб был верным. В 82% сцен модель увеличивала паттерн: либо умеренно, чтобы компенсировать детализацию, либо превращая обои в гигантскую фреску. Нейросеть просто не понимает физических размеров.
Наш движок, благодаря натренированной пространственной осведомленности, выдал 88% точных попаданий без единого критического отклонения. Для реального ремонта это ключевой фактор: человек должен понимать, будет у него на стене рябь из мелких цветочков или два огромных бутона.
4. Геометрия
У ChatGPT зафиксировано 4 существенных нарушения (оценка «0»): модель заклеивала обоями оконные рамы, закрывала двери и меняла пропорции комнаты, визуально расширяя пространство. У RoomRUM критических нарушений нет вообще, но есть 15 сцен с мелкими дефектами (оценка «1»): мы можем пропустить полоску за батареей, не наложить текстуру в отражении зеркала или неаккуратно отработать стык колонны.
ChatGPT Image 2.0 действует как креативный дизайнер, который готов дорисовать окно или изменить пропорции ради красивой картинки. RoomRUM 1.0 работает как строгий маляр: он никогда не снесет вам стену, но может забыть проклеить обои за трубой.

Было бы лукавством похвастаться метриками и умолчать о главном ограничении нашей модели. Эта проблема напрямую бьет по воронке продаж, и мы осознанно вынесли её за скобки бенчмарка.
RoomRUM 1.0 принимает в обработку далеко не все фотографии. Недавно мы запустили тестовую рекламную кампанию, чтобы проверить воронку на реальных пользовательских фотографиях. Статистика сурова: наш препроцессинг отбраковывает около ~60% загруженных кадров, успешно пропуская в генерацию только 40%-45%.
Мы умышленно сделали этап препроцессинга строго обязательным. Практика показала: если пропустить «неудобный» кадр дальше, модель либо вообще отказывается наносить текстуру, либо наносит её совершенно неверно. Отказы происходят на этапе препроцессинга, если на фото:
Помещение со слишком сложной архитектурой (многоуровневые ниши, арки, обилие колонн, ниши в стене).
Комната слишком заставлена мебелью или имеет множество проходов (например, коридоры с обилием дверей).
Слабое освещение или исходник плохого качества (разрешение менее 800 пикселей). Неординарные ракурсы.
Это означает, что на реальном трафике интернет-магазина часть пользователей со сложными или неудачными фотографиями просто не сможет сходу воспользоваться автоматической примерочной. Чтобы не возвращать клиенту брак от «всеядных» нейросетей, в таких сценариях система просто попросит пользователя сделать более удачный кадр с другого ракурса по инструкции. Это позволяет сохранить планку качества и не показывать клиенту заведомо искаженную картинку.
Ограничения самого исследования
Мы осознанно пошли на смещение выборки. В бенчмарк попали только те 50 сцен, которые успешно прошли наш препроцессинг. Мы не стали тестировать модели на «отбракованных» кадрах, потому что для нашего продукта отказ генерации — это контролируемое бизнес-решение (лучше честно попросить пользователя переснять комнату, чем показать ему кривую аппликацию, убив доверие). Поэтому мы сравнивали качество только там, где RoomRUM дает зеленый свет. Показательно, что даже в таких комфортных, базовых сценариях ChatGPT всё равно проиграл битву за физический масштаб. Кроме того, для объективности стоит признать, что бенчмарк проводился двумя экспертами (без расчета inter-rater reliability), по грубой шкале 0-2 и без учета дисперсии (повторных генераций). В будущем мы планируем подключить SSIM/LPIPS метрики и оценку цветового расстояния ΔE.
На текущем тестовом наборе из 50 интерьерных сцен RoomRUM 1.0 показывает более высокий агрегированный балл (84,0% против 71,5%) за счет точности масштаба паттерна и сохранения геометрии сцены. Для прикладной задачи визуализации ремонта — «как именно будут смотреться обои в моей комнате» — эти параметры являются критически важными.
Однако этот вывод должен быть скорректирован с учетом того, что алгоритм пока не принимает в работу определенные ракурсы и слишком сложные помещения. В таких случаях автоматика пасует, и система просит загрузить фото с другого ракурса.
Текущая версия RoomRUM — это рабочий, но всё ещё первый шаг. Мы уже ведем активную работу над устранением главных недостатков. Прямо сейчас в разработке находится:
Повышение success rate и улучшение геометрии: Дообучаем модель на нестандартных ракурсах (без пола/потолка) и сложных помещениях, чтобы снизить процент отбраковки кадров на препроцессинге.
Генерация пола и потолка: Чтобы пользователь мог примерить ламинат или плитку в связке с новыми обоями.
Нанесение комбинированных обоев: Учим алгоритм корректно зонировать помещение и клеить обои-компаньоны (например, натягивать акцентную текстуру на одну стену, а фоновую — на остальные).
Оптимизация инференса: Работаем над увеличением скорости генерации и снижением стоимости вычислений, чтобы сделать экономику фичи еще привлекательнее для бизнеса.
Путь от “напишем промпт к готовому API” до собственного ML-пайплайна с обучением на A100 занял у нас гораздо больше сил и времени, чем планировалось изначально. Законы физики оказались упрямее базовых генеративных сетей, но качественный датасет и ручная разметка способны принести результат.
Автор: Leadmagneet
Источник [5]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/30839
URLs in this post:
[1] боль: http://www.braintools.ru/article/9901
[2] парадокс: http://www.braintools.ru/article/8221
[3] обучению: http://www.braintools.ru/article/5125
[4] логику: http://www.braintools.ru/article/7640
[5] Источник: https://habr.com/ru/articles/1039804/?utm_campaign=1039804&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.