Primeros pasos con alwaysAI en dispositivos NVIDIA® Jetson

alwaysAI es una plataforma esencial de desarrollo de Visión por Computadora para crear e implementar aplicaciones de aprendizaje automático en dispositivos Edge como los dispositivos NVIDIA® Jetson. Desarrollar e implementar estas aplicaciones es simplemente demasiado complejo y consume mucho tiempo, requiriendo un conocimiento profundo de una gran variedad de tecnologías y técnicas de visión por computadora que son más relevantes y accesibles para especialistas que para desarrolladores cotidianos. alwaysAI elimina estas barreras y hace que crear aplicaciones de visión por computadora sea fácil, rápido y efectivo.
Hardware compatible
alwaysAI es compatible con el siguiente hardware relacionado con Jetson:
-
Kits de Seeed:
- reComputer J1010 construido con Jetson Nano
- reComputer J1020 construido con Jetson Nano
- reComputer J2011 construido con Jetson Xavier NX 8GB
- reComputer J2012 construido con Jetson Xavier NX 16GB
-
Placas portadoras de Seeed:
- Jetson Mate
- Jetson SUB Mini PC
- Jetson Xavier AGX H01 Kit
- A203 Carrier Board
- A203 (Version 2) Carrier Board
- A205 Carrier Board
- A206 Carrier Board
-
Kits de desarrollo oficiales de NVIDIA:
- NVIDIA® Jetson Nano Developer Kit
- NVIDIA® Jetson Xavier NX Developer Kit
- NVIDIA® Jetson AGX Xavier Developer Kit
- NVIDIA® Jetson TX2 Developer Kit
- NVIDIA® Jetson AGX Orin Developer Kit
-
SoMs oficiales de NVIDIA:
- NVIDIA® Jetson Nano module
- NVIDIA® Jetson Xavier NX module
- NVIDIA® Jetson TX2 NX module
- NVIDIA® Jetson TX2 module
- NVIDIA® Jetson AGX Xavier module
Prerrequisitos
- Cualquiera de los dispositivos Jetson mencionados ejecutando JetPack 4.6 con todos los componentes SDK instalados (consulta esta wiki como referencia para la instalación)
- PC host con Windows, Linux o Mac
- Cámara web USB o cámara MIPI CSI compatible con tu dispositivo Jetson
Primeros pasos
¡Implementar tu primer proyecto de visión por computadora solo toma un par de minutos! Al final de esta wiki, podrás detectar objetos en una transmisión de video en vivo desde una cámara conectada a un dispositivo Jetson y también en un archivo de video precargado.
- Configurar entorno para computadora de desarrollo
- Configurar entorno para dispositivo Jetson
- Registrarse para una cuenta de alwaysAI
- Crear un proyecto usando el panel de alwaysAI
- Implementar tu proyecto en el dispositivo Jetson usando la computadora de desarrollo
- Detección de objetos en transmisión de video en vivo desde cámara
- Detección de objetos en archivo de video precargado
Configurar entorno para computadora de desarrollo
Ahora necesitas configurar el entorno de desarrollo. Aquí puedes usar una computadora con Windows, Linux o Mac.
En esta guía, usaremos una computadora de desarrollo con Windows. Sin embargo, si quieres configurar Mac o Linux como tu PC de desarrollo, por favor visita aquí para aprender más.
-
Paso 1. Descarga e instala la aplicación de escritorio de alwaysAI y la interfaz de línea de comandos haciendo clic aquí
-
Paso 2. Después de que termine la instalación, abre una interfaz de línea de comandos y escribe lo siguiente
aai -v
Si ves un número de versión impreso, has instalado exitosamente alwaysAI CLI. El número de versión al momento de escribir este wiki es 1.4.3
- Paso 3. Verifica si OpenSSH ya está instalado en tu SO. Necesitas OpenSSH en la máquina de desarrollo para conectarte a tu dispositivo edge y desplegar los proyectos de aprendizaje automático.
ssh -V
Si ves un número de versión impreso, ya tienes OpenSSH instalado. Por ejemplo OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2. A finales de 2018, Windows 10 soporta OpenSSH de forma nativa. Consulta este artículo en el sitio de documentación de Microsoft para más información sobre la instalación de OpenSSH en Windows
Configurar el entorno para el dispositivo Jetson
A continuación necesitas configurar el entorno en el dispositivo edge (dispositivo Jetson en este caso).
Paso 1. Al ejecutar nuestro proyecto de aprendizaje automático en el dispositivo Jetson, se utiliza el runtime edgeIQ que está disponible como una imagen docker. No necesitas instalar Docker porque ya viene preinstalado con JetPack. Sin embargo necesitas añadir el grupo "docker" a tu usuario para que no necesites privilegios de root (sudo) para acceder a Docker. Accede al dispositivo Jetson y ejecuta lo siguiente en una terminal
sudo usermod -aG docker $USER
Paso 2. Para aplicar la nueva membresía de grupo, cierre sesión en el dispositivo Jetson y vuelva a iniciar sesión, o escriba lo siguiente
su - $USER
Paso 3. Prueba tu instalación de docker sin sudo
docker run hello-world

Registrarse para una cuenta de alwaysAI
-
Paso 1. Visita esta página para registrarte para una cuenta de alwaysAI
-
Paso 2. Completa el formulario y haz clic en Sign Up for Free para finalizar el proceso de registro
Crear un proyecto usando el panel de alwaysAI
Después de completar la configuración del entorno en la máquina de desarrollo y el dispositivo Jetson, registrarse para una cuenta de alwaysAI, podemos comenzar a crear un nuevo proyecto de detección de objetos usando el panel de alwaysAI.
Paso 1. Visita el panel de alwaysAI y crea un nuevo proyecto haciendo clic en el botón New Project

Paso 2. Elige Object Detection como plantilla inicial, ingresa un nombre de proyecto y haz clic en Create Project

Paso 3. Haz clic en Click Here To View Your Project para ingresar a tu proyecto recién creado
Ahora verás información sobre el proyecto recién creado como el modelo utilizado y otros detalles útiles

Para el Proyecto de Detección de Objetos predeterminado, mobilenet_ssd se usa como el modelo que ha sido entrenado con el conjunto de datos Pascal VOC. Esto significa que esta aplicación puede reconocer 20 clases de objetos como persona, pájaro, gato, vaca, perro, caballo, oveja, avión, bicicleta, barco, autobús, coche, motocicleta, tren, botella, silla, mesa de comedor, planta en maceta, sofá, tv/monitor.
Sin embargo, este modelo no está optimizado para ejecutarse en hardware Jetson y funcionará con fps muy bajos. Por lo tanto, elegiremos un modelo que esté optimizado para Jetson Xavier NX con soporte TensorRT.
Paso 4. Haz clic en los tres puntos junto al modelo y haz clic en Delete

Paso 5. Haz clic en Add New Model y haz clic en Go to Model Catalog para ingresar al Catálogo de Modelos de alwaysAI

Paso 6. Escribe ssd_mobilenet_v1_coco_2018_01_28_xavier_nx en el cuadro de búsqueda y haz clic en + Use this Model

Este modelo que ha sido entrenado con el conjunto de datos COCO que puede reconocer 80 clases de objetos como persona, bicicleta, coche, motocicleta, avión, autobús, tren, camión, barco, semáforo, boca de incendios, señal de alto, parquímetro, banco, pájaro, gato, perro, caballo, oveja, vaca, elefante, oso, cebra, jirafa, mochila, paraguas, bolso, corbata, maleta, frisbee, esquís, snowboard, pelota deportiva, cometa, bate de béisbol, guante de béisbol, patineta, tabla de surf, raqueta de tenis, botella, copa de vino, taza, tenedor, cuchillo, cuchara, tazón, plátano, manzana, sándwich, naranja, brócoli, zanahoria, perro caliente, pizza, dona, pastel, silla, sofá, planta en maceta, cama, mesa de comedor, inodoro, tv, laptop, ratón, control remoto, teclado, teléfono celular, microondas, horno, tostadora, fregadero, refrigerador, libro, reloj, florero, tijeras, oso de peluche, secador de pelo, cepillo de dientes
Paso 7. Selecciona el proyecto creado anteriormente (My First Project en este caso) y haz clic en Add To Project

¡Ahora hemos agregado exitosamente el modelo a nuestro proyecto!
Desplegar tu proyecto en el dispositivo Jetson usando la computadora de desarrollo
Ahora desplegaremos el proyecto que creamos antes en el dispositivo Jetson usando la computadora de desarrollo vía SSH
Paso 1. En la máquina de desarrollo, crea una nueva carpeta, abre una interfaz de línea de comandos dentro de la nueva carpeta y escribe lo siguiente
aai app configure
Se te pedirá que ingreses el nombre de usuario y la contraseña de la cuenta de alwaysAI cuando ejecutes el comando anterior por primera vez
Paso 2. Selecciona el proyecto que creaste anteriormente en el panel de alwaysAI

Paso 3. Elige Dispositivo remoto como destino

Paso 4. Presiona Y para crear el archivo de clave privada

Paso 5. Haz clic en Agregar un nuevo dispositivo para añadir tu dispositivo Jetson como dispositivo remoto

Paso 6. Elige modo de dispositivo como Desarrollo

Paso 7. Ingresa un nombre de dispositivo

Paso 8. Ingresa el nombre de usuario del dispositivo Jetson junto con nombre de host/dirección IP como sigue

Aquí el nombre de usuario del dispositivo Jetson es lakshanthad y la dirección IP es 192.168.2.156
Paso 9. Ingresa la contraseña del dispositivo Jetson cuando se te solicite

Paso 10. Cuando pregunte por la ubicación para ejecutar la aplicación, deja la ubicación predeterminada y presiona ENTER. Aquí la ubicación predeterminada está configurada como alwaysai/test. Este es el directorio del proyecto dentro del dispositivo Jetson

Ahora hemos inicializado exitosamente el proyecto en el dispositivo Jetson usando la computadora de desarrollo vía SSH

Antes de proceder a instalar la aplicación en el dispositivo Jetson, necesitamos hacer un pequeño cambio en el código principal para cambiar el nombre del modelo y el tipo de motor de inferencia.
Paso 11. En el directorio que creaste en tu PC para alwaysAI, abre app.py y cambia el nombre del modelo y el tipo de motor de inferencia como sigue
def main():
obj_detect = edgeiq.ObjectDetection("alwaysai/ssd_mobilenet_v1_coco_2018_01_28_xavier_nx")
obj_detect.load(engine=edgeiq.Engine.TENSOR_RT)
Paso 12. Escribe lo siguiente para instalar la aplicación
aai app install
Verás la siguiente salida si se instala exitosamente

Si encuentras errores en este paso, puedes intentar primero volver a desplegar usando el método aai app install --clean
. Verifica dos veces que la versión de jetpack sea la versión solicitada 4.6. Esto se puede verificar escribiendo el comando sudo apt-cache show nvidia-jetpack
. Si el número de versión es correcto, asegúrate de haber completado la instalación del sistema Jetson junto con loscomponentes del SDK de Jetson**. Esto te ayudará a resolver la mayoría de los problemas.
Detección de objetos en transmisión de video en vivo desde cámara
Ahora ejecutaremos la detección de objetos en una transmisión de video en vivo desde una cámara USB conectada al dispositivo Jetson. También puedes usar cámaras MIPI CSI que son compatibles con el dispositivo Jetson que estés usando
Paso 1. Conecta la cámara USB/ cámara MIPI CSI al dispositivo Jetson
Paso 2. Ejecuta lo siguiente
aai app start
Ahora verás la siguiente salida en la línea de comandos

Paso 3. Abre un navegador web y escribe http://localhost:5000 para abrir la transmisión de video
http://localhost:5000

Como puedes ver, las personas están siendo detectadas en tiempo real y el porcentaje de confianza para cada etiqueta se muestra en la interfaz. También el tiempo de inferencia en el Jetson Xavier es de 0.009s que es aproximadamente 111 fps.

Lo anterior es otra demostración usando el mismo modelo.
Detección de objetos en archivo de video precargado
Aquí ejecutaremos la detección de objetos en un archivo de video precargado.
Paso 1. Coloca el archivo de video dentro del directorio del proyecto alwaysAI del dispositivo Jetson. Según nuestro ejemplo, es /home/<username>
/alwaysai/test
Paso 2. En la computadora de desarrollo, abre el archivo app.py dentro de la carpeta test que creamos antes y reemplaza esta sección del código
with edgeiq.WebcamVideoStream(cam=0) as video_stream, \
edgeiq.Streamer() as streamer:
con este
with edgeiq.FileVideoStream(
'file name goes here', play_realtime=True) as video_stream, \
edgeiq.Streamer() as streamer:
Y luego reemplaza file name goes here con el nombre del archivo de video y la extensión del archivo. Asegúrate de que el nombre del archivo esté entre comillas simples.
Paso 3. Instala la aplicación nuevamente
aai app install
Step 4. Finally run the app
aai app start
Aquí verás la misma salida en la línea de comandos que antes, y una vez que abras un navegador web con la misma dirección mencionada anteriormente, verás que se realiza la detección de objetos en el video precargado, dando una salida similar a la anterior.
Filtrar objetos a detectar
También puedes filtrar objetos específicos que quieres que el modelo detecte. Por ejemplo, el conjunto de datos COCO que usamos anteriormente es capaz de detectar 80 tipos de objetos. Sin embargo, podemos filtrar para detectar solo personas.
Simplemente necesitas añadir la línea results.predictions después de results al archivo app.py
while True:
frame = video_stream.read()
results = obj_detect.detect_objects(framconfidence_level=.5)
results.predictions = edgefilter_predictions_by_label(resulpredictions, ['person'])
frame = edgeiq.markup_image(
Aplicaciones de alwaysAI en GitHub
alwaysAI proporciona una amplia gama de aplicaciones listas para usar en el repositorio de GitHub de alwaysAI. Puedes revisar las diferentes aplicaciones aquí.
Detector de Placas de Matrícula
Para fines de demostración, explicaremos cómo desplegar una de estas aplicaciones que es el Detector de Placas de Matrícula en un dispositivo Jetson. Así que puedes repetir los mismos pasos para otras aplicaciones también.
Paso 1. En la computadora de desarrollo, crea una nueva carpeta para nuestro proyecto y entra en ella
Paso 2. Descarga este repositorio como un .zip o clónalo si tienes Git instalado en tu PC
Por defecto, el modelo utilizado para este ejemplo no está optimizado para ejecutarse en Jetson Nano. Por lo tanto, primero cargaremos un modelo optimizado para Jetson nano.
Paso 3. Entra en el repositorio recién descargado/clonado, abre una línea de comandos dentro y ejecuta lo siguiente
aai app models add alwaysai/vehicle_license_mobilenet_ssd_nano
Paso 4. Abre app.py, cambia el nombre del modelo y el motor de inferencia
def main():
obj_detect = edgeiq.ObjectDetection(
"alwaysai/vehicle_license_mobilenet_ssd_nano")
obj_detect.load(engine=edgeiq.Engine.TENSOR_RT)
Paso 5. Ejecuta lo siguiente
aai app configure
Se te pedirá que ingreses el nombre de usuario y la contraseña de la cuenta de alwaysAI cuando ejecutes el comando anterior por primera vez
Paso 6. Selecciona Create new project

Paso 7. Escribe un Project Name
Paso 8. Selecciona inicializar el proyecto As an empty app

Paso 9. Repite los mismos pasos de la sección Deploy your project on the Jetson device using development computer, comenzando desde el Paso 3 hasta el Paso 11
Paso 10. Una vez que la aplicación esté instalada en Jetson, ejecuta el siguiente comando para iniciar la aplicación
aai app start
Ahora verás la siguiente salida en la línea de comandos

Como puedes ver, estamos usando el modelo vehicle_license_mobilenet_ssd y este modelo es capaz de identificar vehículos y placas de matrícula.
Paso 11. Abre un navegador web en tu PC y escribe lo siguiente para abrir la transmisión de video
http://localhost:5000

En esta demostración, la inferencia se está realizando en los 2 videos aquí y como puedes ver, los vehículos y las placas de matrícula en el flujo de video están siendo detectados y el porcentaje de confianza para cada etiqueta se muestra en la interfaz.
Usar inferencia con cámara web
Si quieres realizar la misma inferencia que arriba en un flujo de video en tiempo real desde una cámara web, por favor sigue los pasos a continuación
Paso 1. Navega a la carpeta que creamos antes para nuestro proyecto y abre app.py
Paso 2. Copia y pega el código desde aquí
Paso 3. Instala la aplicación nuevamente
aai app install
Step 4. Finally run the app
aai app start
Aquí verás la misma salida en la línea de comandos que antes, y una vez que abras un navegador web con la misma dirección mencionada anteriormente, verás la detección de objetos siendo realizada en un flujo de video en tiempo real desde la cámara web dando una salida similar a la anterior.
alwaysAI Enterprise Edition
alwaysAI también tiene una edición empresarial con las siguientes características:
- Acceso a Freemium con 1 despliegue de dispositivo de producción por un año
- 20 horas de entrenamiento de modelos en alwaysAI Cloud
- 30 días de acceso al almacenamiento de conjuntos de datos de alwaysAI Cloud
Puedes aprender más sobre alwaysAI Enterprise Edition aquí.
Entrena tu propio modelo y despliégalo
Paso 1. Prepara tu conjunto de datos para el entrenamiento. Asegúrate de que tu conjunto de datos esté en formato PascalVOC y luego organiza todas las imágenes y etiquetas en 2 directorios y comprime el archivo como sigue

Paso 2. Ve al panel de alwaysAI, haz clic en Datasets en el panel de navegación izquierdo y haz clic en Upload a Dataset

Paso 3. Después de que termine la carga del conjunto de datos, haz clic en Train

Paso 4. Aquí puedes cambiar la configuración de entrenamiento según tu preferencia y luego hacer clic en Start training

Verás la siguiente salida después de que termine el entrenamiento

Ahora el modelo entrenado está disponible en tu cuenta. Puedes usar este modelo en tu proyecto de detección de objetos como sigue
Paso 5. Navega a Models > My Models
y haz clic en el modelo que acabamos de entrenar


Paso 6. Como puedes ver, puedes usar el comando de abajo en el directorio raíz de tu aplicación de detección de objetos
aai app models add lakshanthad/roadsign-mobilenet
Paso 7. Después de eso, cambia el nombre del modelo en app.py y ejecuta la aplicación nuevamente
lakshanthad/roadsign-mobilenet
Recursos
- [Página Web] Documentación de AlwaysAI
Soporte Técnico y Discusión de Productos
¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.