Состав команды "нейрON"
Чиженко Леон (https://github.com/Leon200211) - Fullstack-разработчик
Сергей Куликов (https://github.com/MrMarvel) - Backend-разработчик/ML-engineer
Карпов Даниил (https://github.com/Free4ky) - ML-engineer/MLOps
Валуева Анастасия (https://github.com/VoLuIcHiK) - Team Lead/Designer/ML-engineer
Козлов Михаил (https://github.com/Borntowarn) - ML-engineer/ML
Ops
- Задание
- Решение
- Результат разработки
- Уникальность нашего решения
- Стек
- Развертывание и тестировани
- Ссылки
На основе базы данных с изображениями музейных предметов, внесенных в Государственный каталог Музейного фонда Российской Федерации, с применением технологий машинного зрения необходимо создать MVP в виде программного модуля поиска музейных предметов по заданному изображению. В целях повышения качества данных и стандартизации описания предлагается разработать функционал, позволяющий при внесении в базу нового музейного предмета найти похожие предметы, уже внесенные в каталог для использования их описания в качестве образца.
Ниже представлен алгоритм работы ML-части нашего приложения, а также взаимодействие RabbitMQ, обработчика и модели:
Как видно из схемы, обработчик (в данном случае один) постоянно отслеживает появление новой фотографии во входной очереди (input). Очереди (input, output_web и output_bot) были реализованы с помощью сервиса RabbitMQ. Как только обработчик обнаруживает новое изображение - он отправляет данные в модель, которая развернута на Triton Server. С помощью модели Blip2 T5 и алгоритмов постобработки и предобработки извлекаются эмбеддинги из исходных изображений, затем производится поиск наиболее похожих изображений и классификация. Затем в выходную очередь помещаются класс загруженного изображения и его описание, а также топ 10 похожих изображений, далее полученная информация отправляется либо на веб-сайт пользователю, либо в телеграмм бот.
Все параметры сервиса масштабируемы:
- Скорость обработки можно увеличить путем добавления дополнительных экземпляров обработчиков и моделей (это один из параметров запуска).
- Количество хранимых эмбеддингов можно увеличить благодаря линейному масштабированию базы данных.
Использование Triton Server повышает эффективность работы GPU и делает вывод намного экономически эффективнее. На сервере входящие запросы упаковываются в пакеты и отправляются для вывода. Таким образом, пакетная обработка позволяет эффективнее использовать ресурсы GPU. Для ускорения работы модели был использован TensorRT, который позволил увеличить скорость обработки моделью до 40 раз быстрее чем на CPU и до 5 раз быстрее чем обычный запуск на GPU!
В ходе решения поставленной задачи нам удалось реализовать работающий прототип со следующими компонентами:
- Для удобства рабоыт пользователя с программы был сделан сайт и бот в телеграмме;
- Векторная база данных Milvus, где хранятся эмбеддинги изображений;
- Сконвертированная в TensorRT модель;
- Очереди RabbitMQ для асинхронной обработки;
- Triton Server, на котором развернута модель;
- Обработчики - связующее звено между моделью и очередями.
Уникальность нашего решения заключается в сочетание векторной базы данных (Milvus) и микросервисной архитектуры (RabbitMQ+Triton), а также высокой точности классификации и поиска похожих объектов. Нам удалось реализовать быстрое, точное и надежное решение, при этом сделав его удобным в использовании как через компьютер (веб-сайт), так и через смартфон (бот в телеграмме). Наша программа дает возможность работать с миллиардами изображений.
:Warning: Предварительно произведите конвертацию нейросетевых моделей в TensorRT!
- Клонируйте репозиторий
git clone https://github.com/VoLuIcHiK/museum-search.git
- Измените директорию
cd museum-search
- Создайте виртуальное окружение
python -m venv ./venv
- Активируйте
source ./venv/bin/activate
- Установите зависимости
pip install -r requirements.txt
- Запустити всспомогательные сервисы
sh scripts/services.start.sh
- Запустите основную прорамму
sh scripts/start.sh