Как стать автором
Обновить

Поиск изображений с помощью AffNet

Время на прочтение3 мин
Количество просмотров3.1K
Перед нами стояла задача сравнения изображений (image matching) для поиска изображения максимально подобного данному изображению из коллекции. В этой статье я расскажу как мы использовали для этой задачи подход на основе нейронных сетей под названием AffNet. Кому интересно, прошу под кат.

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

Первоначально мы попробовали стандартный матчинг изображений с использованием дескрипторов признаков SIFT и матчера FLANN из библиотеки OpenCV, а также Bag-of-Words. Оба подхода давали слабые результаты. Bag-of-Words к тому же требует огромный датасет изображений и много времени для обучения.

Обзор подхода AffNet


На использование подхода нас вдохновил вебинар «Points & Descriptors», который прошлым летом проводил CVisionLab. Для всех заинтересованных здесь доступны слайды с этого вебинара. На этом вебинаре представили интересный подход: AffNet + HardNet. Результаты матчинга, представленные на слайдах нас впечатлили и мы решили попробовать его в нашей задаче. По словам авторов AffNet это инновационный метод для обучения регионов ковариантных к афинной трансформации с функцией постоянной отрицательной потери (hard negative-constant loss), который обходит state-of-the-art подходы типа Bag-of-Words на задачах матчинга изображений и wide baseline stereo.

image

HardNet это новый компактный обучаемый дескриптор признаков, показавший лучшую эффективность state-of-art в сравнении с классическими и обучаемыми дескрипторами признаков и который возможно быстро вычислять на GPU (ссылка на статью). Он доступен публично на github. Здесь есть хороший пример матчинга изоображений с большой афинной трансформацией с использованием AffNet.

image

Авторы AffNet объясняют подход более детально в своей статье.

Тестирование подхода AffNet


Клонируем репозиторий с github:

git clone https://github.com/ducha-aiki/affnet.git

Затем переходим в папку affnet.
Запустим Jupyter :

jupyter notebook

и откроем ноутбук SIFT-AffNet-HardNet-kornia-matching.ipynb в папке examples. Сначала установим все завивисимости. Создадим ячейку в верху ноутбука и запустим ее

!pip install kornia pydegensac extract_patches

Если у вас установлен OpenCV версии 4 вы можете получить ошибку из-за функции SIFT_create:

The function/feature is not implemented) This algorithm is patented and is excluded in this configuration;

Дело в том, что начиная с версии 3.4.2.16 SIRF и SURF больше недоступны в основном репозитории opencv, они были вынесены в отдельный пакет opencv-contrib. Установим OpenCV и opencv-contrib:

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

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

30.0 inliers found

image

Довольно неплохой результат для таких изображений.
Для пайплайна DoG-AffNet-OriNet-HardNet

18.0 inliers found

image

И наконец для пайплайна DoG-OriNet-HardNet

25.0 inliers found

image

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

Теперь осталось попробовать AffNet на своих изображениях.
Чтобы интегрировать AffNet в свою программу вам нужно только установить все необходимые библиотеки, скачать предобученные веса модели и скопировать несколько функций из ноутбука SIFT-AffNet-HardNet-kornia-matching.ipynb.

Можно легко сконвертировать Jupyter ноутбук в скрипт python с помощью утилиты jupyter nbconvert. Установим ее через pip:

pip install nbconvert

и запустим конвертацию:

jupyter nbconvert SIFT-AffNet-HardNet-kornia-matching.ipynb --to python

На этом все. Удачи в использовании AffNet для матчинга изоображений и до новых встреч.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 5: ↑5 и ↓0+5
Комментарии3

Публикации