
ΠΠΎΠ»ΠΈ ΡΠ°ΠΌΠΎ ΠΏΡΠ²ΠΈ ΠΏΡΡ!
ΠΠ΄ΡΠ°Π²ΠΎ ΡΠ²ΠΈΠΌΠ°! ΠΡΠ°Π³ΠΈ ΠΏΡΠΈΡΠ°ΡΠ΅ΡΠΈ, Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΠΆΠ΅Π»ΠΈΠΌ Π΄Π° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΡΠ²ΠΎΡΠ΅ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° Π’Π΅Π½ΡΠΎΡΠ Π’, Π Π΅ΡΠΈΠ½Π°ΠΠ΅Ρ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΎΠ³ Π½Π° ΡΠΏΡΠ΅ΠΌΠΈΡΡΡ (ΠΎΠ²ΠΎ ΡΠ΅ Π²ΠΈΡΡΡΠΊΠ° Π·Π²Π°Π½ΠΈΡΠ½Π΅ ΡΠ΅ΠΏΠ΅ ΠΈΠ· , ΡΡΠΎ ΡΠ΅ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠΈ Π΄Π° ΡΡΠΎ ΠΏΡΠ΅ ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½Π΅ ΠΌΠΎΠ΄Π΅Π»Π΅ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ). ΠΡΠ΅Π»ΠΈΡΡΠ°Π²Π°ΡΠ΅ ΠΏΠΎΡΡΠΊΠ° Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΠΌΠ° Π·Π°ΡΠ΅Π΄Π½ΠΈΡΠ΅ , Π½Π°ΠΈΠ»Π°Π·ΠΈΠΌ Π½Π° ΠΏΠΈΡΠ°ΡΠ° ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡ Π’Π΅Π½ΡΠΎΡΠ Π’-Π° ΠΈ ΠΏΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΠ³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΠ½Π°Π²ΡΠ°ΡΡ, ΠΏΠ° ΡΠ°ΠΌ ΠΎΠ΄Π»ΡΡΠΈΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠΎ ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ ΠΏΠΎΡΠΏΡΠ½ΠΈΡΠΈ ΠΠΎΠ΄ΠΈΡ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π±ΡΠ·ΠΎΠ³ Π·Π°ΠΊΡΡΡΠΈΠ²Π°ΡΠ° Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΎΠ³ Π½Π° Π’Π΅Π½ΡΠΎΡΠ Π’, Π Π΅ΡΠΈΠ½Π°ΠΠ΅Ρ, Π£Π½Π΅Ρ ΠΈ Π΄ΠΎΡΠΊΠ΅Ρ-Ρ.
ΠΠΏΠΈΡ Π·Π°Π΄Π°ΡΠΊΠ°
ΠΡΠ΅Π΄Π»Π°ΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΠΊ ΡΠΎΡΠΌΡΠ»ΠΈΡΠ΅ Π½Π° ΠΎΠ²Π°Ρ Π½Π°ΡΠΈΠ½: ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΎΠ·Π½Π°ΡΠΈΠΌΠΎ ΡΠΊΡΠΏ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΡΡΠ΅Π½ΠΈΡΠ°ΠΌΠΎ RetinaNet/Unet ΠΌΡΠ΅ΠΆΡ Π½Π° Pytorch-Ρ 1.3+, ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΠ΅ΠΌΠΎ Π΄ΠΎΠ±ΠΈΡΠ΅Π½Π΅ ΡΠ΅ΠΆΠΈΠ½Π΅ Ρ ONNX, Π·Π°ΡΠΈΠΌ ΠΈΡ ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΠ΅ΠΌΠΎ Ρ TensorRT Π΅Π½ΡΠΈΠ½ ΠΈ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΡΠ΅Π»Ρ ΡΡΠ²Π°Ρ Ρ Docker-Ρ, ΠΏΠΎΠΆΠ΅ΡΠ½ΠΎ Π½Π° Ubuntu 18 ΠΈ Π²Π΅ΠΎΠΌΠ° ΠΏΠΎΠΆΠ΅ΡΠ½ΠΎ Π½Π° ARM (Jetson)* Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ, ΡΠΈΠΌΠ΅ ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΡΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ°. ΠΡΠ°ΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ΅ Π±ΠΈΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠΏΡΠ΅ΠΌΠ°Π½ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΈΠ·Π²ΠΎΠ· ΠΈ ΠΎΠ±ΡΠΊΡ RetinaNet/Unet-Π°, Π²Π΅Ρ ΠΈ Π·Π° ΠΏΠΎΡΠΏΡΠ½ΠΈ ΡΠ°Π·Π²ΠΎΡ ΠΈ ΠΎΠ±ΡΠΊΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠ»Π°ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, ΡΠ° ΡΠ²ΠΈΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΠΌ Ρ Π°ΡΠ΄Π²Π΅ΡΠΎΠΌ.
Π€Π°Π·Π° 1. ΠΡΠΈΠΏΡΠ΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΈΠ½Π΅
ΠΠ²Π΄Π΅ ΡΠ΅ Π²Π°ΠΆΠ½ΠΎ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ Π΄Π° ΡΠ°ΠΌ ΡΠ΅ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΠΎΡΠΏΡΠ½ΠΎ ΡΠ΄Π°ΡΠΈΠΎ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ° Π±Π°Ρ Π½Π΅ΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Π΄Π΅ΡΠΊΡΠΎΠΏ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠ°ΠΎ ΠΈ Π½Π° Π΄Π΅Π²Π±ΠΎΠΊ-Ρ. ΠΠ΅Π΄ΠΈΠ½Π° ΡΡΠ²Π°Ρ ΠΊΠΎΡΡ ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΡΠ΅ ΠΏΠΈΡΡ ΠΎΠ½ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΠΈ ΡΡΠ΄Π° 10.2 (ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠΈ Π½Π° ΡΠ΅Π΄Π°Π½ Π½Π²ΠΈΠ΄ΠΈΠ° Π΄ΡΠ°ΡΠ²Π΅Ρ) ΠΈΠ· Π΄Π΅Π±-Π°.
ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΡΠ²Π΅ΠΆΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Ubuntu 18. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠΎ cuda 10.2 (deb). ΠΠ΅ΡΡ Π΄Π΅ΡΠ°ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠΈΠ²Π°ΡΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ΅, Π·Π²Π°Π½ΠΈΡΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠ°ΡΠ²ΠΈΠΌ Π΄ΠΎΠ²ΠΎΡΠ½Π°.
Π‘Π°Π΄Π° Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠΎ Π΄ΠΎΡΠΊΠ΅Ρ, Π²ΠΎΠ΄ΠΈΡ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡ Π΄ΠΎΡΠΊΠ΅Ρ-Π° ΡΠ΅ Π»Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΠ½Π°ΡΠΈ, Π΅Π²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° , Π²Π΅ΡΠ·ΠΈΡΠ° 19+ ΡΠ΅ Π²Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° - ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ ΡΠ΅. ΠΠ°, Π½Π΅ Π·Π°Π±ΠΎΡΠ°Π²ΠΈΡΠ΅ Π΄Π° ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π΄ΠΎΡΠΊΠ΅Ρ-Π° Π±Π΅Π· ΡΡΠ΄ΠΎ-Π°, ΡΠΎ ΡΠ΅ Π±ΠΈΡΠΈ Π·Π³ΠΎΠ΄Π½ΠΈΡΠ΅. ΠΠ°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ΅ ΡΠ²Π΅ ΠΈΡΠΏΠ°Π»ΠΎ, ΡΠ°Π΄ΠΈΠΌΠΎ ΠΎΠ²ΠΎ:
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
Π Π½Π΅ ΠΌΠΎΡΠ°ΡΠ΅ ΡΠ°ΠΊ Π½ΠΈ Π΄Π° Π³Π»Π΅Π΄Π°ΡΠ΅ Ρ Π·Π²Π°Π½ΠΈΡΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ .
Π₯Π°ΡΠ΄Π΅ ΡΠ°Π΄Π° Π΄Π° ΡΡΠ°Π΄ΠΈΠΌΠΎ Π³ΠΈΡ ΠΊΠ»ΠΎΠ½ .
ΠΡΡΠ°Π»ΠΎ ΡΠ΅ ΡΠΎΡ ΡΠ°ΠΌΠΎ ΠΌΠ°Π»ΠΎ, Π΄Π° Π±ΠΈΡΠΌΠΎ ΠΏΠΎΡΠ΅Π»ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π΄ΠΎΡΠΊΠ΅Ρ ΡΠ° Π½Π²ΠΈΠ΄ΠΈΠ° ΡΠ»ΠΈΠΊΠΎΠΌ, ΠΌΠΎΡΠ°ΡΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡΡΠ΅ΠΌΠΎ Ρ ΠΠΠ¦ Π¦Π»ΠΎΡΠ΄-Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ°Π²ΠΈΠΌΠΎ. Π₯Π°ΡΠ΄Π΅ΠΌΠΎ ΠΎΠ²Π°ΠΌΠΎ , ΡΠ΅Π³ΠΈΡΡΡΡΡΡΠ΅ ΡΠ΅ ΠΈ Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΡΠ΅ΠΌΠΎ Ρ ΠΠΠ¦ Π¦Π»ΠΎΡΠ΄, ΠΊΠ»ΠΈΠΊΠ½ΠΈΡΠ΅ Π½Π° Π‘ΠΠ’Π£Π Ρ Π³ΠΎΡΡΠ΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ Π΅ΠΊΡΠ°Π½Π° ΠΈΠ»ΠΈ ΠΏΡΠ°ΡΠΈΡΠ΅ ΠΎΠ²Ρ Π²Π΅Π·Ρ . ΠΠ»ΠΈΠΊΠ½ΠΈΡΠ΅ Π½Π° βΠ³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΠΊΡΡΡβ. ΠΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅ΠΌ Π΄Π° Π³Π° ΡΠ°ΡΡΠ²Π°ΡΠ΅, ΠΈΠ½Π°ΡΠ΅ ΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΠΏΡΡ ΠΊΠ°Π΄Π° Π³Π° ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΌΠΎΡΠ°ΡΠΈ ΠΏΠΎΠ½ΠΎΠ²ΠΎ Π΄Π° Π³Π° Π³Π΅Π½Π΅ΡΠΈΡΠ΅ΡΠ΅ ΠΈ, ΡΡ ΠΎΠ΄Π½ΠΎ ΡΠΎΠΌΠ΅, ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π½Π° Π½ΠΎΠ²ΠΈ Π°ΡΡΠΎΠΌΠΎΠ±ΠΈΠ» ΠΈ ΠΏΠΎΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΎΠ²Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ.
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΡΠ°Π΄ΠΈΠΌΠΎ:
docker login nvcr.io
Username: $oauthtoken
Password: <Your Key> - ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ
ΠΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎ ΠΈΠΌΠ΅ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡΠ°. ΠΠ°, ΡΠΌΠ°ΡΡΠ°ΡΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΎ!
Π€Π°Π·Π° 2: ΠΠ·Π³ΡΠ°Π΄ΡΠ° Π΄ΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
Π£ Π΄ΡΡΠ³ΠΎΡ ΡΠ°Π·ΠΈ Π½Π°ΡΠ΅Π³ ΡΠ°Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ΠΌΠΎ Π΄ΠΎΡΠΊΠ΅Ρ ΠΈ ΡΠΏΠΎΠ·Π½Π°ΡΠΈ ΡΠ΅ ΡΠ° ΡΠ΅Π³ΠΎΠ²ΠΈΠΌ ΡΠ½ΡΡΡΠ°ΡΡΠΈΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΠΌΠ°.
ΠΠ΄Π΅ΠΌΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½Ρ ΡΠ°ΡΡΠΈΠΊΠ»Ρ Ρ ΠΎΠ΄Π½ΠΎΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ΅ΡΠΈΠ½Π°-Π΅ΠΊΠ°ΠΌΠΏΠ»Π΅Ρ ΠΈ ΠΈΠ·Π²ΡΡΠΈΠΌΠΎ
docker build --build-arg USER=$USER --build-arg UID=$UID --build-arg GID=$GID --build-arg PW=alex -t retinanet:latest retinanet/
ΠΠΎΡΠΊΠ΅Ρ Π³ΡΠ°Π΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΎ ΡΡΠΎ Ρ ΡΠ΅Π³Π° ΠΏΡΠΎΠΏΡΡΡΠ°ΠΌΠΎ ΡΡΠ΅Π½ΡΡΠ½ΠΎΠ³ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° - ΠΎΠ²ΠΎ ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΠΊΠΎΡΠΈΡΠ½ΠΎ Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π΅ΡΡΠΎ Π½Π° ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈ ΠΠΠΠ£ΠΠ ΡΠ° ΠΏΡΠ°Π²ΠΈΠΌΠ° ΡΡΠ΅Π½ΡΡΠ½ΠΎΠ³ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ°, ΠΈΠ½Π°ΡΠ΅ ΡΠ΅ Π±ΠΈΡΠΈ ΡΠΎΠΎΡ ΠΈ Π±ΠΎΠ».
ΠΠΎΠΊ ΡΠ΅ Π΄ΠΎΡΠΊΠ΅Ρ Π³ΡΠ°Π΄ΠΈ, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΈΡΠΏΠΈΡΠ°ΠΌΠΎ ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅:
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.xxx ΠΈ Π³ΠΎΠΌΠΈΠ»Ρ Π΄ΡΡΠ³ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠ΅ Π½Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π°ΡΡ Π΄Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΠΌΠΎ CPP ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΠΊΠΎΠ΄ Π·Π° Π½Π°Ρ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ.
Π€Π°Π·Π° 3: ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΈ ΠΎΡΠΊΠ»Π°ΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ°ΠΊΠ° Ρ ΠΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΡ
ΠΡΠ΅ΡΠΈΠΌΠΎ Π½Π° Π³Π»Π°Π²Π½ΠΈ ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΈ ΡΠ°Π·Π²ΠΎΡΠ½ΠΎΠ³ ΠΎΠΊΡΡΠΆΠ΅ΡΠ°; ΠΏΡΠ²ΠΎ, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ Π½Π²ΠΈΠ΄ΠΈΠ° Π΄ΠΎΡΠΊΠ΅Ρ. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΡΠ°Π΄ΠΈΠΌΠΎ:
docker run --gpus all --net=host -v /home/<your_user_name>:/workspace/mounted_vol -d -P --rm --ipc=host -it retinanet:latestΠΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ΅ ΡΠ°Π΄Π° Π΄ΠΎΡΡΡΠΏΠ°Π½ ΠΏΡΠ΅ΠΊΠΎ ΡΡΡ -Π° @Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π΄ΠΎΠΌΠ°ΡΠΈΠ½. ΠΠ°ΠΊΠΎΠ½ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ°, ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ Ρ ΠΠΈΠ¦Ρ Π°ΡΠΌ-Ρ. ΠΠ°ΡΠΈΠΌ ΠΎΡΠ²Π°ΡΠ°ΠΌΠΎ
Settings->Project Interpreter->Add->Ssh Interpreter ΠΠΎΡΠ°ΠΊ ΠΠ‘ΠΠ£ΠΠΠ‘

ΠΠΎΡΠ°ΠΊ ΠΠ‘ΠΠ£ΠΠΠ‘

ΠΠΎΡΠ°ΠΊ ΠΠ‘ΠΠ£ΠΠΠ‘

ΠΠΈΡΠ°ΠΌΠΎ ΡΠ²Π΅ ΠΊΠ°ΠΎ Π½Π° ΡΠ½ΠΈΠΌΡΠΈΠΌΠ° Π΅ΠΊΡΠ°Π½Π°,
Interpreter -> /opt/conda/bin/python- ΠΎΠ²ΠΎ ΡΠ΅ Π±ΠΈΡΠΈ Ρ ΠΠΈΡΡ ΠΎΠ½3.6 ΠΈ
Sync folder -> /workspace/retinanetΠΡΠΈΡΠΈΡΠ½Π΅ΠΌΠΎ Π·Π°Π²ΡΡΠΈ, ΡΠ΅ΠΊΠ°ΠΌΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠΎ ΡΠ΅ ΡΠΎ, ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅ ΡΠΏΡΠ΅ΠΌΠ½ΠΎ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Ρ!
ΠΠΠΠΠ !!! ΠΠ΄ΠΌΠ°Ρ Π½Π°ΠΊΠΎΠ½ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΡΠ°, ΠΏΠΎΠ²ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Π·Π° Π Π΅ΡΠΈΠ½Π°Π½Π΅Ρ ΠΈΠ· ΠΠΎΡΠΊΠ΅Ρ-Π°. Π£ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½ΠΈΡΡ Ρ ΠΊΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΠΊΡΠ° ΠΈΠ·Π°Π±Π΅ΡΠΈΡΠ΅ ΡΡΠ°Π²ΠΊΡ
Deployment->DownloadΠΠΎΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ ΡΠ΅Π΄Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈ Π΄Π²Π΅ ΡΠ°ΡΡΠΈΠΊΠ»Π΅: Π±ΡΠΈΠ»Π΄, ΡΠ΅ΡΠΈΠ½Π°Π½Π΅Ρ.Π΅Π³Π³-ΠΈΠ½ΡΠΎ ΠΈ _Π‘.ΡΠΎ

ΠΠΊΠΎ Π²Π°Ρ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΠ²Π°ΠΊΠΎ, ΠΎΠ½Π΄Π° ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄ΠΈ ΡΠ²Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΠΈ ΡΠΏΡΠ΅ΠΌΠ½ΠΈ ΡΠΌΠΎ Π΄Π° ΠΎΠ±ΡΡΠΈΠΌΠΎ Π Π΅ΡΠΈΠ½Π°ΠΠ΅Ρ.
Π€Π°Π·Π° 4. ΠΠ·Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈ ΠΎΠ±ΡΡΠΈΡΠ΅ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ
ΠΠ° ΠΎΠ·Π½Π°ΡΠ°Π²Π°ΡΠ΅ ΡΠ³Π»Π°Π²Π½ΠΎΠΌ ΠΊΠΎΡΠΈΡΡΠΈΠΌ β ΠΏΡΠΈΡΠ°ΡΠ°Π½ ΠΈ Π·Π³ΠΎΠ΄Π°Π½ Π°Π»Π°Ρ, Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΡΠ΅Π½Π° Π³ΠΎΠΌΠΈΠ»Π° Π³ΡΠ΅ΡΠ°ΠΊΠ° ΠΈ Π·Π½Π°ΡΠ½ΠΎ ΡΠ΅ Π±ΠΎΡΠ΅ ΠΏΠΎΠ½Π°ΡΠ°ΠΎ.
ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ Π΄Π° ΡΡΠ΅ ΠΎΠ·Π½Π°ΡΠΈΠ»ΠΈ ΡΠΊΡΠΏ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ ΠΏΡΠ΅ΡΠ·Π΅Π»ΠΈ Π³Π°, Π°Π»ΠΈ Π½Π΅ΡΠ΅ΡΠ΅ ΠΌΠΎΡΠΈ ΠΎΠ΄ΠΌΠ°Ρ Π΄Π° Π³Π° ΡΡΠ°Π²ΠΈΡΠ΅ Ρ Π½Π°Ρ Π Π΅ΡΠΈΠ½Π°ΠΠ΅Ρ, ΠΏΠΎΡΡΠΎ ΡΠ΅ Ρ ΡΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΡ ΠΈ Π·Π° ΡΠΎ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° Π³Π° ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΠ΅ΠΌΠΎ Ρ Π¦ΠΠ¦Π. ΠΠ»Π°Ρ Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΠ·ΠΈΡΡ ΡΠ΅ Π½Π°Π»Π°Π·ΠΈ Ρ:
markup_utils/supervisly_to_coco.pyΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ° Ρ ΡΠΊΡΠΈΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΡΠ½Π΅ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΡΡ (Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π΄Π° Π΄ΠΎΠ΄Π°ΡΠ΅ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡ ΠΏΠΎΠ·Π°Π΄ΠΈΠ½Π΅)
categories = [{'id': 1, 'name': '1'},
{'id': 2, 'name': '2'},
{'id': 3, 'name': '3'},
{'id': 4, 'name': '4'}] ΠΠ· Π½Π΅ΠΊΠΎΠ³ ΡΠ°Π·Π»ΠΎΠ³Π°, Π°ΡΡΠΎΡΠΈ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΠ³ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ° ΡΡ ΠΎΠ΄Π»ΡΡΠΈΠ»ΠΈ Π΄Π° Π½Π΅ ΠΎΠ±ΡΡΠ°Π²Π°ΡΠ΅ Π½ΠΈΡΡΠ° ΠΎΡΠΈΠΌ Π¦ΠΠ¦Π/ΠΠΠ¦ Π·Π° Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΡ, ΠΏΠ° ΡΡ ΠΌΠΎΡΠ°Π»ΠΈ ΠΌΠ°Π»ΠΎ Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅ ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΡΠ°ΡΠ»
retinanet/dataset.pyΠΠΎΠ΄Π°Π²Π°ΡΠ΅ΠΌ ΡΠ²ΠΎΡΠΈΡ ΠΎΠΌΠΈΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ°ΡΠ° ΠΎΠ²Π΄Π΅ ΠΈ ΠΈΠ·ΡΠ΅Π·Π°ΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ΅ ΠΎΠΆΠΈΡΠ΅Π½ΠΈΡ ΠΊΠ°Π±Π»ΠΎΠ²Π° ΠΈΠ· Π¦ΠΠ¦Π-Π°. Π’Π°ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈ Π²Π΅Π»ΠΈΠΊΠ° ΠΏΠΎΠ΄ΡΡΡΡΠ° Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠ΅, Π°ΠΊΠΎ ΡΡΠ°ΠΆΠΈΡΠ΅ ΠΌΠ°Π»Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½Π° Π²Π΅Π»ΠΈΠΊΠΈΠΌ ΡΠ»ΠΈΠΊΠ°ΠΌΠ°, ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ°Π»ΠΈ ΡΠΊΡΠΏ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° =), ΠΈ Π½ΠΈΡΡΠ° Π½Π΅ ΡΠ°Π΄ΠΈ, Π°Π»ΠΈ Π²ΠΈΡΠ΅ ΠΎ ΡΠΎΠΌΠ΅ Π΄ΡΡΠ³ΠΈ ΠΏΡΡ.
ΠΠ΅Π½Π΅ΡΠ°Π»Π½ΠΎ, ΠΏΠ΅ΡΡΠ° Π²ΠΎΠ·ΠΎΠ²Π° ΡΠ΅ ΡΠ°ΠΊΠΎΡΠ΅ ΡΠ»Π°Π±Π°, Ρ ΠΏΠΎΡΠ΅ΡΠΊΡ Π½ΠΈΡΠ΅ ΡΠ°ΡΡΠ²Π°Π»Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π΅ ΠΏΡΠ½ΠΊΡΠΎΠ²Π΅, ΠΊΠΎΡΠΈΡΡΠΈΠ»Π° ΡΠ΅ Π½Π΅ΠΊΡ Π²ΡΡΡΡ ΡΡΡΠ°ΡΠ½ΠΎΠ³ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π° ΠΈΡΠ΄. ΠΠ»ΠΈ ΡΠ°Π΄Π° ΡΠ²Π΅ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΡΠ°Π΄ΠΈΡΠ΅ ΡΠ΅ Π΄Π° ΠΈΠ·Π°Π±Π΅ΡΠ΅ΡΠ΅ ΠΎΠΊΠΎΡΠ½ΠΈΡΡ ΠΈ ΠΈΠ·Π²ΡΡΠΈΡΠ΅
/opt/conda/bin/python retinanet/main.pyΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ°:
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
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡΠΌ Π²Π΅Ρ ΠΈΠΌΠ° Π€ΠΎΡΠ°Π» ΠΠΎΡΡ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ³ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΎΠΊΠΎΡΠ½ΠΈΡΠ°, Π° ΡΠ°ΠΊΠΎΡΠ΅ ΡΠ΅ Π»Π°ΠΊΠΎ ΡΠ³ΡΠ°Π΄ΠΈΡΠΈ ΡΠ²ΠΎΡΠ΅
retinanet/backbones/*.pyΠ£ ΡΠ°Π±Π΅Π»ΠΈ Π°ΡΡΠΎΡΠΈ Π΄Π°ΡΡ Π½Π΅ΠΊΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅:

Π’Ρ ΡΡ ΠΈ ΠΎΠΊΠΎΡΠ½ΠΈΡΠ΅ Π Π΅ΡΠΠ΅ΠΡΡ50_32ΠΊ4Π΄Π€ΠΠ ΠΈ Π Π΅ΡΠΠ΅ΠΡΡ101_32ΠΊ8Π΄Π€ΠΠ, ΠΏΡΠ΅ΡΠ·Π΅ΡΠ΅ ΠΈΠ· ΡΠΎΡΡΡ
Π²ΠΈΡΠΈΠΎΠ½-Π°.
ΠΠ°Π΄Π°ΠΌ ΡΠ΅ Π΄Π° ΡΡΠ΅ ΠΌΠ°Π»ΠΎ ΡΡ
Π²Π°ΡΠΈΠ»ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΡ, Π°Π»ΠΈ ΡΠ²Π°ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ Π·Π²Π°Π½ΠΈΡΠ½Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π΄Π° Π±ΠΈΡΡΠ΅ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠΌΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ·Π²ΠΎΠ·Π° ΠΈ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ°.
Π€Π°Π·Π° 5. ΠΠ·Π²ΠΎΠ· ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ²Π°ΡΠ΅ Π£Π½Π΅Ρ ΠΌΠΎΠ΄Π΅Π»Π° ΡΠ° Π Π΅ΡΠ½Π΅Ρ Π΅Π½ΠΊΠΎΠ΄Π΅ΡΠΎΠΌ
ΠΠ°ΠΎ ΡΡΠΎ ΡΡΠ΅ Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈΠ»ΠΈ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΡΡ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Ρ ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅-Ρ, Π° ΠΏΠΎΡΠ΅Π±Π½ΠΎ Π΄ΠΈΠ²Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° . Π£ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ½ΠΈΡΠ΅Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ½Π°ΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ²Π°ΡΠ° ΠΈ ΠΈΠ·Π²ΠΎΠ·Π° ΠΏΠΈΡΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡ ΡΠ°ΡΠ°ΠΊΠ° Ρ Π’Π΅Π½ΡΠΎΡΠ Π’ ΠΌΠΎΡΠΎΡ.
ΠΠ»Π°Π²Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΠΈΠ·Π²ΠΎΠ·Ρ ΠΌΠΎΠ΄Π΅Π»Π° ΡΠ»ΠΈΡΠ½ΠΈΡ Π£Π½Π΅Ρ-Ρ ΡΠ° ΠΠΠΠΠ‘-Π° Π½Π° Π’Π΅Π½ΡΠΎΠ Π’ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠΈ ΡΠΈΠΊΡΠ½Π° Π²Π΅Π»ΠΈΡΠΈΠ½Π° Π£ΠΏΡΠ°ΠΌΠΏΠ»Π΅-Π° ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π¦ΠΎΠ½Π²Π’ΡΠ°Π½ΡΠΏΠΎΡΠ΅2Π:
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
ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΎΠ²Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°Π΄ΠΈΡΠ΅ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ·Π²ΠΎΠ·Π° Ρ ΠΠΠΠΠ‘, Π°Π»ΠΈ Π²Π΅Ρ Ρ Π²Π΅ΡΠ·ΠΈΡΠΈ 7 Π’Π΅Π½ΡΠΎΡΠ Π’-Π° ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ΅ ΡΠ΅ΡΠ΅Π½ ΠΈ ΠΌΠΎΡΠ°ΠΌΠΎ ΡΠΎΡ ΠΌΠ°Π»ΠΎ Π΄Π° ΡΠ°ΡΠ΅ΠΊΠ°ΠΌΠΎ.
ΠΠ°ΠΊΡΡΡΠ°ΠΊ
ΠΠ°Π΄Π° ΡΠ°ΠΌ ΠΏΠΎΡΠ΅ΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌ ΠΠΎΡΠΊΠ΅Ρ, ΡΡΠΌΡΠ°ΠΎ ΡΠ°ΠΌ Ρ ΡΠ΅Π³ΠΎΠ²Π΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅ Π·Π° ΠΌΠΎΡΠ΅ Π·Π°Π΄Π°ΡΠΊΠ΅. ΠΠ΅Π΄Π½Π° ΠΎΠ΄ ΠΌΠΎΡΠΈΡ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΡΠ΅Π½ΡΡΠ½ΠΎ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ° ΠΌΡΠ΅ΠΆΠ½ΠΎΠ³ ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°ΡΠ° ΠΊΠΎΡΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΊΠ°ΠΌΠ΅ΡΠ°.

Π Π°Π·Π»ΠΈΡΠΈΡΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΡΡ ΠΎ ΡΠ΅Π»Π°ΡΠΈΠ²Π½ΠΎ Π²Π΅Π»ΠΈΠΊΠΈΠΌ ΡΡΠΎΡΠΊΠΎΠ²ΠΈΠΌΠ° Π·Π° ΠΌΡΠ΅ΠΆΠ½Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΡ ΠΈ ΡΠ½ΠΈΠΌΠ°ΡΠ΅ Π½Π° ΠΠΠΠ£ΠΠ, ΠΏΠ»ΡΡ Π½Π΅ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΈ ΡΡΡΠ°ΡΠ½ΠΈ ΠΠΠ, Π° ΠΏΠΎΡΡΠΎ ΡΠ΅ ΡΠ½ΠΈΠΌΠ°ΡΠ΅ ΠΎΠΊΠ²ΠΈΡΠ°, ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ Π΄ΡΠ°ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΏΡΠ΅Π½ΠΎΡ ΠΎΠΊΠ²ΠΈΡΠ° ΠΏΡΠ΅ΠΊΠΎ ΠΌΡΠ΅ΠΆΠ΅ Π°ΡΠΎΠΌΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ° Ρ ΡΠ΅ΠΆΠΈΠΌΡ ΡΠ΅ΡΠΊΠΎ Ρ ΡΠ΅Π°Π»Π½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Ρ, ΠΊΠ°ΡΡΠ΅ΡΠ° Ρ ΠΌΡΠ΅ΠΆΠΈ ΡΡ Π²Π΅ΠΎΠΌΠ° ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΠΌΠ΅Π½Π΅.
ΠΠ»ΠΈ ΡΠ²Π΅ ΡΠ΅ ΠΈΡΠΏΠ°Π»ΠΎ Ρ ΡΠ΅Π΄Ρ =)
ΠΠ‘ ΠΡΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° Π΄ΠΎΠ΄Π°ΡΠ΅ ΡΠ²ΠΎΡΡ ΠΎΠΌΠΈΡΠ΅Π½Ρ ΠΏΠ΅ΡΡΡ Π²ΠΎΠ·Π° Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ!
Π₯Π²Π°Π»Π°
Π₯Π²Π°Π»Π° Π·Π°ΡΠ΅Π΄Π½ΠΈΡΠΈ , Π±Π΅Π· ΡΠ΅Π³Π° ΡΠ΅ Π½Π΅ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠ°ΡΠΈ ΡΠ΅! Π₯Π²Π°Π»Π° ΠΏΡΠ½ΠΎ , ΠΊΠΎΡΠΈ ΠΌΠ΅ ΡΠ΅ ΠΎΡ ΡΠ°Π±ΡΠΈΠΎ Π΄Π° ΡΠ°Π΄ΠΈΠΌ ΠΠ, Π·Π±ΠΎΠ³ ΡΠ²ΠΎΠ³ Π½Π΅ΠΏΡΠΎΡΠ΅ΡΠΈΠ²ΠΎΠ³ ΡΠ°Π²Π΅ΡΠ° ΠΈ ΠΈΠ·ΡΠ·Π΅ΡΠ½ΠΎΠ³ ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΌΠ°!
ΠΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½Π΅ ΠΌΠΎΠ΄Π΅Π»Π΅ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ!
ΠΡΡΠΎΡΠ°ΠΈ, Π΄ΠΎΠΎ
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ
