Skip to main content

DashCamNet y PeopleNet con Jetson Xavier NX Multicamera

Introducción

Hoy en día, en los campos de conducción autonoma, grabación de vehículos y monitoreo de infracciones a menudo utilizamos inteligencia artificial para ayudarnos a identificar información de vehículos, placas y obstáculos. Gracias al gran número de modelos pre entrenados generados por Nvidia NGC, podemos realizar estas tareas complejas de forma más sencilla.

Crear un modelo de IA/aprendizaje automático desde cero puede costarte mucho tiempo y dinero. La Transferencia de aprendizaje es una técnica popular que se puede utilizar para extraer características aprendidas de un modelo de red neuronal existente a uno nuevo. El NVIDIA TAO (Train, Adapt, and Optimize) Toolkit es una solución basada en CLI y Jupyter Notebook de NVIDIA TAO que abstrae la complejidad de los marcos de IA/aprendizaje profundo, permitiéndote ajustar modelos de IA preentrenados de alta calidad de NVIDIA con solo una fracción de los datos en comparación con el entrenamiento desde cero.

El TAO Toolkit también es compatible con más de 100 permutaciones de arquitecturas de modelos y backbones optimizados por NVIDIA, como EfficientNet, YOLOv3/v4, RetinaNet, FasterRCNN, UNET y muchos más.

Credit to NVIDIA's repository and Tomasz's project, we are going to detect cars and people with muliticamera deployed in Jetson Xavier NX. Both Jetson SUB Mini PC are good for this demo. Gracias al repositorio de NVIDIA y al proyecto de Tomasz, vamos a detectar autos y personas con cámaras múltiples desplegadas en Jetson Xavier NX. Ambos Jetson SUB Mini PC son adecuados para esta demostración.

NVIDIA TAO Toolkit was previously named NVIDIA Transfer Learning Toolkit(Tlt). NVIDIA TAO Toolkit solía llamarse NVIDIA Transfer Learning Toolkit(Tlt).

pir

Materiales requeridos

Configuración del hardware

pir

pir

  • Pantalla con interfaz HDMI, DP o eDP
  • PC con alguna distribución de Linux como sistema operativo

Configuración del Software

  • Jetpack 4.5 o 4.6 para Jetson Xavier NX
  • Docker
  • DeepStream
  • TAO Toolkit
  • Python3.6 con Pypi(python3-pip) y Entornos Virtuales
  • NVIDIA Container Toolkit

Los métodos de instalación de software serán detallados en los siguientes pasos.

Pre instalación

Antes de comenzar el proyecto, necesitamos instalar Docker Engine en Ubuntu. Hay muchas formas de instalar Docker Engine y puedes elegir una dependiendo de tus necesidades. Si ya lo tienes instalado, puedes omitir este paso.

  • La mayoría de usuarios configuran los repositorios de Docker e instalan desde ellos por la facilidad en la instalación y actualización, este es el enfoque recomendado.
  • Algunos usuarios descargan el paquete DEB lo instalan manualmente y manejan las actualizaciones de forma completamente manual. Esto es útil para instalar Docker en sistemas aislados sin acceso a internet.
  • En entornos de desarrollo y testing, algunos usuarios eligen utilizar Scripts de conveniencia para instalar Docker.

En esta wiki vamos a usar el primer método. Antes de instalar Docker, es necesario asegurarse de que la versión sea la más reciente. Los nombres de las versiones antiguas pueden ser docker, docker.io o docker-engine. Puedes verificarlo usando el siguiente comando:

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

Cuando desinstalas Docker, el contenido de /var/lib/docker/, incluidos imágenes, contenedores, volúmenes y redes, se conserva. Si deseas comenzar con una instalación limpia, puedes consultar la sección de desinstalación de Docker Engine en la parte inferior de esta página.

Instalar Docker utilizando el repositorio

Antes de instalar Docker Engine en una nueva máquina, es necesario configurar el repositorio de Docker. Posteriormente, podemos instalar u actualizar Docker desde el repositorio.

  • Paso 1. Configurar el repositorio con el paquete apt

Actualiza el índice de paquetes de apt e instala los paquetes que permiten a apt utilizar un repositorio a través de HTTPS con los siguientes comandos:

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

Añade la clave GPC oficial de Docker:

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

Utiliza el siguiente comando para configurar el repositorio stable. Para agregar el repositorio nightly o test, añade la palabra nightly o test (o ambas) después de la palabra stable en los comandos a continuación. Puedes Aprender más sobre los canales nightly y test aquí.

 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
  • Paso 2. Instalar Docker Engine

Actualiza el índice de paquetes de apt e instala la última versión de Docker Engine y containerd con los siguientes comandos:

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

Podemos verificar si Docker Engine está instalado correctamente ejecutando la imagen hello-world.

 sudo docker run hello-world
  • Paso 3. Manejar Docker como usuario sin privilegios con los siguientes procesos.

Crea el grupo docker.

sudo groupadd docker

Añade el usuario en el grupo docker.

sudo usermod -aG docker $USER

Cierra sesión y vuelve a iniciarla para reevaluar la membresía del grupo.

Verifica que puedas ejecutar comandos de docker sin sudo ejecutando hello-world.

docker run hello-world
  • Paso 4. Configura el NVIDIA Container Toolkit con los siguientes procesos:

Configura el repositorio stable y la GPG key:

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

Actualiza el listado de paquetes e instala el paquete nvidia-docker2 (y sus dependencias):

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

Reinicia el daemon de Docker para completar la instalación después de establecer el tiempo de ejecución predeterminado:

sudo systemctl restart docker

Primeros pasos

Instalar NVIDIA GPU Cloud CLI ARM64 Linux

NVIDIA GPU Cloud (NGC) CLI es una interfaz de línea de comandos basada en Python para gestionar contenedores Docker en el Registro de Contenedores NGC. Con NGC CLI, puedes realizar muchas de las mismas operaciones disponibles en el sitio web de NGC, como ejecutar trabajos y ver repositorios Docker dentro de tu espacio de organización y equipo.

  • Paso 1. Ve a la página de Descargar CLI y descarga el archivo zip que contiene el binario. El binario de NGC CLI para ARM64 es compatible con distribuciones de Ubuntu 18.04 y posteriores.

pir

  • Paso 2. Transfiere el archivo zip al directorio donde cuentes con los permisos y descomprimelo para finalmente ejecutar el archivo binario.

También puedes descargar, descomprimir e instalar desde la línea de comandos moviéndote a un directorio donde tengas permisos de ejecución y luego ejecutando el siguiente comando:

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

Verifica el hash md5 del binario para asegurarte de que el archivo no se haya corrompido durante la descarga:

md5sum -c ngc.md5
  • Paso 3. Agrega tu directorio actual al PATH:
echo "export PATH=\"\$PATH:$(pwd)\"" >> ~/.bash_profile && source ~/.bash_profile

Debes configurar NGC CLI para tu uso antes de poder ejecutar los comandos.

  • Paso 4. Ingresa el siguiente comando, incluyendo tu API key.
ngc config set

Generar NGC API key

Se requiere una clave de API para configurar NGC CLI, la cual podemos generar a través del sitio web de NGC.

  • Paso 1. Ve al sitio web y haz click en "Iniciar sesión/Registrarse"

pir

  • Paso 2. Registra una cuenta como desarrollador NVIDIA.

pir

  • Paso 3. Elige una cuenta y procede.

pir

  • Paso 5. Haz click en "Setup" en la esquina superior derecha de la página.

pir

  • Paso 5. Selecciona "Get API Key".

pir

  • Paso 6. Haz click en "Generate API Key".

pir

  • Paso 7. La API Key será mostrada en la parte inferior de la página.

pir

Instalar el TAO Toolkit

Python3 y python3-pip deben ser instalados para empezar:

sudo apt install -y python3 python3-pip

TAO Toolkit es un paquete de Python pip que se encuentra en NVIDIA PyIndex. Este paquete utiliza la docker restAPI en segundo plano para interactuar con el registro de Docker de NGC y así descargar e instanciar los contenedores Docker subyacentes. En los pasos anteriores, ya hemos creado una cuenta de NGC y generado una clave de API asociada a ella. Si deseas obtener más información, puedes consultar la sección de requisitos previos de instalación para obtener detalles sobre cómo crear una cuenta de NGC y obtener una clave de API.

Entorno Virtual - Virtualenv

Un entorno virtual es una copia aislada de Python que te permite trabajar en un proyecto específico sin preocuparte por afectar otros proyectos. Por ejemplo, puedes trabajar en un proyecto que requiere Django 1.3 mientras manejas otro proyecto que necesita Django 1.0. Puedes hacer clic aquí para crear entornos aislados de Python.

Es altamente recomendable configurar un entorno virtual para instalar el TAO Toolkit.

  • Puedes instalar virtualenv con pip:
pip install virtualenv
  • Para crear el entorno virtual:
virtualenv venv

Con ello se crea una copia de Python en el directorio donde ejecutaste el comando, ubicándola en una carpeta llamada venv.

  • Para activar el entorno virtual utiliza el siguiente comando:
source venv/bin/activate
  • Si terminaste de utilizar el entorno virtual, puedes desactivarlo con el siguiente comando:
deactivate

Esto te devuelve al intérprete de Python predeterminado del sistema con todas sus bibliotecas instaladas.

Para eliminar el entorno virtual solo elimina el folder que lo contiene.

virtualenvwarpper

Después de un tiempo, podrías terminar con muchos entornos virtuales esparcidos por tu sistema, y es posible que olvides sus nombres o dónde los guardaste. Por eso, utilizamos virtualenvwrapper. El virtualenvwrapper proporciona un conjunto de comandos que facilitan el trabajo con entornos virtuales. Además, organiza todos tus entornos virtuales en un solo lugar.

Para instalar se usa el siguiente comando (asegurate de tener virtualenv instalado previamente) :

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

Si necesitas más información al respecto puedes consultar virtualenvwrapper instrucciones de instalación completa.)

Sigue las instrucciones en este link para configurar tu entorno virtual usando virtualenvwrapper.

Configurar la versión de python para el entorno virtual

  • Paso 1. Una vez hayas instalado virtualenv y virtualenvwrapper, configurarás la versión de Python, puedes hacerlo de las siguientes formas:

  • Defining the environment variable called VIRTUALENVWRAPPER_PYTHON. This variable should point to the path where the python3 binary is installed in your local machine. You can also add it to your .bashrc or .bash_profile for setting your Python virtualenv by default.

  • Definir la variable de entorno llamada VIRTUALENVWRAPPER_PYTHON. Esta variable debe apuntar a la ruta donde el binario de python3 está instalado en tu máquina local. También puedes agregarla a tu archivo .bashrc o .bash_profile para configurar tu virtualenv de Python de forma predeterminada.

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
  • Configurando la ruta al binario de python3 al crear tu virtualenv usando el envoltorio de virtualenvwrapper.
mkvirtualenv launcher -p /path/to/your/python3
  • Paso 2. Una vez que hayas iniciado sesión en el virtualenv, el indicador de comando debería mostrar el nombre de tu entorno virtual.
   (launcher) py-3.6.9 desktop:
  • Paso 3. Cuando hayas terminado tu sesión, puedes desactivar tu virtualenv usando el comando deactivate:
deactivate
  • Paso 4. Puedes reactivar este virtualenv creado usando el comando workon:

    workon launcher

Instalar el paquete TAO

  • Paso 1. Ya hemos configurado el entorno que necesitamos. Ahora podemos instalar el paquete Python del TAO Launcher llamado nvidia-tao con el siguiente comando:

    pip3 install nvidia-pyindex
    pip3 install nvidia-tao
  • Paso 2. Invoca los punto de entrada utilizando el comando tao

tao --help

El output del comando arriba se muestra a continuación:

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}
  • Paso 3. Ten en cuenta que en la sección de tareas puedes ver todas las tareas que se pueden invocar con el launcher. Las siguientes son las tareas específicas que ayudan a manejar los comandos lanzados usando el TAO Launcher:

    • list
    • stop
    • info

Precaución: Si la terminal arroja "bash: Cannot find tao", usa el siguiente comando:

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

Instalar DeepStream5

  • Paso 1. Edita /etc/apt/sources.list.d/nvidia-l4t-apt-source.list y remplaza .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
  • Paso 2. Escribe sudo apt update y vuelve a intentar instalar DeepStream 5.1.

Ahora instalalo con el siguiente comando:

sudo -H pip3 install pyds-ext

Para más información, revisa los siguientes links:

Instala Jetson Multicamera Pipelines y guía rápida

Finalmente, vamos a construir un pipeline típico de múltiples cámaras, es decir, N×(capture)->preprocess->batch->DNN-> <<your application logic here>> ->encode->file I/O + display, utilizando gstreamer y deepstream bajo el capó. Proporciona acceso programático para configurar el pipeline en Python a través del paquete jetmulticam.

Este proyecto utiliza la aceleración de hardware de Nvidia para un uso mínimo de la CPU. Por ejemplo, puedes realizar detección de objetos en tiempo real en 6 transmisiones de cámaras utilizando solo un 16.5% de CPU. Puedes crear fácilmente tu lógica personalizada en Python accediendo a los datos de las imágenes (a través de np.array), así como a los resultados de la detección de objetos.

  • Paso 1. Instala Jetson Multicamera Pipelines con el siguiente 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 .
  • Paso 2. Ejemplo de prueba:
source scripts/env_vars.sh 
cd examples
sudo -H python3 example.py

Este es el archivo'example.py', puedes utilizarlo para una o varias cámaras

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 es el resultado de la multicámara:

Más

Hay más modelos soportados / aceleradores:

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

Precaución: Si la terminal muestra "EGL Not found", por favor revisa EGLDevice.

Soporte Tech y discusión del producto

¡Gracias por elegir nuestros productos! Estamos aquí para darte soporte y asegurar que tu experiencia con nuestros productos sea la mejor posible. Tenemos diversos canales de comunicación para adaptarnos distintas preferencias y necesidades.

Loading Comments...