PunchNAF flew 6,100 hours, consumed 10m litres fuel — SpokesmanThe Jerusalem PostOver 50,000 killed in Europe over summer due to worst heat wave on recordRai NewsSci, Soelden, gigante maschile: Braathen domina prima manche, Borsotti è il migliore degli azzurriInquirer15 passengers, driver hurt as jeepney overturns in QuezonESPNIt's time for El Clásico! All you need to know about Barça vs. Madrid, the biggest match in club soccerDaily MaverickSMOOTH OPERATOR: Gayton Mckenzie’s gift of the gab is both his blessing and his curse한겨레“죽도록 일 더 해서 돈 더 벌어라? 정부가 할 소리냐”…이 대통령 발언에 비판 확산ZDF heuteEntdecken Sie das ZDF-NachrichtenstudioBBC News BrasilAs pesquisas para presidente na véspera do 2º turno — o que diziam em 2018, 2022 e o que mostram agoraIl Fatto Quotidiano“Per cantare Aeroplano con gli 883 ho preso un milione di lire. Un giorno Cecchetto mi ha detto ‘non siamo le persone giuste per te, meglio chiudere il contratto'”: parla Caterina RappoccioSportstarTamil Nadu head coach Yo Mahesh hopes for an encore at home despite rain threatThe South AfricanCarte Blanche coming up: Warning bells
The Daily Newsstand · Free, Always
Sunday, October 25, 2026

Как я искал боровики и дошёл до спутниковой классификации леса

Translate

Грибов в этом году у нас было мало. То ли весенние заморозки, то ли сухое лето, то ли дожди, которые под конец, наоборот, лили без остановки. Не поймёшь. Только к концу августа мне начали попадаться первые сообщения: в лесах Ленинградской области наконец пошли боровики. Моя супруга боровики очень любит, и каждую осень мне приходится искать места их обитания.

В этот раз на «тихую охоту» оставалось совсем немного времени — ну, три пары выходных, не больше, как мне тогда казалось. Конкуренция в сезон почище, чем за вакансии на HH, а тратить эти считанные дни на прогулки с пустой корзиной не хотелось.

Первый боровик вылез прямо у нас на дачном участке. Восприняли как сигнал: пора.

Первым делом мы отправились в сторону Алёховщины — проверять сосновые боры и беломошники. С точки зрения грибника именно такой лес и мечтаешь увидеть: стройные сосны, сухой песок, светло, а под ногами белёсый хрустящий ковёр, на котором так и представляешь крепкий боровик с тёмно-каштановой шляпкой.

Беломошник — название народное и немного обманчивое: этот светлый покров образуют преимущественно лишайники (в основном родов Cladonia и Cetraria), а вовсе не мох. Ходить по такому бору — чистое эстетическое удовольствие.

Грибов не было. Совсем.

В тот же день двинулись дальше, в сторону Олонца. Проверили места, кторые заприметили две недели назад по дороге на терский берег и рассчитывали на них, — тоже пусто. На обратном пути я решил наугад свернуть к Нижне-Свирскому заповеднику. Без всякого чёткого плана и уже без больших надежд. И там, в придорожной канаве у второстепенной грунтовки, в совершенно случайном даже не очень то и сосняке, мы набрали две полные корзины за час.

После такой поездки (четыре часа непрерывной рулёжки в одну сторону как-никак) появился чисто айтишный интерес: как выбирать точки для следующего выезда, чтобы не стрелять вхолостую? Почему в хрестоматийном лесу с открытки — шаром покати, а там где совсем грибов не ждешь их с избытком? Хотелось уменьшить фактор случайности в этом итак небыстром процессе.

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

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

Что мы вообще ищем: биология вида

Прежде чем загонять спутники в алгоритмы, стоило уточнить сам объект поиска. Я ориентировался на белый гриб сосновый — Boletus pinophilus. Поручил Клоду собрать научные статьи по теме и ушел пить чай.

Научная справка: молекулярная филогения и систематика Boletus pinophilus

Его самостоятельность подтверждается молекулярным филогенетическим исследованием Beugelsdijk et al. (2008): анализ участков ДНК (дезоксирибонуклеиновой кислоты) — ITS (Internal Transcribed Spacer, внутреннего транскрибируемого спейсера рибосомной РНК) и GAPDH (Glyceraldehyde-3-Phosphate Dehydrogenase, гена фермента глицеральдегид-3-фосфатдегидрогеназы) — надёжно выделил этот вид в отдельную эволюционную ветвь внутри секции Boletus.

Для моей задачи особенно полезна экологическая характеристика: вид образует эктомикоризу преимущественно с сосной обыкновенной (Pinus sylvestris) и приурочен к сухим, кислым, дренированным песчаным и супесчаным почвам. Среди морфологических маркеров — мясистая бугорчатая шляпка тёмного винно-красно-коричневого оттенка и выраженная рельефная сеточка в верхней части массивной ножки.

При этом исследование предостерегает от поверхностных выводов:

  1. Связь с сосной не абсолютна: зафиксированы находки микоризы в еловых насаждениях.

  2. Белый гриб под сосной — не обязательно B. pinophilus. Авторы описали образцы, собранные на песчаных почвах под соснами, которые фенотипически и по биотопу напоминали сосновый боровик, но по ДНК оказались экологической формой обычного белого гриба — Boletus edulis (в микологических статьях после первого упоминания род сокращается: B. pinophilus, B. edulis).

Так с помощью ложки заварки родилась рабочая гипотеза проекта: сочетание чистого сосняка и бедной песчаной почвы позволяет очертить приоритетные полигоны для полевой разведки. Это метод косвенного моделирования пригодности местообитаний (Habitat Suitability Modelling). Он не гарантирует присутствие мицелия и тем более не обещает слой грибов к выходным, но резко отсекает заведомо бесперспективные площади.

Сбор «сырья»: Почвы, спутники и первые оверлеи

Первыми источниками данных стали:

  • Почвенная карта РСФСР 1988 года под редакцией В. М. Фридланда (масштаб 1:2 500 000);

  • Слой хвойных лесов глобального мониторинга Copernicus Global Land Service (CGLS);

  • Краудсорсинговая картографическая база OpenStreetMap (OSM), откуда выгружались участки с отметками типов растительности.

У каждого источника была своя задача. Карта Фридланда указывала на кислые почвы борового ряда. Спутниковый продукт показывал массивы деревьев. А в OSM энтузиасты вручную размечают участки леса. Не то, чтобы всё это было категорически необходимо в поездке, но если уж начал....

Извлечение геоданных: Livewire-харвестинг и оконный доступ к COG

Извлечение почв: динамический веб-харвестинг

На портале soil-db.ru оцифрованная институтом им. Докучаева карта Фридланда не отдаётся готовым файлом. Она работает в веб-интерфейсе через фреймворк Livewire: при панорамировании окна браузер отправляет метод loadFeatures, а сервер шлёт геометрию полигонов в событии livewire-map:add-features.

Я написал сборщик на базе протокола Chrome DevTools Protocol (CDP), который прошёл всю Ленинградскую область сеткой из 55 перекрывающихся окон зума 9, вытянул векторные контуры и слил их в единый GeoJSON (RFC 7946) — формат хранения географических объектов на базе синтаксиса JSON.

Снапшот состояния, скопированный из активного окна, содержал кэш loadedIds — сервер считал эти участки уже загруженными и наотрез отказывался отдавать центральное окно Петербурга и Карельского перешейка. Пришлось сбрасывать идентификаторы и догружать недостающие 60 полигонов отдельным проходом. Итог: 364 полигона, 25 почвенных разностей. Главный фаворит — иллювиально-железистые подзолы (По_1^{ig}), визитная карточка сосновых боров на песках.

Маска леса: оконный доступ к COG

Для лесного покрова я взял продукт CGLS-LC100 (Buchhorn et al., 2020) за 2019 год. Это глобальный растр с шагом 100 м. Качать весь файл (около гигабайта) не потребовалось: GeoTIFF был оформлен по стандарту Cloud-Optimized GeoTIFF (COG).

С помощью библиотеки GDAL и её виртуальной файловой системы /vsicurl в связке с Python-библиотекой rasterio можно читать растр напрямую из удалённого хранилища через HTTP-запросы диапазонов байтов (range-requests). Скрипт вырезал ровно географическую рамку Ленобласти.

Далее пиксели класса 1 (вечнозелёный хвойный лес) были векторизованы функцией rasterio.features.shapes: получилось 3044 контура площадью более 1 км².

Ориентироваться только на теги OSM (leaf_type=needleleaved — тег, означающий иглолистную хвою вообще, а не конкретно сосну) не позволяла фрагментарность покрытия.

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

Вторая поездка: Лужские беломошники

Вооружившись первой версией карты, на следующие выходные мы позвали друзей и махнули под Лугу.

Есть особое чувство безответственности, когда везешь людей за 150 км под вечер, основываясь на только что склеенном скриптом файле. Но карта и бородатые мужики из инстаграмма как будто намекали нам: на песчаных террасах реки Луги хвойный лес совпадает с нужными подзолами.

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

Переезжаем на вторую точку, углубляемся в массив — и попадаем в безупречный, хрестоматийный беломошник. Светлый просторный сосновый бор, чистый белый лишайниковый ковёр, под ним сухой хрустящий песок. И главное — боровики! Крепкие, тёмно-вишнёвые, как с картинки. Сомнения закравшиеся в предыдущем абзаце оказались беспочвенны.

Правда, быстро выяснился нюанс: почти всё, что росло на виду, срезали конкуренты ещё ранним субботним утром. Нам достались трудовые «хвосты». Но концепция подтвердилась на местности: косвенные признаки вывели нас ровно в целевой биотоп. Слой карты - «кто здесь проходил с ведром три часа назад» спутник, увы, отдает не всем желающим.

Алгоритм кандидатов

Чтобы не сличать слои глазами, я формализовал пересечение в алгоритм генерации полигонов-кандидатов:

Пайплайн алгоритма кандидатов
  1. Экспертная оценка почв: типам почв Фридланда присвоили рейтинг пригодности (\star / \star\star / \star\star\star). В отбор пошли почвы от \star\star (прежде всего те самые иллювиально-железистые подзолы).

  2. Растеризация: вектор почв перевели в растровую сетку, идентичную сетке CGLS-LC100.

  3. Логическое пересечение: бинарная маска «хвойный лес \cap почва \ge \star\star».

  4. Полигонизация и отсев: преобразовали маску обратно в вектор через rasterio.features.shapes, выкинув мелкий мусор площадью до 0,3 км². Осталось 3265 зон общей площадью 10 240 км².

  5. Зональная статистика подложки: для каждого полигона рассчитали зональное среднее доли песка в подпочве на глубине 60 см по глобальной сетке OpenLandMap / SoilGrids (Hengl et al., 2017) (разрешение 250 м).

  6. Разделение на сосну и ель: если средняя песчаность превышала 60%, полигон получал флаг pine=true (условный сосняк); если ниже — отправлялся в категорию «прочий хвойный» (чаще сырые ельники).

Итог: 1048 «сосновых» зон (4348 км²) и 2217 прочих хвойных.

Флаг pine=true был смелым авансом: он означал не то, что модель распознала сосну, а лишь то, что хвойный лес стоит на относительно лёгкой песчаной почве. Пересечение разномасштабных данных (почвы 1:2,5 млн, песок 250 м, лес 100 м) не делает границы точнее их самого грубого компонента. Звёзды означали приоритет проверки ногами, а не плотность боровиков на квадратный метр.

Архитектура на коленке: Мобильный вьюер и смена картографического движка

После Луги стало ясно, что в лес нужен удобный полевой инструмент. Я дал Клоду задание набросать веб-интерфейс, куда заложить сценарии для смартфона:

  • Тап по участку раскрывает карточку с кнопками перехода в навигаторы - ссылку по протоколу geo: (RFC 5870) для открытия в сторонних офлайн-приложениях Android.

  • Кнопка геолокации через встроенный в браузер W3C Geolocation API: стоишь среди сосен и видишь, внутри ты расчётного полигона или ещё бредёшь по переходной зоне.

  • Разделение панели на «простой режим» (только грибные места, радар дождей и болота) и «экспертный» (где можно крутить прозрачность почв и подсвечивать отдельные типы).

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

Инженерия доставки: решение проблемы сдвига в 18 км, PMTiles и Cloudflare Workers

Драматичный переезд с Leaflet на OpenLayers

Первый прототип крутился на библиотеке Leaflet. Но тут вскрылась фундаментальная проблема геодезических проекций:

  • Стандартные веб-карты (OSM, Google) используют проекцию EPSG:3857 (WGS 84 / Pseudo-Mercator, или Web Mercator).

  • Спутниковые тайлы Яндекса исторически опираются на эллипсоидальную проекцию Меркатора — EPSG:3395 (WGS 84 / World Mercator).

Если натянуть векторный оверлей из одной проекции на растр другой, на широте Санкт-Петербурга (60° с. ш.) возникает физический сдвиг геометрии на местности примерно в 18 километров. Библиотека MapLibre GL JS отпала сразу — она жёстко привязана к Web Mercator. Единственным движком, способным динамически трансформировать растровые и векторные слои в произвольные проекции через WebGL (браузерный интерфейс аппаратного ускорения графики) и Canvas прямо на мобильном процессоре, оказался OpenLayers. Проверил прототип на смартфоне: подложка Яндекса встала без перекосов, контуры легли пиксель в пиксель.

Векторные тайлы и сжатие в PMTiles

Отдавать мобильному браузеру «сырые» файлы GeoJSON лесов и болот весом по 35 МБ через мобильную сеть на лесной опушке — верная смерть. Данные требовалось тайлировать — разрезать на стандартные пространственные квадраты разного масштаба.

Конвейер генерации оформили в воспроизводимый bash-скрипт:

  1. Утилита mapshaper переводила координаты в локально настроенную азимутальную равновеликую проекцию Ламберта LAEA (Lambert Azimuthal Equal Area, сохраняющую площади объектов) с центральной точкой 60° с. ш., 31° в. д. В плоских метрах пороги упрощения и фильтры площади работают геометрически строго, в отличие от искажающихся угловых градусов WGS84.

  2. Команда -clean удаляла топологические наложения и осколки растеризации.

  3. Упрощение геометрии алгоритмами Дугласа–Пекера (1973) / Висвалингама–Уайатта (1993) с флагом keep-shapes удаляло лишние вершины, не допуская распада мелких замкнутых полигонов. Контуры болот, например, «похудели» с 778 до 333 тысяч вершин.

  4. Утилита tippecanoe паковала полигоны в векторные тайлы формата Mapbox Vector Tile (MVT) внутри единого контейнера PMTiles.

Формат PMTiles устроен гениально: это единый файл, содержащий пирамиду тайлов со встроенным индексным заголовком. Браузер через OpenLayers шлёт к серверу запросы диапазонов байтов (HTTP range-requests), скачивая только нужные несколько килобайт на текущий экран, а сервер отвечает кодом 206 Partial Content.

Архивы легли в облачное объектное хранилище Cloudflare R2, а перед ними встал Cloudflare Workers — бессерверный обработчик на JavaScript, который проверяет авторизацию и раздаёт байты с минимальной задержкой.

Болота: метод отрицания

Чтобы не тонуть в прямом смысле слова, через Overpass API (язык запросов к базе OpenStreetMap) мы выкачали все полигоны болот Ленобласти (natural=wetland). Утилита osmtogeojson собрала их в мультиполигоны с внутренними «дырами». Этот слой стал отрисовываться поверх кандидатов ярко-синим и оливковым цветом. Логика: сосновый бор часто тянется узкой песчаной гривой между непроходимыми верховыми топями. Видишь сухое ребро среди синевы — туда и надо идти.

Монетизация: три продажи на Авито

Тогда же в поездке возникла мысль: нужно ли это кому‑то ещё? Я выставил объявление на Авито о продаже доступа к карте на две недели за символическую плату. Случились три реальные продажи. Пришлось быстро дописывать защитный контур: Вход через учётные записи Яндекса и «ВКонтакте» А Выдача приватного слоя точек только при наличии валидной сессионной cookie.

Третий выезд: А мы пойдем на север

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

Результат слегка отрезвил: на опушках стояли шеренги машин, по лесу бродили угрюмые конкуренты с пустыми ведрами. Видимо байки про грибников собирающих грибы с фонариками по ночам были не беспочвенны. На следующем намеченном участке сосняк на поверку оказался завален буреломом и затянут подлеском. Карта работала с вероятностью «фифти-фифти»: если точка обещала сосну — сосна там, скорее всего, была; но в половине мест под ногами чавкала жижа, пропущенная грубыми картами почв.

Не теряем надежды, едем дальше. Поезжаем еще буквально 10 километров в то место, где карта предсказывает беломощники и сосновый лес. И оказываемся ровно в таком лесу. Все на месте. беломощники, сосна и боровые грибы. Победа.

Вернувшись домой, я решилглубже копнуть геологию. Откуда вообще берётся песок под сосняками?

Геология четвертичного чехла и конвейер векторизации советских геолкарт

Геология: Девон против ледника

Песок и песчаник — принципиально разные геологические тела. Песок — рыхлый, несцементированный обломочный материал. Песчаник — монолитная осадочная горная порода, где зёрна кварца намертво связаны природным минеральным цементом. Классический пример — знаменитые девонские обрывы реки Оредеж у Белогорки и Ям-Тёсова: этим породам свыше 380 миллионов лет, когда здесь плескалось тёплое мелководное море и плавали панцирные рыбы.

Но современный сосновый бор растёт не на девонских плитах. Его среда — это четвертичный чехол, сформированный последними оледенениями:

  1. Морена (g): несортированная смесь валунов, суглинков и гравия, которую ледник грёб перед собой. Это субстрат тяжёлый, плотный, на нём чаще поднимается тёмный ельник.

  2. Флювиогляциальные отложения (f): пески и гравийники, перемытые и отсортированные бешеными потоками талых ледниковых вод. Именно они слагают зандровые поля, озы и камовые холмы — сухие, прекрасно дренированные возвышенности.

  3. Озёрно-ледниковые отложения (lg): накапливались в приледниковых подпруженных озёрах. Они состоят как из песков, так и из тончайших ленточных глин. Сам по себе индекс на карте вовсе не гарантирует сухой грунт под ногами.

  4. Эоловые пески (v): древние песчаные дюны, навеянные ветром в суровом перигляциальном климате.

Теперь у меня были довольно точные данные о подходящих почвах

Четвертый выезд: Заборы Карельского перешейка

Решили проверить кандидата под Токсово в районе Кавголовского озера. Приезжаем — идеальный, звенящий сосновый бор на крутых песчаных холмах. Но ровно по границе перспективного полигона тянется трёхметровый глухой забор неизвестного генезиса. Плюнули, развернулись и пошли на соседнее болото собирать спелую клюкву.

Тупик порогов и прорыв в машинном обучении

Карта обогатилась геологией, но оставалась фундаментальная брешь: как заглянуть внутрь лесного массива с шагом не 100, а хотя бы 10–20 метров?

Первым делом мы добавили базовую глобальную маску древесного покрова ESA WorldCover v200 с шагом 10 метров (класс Tree cover). Стало видно просеки, опушки и границы вырубок. Но WorldCover — это бинарная маска: она подсвечивает дерево, но не отличает сосну от берёзы или ольхи.

Провал простых порогов Sentinel-2: физика зимних теней и унимодальный сигнал

Провал «в лоб»

Возникло ощущение, что решение лежит на поверхности: хвойные деревья вечнозелёные, а лиственные сбрасывают листву на зиму. Считаем нормализованный разностный вегетационный индекс NDVI (Rouse et al., 1974; Tucker, 1979):

NDVI = \frac{NIR - Red}{NIR + Red}

Логика: сравним летний NDVI и весенний безлистный NDVI спутника Sentinel-2 (Drusch et al., 2012), найдём порог «просадки» зелёности и отделим хвойные от лиственных.

Мы проверили эту гипотезу на пикселях Ленобласти в Google Earth Engine (GEE) (Gorelick et al., 2017). Полный провал:

  1. Бесснежная весенняя фенология: гистограмма сезонной разности NDVI внутри леса оказалась строго одногорбой. Никакого разделения на два колокола нет — единым порогом отделить хвою от листвы невозможно. К тому же озимые поля и луговины весной выдавали точно такую же «зелёность», как зрелый сосняк.

  2. Зимний «снегометод»: идея искать вечнозелёные кроны над белым снегом разбилась о физику высоких широт. На 60° с. ш. солнце зимой едва поднимается на 6–15° над горизонтом. Кроны отбрасывают гигантские тени: 97% лесных пикселей сколлапсировали в физический минимум индекса.

Казалось, спутники бессильны. Но ресёрч научной литературы (Udali et al., 2021; Blickensdörfer et al., 2024) подсказал: проблема не в спутнике Sentinel-2, а в попытке решить многомерную задачу простым ручным порогом. Нужны размеченные обучающие выборки и машинное обучение.

Пайплайн

Пайплайн

Случайный лес находит лес хвойный

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

В конце концов был найден хорошо расписанный пайплайн для разделения хвойных и лиственных основанный как раз на Random Forest модели: MDPI rs13163237

ML-пайплайн: Random Forest, пространственная кросс-валидация и абляционный анализ

Я снова обратился к OSM, но теперь не за готовыми сосняками, а за обучающими полигонами с тегом leaf_type. После отсева мелких скверов и дачных посадок (оставили строго контуры площадью от 3 гектаров) набралось 3 769 полигонов: 1 407 чисто хвойных, 451 лиственный и 1 911 смешанных. Смешанные массивы временно отложили, чтобы обучить бинарный классификатор.

Контуры ужали внутрь на 15 метров буфером отсечения граничных эффектов и насэмплировали обучающие точки с шагом 30 метров (76 760 точек). Для каждой точки в GEE собрали вектор признаков:

  • Оптика Sentinel-2: летний и весенний NDVI, их разность (фенологический сдвиг), коротковолновые инфракрасные каналы SWIR (Short-Wave Infrared) B11 и B12, чувствительные к влажности хвои и геометрии полога, индекс NDII;

  • Радар Sentinel-1: обратное рассеяние в поляризациях VV (вертикальная передача и приём) и VH (вертикальная передача, горизонтальный приём) летом и зимой;

  • Рельеф Copernicus GLO-30: цифровая модель высот DEM с разрешением 30 метров, из которой вычислялись абсолютная высота и уклон поверхности.

Облачные запросы падали по таймауту пяти минут, поэтому выборку выгрузили пакетным CSV-файлом, а обучение запустили локально в Python на базе библиотеки scikit-learn. Модель — Random Forest (ансамбль решающих деревьев).

Честная валидация: как не обмануть себя

В геоданных кроется страшная ловушка — пространственная автокорреляция. Соседние пиксели леса почти идентичны. Если перемешать точки случайным образом, соседние пиксели одного и того же дерева окажутся и в обучении, и в тесте, выдав дутые 99% точности.

Мы применили пространственно-блочную кросс-валидацию: всю Ленинградскую область разбили на квадраты сетки 0,25°. Модель училась на одних блоках, а тестировалась на 30% совершенно независимых полигонов, которых никогда не видела в глаза.

Результат на 29 190 проверочных точках:

  • Overall Accuracy (общая точность): 0,887;

  • Каппа Коэна (\kappa): 0,772 (отличный показатель с поправкой на случайное угадывание);

  • Полнота по классам: лиственный — 0,895, хвойный — 0,878.

Абляционный анализ: что реально работает?

Мы поочерёдно отключали группы признаков, чтобы понять их реальный вклад:

Набор признаков

Число признаков

Accuracy

Каппа

Только оптика Sentinel-2

6

0,848

0,692

Оптика + Рельеф (высота, уклон)

8

0,884

0,765

Оптика + Рельеф + Радар Sentinel-1

14

0,888

0,774

Полный набор (+ песок)

15

0,888

0,774

Выводы оказались поразительными:

  1. Рельеф — ключевой драйвер: добавление высоты и уклона дало колоссальный скачок точности (+3,6 процентных пункта). Хвойные и мелколиственные леса в тайге чётко привязаны к геоморфологии.

  2. Радар оказался лишним: 6 тяжелейших каналов Sentinel-1 дали прирост всего в 0,4 п.п. Для экономии памяти и времени радар был исключён из финального продакшена.

  3. Анализ важности признаков по перестановкам (permutation importance) показал: лидирует летний NDVI (0,1635), за ним — уклон рельефа (0,0282) и канал SWIR B11 (0,0277). А та самая сезонная просадка NDVI, которая с треском провалилась в виде одиночного порога, внутри многомерной модели дала весомый вклад (0,0145).

Производственный релиз: компромиссы и оптимизация

Попытка рассчитать всю Ленобласть в 10-метровом разрешении в GEE зависла на 15,5 часов и была снята. На сетке 20 метров число пикселей сократилось в 4 раза, и расчёт уложился в 25 минут.

Чтобы исключить ошибки классификации над водоёмами (без маски модель объявила хвойным половину Ладожского озера), растр обрезали строгой маской древесного полога ESA WorldCover.

Итоговый слой получил название «Хвойный 20 м» (пометка \beta, бета-версия). При нарезке растровых тайлов файл весил 466 МиБ, превышая лимит загрузки Cloudflare R2 в 300 МиБ. Мы квантовали альфа-канал прозрачности (задающий вероятность хвойного) с помощью Pillow до 16 фиксированных градаций: вес упал до 221 МиБ без визуальной деградации.

┌────────────────────────────────────────────────────────────────────────┐
│                   ИТОГОВАЯ ТОЧНОСТЬ КЛАССИФИКАТОРА                     │
│                                                                        │
│   МАТРИЦА ОШИБОК (ТОЧЕК В ТЕСТЕ: 29 190)                               │
│                         Назвала Лиственным      Назвала Хвойным        │
│   На деле Лиственный:         14 578                 1 706             │
│   На деле Хвойный:             1 580                11 326             │
│                                                                        │
│   • Overall Accuracy (Общая точность): 88.7%                           │
│   • Каппа Коэна (согласие сверх случайного): 0.772                     │
│   • Полнота детекции хвои (Recall): 87.8%                              │
└────────────────────────────────────────────────────────────────────────┘
Результат выделения хвойников

Результат выделения хвойников

Что в сухом остатке

Изначально я просто хотел меньше крутить баранку и не бродить по пустым лесам. В итоге пет-проект заставил погрузиться в целый стек технологий и дисциплин:

  • Геология и почвоведение: генезис четвертичных отложений, литология девона, морфология подзолов;

  • Основы микологии: экология эктомикоризы Boletus pinophilus, молекулярные маркеры ITS/GAPDH;

  • ГИС и веб-картография: проекции, тонкости OpenLayers, векторные тайлы PMTiles и range-запросы в Cloudflare Workers / R2;

  • Computer Vision и OCR: конвейеры векторизации архивных геолкарт, дескрининг растров, робастные оценки;

  • Дистанционное зондирование Земли и ML: мультиспектральная фенология Sentinel-2, радар Sentinel-1, борьба с пространственной автокорреляцией и оптимизация ансамблей Random Forest.

Что осталось нерешённым: сосна, ель и беломошник

Честный отрицательный результат: сосна против ели

А можно ли выделить саму сосну? Мы проверили это математически.

Среди хвойных точек попытались обучить модель предсказывать песчаный субстрат по спектру кроны:

  • По оптике показатель ROC AUC (Receiver Operating Characteristic — Area Under the Curve, площадь под кривой ошибок) составил ровно 0,500 — эквивалент подбрасывания монетки.

  • Радар поднял AUC лишь до 0,537.

Спектрально кроны сосны и ели на песчаных и суглинистых почвах в среднем диапазоне Sentinel-2 неотличимы. А обучающих меток конкретных пород в OSM катастрофически мало: сосны набралось около 150 выделов, а ели — всего 28.

Выделить породу сосны в чистом виде из бесплатного космоса и выборки OSM пока не получилось. Надо либо доразмечать датасет в ручную либо взять область шире. Но наш рабочий суррогат - это пересечение ML-слоя хвойного леса 20 м с песчаными контурами ГГК-1000 и сухим рельефом — на практике прекрасно локализует боровые биотопы.

Проблема лишайникового покрова

Беломошник - геоботанический тип леса, а не ландшафтный класс. Напочвенный лишайниковый покров со спутников среднего разрешения сквозь сомкнутый полог крон не считывается. Попытки найти повыдельные таксационные карты в открытых источниках (ФГИС ЛК, региональные лесохозяйственные регламенты) упёрлись в то, что по Ленинградской области геометрия лесоустройства в открытом доступе отсутствует. Поэтому пересечение факторов остаётся наиболее честным приближением.

И пара слов о современных инструментах разработки. Без диалога с LLM (в частности, Claude) подобный исследовательский пласт: от парсинга нестандартных протоколов до математической обработки растров заняло бы в одиночку пару месяцев плотного времени. Я же уложился в серию спринтов между поездками.

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

Проект продолжает развиваться:

Глоссарий терминов, сокращений и обозначений

Глоссарий терминов, сокращений и систем координат

Карты, геоданные и пространственные системы

  • OSM (OpenStreetMap) — краудсорсинговый картографический проект с открытыми геоданными. Источник разметки лесов и контуров болот.

  • CGLS (Copernicus Global Land Service) — служба глобального мониторинга земной поверхности в рамках европейской космической программы Copernicus.

  • LC100 (Land Cover 100 m) — растровый продукт земного покрова с шагом пикселя 100 м (в проекте взят слой Forest-Type за 2019 год).

  • ESA WorldCover — глобальная высокодетальная карта типов поверхности с разрешением 10 м от Европейского космического агентства (ESA). В проекте использован класс Tree cover версии v200.

  • Copernicus DEM GLO-30 — глобальная цифровая модель высот (DEM — Digital Elevation Model) с шагом около 30 метров, источник данных о высоте и углах наклона склонов.

  • GDAL (Geospatial Data Abstraction Library) — базовая библиотека для трансляции, трансформации и чтения растровых и векторных геоформатов.

  • GeoTIFF — стандартизированный формат растровых графических файлов TIFF, содержащий встроенные географические метаданные о координатной привязке.

  • COG (Cloud-Optimized GeoTIFF) — оптимизированный для облачных сред GeoTIFF с внутренней тайловой структурой, позволяющий скачивать фрагменты растра HTTP-запросами диапазонов байтов без полной загрузки файла.

  • GeoJSON — открытый формат описания географических объектов (точек, ломаных, полигонов и их свойств), основанный на синтаксисе JSON.

  • EPSG — реестр геодезических параметров Европейской группы нефтеразведки (European Petroleum Survey Group). Числовые коды обозначают конкретные координатные системы.

  • EPSG:3857 (Web Mercator / Pseudo-Mercator) — общепринятая в веб-картографии цилиндрическая проекция на сфероиде (OSM, Google Maps).

  • EPSG:3395 (World Mercator) — эллипсоидальная проекция Меркатора, применяемая в тайловых сервисах Яндекса.

  • LAEA (Lambert Azimuthal Equal Area) — азимутальная равновеликая проекция Ламберта. Сохраняет истинные площади контуров, устраняя масштабные искажения при расчётах в метрах.

  • WGS84 (World Geodetic System 1984) — общеземная эллипсоидальная геодезическая система, глобальный стандарт спутниковой навигации GPS.

  • ГГК-1000/3 — Государственная геологическая карта масштаба 1:1 000 000 третьего поколения (ВСЕГЕИ).

  • — геологический индекс флювиогляциальных (водно-ледниковых) отложений (пески, гравийники зандров и озов).

  • — геологический индекс озёрно-ледниковых отложений (пески, супеси, ленточные глины приледниковых озёр).

  • — геологический индекс эоловых отложений (дюнные перевеянные пески).

  • — геологический индекс ледниковых моренных отложений (несортированные суглинки, валунники).

Спутниковое зондирование и машинное обучение

  • NDVI (Normalized Difference Vegetation Index) — нормализованный относительный вегетационный индекс, количественная мера фотосинтетической активности растительности.

  • SCL (Scene Classification Layer) — аппаратно-программный растровый слой классификации сцены спутника Sentinel-2, позволяющий автоматически отфильтровывать облака, тени крон, снежный покров и битые пиксели.

  • SWIR (Short-Wave Infrared) — коротковолновый инфракрасный спектральный диапазон, отражение в котором определяется структурой крон и содержанием влаги в хвое/листве.

  • B11 / B12 — каналы 11 и 12 сенсора MSI спутника Sentinel-2, соответствующие полосам SWIR.

  • VV / VH — поляризационные моды радара с синтезированной апертурой (SAR) спутника Sentinel-1 (VV — вертикальное излучение и приём, VH — вертикальное излучение и горизонтальный приём).

  • Random Forest (Случайный лес) — ансамблевый алгоритм классификации на базе комитетного голосования множества независимых решающих деревьев.

  • ROC AUC (Receiver Operating Characteristic — Area Under the Curve) — метрика площади под кривой ошибок, отражающая интегральную способность бинарного классификатора разделять классы независимо от выбранного порога (0,5 — уровень случайного шума, 1,0 — идеальное разделение).

  • Каппа Коэна () — статистическая метрика согласованности предсказаний модели с эталонной разметкой за вычетом вероятности случайного совпадения классов.

  • Overall Accuracy (Общая точность) — отношение числа безошибочно классифицированных тестовых точек к общему размеру проверочной выборки.

Компьютерное зрение и векторизация

  • CIELAB — перцептивно сбалансированное цветовое пространство CIE L^*a^*b^*, где геометрическое расстояние между координатами соответствует воспринимаемой глазом разнице оттенков.

  • HSV (Hue, Saturation, Value) — цилиндрическое представление цвета по тону, насыщенности и яркости.

  • RANSAC / USAC / MAGSAC++ — семейство робастных алгоритмов оценки математических моделей на зашумлённых массивах данных с высокой долей грубых ошибок (выбросов).

Сетевой стек и облачная инфраструктура

  • API (Application Programming Interface) — программный интерфейс для взаимодействия сетевых сервисов и передачи структурированных данных.

  • 206 Partial Content — статусный код протокола HTTP, возвращающий запрошенный по смещению диапазон байтов файла.

  • KV (Key–Value) — распределённое бессерверное хранилище типа «ключ — значение» платформы Cloudflare Workers.

  • R2 — объектное S3-совместимое облачное хранилище Cloudflare с нулевой стоимостью исходящего трафика.

  • WebGL (Web Graphics Library) — браузерный API для высокопроизводительного рендеринга 2D- и 3D-графики с использованием аппаратных ресурсов GPU.

  • PMTiles — открытый облачно-ориентированный однофайловый архив для картографических векторных и растровых тайлов.

Биология, сокращения и единицы измерений

  • ITS (Internal Transcribed Spacer) — внутренний транскрибируемый спейсер ДНК, универсальный молекулярный штрихкод в систематике грибов.

  • B. pinophilus / B. edulis — общепринятое в биологической номенклатуре сокращение названий видов Boletus pinophilus (белый гриб сосновый) и Boletus edulis (белый гриб сетчатый/обыкновенный).

  • ООПТ — особо охраняемая природная территория.

  • РСФСР — Российская Советская Федеративная Социалистическая Республика.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.