В условиях жесткой конкуренции на рынке отделочных материалов любому магазину жизненно необходимо хоть какое-то осязаемое преимущество. Стандартными каталогами и скидками уже никого не удивить. Так у нас родилась идея: сделать онлайн-примерочную обоев. Кажется, звучит как киллер-фича — дать клиенту возможность до покупки увидеть, как конкретный паттерн будет смотреться в его реальном интерьере.
На тот момент на рынке вовсю хайповали генеративные модели (такие как «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 приглянулась нам больше остальных. Она вроде бы справлялась с задачей концептуально, но мы решили провести стресс-тест на сложных паттернах.
-
Отлично удерживает геометрию помещения, не страдает галлюцинациями (не дорисовывает лишние элементы из воздуха), дает стабильное освещение.
-
Чаще остальных работает методом «приблизительной отрисовки». Рисунок остается узнаваемым, но искажается. Главная боль — масштаб плавает. Нейросети просто «лень» возиться с мелким паттерном на дальней стене (где узор физически должен быть меньше из-за перспективы), поэтому она искусственно увеличивает размер текстуры. Возникает парадокс: сам рисунок сохранен идеально, но на стене висит гигантское панно. В одном из кейсов модель вообще обрезала часть кадра.

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

Стало очевидно, что готовые генеративные модели слепы к строгой геометрии реального пространства. Они не учитывают масштаб раппорта обоев, «плывут» в перспективе конкретной стены.
Под капотом RoomRUM
Раскрывать полную архитектуру нашего движка и то, как именно мы процессим фотографии в реальном времени, я не буду — это тайна проекта RoomRUM. Но я расскажу о фундаменте, на котором этот движок работает.
Фундамент любой ML-модели — это данные. Вместо того чтобы городить сложные костыли вокруг готовых API, мы пошли по пути создания эталонного датасета. Мы принципиально отказались от академических выборок и собрали собственный коммерчески чистый массив. За основу взяли фотографии со стоков и открытые датасеты с лицензией Public Domain. Отфильтровали нужные нам интерьеры и приступили к разметке
Пайплайн подготовки данных
Для сборки эталонного датасета, на котором мы планировали дообучать модель, мы автоматизировали всё, что только поддавалось автоматизации, а остальное дожимали руками, разбив процесс на четкие этапы:
-
Базовую разметку стен мы делали через связку Grounded-SAM (где Grounding DINO находит объекты по текстовому промпту «стена», а SAM вырезает их), чтобы сходу получать маски с ровными краями.
-
Для сохранения реализма использовали методы разделения изображения на составляющие. Программно извлекали из исходника приближенную маску теней и бликов и накладывали её поверх обоев через базовые режимы блендинга.
-
Автоматика часто ошибается на стыках с мебелью, вокруг окон и в углах. Поэтому мы посадили одного человека дочищать результат руками. Ювелирно правил маски, корректировал перспективные искажения паттерна на сложных углах и затирал артефакты теней.
Итог этой рутины — мы собрали и выверили около 1700 эталонных пар вида: Оригинальный интерьер ➔ Раппорт обоев ➔ Качественное наложение с визуально достоверным масштабом и перспективой.
Fine-tuning
Имея на руках этот чистый эталонный датасет, мы перешли к файн-тюнингу (в нашем случае — обучению кастомных модулей ControlNet и Inpainting поверх базовой архитектуры Stable Diffusion). Разбили выборку на train и validation и начали «скармливать» эти пары нашему пайплайну. Главная задача состояла в том, чтобы заставить алгоритм на этих 1700 примерах выявить, как визуально соотносятся размер комнаты и масштаб паттерна. По 2D-фотографии невозможно вычислить абсолютный размер стены в сантиметрах, поэтому мы учили алгоритм не точной геометрии до миллиметра, а умению выстраивать правдоподобную перспективную логику и масштаб текстуры. Обучение крутилось на арендованных кластерах с GPU A100. Мы прогнали около 100 эпох, пока метрика validation loss не вышла на стабильное плато. После этого перешли к визуальным тестам.
В результате наш алгоритм действительно научился автоматически удерживать масштаб текстур и аккуратно обходить препятствия. (Хотя, справедливости ради, до идеала было еще далеко: даже после такого обучения всплыли обидные артефакты, с которыми пришлось бороться отдельно).
Сравнительный Benchmark (In-house): ChatGPT Image 2.0 vs RoomRUM 1.0
Для академической статьи сравнивать нашу модель с универсальной генеративной моделью было бы некорректно. Но для бизнеса, который ищет готовое решение «из коробки», это абсолютно реальный выбор. Мы решили столкнуть лбами нашу модель и лучшее проприетарное 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
Было бы лукавством похвастаться метриками и умолчать о главном ограничении нашей модели. Эта проблема напрямую бьет по воронке продаж, и мы осознанно вынесли её за скобки бенчмарка.
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


