Как мы научили CatBoost находить борщевик на спутниковых снимках

Как мы научили CatBoost находить борщевик на спутниковых снимках

С 1 марта 2026 года владельцы земельных участков обязаны контролировать распространение борщевика Сосновского. Основным инструментом мониторинга стали спутниковые снимки — они позволяют быстро выявлять очаги растения на больших территориях. Однако ручное картографирование таких снимков трудоёмко и плохо масштабируется.

Зачем нужен автоматизированный подход

Я — Сергей Кукуруз, руковожу ML-проектами в центре технологий для общества Yandex Cloud. Вместе со студентами Школы анализа данных (ШАД) и движением добровольцев «СтопБорщевик» мы разработали сервис для автоматического обнаружения борщевика с помощью машинного обучения.

Сервис анализирует спутниковые снимки и выделяет заросли борщевика, рассчитывает площадь заражения и позволяет экспортировать данные в формате GeoJSON для использования в ГИС-программах.

Модель обучена на 55 спутниковых снимках, из которых получено 10 тысяч фрагментов. Ниже — подробный разбор технического пайплайна: от обработки GeoTIFF до векторизации результатов.

Почему борщевик — серьёзная проблема

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

К 2017 году растение было зафиксировано в 18 регионах на площади около 170 тысяч гектаров. К 2022 году — уже в 40 регионах, но точная площадь заражения неизвестна.

Бороться с ним сложно по трём причинам:

  • Живучесть. Скошенные побеги быстро отрастают, семена сохраняют всхожесть на протяжении нескольких лет.
  • Требуется постоянный контроль. Однократная обработка не решает проблему — нужно регулярно выявлять новые очаги.
  • Недостаток ресурсов. Для крупных территорий, таких как парки или лесные массивы, ручной мониторинг неподъёмный.

Сейчас основной способ — визуальное обнаружение с воздуха и ручная разметка. Один сотрудник может потратить целый день на разметку 1000 полигонов.

Нам нужно было создать решение, которое будет:

  • Простым — доступным без технических навыков.
  • Масштабируемым — применимым к любым территориям.
  • Бесплатным — с низкой стоимостью разработки и поддержки.

Ключевое наблюдение: во время цветения борщевик хорошо различим на спутниковых снимках. Оставалось научить модель его распознавать.

Технический пайплайн

Задача — пиксельная классификация (семантическая сегментация): определить, содержит ли каждый пиксель изображения борщевик. Мы выбрали градиентный бустинг, а не нейросети — об этом позже.

Для обучения потребовались размеченные данные. Мы подготовили 10 тысяч фрагментов снимков, разметив их в два этапа:

  1. Выделили контуры зарослей борщевика.
  2. Рассчитали вегетационный индекс CIVE и подобрали порог: выше — борщевик, ниже — нет.

Спутниковые снимки в формате GeoTIFF содержат не только RGB-каналы, но и геометаданные — это позволяет точно привязать результаты к координатам.

Пайплайн обработки:

  1. Чтение снимка.
  2. Нормализация данных.
  3. Разбивка на тайлы.
  4. Извлечение признаков.
  5. Классификация с помощью CatBoost.
  6. Векторизация.
  7. Отображение на карте.

Чтение спутникового снимка

Пользователь загружает GeoTIFF. Мы читаем его с помощью библиотеки rasterio, которая позволяет работать с геопривязанными изображениями. Извлекаем BGR-каналы, конвертируем в RGB и сохраняем метаданные: аффинное преобразование, CRS и размер изображения.

Нормализация данных

Снимки могут содержать аномалии: блики, тени, артефакты сжатия. Это искажает распределение яркости и ухудшает классификацию.

Мы нормализуем каждый канал (R, G, B) отдельно:

  • Берём 0,3-й перцентиль как min_value и 99,7-й как max_value.
  • Обрезаем значения ниже и выше этих границ.
  • Линейно растягиваем оставшийся диапазон до [0; 255].

Также применяем RandomUnderSampler для балансировки классов. Пикселей без борщевика в разы больше, чем с ним — без балансировки модель могла бы просто игнорировать редкий класс.

Разбивка на тайлы

Изображение разбивается на фрагменты 256 × 256 пикселей. Это улучшает качество классификации: статистики по тайлу (среднее, медиана и др.) отражают локальный контекст.

Тайлы нарезаются скользящим окном: если фрагмент не влезает целиком, окно сдвигается назад, чтобы захватить полные 256 пикселей.

Извлечение признаков

Для каждого пикселя формируется 20 признаков:

  • Пиксельные (4): значения R, G, B и вегетационный индекс CIVE.
  • Глобальные (16): для каждого канала — среднее, стандартное отклонение, медиана, минимум и максимум по всему тайлу, плюс среднее значение CIVE.

Индекс CIVE рассчитывается по формуле: 0,441R − 0,881G + 0,385B + 18,78745. Он эффективно выделяет зелёную растительность.

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

Классификация

Модель CatBoost получает признаки и предсказывает вероятность наличия борщевика для каждого пикселя. Мы используем высокий порог — 0,95 — чтобы минимизировать ложные срабатывания.

Результат — бинарная маска: массив из 0 и 1, где 1 означает наличие борщевика.

Векторизация

Бинарная маска конвертируется в полигоны с помощью rasterio. Затем они упаковываются в GeoDataFrame с помощью shapely и geopandas.

Через spatial join определяем, в каком регионе находится каждый полигон, сопоставляя его с шейп-файлом регионов РФ. После этого рассчитываем площадь каждого полигона в квадратных метрах.

Готовые данные отображаются на карте. Точность оценивается по метрике IOU (Intersection Over Union) — у нас она составляет 0,75, что считается хорошим результатом.

Почему CatBoost, а не нейросеть?

Мы выбрали градиентный бустинг по трём причинам:

  • Размер датасета. Для нейросетей (например, U-Net) нужно десятки тысяч размеченных снимков. У нас было всего 55, но более 3,6 млн пикселей — достаточно для табличного бустинга.
  • Ручной feature engineering. Мы явно задали 20 осмысленных признаков. Градиентный бустинг — стандарт для табличных данных и часто превосходит нейросети в таких задачах.
  • Интерпретируемость. CatBoost позволяет посмотреть feature importance — понять, какие признаки важны. С нейросетями это сложнее.

Использованные библиотеки:

  • rasterio — чтение GeoTIFF;
  • numpy, opencv — обработка изображений;
  • catboost — обучение модели;
  • scikit-learn, imblearn — разделение выборки и балансировка;
  • shapely, geopandas — геометрия и векторизация;
  • matplotlib, plotly — визуализация.

Тот же стек можно применить для поиска других объектов: дорог, водоёмов, зданий, вырубок, пожаров. Даже для археологии — например, руин крепостей или мест сражений времён ВОВ.

Результаты и планы

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

На данный момент на карте отмечено 421 га заражённой территории в 17 регионах европейской части России.

Территории Москвы и Подмосковья уже полностью проанализированы. До лета 2026 года планируем охватить 100 тысяч км² в Тверской и Ярославской областях — с участием волонтёров.

Сервис можно адаптировать и для других инвазивных растений: например, эхиноцистиса лопастного, золотарника канадского и золотарника гигантского.

Глобальная цель — оценить полный ареал борщевика Сосновского в России. С такими данными бороться с ним станет значительно проще.

Читать оригинал