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

На тот момент на рынке вовсю хайповали генеративные модели (такие как «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 — это рабочий, но всё ещё первый шаг. Мы уже ведем активную работу над устранением главных недостатков. Прямо сейчас в разработке находится:

  1. Повышение success rate и улучшение геометрии: Дообучаем модель на нестандартных ракурсах (без пола/потолка) и сложных помещениях, чтобы снизить процент отбраковки кадров на препроцессинге.

  2. Генерация пола и потолка: Чтобы пользователь мог примерить ламинат или плитку в связке с новыми обоями.

  3. Нанесение комбинированных обоев: Учим алгоритм корректно зонировать помещение и клеить обои-компаньоны (например, натягивать акцентную текстуру на одну стену, а фоновую — на остальные).

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

Путь от "напишем промпт к готовому API" до собственного ML-пайплайна с обучением на A100 занял у нас гораздо больше сил и времени, чем планировалось изначально. Законы физики оказались упрямее базовых генеративных сетей, но качественный датасет и ручная разметка способны принести результат.

Комментарии (0)