- PVSM.RU - https://www.pvsm.ru -

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды

Мы уже рассказывали, как Яндекс.Погода делает сверхкраткосрочный прогноз осадков [1] по метеорологическим радарам и спутниковым наблюдениям [2]. Сегодня расскажем, как нам удалось поднять качество такого прогноза за счет внедрения нейросетевых подходов и почему мы уже отказывались от них в прошлом. А ещё вы узнаете, как мы улучшали визуальное восприятие самой карты на границе радарных и спутниковых наблюдений.

И снова про наукастинг

Когда мы говорим о прогнозе погоды, то чаще всего подразумеваем температуру и осадки, например, на завтра или ближайшие выходные. В этом случае хватает традиционных погодных трендов. Но если вы идёте обедать на улицу или на прогулку с ребёнком и при этом не хотите попасть под дождь, то важно знать точный момент начала дождя в течение ближайшего получаса. В таких ситуациях приходит на помощь наша карта осадков aka nowcasting.

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 1

Рисунок 1. Карта осадков Яндекс.Погоды

Nowcasting [3] — это сверхкраткосрочный прогноз погоды (до 2–6 часов) с шагом в 5–15 минут, предсказывающий поведение погодных явлений с коротким жизненным циклом. Такой прогноз в той или иной степени сводится к задаче экстраполяции наблюдаемых метеорологических явлений, так как настоящие тяжёлые физические модели для него менее приспособлены и не могут оперативно учитывать быстро меняющие условия.

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

Как решать

Если исходить из того, что наукастинг сводится к задаче экстраполяции (рисунок 2), то формальное определение будет выглядеть так:

$p(x_{t+1...t+k} | x_{1..t})=prod_{i=1}^{k}{p(x_{t+i} | x_{1..t+i-1})}$

где $x$ — кадр с метеорологического радара и/или спутника, $t$ — количество кадров, на основе которых делается предсказание, $k$ — количество предсказываемых кадров. При этом можно интерпретировать кадр как обычную картинку и свести задачу к работе с видеоизображением.

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 6

Рисунок 2. Пример изображений с метеорологического радара. Вверху: пример входных кадров для модели. Внизу: ожидаемые кадры во время предсказания. Здесь $t=14$, а $k=14$

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

Чаще всего решение такой задачи сводится либо к применению алгоритмов optical flow (1 [4], 2 [5], 3 [6]), либо к нейросетевым методам (1 [7], 2 [8], 3 [9], 4 [10], 5 [11], 6 [12]). Долгое время в продакшене у нас работал алгоритм на основе optical flow, который мы смогли натюнить таким образом, что он побил по метрикам нашу предыдущую нейросетевую архитектуру. Далее расскажем о том, как мы наконец обошли optical flow и сделали более качественный прогноз с использованием нейросетей.

Архитектура сети

За основу мы взяли архитектуру PredRNN++ [Wang et al.; ICML '18] [9]. Главное нововведение статьи – модификация классической ConvLSTM-ячейки [7]. Авторы добавили вход для пространственной памяти (обозначение $M$ в статье) и расширили output gate, чтобы научиться её учитывать (рисунок 3). Утверждается, что это помогает лучше запоминать пространственные изменения в последовательности кадров видеоряда.

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 10

Рисунок 3. Архитектура рекуррентной ячейки Causal LSTM. Красным цветом выделено отличие от ConvLSTM. (Источник [9])

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

$mathcal{L}(y, hat{y})=mathbb{E} left [1 - frac{2yhat{y} + 1}{y + hat{y} + 1} - yloghat{y} - (1 - y)log(1 - hat{y}) right ] to min$

где $y$ — пример из обучающей выборки, а $hat{y}$ — предсказанное значение.

Результаты

При сравнении новой модели с предыдущей мы смотрели как на стандартные метрики для задач сегментации и классификации (F1, IoU), так и специально построили метрики, которые отражают пользовательское ощущение прогноза (например, доля идеальных прогнозов). Это помогло улучшить в том числе и то, что видят в прогнозе наши пользователи, и как они получают информацию из него. Ниже приведена таблица с изменениями по сравнению с решением на базе optical flow:

Метрика Изменение, %
F1, среднее за 2 часа +7,6
IoU, первый. шаг +3,5
IoU, второй шаг +6,1
Доля идеальных прогнозов +2,2
Доля точно предсказанных случаев начала дождя +6,0

Если F1 и IoU — широко известные метрики, то на двух последних стоит задержаться, так как именно они характеризуют пользовательское восприятие прогноза. Доля точно предсказанных случаев начала дождя — это отношение количества правильно предсказанных случаев начала первого дождя на рассматриваемом окне в два часа ко всем случаям начала первого дождя на двухчасовых окнах. А доля идеальных прогнозов показывает, какая часть двухчасовых последовательностей предсказана без ошибки на каком-либо шаге. Таким образом, эти метрики позволяют нам оценить пользовательский опыт использования наукастинга.

Также посмотрим на зависимость метрик от дальности прогноза:

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 14

Рисунок 4. График среднего IoU от дальности предсказанного кадра по времени

Для расчёта optical flow мы использовали Dense Inverse Search [5] с константным вектором переноса (на графике показан лучший из полученных вариантов), который лучше всего себя показал среди других optical flow алгоритмов для задачи наукастинга и в наших экспериментах, и в экспериментах [12] коллег. Эксперименты с PredRNN++ различаются между собой применением медианного фильтра на входных данных (так как радары иногда шумят) и метрикой, по которой подбирался порог бинаризации (F1 или F1.5). Из графика видно, что optical flow лучше нейросеток только на первой десятиминутке. Потом его предсказания начинают сильно деградировать, и на втором часе он проигрывает всем вариантам.

Помимо этого, возвращение нейросетевой архитектуры даёт возможность и дальше улучшать качество прогноза осадков, так как позволяет дополнительно учитывать фичи, которые потенциально помогают прогнозировать внезапное возникновение или исчезновение зон с осадками, тогда как подход, основанный на optical flow, позволяет только передвигать их по вектору переноса.

Склейка радарных и спутниковых снимков

В прошлый раз [2] мы рассказали, как расширили зону наукастинга за пределы мест установки метеорологических радаров за счёт использования спутниковых снимков. Напомним, что мы использовали нейронные сети для восстановления радарных полей по спутниковым снимкам. В этом случае наша модель по качеству была близка к самим радарам, но так как спутники и радары по факту различаются по способу измерения осадков, то возможно неполное совпадение областей дождя между ними. Поэтому нередко нам справедливо указывали на резкие границы между зоной радарного и спутникового наукаста. Мы использовали нейросети для решения и этой задачи — аккуратного перехода из одной зоны в другую, чтобы карта осадков выглядела более реалистично, а границы были менее заметны для пользователей.

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

Наша идея заключается в том, что мы делаем хитрую нейросетевую склейку на стыках изображений. За основу мы взяли нейросетевой инпейнтинг от NVIDIA [13], основанный на Unet-подобной архитектуре.

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 15

Рисунок 5. Пример работы алгоритма из оригинальной статьи «Image Inpainting for Irregular Holes Using Partial Convolutions» [13]

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

Решение этой задачи состоит из двух шагов:

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

Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 16 Как мы отказались от нейросетей, а затем вернули их в прогноз осадков Яндекс.Погоды - 17
Рисунок 6. Сравнение карты осадков без нейросетевой склейки (слева) и с ней (справа)

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

Заключение

Конечно же, идеальная точность недостижима. Человечество ещё только учится понимать и предсказывать погоду. И описанные в посте улучшения — не потолок для нейросетевых подходов. Мы продолжаем экспериментировать с другими архитектурами и дополнительными данными, чтобы наш прогноз становился достовернее. Будем рады, если описанный опыт поможет и вам.

Автор: Пётр В

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/matematika/353853

Ссылки в тексте:

[1] сверхкраткосрочный прогноз осадков: https://habr.com/ru/company/yandex/blog/317626/

[2] спутниковым наблюдениям: https://habr.com/ru/company/yandex/blog/425517/

[3] Nowcasting: https://en.wikipedia.org/wiki/Nowcasting_(meteorology)

[4] 1: https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1256/qj.04.100

[5] 2: https://www.geosci-model-dev.net/12/1387/2019/gmd-12-1387-2019-discussion.html

[6] 3: https://www.kdd.org/kdd2019/accepted-papers/view/precipitation-nowcasting-with-satellite-imagery

[7] 1: https://arxiv.org/abs/1506.04214

[8] 2: https://papers.nips.cc/paper/6689-predrnn-recurrent-neural-networks-for-predictive-learning-using-spatiotemporal-lstms

[9] 3: https://arxiv.org/abs/1804.06300

[10] 4: https://arxiv.org/abs/1811.07490

[11] 5: https://www.geosci-model-dev-discuss.net/gmd-2020-30/

[12] 6: https://arxiv.org/abs/2003.12140

[13] NVIDIA: https://arxiv.org/abs/1804.07723

[14] этом видео: https://www.youtube.com/watch?v=gg0F5JjKmhA

[15] пробуем восстановить: https://arxiv.org/abs/1812.10915

[16] Источник: https://habr.com/ru/post/504794/?utm_source=habrahabr&utm_medium=rss&utm_campaign=504794