FMB
Опыт развёртывания ML сервиса в production на примере проекта FindMyBike
findmybike.ru
Антон Ганичев – преподаватель курса MSU.AI
Эксперт в области машинного обучения и нейронных сетей
Городская система видеоналитики
Анализ основных участников городского движения
Поиск украденных велосипедов
��Статистика сценариев использования велосипедного транспорта
Поиск в сети и AR
Возможные сценарии использования системы распознавания
Поиск украденных велосипедов
Сложности поиска
При поиске украденных велосипедов правоохранительные органы сталкиваются с двумя вопросами:
Параметрическому описанию
Фотографии
Изображениям с камер
Возможности системы
Система обеспечивает поиск по:
Тип: горный;
Рама: красная;
Вилка: красная, амортизационная;
Багажник; Крыло; Скорости; Катафот
Поиск по параметрическому описанию
Анализ изображения велосипеда
Перевод распознанного многомерного �вектор-признака в человекочитаемую форму
Распознавание:
Поиск по фотографии
Тип: горный;
Рама: красный;
Вилка: красная, амортизационная;
Багажник; Крыло; Скорости; Катафот
Аналогично фотографии, НО:�
�
Распознавание изображений с камер
Затраты на распознавание
Подсистема детектирования движения
Подсистема детектирования объектов велосипедного транспорта
Подсистема идентификации велосипедного транспорта
Подсистема аналитики
и поиска
Редукция:
60% - 80%
Редукция:
200 - 1000
раз
Редукция:
20% - 40%
Редукция:
200 - 400
раз
Адаптировано к возможностям камер
С учетом особенностей подъездных камер подсистема аналитики и поиска предусматривает возможность поиска без учёта информации о цвете
Подъездные камеры:
Нестабильная цветопередача
В зависимости от качества камеры, освещённости и особенностей велосипеда редукция до 100 000*
Аналитика. Поиск – результаты тестов
Средний уровень редукции (СУР) – числовое значение, определяющее среднюю экономию трудозатрат оператора при осуществлении поиска велосипедов с использованием Системы по сравнению с «ручным» поиском.
*По результатам тестирования
Сбор статистики использования велосипедов
По типам велосипедов
�
По районам с произвольной дискретизацией
�
По времени суток и сезонам�
Статистика: Типы велосипедов
2019-08-29 Андреевская набережная,
2019-08-23 Гоголевский бульвар,
Статистика: районы и время суток
Интервал: �14:00-16:00
Даты: 2019-08-26, 2019-09-08
Воробьевы горы. Андреевская набережная
Дата: 2019-08-29
Статистика: область применения
Результаты сбора статистики использования велосипедного транспорта в городе могут быть использованы в процессе деятельности городских служб:
Поиск в сети
(Avito, eBay, Internet - магазины)*
*распознавание модели
Сравнение качества распознавания с Google
Merida
Google vision
vs
FMB
Высокоуровневая архитектура решения с использованием системы FMB
Стандартные компоненты:
FMB
отбор кадров + нейросетевой фильтр
SDK
вектор-признак
∑
API
API
RTSP
API
GPU
CNN + эвристика
БД
Реализация
FMB
Реализация
Как хранить модель?
Реализация
FMB
Сервер
server
# Export
import torch
dummy = torch.randn(1, 3, 416, 416, requires_grad=False)
torch.onnx.export(model, dummy, “model.onnx",export_params=True)
!pip install onnxruntime-gpu
!pip install onnxruntime
Библиотека чувствительна к версиям python(cpu) и CUDA(GPU)
Open Neural Network Exchange (ONNX)
Пример конвертации в ONNX
За и против ONNX
Минусы
Плюсы
Torch script
Python
C++
Tensor RT
https://hub.docker.com/r/nvidia/container-toolkit
Запуск
Запуск
python скрипт
# start
…
session = onnxruntime.InferenceSession("model.onnx")
…
# end
> 200Mb
gRPC Client Server architecture
Демонстрация
Демонстрация подключения к gRPC серверу
Реализация
FMB
VPS
server
Предусловия
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
apt-get install python3-venv
sudo apt install python3-pip
дополнительно:
https://docs.docker.com/compose/install/
Установка gRPC
GRPC
API сервера описан в .proto файле
что бы получить из него код на языке программирования нужен компилятор
FMBService.proto
Установка и использование protoc
На первый взгляд нужно просто запустить компилятор командой protoc указав путь к прото-файлам и каталог в который потребуется поместить сгенерированные файлы на нужном нам языке (python).
protoc == protobuf-compiler
Использование protoc
Однако мы получим ошибку: --grpc_out: protoc-gen-grpc: Plugin failed with status code 1.
Оказывается для каждого языка нужен свой plugin
и нужно отправляться его скачивать …
Использование protoc
Для python этот plugin представляет из себя pip пакет
и запускается по своему:
./venv/bin/pip3 install grpcio
./venv/bin/pip3 install grpcio-tools
python -m grpc_tools.protoc -I. --python_out=./src/generated --grpc_python_out=./src/generated FMBService.proto
Использование protoc
Попытка установить grpcio в python3.6 может обернуться вот таким зависанием процесса
Поэтому апгрейдим python до версии 3.7 или выше: https://www.itsupportwale.com/blog/how-to-upgrade-to-python-3-9-0-on-ubuntu-18-04-lts/
Использование protoc
Но не выше чем 3.10 так как в 3.11 будет то же самое:
На в 3.7 и 3.10 работает.
Поскольку onnxruntime не работает в python3.10+ то выбор ограничен версиями 3.7 .. 3.9
Docker
Используем заготовку
Подключаюсь к VPS и клонирую этот репозиторий
Посмотрим как реализовать описанный pipeline
Чего мы не сделали
Prometheus
Сырые логи:
Клиент
Сервер
https://grafana.com/
metrics.py
GPU
Если нужен GPU в ходе сборки контейнера: https://stackoverflow.com/questions/59691207/docker-build-with-nvidia-runtime/61737404#61737404
*Если ONNX не работает скорее всего это несовместимость версией CUDA.
Скорость FMB
Контакты
Ганичев
Антон
Александрович