Поиск похожих изображений
Некоторые примеры использования систем поиска похожих изображений:
Электронная коммерция
Алгоритмы нахождения похожих изображений применяются в интернет-магазинах для поиска товаров, которые приближены к тем, что ищет покупатель. В качестве примера можно привести поиск похожих товаров на платформе Wildberries, так пользователь может, допустим, найти вещь, которая будет напоминать ту, что устраивает потенциального покупателя, но от другого производителя или из более подходящего материала

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

Идентификация лиц
Системы поиска похожих изображений также применяются для идентификации изображенного на фотографии человека, путем определения сходства с фотографиями лиц в имеющейся базе данных

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

Подходы к реализации поиска похожих изображений
В качестве основных алгоритмов поиска похожих изображений можно выделить такие алгоритмы как:

Алгоритмы детекторов и дескрипторов ключевых точек
FAST (Features from Accelerated Segment Test) — детектор ключевых точек на изображении, работающий путем сравнения яркости пикселей в некоторой его окрестности. Если большинство пикселей в этой окрестности имеют яркость, которая отличается от яркости центрального пикселя на определенную величину, то этот пиксель считается ключевой точкой.

BRIEF (Binary Robust Independent Elementary Features) — метод вычисления дескрипторов ключевых точек. BRIEF использует случайный набор тестов для вычисления значений яркости в различных точках вокруг каждой ключевой точки, далее полученные значения яркости сравниваются между парами точек, результаты сравнения используются для создания бинарных дескрипторов.

Алгоритм ORB (Oriented FAST and Rotated BRIEF) — является комбинацией методов FAST и BRIEF. ORB вычисляет дескрипторы ключевых точек, учитывая их ориентацию и поворот изображения, что повышает точность вычисления дескрипторов.

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

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

Отдельно нужно отметить также такой метод как SIFT (Scale Invariant Feature Transform), основанный на методе масштабно-инвариантного преобразования и ориентации для поиска ключевых точек на изображении, и вычисляющий дескрипторы особенностей для каждой точки.

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

Нейросетевые алгоритмы
Поиск похожих изображений с помощью нейронных сетей обычно включает в себя использование сверточных нейронных сетей. Эти сети обычно обучаются на больших наборах данных изображений (зачастую на практике выбирают предварительно обученную нейронную сеть, например, VGG, ResNet или Inception), и далее используются для извлечения признаков из изображений, которые сравниваются между изображениями, чтобы определить, насколько они похожи друг на друга.

Оценка схожести может быть выполнена, например, с помощью косинусного расстояния или эвклидова расстояния между признаковыми векторами.
Однако, данный способ поиска может быть достаточно медленным при поиске на миллионах изображений, поэтому разработчики задействуют дополнительные стратегии, например, хранят представления в сжатом виде или используют приближенный поиск ближайших (здесь оказываются эффективны такие фреймворки как NMSLIB, Spotify Annoy, Facebook Faiss, Google Scann).
В качестве примера можно привести кейс реализованного нами поискового движка на основе нейронных сетей

Команде была поставлена задача реализовать API со следующим функционалом:
  1. Управление пользователями API (создание, редактирование, удаление)
  2. Управление хранилищами изображений (создание, редактирование, удаление)
  3. Управление изображениями (создание, редактирование, удаление). Сохранение изображений в определенное хранилище.
  4. Поиск изображений со следующими задаваемыми пользователем параметрами:
  5. Количество похожих изображений
  6. Максимальная дистанция между искомыми изображениями
  7. Поиск изображений с детектированными объектами (использовались дополнительные нейронные сети). Данный функционал позволяет искать не просто изображение целиком, но и только основной объект (центральный или наиболее крупный по площади), либо все найденные дополнительными нейронными сетями объекты. Также в API заложен функционал определять максимальное количество возможных детектированных объектов на изображении.

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

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

Выводы

Классификация цветов
Распознавание логотипов