Проверочный экземпляр Сервиса инференса MarQus #
Сервис инференса нейросетевых моделей MarQus для автоматизации процессов распознавания и сортировки различных типов ТБО. #
2023 #
\newpage
Аннотация #
В настоящем документе представлено руководство по установке экземпляра cервиса инференса нейросетевых моделей MarQus и описание методологии проверки.
Развёртывание локально. #
Сервис инференса нейросетевых моделей для автоматизации процессов распознавания и сортировки различных типов ТБО (marqus-video-recotracker) представляет собой набор микросервисов, реализованных и запускаемых в платформе Docker.
Системные требования #
Требования к предустановленному ПО:
- Операционная система: Любой дистрибутив Linux с ядром 5.4 или выше
- CPU: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz and newer
- RAM: минимум 8 GB
- HDD/SSD: минимум 64 GB
- GPU: Nvidia 1080Ti или новей
- GPU: память не ниже 11264 МБ
- Compiler: GCC 7.3.1 или новей
- CUDA: 11.0 или новей
- Docker: 20.10 или новей
\newpage
Установка и запуск #
Для установки и запуска сервиса необходимо:
- Cкачать образ, используя команду
docker pull harbor.zebrains.team/mlearning/marqus-video-recotracker:latest
- Запустить новый контейнер из образа
docker run --name marqus-video-recotracker -p 8001:8001/tcp -p 8002:8002/tcp harbor.zebrains.team/mlearning/marqus-video-recotracker:latest
- Проверить в браузере
Открыть ссылку http://127.0.0.1:8001
Должны увидеть API сервиса marqus-video-recotracker:
- Проверить эндпоинт /recotracker/info
В Response body должны увидеть информацию о доступности cuda.
"torch_info": {
"cuda.is_available": true
},
Если cuda недоступна, то сервис всё равно будет работать, но производительность сервиса упадёт на порядок.
Готово, решение запущено.
Проверка работоспособности. #
Для проверки работоспособности сервиса существует несколько вариантов. Рассмотрим два из них - полную проверку и эмуляцию.
Полная проверка. #
При запущенном сервисе необходимо направить с видеокамеры ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5500.
Сервис будет принимать кадры из видеопотока, в реальном времени выполнять предикт (детекцию, сегментацию, классификацию и трекинг) и отдавать результат в ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5501.
Минимальный код на Python для Raspberry Pi этого выглядит так:
import time
from dynaconf import settings
from imutils.video import VideoStream
from vss import VideoStreamSender
# Stream from Raspberry Pi camera
if __name__ == "__main__":
picam = VideoStream(usePiCamera=True).start()
time.sleep(2)
sender = imagezmq.ImageSender(connect_to="tcp://127.0.0.1:5500", REQ_REP=false)
while True:
img = picam.read()
sender.send_image(socket.gethostname(), img)
time.sleep(0.1)
\newpage
Камера должна снимать ленту конвейера строго сверху и работать в NIR диапазоне.
Примеры:
{width=60%}
{width=70%}
При использование камеры, работающей в обычном диапазоне, качество предикта падает, вплоть до невозможности классификации отдельных видов пластика.
Проверка с помощью симулятора. #
Для проверки и тестирования сервиса можно использовать симулятор. Симулятор генерирует видеопоток и направляет ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5500.
При этом не ставится цель тестировать качество предикта, но достигается цель проверки и тестирования всех основных процессов, происходящих при детекции, сегментации, классификации и трекинге.
Для проверки и тестирования таким способом необходимо:
Cкачать docker-compose.yaml по ссылке https://marqus.zebrains.team/code/docker-compose.yaml
Выполнить
docker compose up
- Открыть в браузере
Открыть ссылку http://127.0.0.1:8000
Должны увидеть API сервиса marqus-video-streamer:
Открыть ссылку http://127.0.0.1:8001
Должны увидеть API сервиса marqus-video-recotracker:
\newpage
Открыть ссылку http://127.0.0.1:8002
Должны увидеть результат:
В результате виден выходной видеопоток в виде фреймов с визуализацией работы сервиса, а в ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5501 будет передаваться цифровой результат распознавания.