← Back to Blog

От разметки в QGIS к детектору нового строительства и новому датасету за час

by Geoalert
От разметки в QGIS к детектору нового строительства и новому датасету за час

Мы продолжаем экспериментировать с ИИ-агентами, и на этот раз речь о валидации разметки и детекции строительства. Стоит сказать, что это ещё один прорывной сценарий в ИИ-картографии. В этом эксперименте мы дали ИИ-агенту проект QGIS с 487 полигонами, нарисованными вручную, и спросили: достаточно ли хороша эта разметка, чтобы обучить детектор нового малоэтажного строительства? Примерно через 30 минут агент обучил на ней классификатор изменений и проверил каждую метку. Он пометил 10% меток на удаление или исправление и нашёл новые здания, которые пропустили наши картографы.

Задача

Предварительный проект

Территория проекта находилась в Карнатаке (Индия), примерно 9 × 8 км. Здесь плотная городская застройка соседствует с деревнями, пальмовыми плантациями и полями. Цель — новое малоэтажное строительство: в основном одно- и двухэтажные дома, сараи и свежерасчищенные участки.

  • Исходный датасет был создан с помощью плагина Mapflow для QGIS. Стройплощадки размечались вручную прямоугольниками или выпуклыми оболочками, а затем внутри этих областей применялась модель Mapflow Buildings для оконтуривания зданий.
  • По результатам разметки мы оценили возможную точность модели детекции строительства примерно в 70% для 90% стройплощадок.
  • Классификация строительства по стадиям ожидалась менее точной и с более широким доверительным интервалом. Чтобы повысить точность, мы просили заказчиков использовать более детальные снимки, например аэрофотосъёмку, но это оказалось дорого и не вписалось в бюджет проекта, поэтому от этой идеи мы отказались.

Агентный сценарий

На вход агенту подавались:

  • Проект QGIS (.qgz) с двумя слоями снимков: глобальная мозаика 2023 года («до») и новая сцена высокого разрешения («после»).
  • GeoJSON с 487 полигонами изменений строительства и атрибутом stage (completed / new / пусто). Стадия была указана только у 110 меток — слишком мало для обучения, поэтому классификатору поставили задачу игнорировать её и считать все полигоны одним классом «изменение строительства».

Промпт состоял из одного предложения: используй эти метки как обучающие для изменений строительства, проверь их и найди пропущенные или ложные метки.

Что сделал агент

Агент прочитал проект, определил шаги, написал и запустил собственные скрипты.

  1. Прочитал проект QGIS
  2. Загрузил снимки
  3. Совместил даты съёмки. Вот интересный момент! Снимки были сдвинуты друг относительно друга на 3–8 м, причём сдвиг менялся по сцене. Агент измерил смещение по сетке окон и трансформировал мозаику 2023 года на новый снимок, после чего остаточная ошибка снизилась примерно до 0,8 м.
  4. Просмотрел каждую метку. Он вырезал фрагменты «до/после» для каждого из 487 полигонов и просмотрел их листами по 28. Затем примерно 90 спорных случаев открыл повторно в большем масштабе.
  5. Обучил классификатор на разметке. Он прогнал предобученную ResNet-18 по обеим датам и обучил логистическую регрессию на признаках двух дат и их разнице. Проверка на пространственных блоках, которых модель не видела: AUC 0,96.
  6. Искал пропуски. Он ранжировал неразмеченные места по признаку «сейчас застроено, в 2023 году — нет». Топ-108 кандидатов он проверил по одному, а ниже по списку сделал выборки, чтобы оценить число пропусков.
  7. Вернул результаты. Он подготовил 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.

  1. Агент поставил по одной точке на каждое пропущенное здание в 42 подтверждённых местах. «Волшебная палочка» Mapflow оконтурила каждое здание по его точке.
  2. Первая попытка была на грубом масштабе 2,3 м и дала размытые контуры. Переключение палочки на 0,29 м это исправило. Этот параметр агент подобрал сам.
  3. Контрольный лист со всеми контурами выявил четыре ошибки: стену двора, мощение, тёмное пятно и голую землю. Агент удалил их, а остальные контуры выпрямил в прямоугольники.

24 из 45 новых контуров. В каждой паре слева снимок 2023 года, справа — новый снимок с контуром Mapflow.

Результат сразу встраивается в обучающую разметку: 446 меток, оставшихся после проверки, плюс 45 новых контуров — всего 491.

Затраты, стоимость и следующие шаги

Работа агента заняла около 26 минут и около $6,30 на использование модели. Просмотреть 487 пар «до/после» и вручную найти пропуски на 75 км² нашим разметчикам потребовало бы пару дней или больше.

Вся сессия проверки разметки обошлась примерно в $31. В таблице — разбивка по шагам по журналу использования сессии. Модель — Claude Opus 5.5, одна из самых дорогих.

ШагШагов агентаВзвешенные по цене токеныСтоимость (USD)
Проверка разметки: тайлы, совмещение, классификатор, просмотр, отчёт732,28M6,31
Контуры в Mapflow SAM (всего)612,75M7,59
 Загрузка снимка в Mapflow, подготовка сессии150,51M1,40
 Расстановка точек в 42 местах191,12M3,10
 Сессия SAM: палочка, проверка, прямоугольники, экспорт170,68M1,89
 Обновление поста и документа проекта100,43M1,19
Черновик поста130,73M2,01
Правки по комментариям554,44M12,28
Исправление документа проекта50,61M1,67
Проверка расходов80,30M0,82
Итого21511,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/км²Токены агентаИтогоНа км²
Этот тест (Маддур)753,8 км² (к оплате 4)< $0,01$4$11$15$0,20
Один округ (в среднем)6 200310 км²~$1$310~$10~$321$0,052
Карнатака (31 округ)191 8009 590 км²$30–50$9 590~$350~$9 980$0,052
Для сравнения: весь штат в Mapflow191 800191 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 всей Карнатаки. Огромная разница!

Это не исключает картографа, а меняет его роль: разметчик + супервайзер. Дальше мы дообучим модель на очищенных и совмещённых парах и повторим ту же проверку, чтобы измерить выигрыш на новых территориях.

Написать этот пост оказалось дольше, чем обучить классификатор и прогнать агентный конвейер (не считая исходной разметки снимков).

Мы живём во время преобразующих перемен — это не новость. Удивляет другое: как быстро всё меняется.

Удачного картографирования! 🗺️