Два года назад мы провели масштабное мероприятие – Rosneft Seismic Challenge 2019 – соревнование по машинному обучению, где нужно было найти границы между различными геологическими слоями (фациями) по данным сейсморазведки. В рамках соревнования мы получили хорошие результаты по метрике качества Dice. Но оказалось, что внедрить решения победителя в прод совсем не так просто, как кажется на первый взгляд. Подробнее об этом ниже. Сначала коротко о постановке задачи и данных, с которыми мы работаем. Сейсморазведка является основным методом обнаружения нефти и газа. Метод основан на возбуждении упругих колебаний (раньше для этих целей использовался динамит) и последующей регистрации отклика от горных пород. Эти колебания распространяются через толщу земли, преломляясь и отражаясь на границах геологических слоёв с разными свойствами. Отражённые волны возвращаются на поверхность и регистрируются специальными приёмниками. После обработки полученных данных на выходе получают сейсмический куб – трёхмерный массив, в котором для каждой точки с координатами x и y содержится сейсмическая трасса с информацией об отражённых волнах (амплитуда зарегистрированного сигнала и время после воздействия), то есть можно сказать, что ось z – это ось времени или глубина. Пример того, как выглядит сейсмический куб. На рисунке ниже можно увидеть, как выглядят данные в разрезе. Вертикальная ось на графике – время или глубина, а по горизонтальной оси – координата x или y. Цветом показана амплитуда сигнала. Теперь про саму задачу. В сейсмических данных границы между различными геологическими слоями будут выглядеть как локальные экстремумы. Или простыми словами: как светлые и тёмные полосы на сейсмическом разрезе. Такие границы называют "отражающими горизонтами". Поиск таких границ выполняется специалистами, и при этом они размечают горизонты на небольшой части данных (обычно на очень редкой сетке) и потом запускают аналитические алгоритмы для поиска. Процесс выделения и прослеживания отражающих горизонтов называют "корреляцией".  После чего каждый 5-й или 10-й срез отсматривается вручную специалистом, и правятся ошибки. Если горизонт прослеживается хорошо, то аналитические алгоритмы справляются и ручных правок немного, и занимают они мало времени. Но если горизонт не прослеживается (например, есть геологические разломы – сдвиги горных пород относительно друг друга), то аналитические алгоритмы уже не справляются, и на ручные правки специалистом может уходить очень много времени. Соответственно, понятно желание этот процесс ещё больше автоматизировать. Задача, которую нужно было решить – найти поверхности отражающих горизонтов, то есть найти границы между различными фациями. Участникам же дали задачу сегментировать фации и предоставили соответствующую разметку – такой же по размеру массив в виде куба, как и куб с сейсмическими данными, но в каждой точке которого содержится номер фации. После соревнования по границам масок фаций планировалось определять положение горизонтов. Решение победителя было хорошим по метрикам, оценивающим качество сегментации, но, когда после соревнования полученные горизонты отдали экспертам, выяснилось, что полученные поверхности отражающих горизонтов дискретны, так как каждому из пикселей во входном изображении в маске присваивается один из классов для фаций. То есть точность получения масок равна 1 пикселю на входном изображении. И, соответственно, с такой же точностью получаются поверхности отражающих горизонтов после обработки масок. При этом когда специалист размечает (пикирует) отражающий горизонт, он размечает сплайном, который не привязан к границам пикселей в изображении. Причём само изображение специалист видит после интерполяции (пример на рисунке ниже). Выяснилось, что такие “ступенчатые” результаты корреляции отражающих горизонтов сейсмики не хотят принимать. Скажу сразу, весь код победителя соревнования был полностью переписан нами, и сам подход к решению задачи пришлось изменить. Но это было очень увлекательно! Стали думать, как быть с дискретностью получаемых поверхностей. Первое, что приходит на ум – это увеличить разрешение изображение на входе линейной или бикубической интерполяцией, и маски получать в таком же разрешении. Но за счёт этого время обучения и объём потребляемой памяти увеличиваются в несколько раз. Следующий вариант – это повышать разрешение масок на выходе нейронной сети с помощью дополнительных слоёв свёрток и линейной интерполяции. Производительность при этом падает незначительно. А если ещё подумать, то можно понять, что повышать разрешение масок нужно только вдоль оси времени или глубины сейсмического куба. Похожий подход с повышением разрешения масок применяют для ускорения нейронных сетей для сегментации, только там уменьшают размер изображения на входе, а маски при этом увеличивают до исходного разрешения. Было принято решение перейти от сегментации фаций к сегментации самих отражающих горизонтов, чтобы упростить постпроцессинг результатов сегментации и получение координат отражающих горизонтов. Чтобы ещё больше увеличить точность получаемых масок, также приходится делать инференс (так называется процесс получения прогнозов модели) на пересекающихся окнах. При небольшом шаге между окнами, получается, что каждое значение мы считаем несколько раз, а потом их усредняем. На рисунке ширина окна 128, шаг между окнами 16 и значение глубины, на которой находится горизонт, вычисляется 8 раз для каждой точки с координатами x, y (за исключением участков на краю куба). Кроме этого окна берутся вдоль другой оси куба и значение для каждой точки вычисляется ещё 8 раз. Это тоже позволяет повысить точность и получить более гладкую поверхность Усреднение пересечений окон и увеличение разрешения масок позволяют сгладить получаемую поверхность. Увеличение разрешения входного изображения значительно увеличивает время обучения и инференса, поэтому более оправдано увеличивать разрешение только у масок отражающих горизонтов и только вдоль вертикальной оси. На рисунке ниже видно, как выглядит горизонт, размеченный специалистом – это синий цвет. Оранжевый – то, что получалось до применения упомянутых раньше улучшений. И зелёный – то, что получилось после. Видно, что после улучшений результат модели намного ближе к линии, размеченной специалистом. Казалось бы, сейчас точно всё должно получаться хорошо, но нет. В некоторых случаях модель начинает предсказывать горизонт на другой глубине. Так получалось из-за того, что рецептивное поле нейронной сети не покрывало всё изображение, и если где-то на другой глубине была похожая картина волнового поля, то нейронная сеть предсказывала там большую вероятность для маски горизонта.  Это удалось исправить с помощью расширенных свёрток (dilated convolution). Расширенные свертки отличаются от обычных тем, что в них значения весов фильтров применяются с некоторым шагом. Применение таких свёрток позволило увеличить размер рецептивного поля и исправить ошибки, о которых сказано выше. Пример работы модели на срезе со сложной волновой картиной. Горизонт не прослеживается по экстремумам. Аналитические алгоритмы скорее всего не справятся с таким горизонтом. Но модель для сегментации справляется и в этом случае её применение оправдано и позволяет сократить трудозатраты. После того как наше решение стало отвечать всем запросам со стороны бизнес заказчика, разработанный модуль для автоматической корреляции отражающих горизонтов был интегрирован в программный комплекс для геологического моделирования РН-ГЕОСИМ. Мы надеемся, что применение нашего модуля для автоматической корреляции отражающих горизонтов сократит трудозатраты при интерпретации сейсмических данных регионов со сложной геологией. БашНИПИ проводит хакатоны ежегодно. 2021 год не станет исключением.  Мы запустили международный челлендж с двумя параллельными задачами – на тему экологического мониторинга и разработки web-приложения для проектировщиков.  → Регистрация идёт полным ходом Уже более 400-х айтишников из разных стран мира стали частью этого мероприятия!  До 15 ноября у всех желающих есть шанс запрыгнуть в последний вагон. А после новых хакатонов ждите в этом блоге традиционную статью с разбором задач и их решений. Будет полезно!  Константин Сухарев, Айрат Азбуханов Программное обеспечение