Pular para o conteúdo principal

DashCamNet e PeopleNet com Jetson Xavier NX Multicâmera

Introdução

Atualmente, nos campos de direção autônoma, gravação em carros e monitoramento de infrações, usamos com frequência inteligência artificial para nos ajudar a identificar informações de veículos, placas de veículos e obstáculos ao redor. Graças ao grande número de modelos pré-treinados fornecidos pela Nvidia NGC, podemos executar essas tarefas complexas com mais facilidade.

Criar um modelo de IA/aprendizado de máquina do zero pode custar muito tempo e dinheiro. O aprendizado por transferência é uma técnica popular que pode ser usada para extrair recursos aprendidos de um modelo de rede neural existente para um novo modelo. O NVIDIA TAO (Train, Adapt, and Optimize) Toolkit é uma solução baseada em CLI e notebooks Jupyter do NVIDIA TAO, que abstrai a complexidade do framework de IA/aprendizado profundo, permitindo que você faça o ajuste fino em modelos de IA pré-treinados de alta qualidade da NVIDIA com apenas uma fração dos dados em comparação com o treinamento do zero.

O TAO Toolkit também oferece suporte a mais de 100 permutações de arquiteturas de modelo e backbones otimizados pela NVIDIA, tais como EfficientNet, YOLOv3/v4, RetinaNet, FasterRCNN, UNET e muitos outros.

Crédito ao repositório da NVIDIA e ao projeto de Tomasz, vamos detectar carros e pessoas com várias câmeras implantadas no Jetson Xavier NX. O Jetson SUB Mini PC é adequado para esta demonstração.

O NVIDIA TAO Toolkit era anteriormente chamado de NVIDIA Transfer Learning Toolkit (Tlt).

pir

Requisitos de Materiais

Configuração de Hardware

pir

pir

  • Monitor com interface HDMI, DP ou eDP
  • PC com sistema operacional baseado em Linux

Configuração de Software

  • Jetpack 4.5 ou 4.6 para Jetson Xavier NX
  • Docker
  • DeepStream
  • TAO Toolkit
  • Python3.6 com Pypi (python3-pip) e ambientes virtuais
  • NVIDIA Container Toolkit

Os métodos de instalação de software serão fornecidos nas etapas a seguir.

Pré-instalação

Antes de iniciarmos o projeto, precisamos instalar o Docker Engine no Ubuntu. Existem várias maneiras de instalar o Docker Engine e você pode escolher qualquer uma delas conforme suas necessidades. Se você já o configurou, pode pular esta etapa.

  • A maioria dos usuários configura os repositórios do Docker e instala a partir deles pela facilidade de instalação e atualização, o que é a abordagem recomendada.
  • Alguns usuários baixam o pacote DEB e o instalam manualmente e gerenciam as atualizações completamente de forma manual. Isso é útil em situações como instalar o Docker em sistemas isolados, sem acesso à internet.
  • Em ambientes de teste e desenvolvimento, alguns usuários optam por usar scripts de conveniência automatizados para instalar o Docker.

Aqui vamos usar a primeira opção. Antes de instalarmos o Docker, é necessário garantir que a versão dele seja a mais recente. Os nomes das versões antigas podem ser docker, docker.io ou docker-engine; você pode verificar isso usando o seguinte comando:

sudo apt-get purge docker docker-engine docker.io containerd runc

Quando você desinstala o Docker, o conteúdo de /var/lib/docker/, incluindo imagens, contêineres, volumes e redes, é preservado. Se você quiser começar com uma instalação limpa, pode consultar a seção uninstall Docker Engine na parte inferior desta página.

Instalar o Docker usando o repositório

Antes de instalarmos o Docker Engine em uma nova máquina host, é necessário configurar o repositório do Docker. Depois disso, podemos instalar e atualizar o Docker a partir do repositório.

  • Passo 1. Configure o repositório com o pacote apt

Atualize o índice de pacotes apt e instale pacotes para permitir que o apt use um repositório via HTTPS com os seguintes comandos:

 sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

Adicione a chave GPG oficial do Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Use o seguinte comando para configurar o repositório stable. Para adicionar o repositório nightly ou test, adicione a palavra nightly ou test (ou ambas) após a palavra stable nos comandos abaixo. Você pode saber mais sobre os canais nightly e test aqui.

 echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • Passo 2. Instale o Docker Engine

Atualize o índice de pacotes apt e instale a versão mais recente do Docker Engine e do containerd com os seguintes comandos:

 sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Podemos verificar se o Docker Engine foi instalado corretamente executando a imagem hello-world.

 sudo docker run hello-world
  • Passo 3. Gerencie o Docker como um usuário não root com os seguintes processos.

Crie o grupo docker.

sudo groupadd docker

Adicione o usuário ao grupo docker.

sudo usermod -aG docker $USER

Faça logout e login novamente para reavaliar a associação ao grupo.

Verifique se você consegue executar comandos docker sem sudo executando hello-world

docker run hello-world
  • Passo 4. Configure o NVIDIA Container Toolkit com os seguintes processos:

Configure o repositório stable e a chave GPG:

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

Atualize a lista de pacotes e instale o pacote nvidia-docker2 (e dependências):

sudo apt-get update
sudo apt-get install -y nvidia-docker2

Reinicie o daemon do Docker para concluir a instalação após definir o runtime padrão:

sudo systemctl restart docker

Primeiros Passos

Instalar o NVIDIA GPU Cloud CLI ARM64 Linux

O NVIDIA GPU Cloud (NGC) CLI é uma interface de linha de comando baseada em Python para gerenciar contêineres Docker no NGC Container Registry. Com o NGC CLI, você pode executar muitas das mesmas operações disponíveis no site da NGC, como executar jobs e visualizar repositórios Docker dentro do espaço da sua organização e equipe.

  • Passo 1. Vá até a página Download CLI e baixe o arquivo zip que contém o binário. O binário NGC CLI para ARM64 é compatível com o Ubuntu 18.04 e distribuições posteriores.

pir

  • Passo 2. Transfira o arquivo zip para um diretório onde você tenha permissões, descompacte-o e, por fim, execute o binário.

Você também pode baixar, descompactar e instalar pela linha de comando, indo para um diretório onde você tenha permissão de execução e, em seguida, executando o seguinte comando:

wget -O ngccli_arm64.zip https://ngc.nvidia.com/downloads/ngccli_arm64.zip && unzip -o ngccli_arm64.zip && chmod u+x ngc

Verifique o hash md5 do binário para garantir que o arquivo não foi corrompido durante o download:

md5sum -c ngc.md5
  • Etapa 3. Adicione seu diretório atual ao path:
echo "export PATH=\"\$PATH:$(pwd)\"" >> ~/.bash_profile && source ~/.bash_profile

Você deve configurar o NGC CLI para o seu uso a fim de executar os comandos.

  • Etapa 4. Digite o seguinte comando, incluindo sua chave de API quando solicitado:
ngc config set

Geração de chave de API do NGC

É necessária uma chave de API para configurar o NGC CLI; podemos gerá-la através do site do NGC.

  • Etapa 1. Vá para o site e clique em "Sign In/Sign Up".

pir

  • Etapa 2. Registre uma conta como desenvolvedor NVIDIA.

pir

  • Etapa 3. Escolha uma conta para continuar.

pir

  • Etapa 4. Clique em "Setup" no canto superior direito da página.

pir

  • Etapa 5. Selecione "Get API Key".

pir

  • Etapa 6. Clique em "Generate API Key".

pir

  • Etapa 7. A chave de API será exibida na parte inferior da página.

pir

Instalar o TAO Toolkit

Python3 e python3-pip devem ser instalados primeiro:

sudo apt install -y python3 python3-pip

TAO Toolkit é um pacote Python pip que é hospedado no NVIDIA PyIndex. O pacote usa a docker restAPI internamente para interagir com o registro NGC Docker para puxar e instanciar os containers docker subjacentes. Nas etapas anteriores, já configuramos uma conta NGC e geramos uma chave de API associada a ela. Se você quiser ver mais sobre a seção Installation Prerequisites, você pode clicar para obter detalhes sobre como criar uma conta NGC e obter uma chave de API.

Ambiente Virtual - Virtualenv

Um Ambiente Virtual é uma cópia isolada do Python que permite trabalhar em um projeto específico sem se preocupar em afetar outros projetos. Por exemplo, você pode trabalhar em um projeto que exija Django 1.3 enquanto processa um projeto que exija Django 1.0. Você pode clicar aqui para criar ambientes Python isolados.

É altamente recomendado configurar primeiro um ambiente virtual e depois instalar o TAO Toolkit.

  • Você pode instalar virtualenv via pip:
pip install virtualenv
  • Crie um ambiente virtual:
virtualenv venv

Ele cria uma cópia do Python em qualquer diretório em que você executou o comando, colocando-o em uma pasta chamada venv.

  • Ative o ambiente virtual:
source venv/bin/activate
  • Se você terminou de trabalhar no ambiente virtual por enquanto, pode desativá-lo:
deactivate

Isso o leva de volta ao interpretador Python padrão do sistema com todas as suas bibliotecas instaladas.

Para excluir um ambiente virtual, basta excluir sua pasta.

virtualenvwarpper

Depois de um tempo, porém, você pode acabar com muitos ambientes virtuais espalhados pelo sistema e é possível que você esqueça seus nomes ou onde foram colocados. Portanto, estamos usando virtualenvwarpper. O virtualenvwrapper fornece um conjunto de comandos que torna o trabalho com ambientes virtuais muito mais agradável. Ele também coloca todos os seus ambientes virtuais em um só lugar.

Você pode instalar (certifique-se de que virtualenv já está instalado):

pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh

Se quiser ver mais informações sobre isso, consulte as instruções completas de instalação do virtualenvwrapper.)

Você pode seguir as instruções neste link para configurar um virtualenv Python usando um virtualenvwrapper.

Definir a versão do Python no Ambiente Virtual

  • Etapa 1. Depois de seguir as instruções para instalar virtualenv e virtualenvwrapper, defina a versão do Python no virtualenv. Isso pode ser feito de uma das seguintes maneiras:

  • Definindo a variável de ambiente chamada VIRTUALENVWRAPPER_PYTHON. Essa variável deve apontar para o caminho onde o binário do python3 está instalado na sua máquina local. Você também pode adicioná-la ao seu .bashrc ou .bash_profile para definir seu virtualenv Python por padrão.

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
  • Definindo o caminho para o binário python3 ao criar seu virtualenv usando o wrapper virtualenvwrapper
mkvirtualenv launcher -p /path/to/your/python3
  • Etapa 2. Depois de entrar no virtualenv, o prompt de comando deve mostrar o nome do seu ambiente virtual
   (launcher) py-3.6.9 desktop:
  • Etapa 3. Quando terminar sua sessão, você pode desativar seu virtualenv usando o comando deactivate:
deactivate
  • Etapa 4. Você pode reinstanciar esse virtualenv criado usando o comando workon.

    workon launcher

Instalar o pacote TAO

  • Etapa 1. Já configuramos o ambiente de que precisamos. Agora podemos instalar o pacote Python TAO Launcher chamado nvidia-tao com o seguinte comando.

    pip3 install nvidia-pyindex
    pip3 install nvidia-tao
  • Etapa 2. Invoque os entrypoints usando o comando tao.

tao --help

A saída de exemplo do comando acima é:

usage: tao [-h]
{list,stop,info,augment,bpnet,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,
heartratenet,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,
retinanet,speech_to_text,ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}
...

Launcher for TAO

optional arguments:
-h, --help show this help message and exit

tasks:
{list,stop,info,augment,bpnet,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,heartratenet
,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,retinanet,speech_to_text,
ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}
  • Etapa 3. Observe que em tasks você pode ver todas as tarefas que podem ser chamadas pelo launcher. As seguintes são as tarefas específicas que ajudam a lidar com os comandos lançados usando o TAO Launcher:

    • list
    • stop
    • info

Atenção: Se o terminal informar "bash: Cannot find tao", use este comando:

export PATH=$PATH:~/.local/bin
tao --help

Instalar o DeepStream5

  • Etapa 1. Edite /etc/apt/sources.list.d/nvidia-l4t-apt-source.list e substitua .6 por .5:
deb https://repo.download.nvidia.com/jetson/common r32.5 main
#deb https://repo.download.nvidia.com/jetson/common r32.6 main
deb https://repo.download.nvidia.com/jetson/t194 r32.5 main
#deb https://repo.download.nvidia.com/jetson/t194 r32.6 main
  • Etapa 2. Digite sudo apt update e tente novamente instalar o DeepStream 5.1.

E então instale-o com o seguinte comando:

sudo -H pip3 install pyds-ext

Para mais informações, consulte os links abaixo:

Instalar os Pipelines Multicâmera Jetson e Início Rápido

Por fim, vamos construir um pipeline típico de várias câmeras, ou seja, N×(capture)->preprocess->batch->DNN-> <<your application logic here>> ->encode->file I/O + display, usando gstreamer e deepstream por baixo dos panos. Forneça acesso programático para configurar o pipeline em python via pacote jetmulticam.

Este projeto utiliza aceleração de hardware da Nvidia para uso mínimo de CPU. Por exemplo, você pode executar detecção de objetos em tempo real em 6 fluxos de câmera usando apenas 16,5% de CPU. Você pode facilmente construir sua lógica personalizada em python acessando dados de imagem (via np.array), bem como resultados de detecção de objetos.

  • Etapa 1. Instale os Pipelines Multicâmera Jetson com o seguinte comando:
git clone https://github.com/NVIDIA-AI-IOT/jetson-multicamera-pipelines.git
cd jetson-multicamera-pipelines
bash scripts/install_dependencies.sh
sudo -H pip3 install Cython
sudo -H pip3 install .
  • Etapa 2. Execute o exemplo com suas câmeras:
source scripts/env_vars.sh 
cd examples
sudo -H python3 example.py

Este é o example.py; você pode aplicá-lo tanto a uma câmera monocular quanto a uma multi‑câmera.

import time
from jetmulticam import CameraPipelineDNN
from jetmulticam.models import PeopleNet, DashCamNet

if __name__ == "__main__":

pipeline = CameraPipelineDNN(
cameras=[2, 5, 8],
models=[
PeopleNet.DLA1,
DashCamNet.DLA0,
# PeopleNet.GPU
],
save_video=True,
save_video_folder="/home/nx/logs/videos",
display=True,
)

while pipeline.running():
arr = pipeline.images[0] # np.array with shape (1080, 1920, 3), i.e. (1080p RGB image)
dets = pipeline.detections[0] # Detections from the DNNs
time.sleep(1/30)

Este é o resultado de multi‑câmera exibido assim:

Mais

Há mais modelos / aceleradores compatíveis:

pipeline = CameraPipelineDNN(
cam_ids = [0, 1, 2]
models=[
models.PeopleNet.DLA0,
models.PeopleNet.DLA1,
models.PeopleNet.GPU,
models.DashCamNet.DLA0,
models.DashCamNet.DLA1,
models.DashCamNet.GPU
]
# ...
)

Atenção: Se o terminal informar "EGL Not found", verifique o EGLDevice.

Suporte Técnico & Discussão de Produtos

Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...