TensorRT 6.x.x.x β€” Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)
Π‘ΠΎΠ»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·!

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π”ΠΎΡ€ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ·ΡŒΡ, Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ использования TensorRT, RetinaNet Π½Π° Π±Π°Π·Π΅ рСпозитория github.com/aidonchuk/retinanet-examples (это Ρ„ΠΎΡ€ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅ΠΏΡ‹ ΠΎΡ‚ nvidia, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠ΅ сроки). ΠŸΡ€ΠΎΠ»ΠΈΡΡ‚Ρ‹Π²Π°Ρ сообщСния Π² ΠΊΠ°Π½Π°Π»Π°Ρ… сообщСства ods.ai, я ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ с вопросами ΠΏΠΎ использованию TensorRT, ΠΈ Π² основном вопросы ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ, поэтому я Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ использованию быстрого инфСрСнса Π½Π° основС TensorRT, RetinaNet, Unet ΠΈ docker.

ОписаниС Π·Π°Π΄Π°Ρ‡ΠΈ

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ датасСт, ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ ΡΠ΅Ρ‚ΡŒ RetinaNet/Unet Π½Π° Pytorch1.3+, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ вСса Π² ONNX, Π΄Π°Π»Π΅Π΅ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² engine TensorRT ΠΈ всё это Π΄Π΅Π»ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² docker, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Ubuntu 18 ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ARM(Jetson)* Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Ρ‚Π΅ΠΌ самым минимизируя Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ окруТСния. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ экспорту ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ RetinaNet/Unet, Π½ΠΎ ΠΈ ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ классификации, сСгмСнтации со всСй Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ обвязкой.

Π­Ρ‚Π°ΠΏ 1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° окруТСния

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² послСднСС врСмя я ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΡˆΡ‘Π» ΠΎΡ‚ использования ΠΈ развСртывания Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π° desktop машинС, ΠΊΠ°ΠΊ Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ ΠΈ Π½Π° devbox. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ приходится ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ β€” это python virtual environment ΠΈ cuda 10.2 (ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ nvidia) ΠΈΠ· deb.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас свСТСустановлСнная Ubuntu 18. Установим cuda 10.2(deb), ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π° процСссС установки я ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Ρƒ, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²ΠΏΠΎΠ»Π½Π΅ достаточно.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ установим docker, руководство ΠΏΠΎ установкС Π΄ΠΎΠΊΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ, Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ www.digitalocean.com/community/tutorials/docker-ubuntu-18-04-1-ru, ΡƒΠΆΠ΅ доступна 19+ вСрсия β€” ставим Π΅Ρ‘. Ну ΠΈ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ использования docker Π±Π΅Π· sudo, Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всё ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Π΄Π΅Π»Π°Π΅ΠΌ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

И ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ github.com/NVIDIA/nvidia-docker.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»Π°Π΅ΠΌ git clone github.com/aidonchuk/retinanet-examples.

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ совсСм Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ docker с nvidia-ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΌ потрСбуСтся Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² NGC Cloud ΠΈ Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ. Π˜Π΄Ρ‘ΠΌ сюда ngc.nvidia.com, рСгистрируСмся ΠΈ послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΡŒ NGC Cloud, ΠΆΠΌΡ‘ΠΌ SETUP Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ экрана ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ этой ссылкС ngc.nvidia.com/setup/api-key. Π–ΠΌΡ‘ΠΌ Β«ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Β». Π•Π³ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ посСщСнии Π΅Π³ΠΎ придётся Π³Π΅Π½Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈ, соотвСтствСнно, разворачивая Π½Π° Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π°Ρ‡ΠΊΠ΅, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ:

docker login nvcr.io
Username: $oauthtoken
Password: <Your Key> - сгСнСрированный ΠΊΠ»ΡŽΡ‡

Username просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ. Ну Π²ΠΎΡ‚, считай, срСда Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Π°!

Π­Ρ‚Π°ΠΏ 2. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° docker

На Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС нашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ собСрСм docker ΠΈ познакомимся с Π΅Π³ΠΎ внутрСнностями.
ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π² ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ retina-examples ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ

docker build --build-arg USER=$USER --build-arg UID=$UID --build-arg GID=$GID --build-arg PW=alex -t retinanet:latest retinanet/

ΠœΡ‹ собираСм docker пробрасывая Π² Π½Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡŽΠ·Π΅Ρ€Π° β€” это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° смонтированный VOLUME с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡŽΠ·Π΅Ρ€Π°, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ root ΠΈ боль.

Пока собираСтся docker, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Dockerfile:

FROM nvcr.io/nvidia/pytorch:19.10-py3

ARG USER=alex
ARG UID=1000
ARG GID=1000
ARG PW=alex
RUN useradd -m ${USER} --uid=${UID} && echo "${USER}:${PW}" | chpasswd

RUN apt-get -y update && apt-get -y upgrade && apt-get -y install curl && apt-get -y install wget && apt-get -y install git && apt-get -y install automake && apt-get install -y sudo && adduser ${USER} sudo
RUN pip install git+https://github.com/bonlime/pytorch-tools.git@master

COPY . retinanet/
RUN pip install --no-cache-dir -e retinanet/
RUN pip install /workspace/retinanet/extras/tensorrt-6.0.1.5-cp36-none-linux_x86_64.whl
RUN pip install tensorboardx
RUN pip install albumentations
RUN pip install setproctitle
RUN pip install paramiko
RUN pip install flask
RUN pip install mem_top
RUN pip install arrow
RUN pip install pycuda
RUN pip install torchvision
RUN pip install pretrainedmodels
RUN pip install efficientnet-pytorch
RUN pip install git+https://github.com/qubvel/segmentation_models.pytorch
RUN pip install pytorch_toolbelt

RUN chown -R ${USER}:${USER} retinanet/

RUN cd /workspace/retinanet/extras/cppapi && mkdir build && cd build && cmake -DCMAKE_CUDA_FLAGS="--expt-extended-lambda -std=c++14" .. && make && cd /workspace

RUN apt-get install -y openssh-server && apt install -y tmux && apt-get -y install bison flex && apt-cache search pcre && apt-get -y install net-tools && apt-get -y install nmap
RUN apt-get -y install libpcre3 libpcre3-dev && apt-get -y install iputils-ping

RUN mkdir /var/run/sshd
RUN echo 'root:pass' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
CMD ["/usr/sbin/sshd", "-D"]

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· тСкста, ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ всС наши Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ Π»ΠΈΠ±Ρ‹, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ retinanet, Π½Π°ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… инструмСнтов для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ubuntu ΠΈ настраиваСм сСрвСр openssh. ΠŸΠ΅Ρ€Π²ΠΎΠΉ строкой ΠΈΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· наслСдованиС ΠΎΠ±Ρ€Π°Π·Π° nvidia, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΠ½ Π² NGC Cloud ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Pytorch1.3, TensorRT6.x.x.x ΠΈ Π΅Ρ‰Π΅ ΠΊΡƒΡ‡Ρƒ Π»ΠΈΠ±, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ cpp исходники нашСго Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π°.

Π­Ρ‚Π°ΠΏ 3. Запуск ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° docker

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ основному кСйсу использования ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, для Π½Π°Ρ‡Π°Π»Π° запустим nvidia docker. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ:

docker run --gpus all --net=host -v /home/<your_user_name>:/workspace/mounted_vol -d -P --rm --ipc=host -it retinanet:latest

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ доступСн ΠΏΠΎ ssh <curr_user_name>@localhost. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² PyCharm. Π”Π°Π»Π΅Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ

Settings->Project Interpreter->Add->Ssh Interpreter

Π¨Π°Π³ 1
TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

Π¨Π°Π³ 2
TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

Π¨Π°Π³ 3
TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ всё ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°Ρ…,

Interpreter -> /opt/conda/bin/python

β€” это Π±ΡƒΠ΄Π΅Ρ‚ ln Π½Π° Python3.6 ΠΈ

Sync folder -> /workspace/retinanet

Π–ΠΌΡ‘ΠΌ Ρ„ΠΈΠ½ΠΈΡˆ, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ индСксированиС, ΠΈ всё, срСда Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ использованию!

Π’ΠΠ–ΠΠž!!! Π‘Ρ€Π°Π·Ρƒ послС индСксирования Π²Ρ‹Ρ‚ΡΠ½ΡƒΡ‚ΡŒ ΠΈΠ· docker скомпилированныС Ρ„Π°ΠΉΠ»Ρ‹ для Retinanet. Π’ контСктсном мСню Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚

Deployment->Download

ΠŸΠΎΡΠ²ΡΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΈ Π΄Π²Π΅ ΠΏΠ°ΠΏΠΊΠΈ build, retinanet.egg-info ΠΈ _Π‘.so

TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

Если ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ выглядит Ρ‚Π°ΠΊ, Ρ‚ΠΎ срСда Π²ΠΈΠ΄ΠΈΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹, ΠΊ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ RetinaNet.

Π­Ρ‚Π°ΠΏ 4. Π Π°Π·ΠΌΠ΅Ρ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΠ±ΡƒΡ‡Π°Π΅ΠΌ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€

Для Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ я, Π² основном, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ supervise.ly β€” приятная ΠΈ удобная Ρ‚ΡƒΠ»Π·Π°, Π² послСднСС Π²Ρ€Π΅ΠΌΠ΅ ΠΊΡƒΡ‡Ρƒ косяков пофиксили ΠΈ ΠΎΠ½Π° стала сущСствСнно Π»ΡƒΡ‡ΡˆΠ΅ сСбя вСсти.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ датасСт ΠΈ скачали Π΅Π³ΠΎ, Π½ΠΎ сразу Π·Π°ΡΡƒΠ½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π² наш RetinaNet Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π² собствСнном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ для этого Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² COCO. Π’ΡƒΠ»Π·Π° для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ находится Π²:

markup_utils/supervisly_to_coco.py

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Category Π² скриптС это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои (ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ background Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ)

categories = [{'id': 1, 'name': '1'}, 
                  {'id': 2, 'name': '2'}, 
                  {'id': 3, 'name': '3'},
                  {'id': 4, 'name': '4'}] 

Авторы ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ COCO/VOC Π²Ρ‹ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ для Π΄Π΅Ρ‚Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅, поэтому ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный Ρ„Π°ΠΉΠ»

retinanet/dataset.py

Π”ΠΎΠ±Π°Π²ΠΈΠ² Ρ‚ΡƒΡ‚Π΄Π° Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ Π°ΡƒΠ³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ albumentations.readthedocs.io/en/latest ΠΈ Π²Ρ‹ΠΏΠΈΠ»ΠΈΡ‚ΡŒ Тёстко Π²ΡˆΠΈΡ‚Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈΠ· COCO. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΡ€ΠΎΠΏΠ½ΡƒΡ‚ΡŒ большиС области Π΄Π΅Ρ‚Π΅ΠΊΡ†ΠΈΠΈ, Ссли Π²Ρ‹ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°Ρ… ΠΈΡ‰ΠΈΡ‚Π΅ малСнькиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρƒ вас малСнький датасСт =), ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΎΠ± этом Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ train loop Ρ‚ΠΎΠΆΠ΅ слабСнький, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ Π½Π΅ сохранял Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Ρ‹, юзал ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ уТасный scheduler ΠΈ Ρ‚.Π΄. Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ backbone ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ

/opt/conda/bin/python retinanet/main.py

c ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

train retinanet_rn34fpn.pth
--backbone ResNet34FPN
--classes 12
--val-iters 10
--images /workspace/mounted_vol/dataset/train/images
--annotations /workspace/mounted_vol/dataset/train_12_class.json
--val-images /workspace/mounted_vol/dataset/test/images_small
--val-annotations /workspace/mounted_vol/dataset/val_10_class_cropped.json
--jitter 256 512
--max-size 512
--batch 32

Π’ консолС ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Initializing model...
     model: RetinaNet
  backbone: ResNet18FPN
   classes: 2, anchors: 9
Selected optimization level O0:  Pure FP32 training.

Defaults for this optimization level are:
enabled                : True
opt_level              : O0
cast_model_type        : torch.float32
patch_torch_functions  : False
keep_batchnorm_fp32    : None
master_weights         : False
loss_scale             : 1.0
Processing user overrides (additional kwargs that are not None)...
After processing overrides, optimization options are:
enabled                : True
opt_level              : O0
cast_model_type        : torch.float32
patch_torch_functions  : False
keep_batchnorm_fp32    : None
master_weights         : False
loss_scale             : 128.0
Preparing dataset...
    loader: pytorch
    resize: [1024, 1280], max: 1280
    device: 4 gpus
    batch: 4, precision: mixed
Training model for 20000 iterations...
[    1/20000] focal loss: 0.95619, box loss: 0.51584, 4.042s/4-batch (fw: 0.698s, bw: 0.459s), 1.0 im/s, lr: 0.0001
[   12/20000] focal loss: 0.76191, box loss: 0.31794, 0.187s/4-batch (fw: 0.055s, bw: 0.133s), 21.4 im/s, lr: 0.0001
[   24/20000] focal loss: 0.65036, box loss: 0.30269, 0.173s/4-batch (fw: 0.045s, bw: 0.128s), 23.1 im/s, lr: 0.0001
[   36/20000] focal loss: 0.46425, box loss: 0.23141, 0.178s/4-batch (fw: 0.047s, bw: 0.131s), 22.4 im/s, lr: 0.0001
[   48/20000] focal loss: 0.45115, box loss: 0.23505, 0.180s/4-batch (fw: 0.047s, bw: 0.133s), 22.2 im/s, lr: 0.0001
[   59/20000] focal loss: 0.38958, box loss: 0.25373, 0.184s/4-batch (fw: 0.049s, bw: 0.134s), 21.8 im/s, lr: 0.0001
[   71/20000] focal loss: 0.37733, box loss: 0.23988, 0.174s/4-batch (fw: 0.049s, bw: 0.125s), 22.9 im/s, lr: 0.0001
[   83/20000] focal loss: 0.39514, box loss: 0.23878, 0.181s/4-batch (fw: 0.048s, bw: 0.133s), 22.1 im/s, lr: 0.0001
[   94/20000] focal loss: 0.39947, box loss: 0.23817, 0.185s/4-batch (fw: 0.050s, bw: 0.134s), 21.6 im/s, lr: 0.0001
[  105/20000] focal loss: 0.37343, box loss: 0.20238, 0.182s/4-batch (fw: 0.048s, bw: 0.134s), 22.0 im/s, lr: 0.0001
[  116/20000] focal loss: 0.19689, box loss: 0.17371, 0.183s/4-batch (fw: 0.050s, bw: 0.132s), 21.8 im/s, lr: 0.0001
[  128/20000] focal loss: 0.20368, box loss: 0.16538, 0.178s/4-batch (fw: 0.046s, bw: 0.131s), 22.5 im/s, lr: 0.0001
[  140/20000] focal loss: 0.22763, box loss: 0.15772, 0.176s/4-batch (fw: 0.050s, bw: 0.126s), 22.7 im/s, lr: 0.0001
[  148/20000] focal loss: 0.21997, box loss: 0.18400, 0.585s/4-batch (fw: 0.047s, bw: 0.144s), 6.8 im/s, lr: 0.0001
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.52674
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.91450
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.35172
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.61881
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.00000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.00000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.58824
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.61765
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.61765
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.61765
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.00000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.00000
Saving model: 148

Π§Ρ‚ΠΎ Π±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ вСсь Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² посмотритС

retinanet/main.py

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΎΠ½ΠΈ стандартныС для Π΄Π΅Ρ‚Π΅ΠΊΡ†ΠΈΠΈ, ΠΈ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ описаниС. ЗапуститС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ инфСрСнса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²:

retinanet/infer_example.py

ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

/opt/conda/bin/python retinanet/main.py infer retinanet_rn34fpn.pth 
--images /workspace/mounted_vol/dataset/test/images 
--annotations /workspace/mounted_vol/dataset/val.json 
--output result.json 
--resize 256 
--max-size 512 
--batch 32

Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΆΠ΅ встроСн Focal Loss ΠΈ нСсколько backbone, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ Π²ΠΏΠΈΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ свои

retinanet/backbones/*.py

Π’ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹ приводят Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ характСристики:

TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ backbone ResNeXt50_32x4dFPN ΠΈ ResNeXt101_32x8dFPN, взятый ΠΈΠ· torchvision.
НадСюсь с Π΄Π΅Ρ‚Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, Π½ΠΎ стоит ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌΡ‹ экспорта ΠΈ логирования.

Π­Ρ‚Π°ΠΏ 5. Экспорт ΠΈ инфСрСнс ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Unet c энкодСром Resnet

Как Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² Dockerfile Π±Ρ‹Π»ΠΈ установлСны Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для сСгмСнтации ΠΈ Π² частности Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΠ±Π° github.com/qubvel/segmentation_models.pytorch. Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΡŽΠ½Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ инфСрСнса ΠΈ экспорта pytorch Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚ΠΎΠ² Π² engine TensorRT.

Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ экспортС Unet-like ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΠ· ONNX Π² TensoRT β€” это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ Upsample ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ConvTranspose2D:

import torch.onnx.symbolic_opset9 as onnx_symbolic
        def upsample_nearest2d(g, input, output_size):
            # Currently, TRT 5.1/6.0 ONNX Parser does not support all ONNX ops
            # needed to support dynamic upsampling ONNX forumlation
            # Here we hardcode scale=2 as a temporary workaround
            scales = g.op("Constant", value_t=torch.tensor([1., 1., 2., 2.]))
            return g.op("Upsample", input, scales, mode_s="nearest")

        onnx_symbolic.upsample_nearest2d = upsample_nearest2d

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого прСобразования ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это автоматичСски ΠΏΡ€ΠΈ экспортС Π² ONNX, Π½ΠΎ ΡƒΠΆΠ΅ Π² 7 вСрсии TensorRT эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, ΠΈ Π½Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΆΠ΄Π°Ρ‚ΡŒ совсСм Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Когда я Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker Ρƒ мСня Π±Ρ‹Π»ΠΈ сомнСния Π½Π° счёт Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для ΠΌΠΎΠΈΡ… Π·Π°Π΄Π°Ρ‡. Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ… Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΠ² сСйчас довольно большой сСтСвой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ создаваСмый нСсколькими ΠΊΠ°ΠΌΠ΅Ρ€Π°ΠΌΠΈ.

TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation)

Π Π°Π·Π½Ρ‹Π΅ тСсты Π½Π° просторах ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большом overhead Π½Π° сСтСвоС взаимодСйствиС ΠΈ запись Π½Π° VOLUME, плюс ΠΊΠΎ всСму Π½Π΅Π²Π΅Π΄ΠΎΠΌΡ‹ΠΉ ΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹ΠΉ GIL, Π° Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ съСмка ΠΊΠ°Π΄Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠΎ сСти ΠΊΠ°Π΄Ρ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ hard real-time, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² сСти для мСня ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹.

Но всё обошлось =)

P.S. ΠžΡΡ‚Π°Ρ‘Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ Ρ‚Ρ€Π΅ΠΉΠ½ Π»ΡƒΠΏ для сСгмСнтации ΠΈ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½!

Благодраности

Бпасибо сообщСству ods.ai, Π±Π΅Π· Π½Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ! ΠžΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ спасибо n01z3, Π½Π°Π΄ΠΎΡƒΠΌΠ΅Π²ΡˆΠ΅ΠΌΡƒ мСня Π·Π°Π½ΡΡ‚ΡŒΡΡ DL, Π·Π° Π΅Π³ΠΎ бСсцСнныС совСты ΠΈ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½Ρ‹ΠΉ профСссионализм!

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π² production ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ!

TensorRT 6.x.x.x — Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инфСрСнс для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния (Object Detection ΠΈ Segmentation) Aurorai, llc

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com