С 1 марта 2026 года владельцы земельных участков обязаны контролировать распространение борщевика Сосновского. Основным инструментом мониторинга стали спутниковые снимки — они позволяют быстро выявлять очаги растения на больших территориях. Однако ручное картографирование таких снимков трудоёмко и плохо масштабируется.
Зачем нужен автоматизированный подход
Я — Сергей Кукуруз, руковожу ML-проектами в центре технологий для общества Yandex Cloud. Вместе со студентами Школы анализа данных (ШАД) и движением добровольцев «СтопБорщевик» мы разработали сервис для автоматического обнаружения борщевика с помощью машинного обучения.
Сервис анализирует спутниковые снимки и выделяет заросли борщевика, рассчитывает площадь заражения и позволяет экспортировать данные в формате GeoJSON для использования в ГИС-программах.
Модель обучена на 55 спутниковых снимках, из которых получено 10 тысяч фрагментов. Ниже — подробный разбор технического пайплайна: от обработки GeoTIFF до векторизации результатов.
Почему борщевик — серьёзная проблема
Борщевик Сосновского ранее выращивали как кормовую культуру: он высокий, неприхотливый и быстро размножается. Однако его сок вызывает сильные ожоги кожи, а мясо и молоко животных, питающихся им, приобретают неприятный запах.
К 2017 году растение было зафиксировано в 18 регионах на площади около 170 тысяч гектаров. К 2022 году — уже в 40 регионах, но точная площадь заражения неизвестна.
Бороться с ним сложно по трём причинам:
- Живучесть. Скошенные побеги быстро отрастают, семена сохраняют всхожесть на протяжении нескольких лет.
- Требуется постоянный контроль. Однократная обработка не решает проблему — нужно регулярно выявлять новые очаги.
- Недостаток ресурсов. Для крупных территорий, таких как парки или лесные массивы, ручной мониторинг неподъёмный.
Сейчас основной способ — визуальное обнаружение с воздуха и ручная разметка. Один сотрудник может потратить целый день на разметку 1000 полигонов.
Нам нужно было создать решение, которое будет:
- Простым — доступным без технических навыков.
- Масштабируемым — применимым к любым территориям.
- Бесплатным — с низкой стоимостью разработки и поддержки.
Ключевое наблюдение: во время цветения борщевик хорошо различим на спутниковых снимках. Оставалось научить модель его распознавать.
Технический пайплайн
Задача — пиксельная классификация (семантическая сегментация): определить, содержит ли каждый пиксель изображения борщевик. Мы выбрали градиентный бустинг, а не нейросети — об этом позже.
Для обучения потребовались размеченные данные. Мы подготовили 10 тысяч фрагментов снимков, разметив их в два этапа:
- Выделили контуры зарослей борщевика.
- Рассчитали вегетационный индекс CIVE и подобрали порог: выше — борщевик, ниже — нет.
Спутниковые снимки в формате GeoTIFF содержат не только RGB-каналы, но и геометаданные — это позволяет точно привязать результаты к координатам.
Пайплайн обработки:
- Чтение снимка.
- Нормализация данных.
- Разбивка на тайлы.
- Извлечение признаков.
- Классификация с помощью CatBoost.
- Векторизация.
- Отображение на карте.
Чтение спутникового снимка
Пользователь загружает 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 тысяч км² в Тверской и Ярославской областях — с участием волонтёров.
Сервис можно адаптировать и для других инвазивных растений: например, эхиноцистиса лопастного, золотарника канадского и золотарника гигантского.
Глобальная цель — оценить полный ареал борщевика Сосновского в России. С такими данными бороться с ним станет значительно проще.