NtechLab
Logo

Как быстро определять объекты по базе из миллиарда визуальных образов

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

Задача
и требования

В базе данных FindFace хранятся векторы образов, которые представляют собой массивы чисел. На входе система получает видеопоток с камер наблюдения, определяет на них целевые образы — лица, силуэты, марки автомобилей, номерные знаки — и записывает новые векторы. Эти векторы система сравнивает с массивами чисел, которые уже есть в базе, а затем показывает результаты поиска.

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

  1. Повысить скорость работы. При работе с большими базами данных попарное сравнение занимало больше 10 секунд и нагружало СУБД. Невозможно было полностью уйти от сравнения со всеми образами в базе даже с помощью индексов.
  2. Получить возможность расширять базу данных. Помимо векторов образов, большую ценность представляли метаданные о событиях: дата и время детектирования образа или имя камеры. Они необходимы для запросов, например, когда надо «показать топ-10 самых похожих лиц, которые были на камерах 1 и 2 с четверга по пятницу». Такие метаданные хранились отдельно от векторов, и это было неудобно: невозможно было применить индексы для быстрой фильтрации по метаданным, при неполадках случались рассинхронизации хранилищ.

Как работает алгоритм NTECHLAB

requirements scheme

Решение

Чтобы выбрать наиболее производительное решение, команда NtechLab сравнила технологии от разных вендоров. Разработчики написали функцию сравнения двух векторов и провели замеры на базах до 10 миллионов образов. Лучшую производительность на сравнительных тестах показал Tarantool.

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

В продакшене используется шардирование с помощью отдельного сервиса, который ходит в Tarantool: то есть у него прописаны адреса всех серверов Tarantool и он определяет для какого запроса в какие экземпляры нужно сходить. При высоких нагрузках и требованиях к отказоустойчивости добавляются read-only реплики. Они разгружают master, так как забирают на себя поисковые запросы. Разработчики используют Tarantool как хранилище с быстрым доступом к определенному диапазону данных и возможностью фильтрации их индексами.

Solutions scheme

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

  • «Обычный индекс» позволяет одновременно использовать индексы камер и времени. За счёт обычного индекса можно быстро обрабатывать запросы в типовых кейсах с высокой частотой добавления новых записей. Запросы на поиск и сравнение векторов делаются не для всех записей, а только для отфильтрованных легким фильтром по индексу.
  • «Быстрый индекс» разрабатывался специально для быстрого поиска по биометрическим векторам. Это отдельная функция, которая подходит для кейсов с огромными базами (миллиарды записей) и жестким SLA по поиску. Этот индекс строится по биометрическим векторам, что позволяет значительно сократить число операций сравнения и скорость поиска по базе данных увеличивается более чем в 10 раз. Процесс поиска по «быстрому индексу» инвертирован — сначала находим записи по векторам, а потом уже фильтруем по метаданным.
  • Этот индекс строится по биометрическим векторам, что позволяет значительно сократить число операций сравнения и увеличить скорость поиска по базе данных более чем в 10 раз. Процесс поиска по «быстрому индексу» инвертирован — сначала находим записи по векторам, а потом уже фильтруем по метаданным.
  • Возможен еще третий режим работы, когда одновременно подключаются оба индекса: для старых данных используется «быстрый индекс», для новых «обычный индекс». Такая система сочетает плюсы обоих подходов, но требует больше ресурсов и существенно сложнее в администрировании и эксплуатации.

Результаты

Сервис FindFace способен обрабатывать информацию с камер менее чем за 0,5 секунды, даже если в хранилище содержатся миллионы изображений. Полный проход по базе в поисках похожего образа перестал перегружать СУБД и стал занимать в шесть раз меньше времени. Причем Tarantool вобрал в себя сразу несколько функций: сохранение образов в базу данных, выполнение поиска по данным базам и реализация прямых запросов к базам данных.

  • 0,5 сек

    Скорость распознавания и поиска одного из миллиарда изображений, при использовании быстрого индекса.

  • > 1 млрд

    Более миллиарда образов может храниться в Tarantool.

  • 13,4 млн

    образов в секунду обрабатывается при поиске и верификации с «обычным индексом» на одном шарде Tarantool (в боевых проектах количество шардов может измеряться сотнями и тысячами с параллельной обработкой).

Расскажите о задачах вашего проекта, и мы составим для вас решение на Tarantool

Другие
истории успеха

Как мы объединили данные из разных систем в инвест-бизнесе «Альфа-Банка»
Alfa Bank Logo
Как Yota изменили архитектуру с кэшированием на Tarantool
Yota Logo

Получить консультацию

Заказать
демонстрацию

Спасибо за обращение

Специалисты Tarantool свяжутся с вами по оставленным контактам

Thanks
Thanks