CV / ViTPose

ViTPose-Small-BN

reComputer R Series (CM5 + Hailo-10H)

Estimación de pose 2D de una persona con ViTPose-Small-BN en reComputer R Series con Hailo-8.

100 descargas
Tamaño
31 MB
Memoria
4GB+
Precisión
Hailo HEF / HailoRT 4.23.x (Hailo-8) / 5.1.1 (Hailo-10H)

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Desplegar
sudo docker run --rm \
  --name cm5-hailo10h-vit-pose-bn \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  -v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest \
  python web_detection.py --model_path model/vit_pose_small_bn.hef --video_path video/test.mp4

API REST

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

Curl
curl -X POST "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict" \
  -F "file=@test.jpg"
Python
import requests
response = requests.post(
    "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict",
    files={"file": open("test.jpg", "rb")},
    timeout=30,
)
print(response.json())

Detalles del modelo

reComputer R Series (CM5 + Hailo-10H)

ViTPose-Small-BN en reComputer R Series (CM5 + Hailo-10H)

ViTPose-Small-BN estima la pose 2D de una sola persona: el HEF devuelve un mapa de calor de 64x48x17, la aplicación toma el argmax por canal, escala las coordenadas a la entrada de 256x192 y las restaura al fotograma antes de dibujar los 17 keypoints COCO.

Esta página está dirigida a reComputer R Series (CM5 + Hailo-10H) con un acelerador PCIe Hailo-10H.

Información del modelo

PropiedadValor
ArquitecturaViTPose-Small-BN (backbone Vision Transformer)
TareaEstimación de pose de una persona (17 keypoints COCO)
Entrada256x192x3 RGB (letterbox, normalización compilada en el HEF)
SalidaMapa de calor 64x48x17 (decodificación argmax, sin NMS en chip)
Parámetros24.32M
Operaciones17.17G
HEFHailo Model Zoo v5.4.0, Hailo-10H (23,314,432 bytes)

Hardware y configuración del host

ElementoValor
PlacareComputer R Series con Raspberry Pi CM5
AceleradorHailo-10H por PCIe, expuesto como /dev/hailo0
RuntimeHailoRT 5.1.1
Python en el contenedor3.13, aarch64

Instala los paquetes de Hailo-10H en el host y confirma que el driver y el dispositivo están listos antes de iniciar el contenedor:

bash
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot

# Después de reiniciar
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0

Ejecución con el vídeo de demostración

bash
sudo docker run --rm \
  --name cm5-hailo10h-vit-pose-small-bn \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  -v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest \
  python web_detection.py --model_path model/vit_pose_small_bn.hef --video_path video/test.mp4

Abre http://<Board_IP>:8000 para ver la vista previa: el esqueleto COCO se dibuja sobre la persona.

Modo cámara USB

bash
sudo docker run --rm \
  --name cm5-hailo10h-vit-pose-small-bn \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  --device /dev/video0:/dev/video0 \
  -v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest \
  python web_detection.py --model_path model/vit_pose_small_bn.hef --camera_id 0

REST API

text
POST http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict" \
  -F "file=@test.jpg"
EndpointMétodoPropósito
/GETInterfaz de vista previa web
/api/models/vit_pose_small_bn/predictPOST17 keypoints COCO (JSON)
/api/video_feedGETStream de vista previa MJPEG
/api/configGET / POSTLeer o cambiar umbrales de ejecución
/api/video/uploadPOSTSubir un vídeo de origen
/api/video/analyzePOSTIniciar el análisis de vídeo offline
/api/video/statusGETLeer el progreso del análisis
/api/video/download/{filename}GETDescargar el resultado anotado

Los keypoints por debajo del umbral (0.30) se omiten del esqueleto.

Notas de implementación

  • Modelo de una sola persona: la red espera a la persona centrada en el recorte, así que las escenas con varias personas necesitan un detector que recorte a cada una.
  • El preprocesado aplica letterbox a 256x192 con relleno negro, convierte BGR a RGB y envía uint8 sin normalizar; la normalización ImageNet (media [123.675, 116.28, 103.53], desviación [58.395, 57.12, 57.375] en RGB) está compilada en el HEF.
  • El postprocesado toma el argmax por canal del mapa de calor para obtener (x, y) en 64x48, lo escala a la entrada de 256x192 y lo restaura al fotograma con la información del letterbox. No hay NMS en chip ni refinamiento subpíxel DARK.
  • La primera inferencia registra una vez la forma de salida ([ViTPose] raw output shape=...) para confirmar el formato en el hardware.

Notas de desarrollo

  • Módulo fuente: src/hailo10h_vit_pose_small_bn/
  • Dockerfile: docker/hailo10h/vit_pose_small_bn.dockerfile
  • Contenedor: ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest
  • El módulo usa la API InferModel de HailoRT 5.1.1 y un HEF específico para Hailo-10H.
  • Las pruebas unitarias se ejecutan sin dispositivo: python -m unittest discover -s tests -v.

Entradas y salidas

Entrada: imagen, vídeo o fotograma de cámara USB. Salida: 17 puntos COCO (x, y, puntuación) con superposición del esqueleto.