1 of 47

FMB

Опыт развёртывания ML сервиса в production на примере проекта FindMyBike

findmybike.ru

Антон Ганичев – преподаватель курса MSU.AI

Эксперт в области машинного обучения и нейронных сетей

2 of 47

Городская система видеоналитики

Анализ основных участников городского движения

3 of 47

Поиск украденных велосипедов

��Статистика сценариев использования велосипедного транспорта

Поиск в сети и AR

Возможные сценарии использования системы распознавания

4 of 47

  • Раскрываемость 1.6 - 2.6%
  • Обращаются в полицию менее 30%
  • Каждый второй велосипедист столкнулся с проблемой*
  • 6% перестают пользоваться велосипедом
  • Более 30% опрошенных не ездят на велосипеде регулярно, так как боятся, что велосипед украдут**
  • За год в Европе регистрируется более миллиона краж.

Поиск украденных велосипедов

5 of 47

  • Как понять что искать?

  • Как минимизировать время и трудозатраты при максимальной эффективности?

Сложности поиска

При поиске украденных велосипедов правоохранительные органы сталкиваются с двумя вопросами:

6 of 47

Параметрическому описанию

Фотографии

Изображениям с камер

Возможности системы

Система обеспечивает поиск по:

7 of 47

  • Понятное человеку
  • По данным из заявления
  • По телефону�

Тип: горный;

Рама: красная;

Вилка: красная, амортизационная;

Багажник; Крыло; Скорости; Катафот

Поиск по параметрическому описанию

8 of 47

Анализ изображения велосипеда

Перевод распознанного многомерного �вектор-признака в человекочитаемую форму

Распознавание:

  • Лучше чем большинство людей
  • На уровне велоэкспертов�

Поиск по фотографии

Тип: горный;

Рама: красный;

Вилка: красная, амортизационная;

Багажник; Крыло; Скорости; Катафот

9 of 47

Аналогично фотографии, НО:�

  • Адаптация к различным параметрам качества

  • Отслеживание в движении через кадр

  • Извлечение информации из группы изображений:
  • голосование
  • пороговый фильтр (логистическая функция)
  • сравнение по взвешенному Евклидову расстоянию

Распознавание изображений с камер

10 of 47

Затраты на распознавание

Подсистема детектирования движения

Подсистема детектирования объектов велосипедного транспорта

Подсистема идентификации велосипедного транспорта

Подсистема аналитики

и поиска

Редукция:

60% - 80%

Редукция:

200 - 1000

раз

Редукция:

20% - 40%

Редукция:

200 - 400

раз

11 of 47

Адаптировано к возможностям камер

С учетом особенностей подъездных камер подсистема аналитики и поиска предусматривает возможность поиска без учёта информации о цвете

Подъездные камеры:

  • нестабильное освещение
  • низкое разрешение
  • узкий динамический диапазон

Нестабильная цветопередача

12 of 47

В зависимости от качества камеры, освещённости и особенностей велосипеда редукция до 100 000*

Аналитика. Поиск – результаты тестов

Средний уровень редукции (СУР) – числовое значение, определяющее среднюю экономию трудозатрат оператора при осуществлении поиска велосипедов с использованием Системы по сравнению с «ручным» поиском.

*По результатам тестирования

13 of 47

Сбор статистики использования велосипедов

По типам велосипедов

По районам с произвольной дискретизацией

По времени суток и сезонам

14 of 47

Статистика: Типы велосипедов

2019-08-29 Андреевская набережная,

2019-08-23 Гоголевский бульвар,

15 of 47

Статистика: районы и время суток

Интервал: �14:00-16:00

Даты: 2019-08-26, 2019-09-08

Воробьевы горы. Андреевская набережная

Дата: 2019-08-29

16 of 47

Статистика: область применения

  • Планирование и развитие работы городского транспорта
  • Осуществление мероприятий в области общественного здоровья и пропаганды здорового образа жизни
  • Подготовка и осуществление массовых спортивных и культурно-зрелищных мероприятий
  • Планирование городской дорожной и велосипедной инфраструктуры

Результаты сбора статистики использования велосипедного транспорта в городе могут быть использованы в процессе деятельности городских служб:

17 of 47

Поиск в сети

  • Поиск по каталогам/объявлениям

(Avito, eBay, Internet - магазины)*

  • Мобильные приложения/AR

  • Мониторинг объявлений (findthatbike.co.uk)

  • Контекстная реклама, product placement

*распознавание модели

18 of 47

Сравнение качества распознавания с Google

  • Двухподвес,
  • Рама красная,

Merida

  • Вилка белая, амортизационная
  • Шины merida
  • Тормоза дисковые

Google vision

vs

  • Bicycle
  • Wheel
  • Avito

FMB

Google

19 of 47

Высокоуровневая архитектура решения с использованием системы FMB

Стандартные компоненты:

  • Детектор движения
  • Детектор объектов общего назначения (YOLO)
  • Трекер(JDE)

FMB

отбор кадров + нейросетевой фильтр

SDK

  • сравнение
  • поиск
  • перевод в текст

вектор-признак

API

API

RTSP

API

GPU

CNN + эвристика

БД

20 of 47

Реализация

FMB

21 of 47

Реализация

Как хранить модель?

22 of 47

Реализация

FMB

Сервер

server

23 of 47

# 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)

24 of 47

Пример конвертации в ONNX

25 of 47

За и против ONNX

  1. Минимум зависимостей: Требует установки одного pip пакета + numpy
  2. Работа с GPU и CPU
  3. Позволяет конвертировать модель в другие форматы

Минусы

Плюсы

  1. Маленькое community -> плохо документирован
  2. По скорости уступает TensorRT
  3. Сложность настройки батчевой обрабатки
  4. Не любую модель можно конвертировать в ONNX формат

26 of 47

Torch script

Python

C++

27 of 47

Tensor RT

  • GPU only
  • Импорт из ONNX
  • Более высокий порог входа
  • Максимальное ускорение (pruning, quantization …)

https://hub.docker.com/r/nvidia/container-toolkit

28 of 47

Запуск

29 of 47

Запуск

python скрипт

# start

session = onnxruntime.InferenceSession("model.onnx")

# end

  1. Медленно
  2. Память

> 200Mb

30 of 47

gRPC Client Server architecture

  • Включает собственный сервер
  • Оптимизирован
  • Контроль над количеством инстансов

31 of 47

Демонстрация

Демонстрация подключения к gRPC серверу

32 of 47

Реализация

FMB

VPS

server

33 of 47

Предусловия

  1. Сервер с Ubuntu и настроенным ssh
  2. Установить Docker + docker compose

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

  1. Установлен Python => v3.7 & v3.9= < + pip + venv

apt-get install python3-venv

sudo apt install python3-pip

дополнительно:

  1. Установлен docker-compose

https://docs.docker.com/compose/install/

  1. Если используется firewall, должны быть открыты порты:
  2. для gRPC сервера
  3. для Prometheus

34 of 47

Установка gRPC

35 of 47

GRPC

API сервера описан в .proto файле

что бы получить из него код на языке программирования нужен компилятор

FMBService.proto

36 of 47

Установка и использование protoc

На первый взгляд нужно просто запустить компилятор командой protoc указав путь к прото-файлам и каталог в который потребуется поместить сгенерированные файлы на нужном нам языке (python).

protoc == protobuf-compiler

37 of 47

Использование protoc

Однако мы получим ошибку: --grpc_out: protoc-gen-grpc: Plugin failed with status code 1.

Оказывается для каждого языка нужен свой plugin

и нужно отправляться его скачивать …

38 of 47

Использование 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

39 of 47

Использование 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/

40 of 47

Использование protoc

Но не выше чем 3.10 так как в 3.11 будет то же самое:

На в 3.7 и 3.10 работает.

Поскольку onnxruntime не работает в python3.10+ то выбор ограничен версиями 3.7 .. 3.9

41 of 47

Docker

42 of 47

Используем заготовку

Подключаюсь к VPS и клонирую этот репозиторий

Посмотрим как реализовать описанный pipeline

43 of 47

Чего мы не сделали

  1. Запрет на создание нескольких экземпляров модели
  2. Веса должны храниться вне контейнера
  3. Тесты
  4. Логирование
  5. Подключение к GPU

44 of 47

Prometheus

Сырые логи:

Клиент

Сервер

https://grafana.com/

metrics.py

45 of 47

GPU

  1. Установить драйвера Nvidia в host OS
  2. Установить nvidia-docker
  3. При запуске контейнера добаляем ключ docker run --rm --gpus all
  4. Собираем контейнер на базе образа с cuda (nvidia/cuda)
  5. Используем ONNX для GPU* pip install onnxruntime-gpu

Если нужен GPU в ходе сборки контейнера: https://stackoverflow.com/questions/59691207/docker-build-with-nvidia-runtime/61737404#61737404

*Если ONNX не работает скорее всего это несовместимость версией CUDA.

46 of 47

Скорость FMB

47 of 47

Контакты

тел: +7 (495) 979-47-89

email: gan@findmybike.ru

Ганичев

Антон

Александрович