От разметки в QGIS к детектору нового строительства и новому датасету за час
Мы продолжаем экспериментировать с ИИ-агентами, и на этот раз речь о валидации разметки и детекции строительства. Стоит сказать, что это ещё один прорывной сценарий в ИИ-картографии. В этом эксперименте мы дали ИИ-агенту проект QGIS с 487 полигонами, нарисованными вручную, и спросили: достаточно ли хороша эта разметка, чтобы обучить детектор нового малоэтажного строительства? Примерно через 30 минут агент обучил на ней классификатор изменений и проверил каждую метку. Он пометил 10% меток на удаление или исправление и нашёл новые здания, которые пропустили наши картографы.
Задача
Предварительный проект
Территория проекта находилась в Карнатаке (Индия), примерно 9 × 8 км. Здесь плотная городская застройка соседствует с деревнями, пальмовыми плантациями и полями. Цель — новое малоэтажное строительство: в основном одно- и двухэтажные дома, сараи и свежерасчищенные участки.
- Исходный датасет был создан с помощью плагина Mapflow для QGIS. Стройплощадки размечались вручную прямоугольниками или выпуклыми оболочками, а затем внутри этих областей применялась модель Mapflow Buildings для оконтуривания зданий.
- По результатам разметки мы оценили возможную точность модели детекции строительства примерно в 70% для 90% стройплощадок.
- Классификация строительства по стадиям ожидалась менее точной и с более широким доверительным интервалом. Чтобы повысить точность, мы просили заказчиков использовать более детальные снимки, например аэрофотосъёмку, но это оказалось дорого и не вписалось в бюджет проекта, поэтому от этой идеи мы отказались.
Агентный сценарий
На вход агенту подавались:
- Проект QGIS (.qgz) с двумя слоями снимков: глобальная мозаика 2023 года («до») и новая сцена высокого разрешения («после»).
- GeoJSON с 487 полигонами изменений строительства и атрибутом
stage(completed / new / пусто). Стадия была указана только у 110 меток — слишком мало для обучения, поэтому классификатору поставили задачу игнорировать её и считать все полигоны одним классом «изменение строительства».
Промпт состоял из одного предложения: используй эти метки как обучающие для изменений строительства, проверь их и найди пропущенные или ложные метки.
Что сделал агент
Агент прочитал проект, определил шаги, написал и запустил собственные скрипты.
- Прочитал проект QGIS
- Загрузил снимки
- Совместил даты съёмки. Вот интересный момент! Снимки были сдвинуты друг относительно друга на 3–8 м, причём сдвиг менялся по сцене. Агент измерил смещение по сетке окон и трансформировал мозаику 2023 года на новый снимок, после чего остаточная ошибка снизилась примерно до 0,8 м.
- Просмотрел каждую метку. Он вырезал фрагменты «до/после» для каждого из 487 полигонов и просмотрел их листами по 28. Затем примерно 90 спорных случаев открыл повторно в большем масштабе.
- Обучил классификатор на разметке. Он прогнал предобученную ResNet-18 по обеим датам и обучил логистическую регрессию на признаках двух дат и их разнице. Проверка на пространственных блоках, которых модель не видела: AUC 0,96.
- Искал пропуски. Он ранжировал неразмеченные места по признаку «сейчас застроено, в 2023 году — нет». Топ-108 кандидатов он проверил по одному, а ниже по списку сделал выборки, чтобы оценить число пропусков.
- Вернул результаты. Он подготовил GeoJSON с меткой
qa_flagдля каждого полигона, список кандидатов-пропусков и страницу отчёта с фрагментами снимков.
Что нашёл агент
Из 487 меток 88% оказались верными, а ошибки сгруппировались в несколько типов.
| Проблема | Меток | Как выглядит |
|---|---|---|
| Уже построено в 2023 году | 23 | Дом есть на обоих снимках, или ничего не изменилось |
| Только смена кровли | 14 | Тот же контур; зелёная крыша стала синей или красная — оранжевой |
| Слишком широкий полигон | 9 | Рамка захватывает старый дом вместе с новой пристройкой; одна — 2,4 га |
| Снос | 3 | Сараи снесены, ничего не построено |
| Неясно | 8 | Крыша на существующих стенах или просто замена кровли? Снимок 2023 года слишком размыт |
Важнее оказалось то, чего не хватало. Среди топ-108 кандидатов агент подтвердил 39 неразмеченных новых зданий и 29 стройплощадок или расчищенных участков. Выборки ниже по списку добавили ещё несколько. Если экстраполировать долю попаданий, на сцене, вероятно, 100–200 неразмеченных новых зданий, то есть полнота разметки зданий — примерно 70–80%. Заметим, что это полнота ручной разметки, а не точность модели, поэтому она пока не проверяет нашу предварительную оценку ~70%.

Пропущенные новые здания, найденные классификатором. Голубая рамка — кандидат: пустой участок в 2023 году (слева), новый дом или сарай сейчас (справа).
Село и плотная застройка ошибаются по-разному
Эти два типа территорий портят разметку противоположным образом, поэтому обучающая выборка должна намеренно покрывать оба.
- Сельская местность: пропуски. Большинство неразмеченных зданий — одиночные дома в пальмовых рощах, сараи у полей и новые дворы на окраинах деревень. Из 42 подтверждённых пропусков у 35 в радиусе 500 м было меньше пяти меток, а у большинства — ни одной. Разметчики концентрируются там, где изменений много, и пропускают «пустые» на вид тайлы — так был устроен наш процесс разметки в QGIS (переключаешь старый <> новый слой снимков и ищешь разницу глазами). Модель, обученная на такой разметке, учится игнорировать одиночное строительство.
- Плотная застройка: ложные метки. Около 9 из 10 ложных меток и меток «только кровля» находились в плотных кластерах — пять и более других меток в радиусе 500 м. Когда крыши стоят вплотную, новая синяя кровля или надстроенный этаж выглядят как новое здание (тут и человеческий фактор), а размытый снимок 2023 года усугубляет дело.
- Разметчикам нужны письменные правила для пограничных случаев. Замена кровли, пристройки, снос и расчистка земли где-то размечались, а где-то нет.
- Совмещайте снимки до нарезки фрагментов. Сдвиг в несколько метров превращает каждый край неизменного дома в ложный пиксель «изменения». Особенно это важно в плотной застройке, где здания маленькие и стоят вплотную.
Замыкаем цикл с Mapflow
Затем агент сам добавил в обучающую выборку 45 пропущенных зданий. На это ушло около 12 минут в сессии Mapflow SAM, подключённой через MCP.
- Агент поставил по одной точке на каждое пропущенное здание в 42 подтверждённых местах. «Волшебная палочка» Mapflow оконтурила каждое здание по его точке.
- Первая попытка была на грубом масштабе 2,3 м и дала размытые контуры. Переключение палочки на 0,29 м это исправило. Этот параметр агент подобрал сам.
- Контрольный лист со всеми контурами выявил четыре ошибки: стену двора, мощение, тёмное пятно и голую землю. Агент удалил их, а остальные контуры выпрямил в прямоугольники.

24 из 45 новых контуров. В каждой паре слева снимок 2023 года, справа — новый снимок с контуром Mapflow.
Результат сразу встраивается в обучающую разметку: 446 меток, оставшихся после проверки, плюс 45 новых контуров — всего 491.
Затраты, стоимость и следующие шаги
Работа агента заняла около 26 минут и около $6,30 на использование модели. Просмотреть 487 пар «до/после» и вручную найти пропуски на 75 км² нашим разметчикам потребовало бы пару дней или больше.
Вся сессия проверки разметки обошлась примерно в $31. В таблице — разбивка по шагам по журналу использования сессии. Модель — Claude Opus 5.5, одна из самых дорогих.
| Шаг | Шагов агента | Взвешенные по цене токены | Стоимость (USD) |
|---|---|---|---|
| Проверка разметки: тайлы, совмещение, классификатор, просмотр, отчёт | 73 | 2,28M | 6,31 |
| Контуры в Mapflow SAM (всего) | 61 | 2,75M | 7,59 |
| Загрузка снимка в Mapflow, подготовка сессии | 15 | 0,51M | 1,40 |
| Расстановка точек в 42 местах | 19 | 1,12M | 3,10 |
| Сессия SAM: палочка, проверка, прямоугольники, экспорт | 17 | 0,68M | 1,89 |
| Обновление поста и документа проекта | 10 | 0,43M | 1,19 |
| Черновик поста | 13 | 0,73M | 2,01 |
| Правки по комментариям | 55 | 4,44M | 12,28 |
| Исправление документа проекта | 5 | 0,61M | 1,67 |
| Проверка расходов | 8 | 0,30M | 0,82 |
| Итого | 215 | 11,1M | ~31 |
Таблица учитывает только использование модели агентом. Плата Mapflow за площадь добавляется сверху. При $1 за км² и минимуме 1 км² обработка всей сцены стоила бы около $75. Если отправить только окна 200 м вокруг 42 пропущенных зданий одной составной областью, выйдет около $2. Для оконтуривания всех новых зданий нужно около 5% площади — $4 (см. таблицу масштабирования).
Мог ли агент оконтурить 45 зданий без SAM? Ему всё равно понадобились бы точки ($3,10), затем он рисовал бы каждый полигон «на глаз» и проверял и исправлял их в 2–3 круга — ещё около 25 шагов. Это около $6 в токенах, примерно столько же, сколько путь через SAM ($5 в токенах плюс $2–4 платы Mapflow). Разница — в качестве. Углы, поставленные вручную на снимке 0,58 м, смещены на 1–2 пикселя, то есть примерно на 1 м, а это около 25% ошибки площади для дома 150 м². SAM привязывает контуры к краям крыш.
Масштабирование на всю Карнатаку
В масштабе штата стоимость почти целиком переходит в плату Mapflow за площадь. Токены агента становятся небольшой фиксированной статьёй — при трёх оптимизациях:
- Детекция изменений работает как код. Обученный классификатор запускается обычным кодом, без агента в цикле. Признаки для этой сцены 75 км² считались около 340 CPU-секунд, примерно 4,5 с на км².
- Агент только проверяет. Он просматривает выборку примерно из 200 детекций на округ, а не каждую метку.
- SAM видит только окна изменений. Оконтуривание идёт по окнам 100 м вокруг детекций, отправляемым одной составной областью на округ. Без кликов палочкой по каждому зданию.
В Маддуре окна 100 м покрывают 5% площади для реальных новых зданий и 16% — для всего, что отмечает текущий детектор. В таблице принято, что в Mapflow уходит 5% площади: окна 100 м вокруг всех новых зданий, каждый округ — одной составной областью. Для одних только 42 пропущенных зданий хватило 2%.
| Масштаб | Площадь (км²) | Площадь в Mapflow (5%) | Вычисления детекции | Плата Mapflow при $1/км² | Токены агента | Итого | На км² |
|---|---|---|---|---|---|---|---|
| Этот тест (Маддур) | 75 | 3,8 км² (к оплате 4) | < $0,01 | $4 | $11 | $15 | $0,20 |
| Один округ (в среднем) | 6 200 | 310 км² | ~$1 | $310 | ~$10 | ~$321 | $0,052 |
| Карнатака (31 округ) | 191 800 | 9 590 км² | $30–50 | $9 590 | ~$350 | ~$9 980 | $0,052 |
| Для сравнения: весь штат в Mapflow | 191 800 | 191 800 км² | $30–50 | $191 800 | ~$350 | ~$192 200 | $1,00 |
Токены агента в масштабе штата — около $20 на построение и дообучение конвейера плюс около $10 на округ за выборочную проверку и запуск Mapflow. Полная проверка агентом сцена за сценой обошлась бы примерно в $16 000 (2 560 сцен × $6,30). Стоимость снимков не учтена. Как и стоимость дообучения для повышения точности детектора, которое уменьшает окна и плату.
Выводы
Это не столько итоги, сколько снимок наших текущих экспериментов с быстро меняющейся технологией.
Агентный сценарий на масштабируемых GPU с открытой моделью (случай Mapflow) — мощный метод для трудоёмких задач валидации картографирования: точнее и быстрее, чем агент в одиночку, при примерно той же стоимости. В масштабе штата оптимизированный сценарий примерно в 1,6 раза дешевле, чем запуск агента сцена за сценой ($10 тыс. против $16 тыс.), и примерно в 20 раз дешевле, чем обработка в Mapflow всей Карнатаки. Огромная разница!
Это не исключает картографа, а меняет его роль: разметчик + супервайзер. Дальше мы дообучим модель на очищенных и совмещённых парах и повторим ту же проверку, чтобы измерить выигрыш на новых территориях.
Написать этот пост оказалось дольше, чем обучить классификатор и прогнать агентный конвейер (не считая исходной разметки снимков).
Мы живём во время преобразующих перемен — это не новость. Удивляет другое: как быстро всё меняется.
Удачного картографирования! 🗺️
