惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
Martin Fowler
Martin Fowler
T
Threatpost
D
Docker
S
Schneier on Security
M
MIT News - Artificial intelligence
G
Google Developers Blog
L
LINUX DO - 热门话题
J
Java Code Geeks
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
博客园 - Franky
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
V
Vulnerabilities – Threatpost
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
人人都是产品经理
人人都是产品经理
Spread Privacy
Spread Privacy
T
Tailwind CSS Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
CERT Recently Published Vulnerability Notes
The GitHub Blog
The GitHub Blog
Simon Willison's Weblog
Simon Willison's Weblog
NISL@THU
NISL@THU
MongoDB | Blog
MongoDB | Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Heimdal Security Blog
Recorded Future
Recorded Future
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
P
Privacy International News Feed
P
Proofpoint News Feed
O
OpenAI News
B
Blog
腾讯CDC
F
Full Disclosure
Apple Machine Learning Research
Apple Machine Learning Research
T
Tor Project blog
H
Hacker News: Front Page
Project Zero
Project Zero
Hugging Face - Blog
Hugging Face - Blog
C
Cisco Blogs
S
Security Affairs

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Ожидание: сделать ИИ-примерочную обоев за 2 дня. Реальность: пришлось добучать свою модель на SD
Leadmagneet · 2026-05-27 · via Все публикации подряд на Хабре

Простой

9 мин

7.6K

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

На тот момент на рынке вовсю хайповали генеративные модели (такие как «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 занял у нас гораздо больше сил и времени, чем планировалось изначально. Законы физики оказались упрямее базовых генеративных сетей, но качественный датасет и ручная разметка способны принести результат.