GNN в Computer Vision

Computer Vision достаточно необычная область. Далеко не все алгоритмы из машинного обучения сюда заходят быстро, далеко не все приживаются. Примером того, что я не видел в варианте “в кассу” – были Graph Neural Network (GNN – сети работающие на графах).
Но, внезапно натолкнулся, об этом и рассказ.

Пару слов о том что такое GNN. Я не эксперт по этой области ML, так что могу достаточно неполно объяснить всю картину. В моём представлении GNN – это узловая классификация. Если каждый узел в графе ассоциирован с лэйблом, то такая сеть учиться предсказывать лэйбл исходя из положения на графе и соседней у которых есть лэйблы. Более подробно можно почитать про эти сети, например: 1, 2

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

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

  • SVM, AdaBoost и решающие деревья мы регулярно использовали до появления нейронок
  • Всякие LSTM и прочие рекуррентки мы использовали в 3-4 проектах
  • Про модные Transformer’ы я недавно писал, но на практике не использовал
  • Разные embeding-репрезентации и прочие скрытые пространства используются налево и направо, даже и не заметно, что это неклассические штуки для CV когда-то были

Еж на глобус

Я специально прогуглил, были ли крутые использования GNN в CV. Я не смог найти ничего реально полезного, но про пару сэмплов расскажу:

Image for post

Использование графа для распознавания. Во мне – шиза сумрачного гения. Не, я понимаю, что сработает. Но зачем? Нет никакого теоретического преимущество, а точность ниже.

Image for post

Сглаживание различных контуров или детекций через графы. Например: 1, 2, 3. Выглядит уже приличнее, но почему-то мне кажется, что на практике никто так не будет запариваться. Тем более я не видел ни в каких серьёзных практических бэнчмарках этих подходов в топе.

Есть интересная работа про распознавание скелетов. Но бэнчмарки слабые (не встретил в них ни одной популярной работы), работы с большим числом поз нет, тестируется только на одном датасете.


Если знаете что-нибудь интересное – пишите!!

Что понравилось

Наконец нашёл прикольную нейронку, которая использует GNN. Называется SuperGlue: Learning Feature Matching with Graph Neural Networks . И, как ни странно, это:

  1. Неплохая работа в области где последние 10 лет не было ни одного серьёзного улучшения
  2. Применение нейронной сети в области где до сих пор не смогли прикрутить хорошую нейронную сеть (за последний год есть некоторые подвижки, возможно сделаю на эту тему видео позже)
  3. Достаточно простое и нативное решение, чтобы интегрировать это в реальности.

Сама задача – очень старая и известная. Извлечь фичи из нескольких изображений и найти их взаимное соответствие. Обычно это решается через три этапа:

  1. Выделить фичи и рассчитать их дескрипторы
  2. Оценить отношения дескрипторов/все со всеми
  3. Методом RANSAK найти взаимное соответствие между изображениями

Статья SuperGlue позволяет заменить последние два эапа:

Детекция дескрипторов по прежнему осуществляется нейронной сетью (авторы используют SuperPoint, но подход работает и с классическими дескрипторами).

SuperGlue это по сути построение графов на задетектированных точках (на одном изображении и между разными изображениями).

Конечно, поверх ещё натянут Attention и дополнительный слой кроскорреляции, но это выполняется единым end-to-end алгоритмом.

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

Возможно, GNN когда-нибудь станет таким же стандартным подходом как RNN. Но пока видна лишь первая ласточка.

З.Ю.

В последнее время свои статьи я публикую на очень разных платформах.
И, так получилось, что единое место куда я их свожу тут – https://vk.com/cvml_team (дублирую в https://t.me/CVML_team )
Тот проект в рамках которого всё это сбадяжил – буду на Хабре публиковать скорее всего. Так что ссылка тоже только там будет.

Так что советую подписаться!