CV / YOLO-World

YOLO-World

Open-vocabulary YOLO-World detection with RKNN detector and CLIP text encoder.

24 descargas
Precisión
INT8 detector / FP16 text encoder

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 --privileged -p 8000:8000 \
  -v /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yolo_world:latest \
  python3 web_detection.py --platform rk3576 \
  --model_path /app/model/yolo_world_v2s_i8.rknn \
  --text_model /app/model/clip_text_fp16.rknn \
  --text_features /app/model/coco_text_outp.npy \
  --vocab_path /app/model/clip_vocab.txt --class_path /app/model/detect_classes.txt \
  --camera_id -1 --host 0.0.0.0 --port 8000

API REST

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

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "yolo-world-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "yolo-world-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Detalles del modelo

Inicio rápido

1. Instalar Docker

Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:

bash
# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
# Aliyun
sudo sh get-docker.sh --mirror Aliyun
# systemd
sudo systemctl enable docker
sudo systemctl start docker

2. Ejecutar el proyecto (un comando y vista previa de doble modo)

Este proyecto proporciona detección de vocabulario abierto desde reComputer-RK-CV. Tanto el detector INT8 YOLO-World como el codificador de texto FP16 CLIP se ejecutan en la NPU, lo que permite cambiar categorías sin reconstruir el detector.

El modelo CLIP incluido se entrenó principalmente para inglés. Se recomiendan frases nominales breves en inglés como person, red bus y traffic light.

Información del modelo

ComponenteArchivo
Detector/app/model/yolo_world_v2s_i8.rknn
Codificador de texto/app/model/clip_text_fp16.rknn
Características COCO iniciales/app/model/coco_text_outp.npy
Vocabulario BPE/app/model/clip_vocab.txt
Etiquetas predeterminadas/app/model/detect_classes.txt

Paso A: Descargar las imágenes

bash
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolo_world:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yolo_world:latest

Paso B: Ejecutar con un clic

Use la imagen correspondiente a la placa y establezca --platform con el mismo valor.

Para RK3576:

bash
sudo docker run --rm --privileged -p 8000:8000 \
  -v /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yolo_world:latest \
  python3 web_detection.py --platform rk3576 \
  --model_path /app/model/yolo_world_v2s_i8.rknn \
  --text_model /app/model/clip_text_fp16.rknn \
  --text_features /app/model/coco_text_outp.npy \
  --vocab_path /app/model/clip_vocab.txt \
  --class_path /app/model/detect_classes.txt \
  --video_path /app/video/test.mp4 --host 0.0.0.0 --port 8000

Para RK3588:

bash
sudo docker run --rm --privileged -p 8000:8000 \
  -v /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolo_world:latest \
  python3 web_detection.py --platform rk3588 \
  --model_path /app/model/yolo_world_v2s_i8.rknn \
  --text_model /app/model/clip_text_fp16.rknn \
  --text_features /app/model/coco_text_outp.npy \
  --vocab_path /app/model/clip_vocab.txt \
  --class_path /app/model/detect_classes.txt \
  --video_path /app/video/test.mp4 --host 0.0.0.0 --port 8000

Abra http://<BOARD_IP>:8000. Use --prompts "person|red bus|bicycle" para definir los prompts iniciales. Se admiten entre 1 y 80 prompts no vacíos separados por barras verticales, y cada uno se trunca a 20 tokens CLIP.


🔌 Documentación de la API

1. Configuración de prompts

Endpoint: POST /api/prompts

Parámetros de solicitud (JSON):

  • text: Entre 1 y 80 frases de prompt no vacías separadas por |.

Ejemplos de uso:

bash
curl -X POST "http://<BOARD_IP>:8000/api/prompts" \
  -H "Content-Type: application/json" \
  -d '{"text":"person|red bus|traffic light"}'

2. Interfaz de inferencia del modelo (Predict)

Endpoint: POST /api/models/yolo_world/predict

Parámetros de solicitud (Multipart/Form-Data):

Puede usar file, video, timestamp, realtime, conf e iou; los umbrales predeterminados son 0.25 y 0.45.

Ejemplos de uso:

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/yolo_world/predict" \
  -F "file=@bus.jpg" -F "text=person|bus|red vehicle" \
  -F "conf=0.25" -F "iou=0.45"

El campo text cambia los prompts solo para esa predicción; /api/prompts cambia los prompts del flujo activo. Los embeddings se almacenan en memoria. Los embeddings dinámicos ocupan las primeras filas de la entrada de texto fija de 80 filas del detector, y las filas de relleno se ignoran durante el posprocesamiento.

GET /api/prompts lee los prompts activos. También hay endpoints de estado, configuración de umbrales, MJPEG, carga de vídeo, análisis asíncrono, estado, lista y descarga. El vocabulario BPE sin conexión evita que el runtime descargue recursos del tokenizador desde Hugging Face.

3. Interfaz de configuración del sistema (Config)

GET /api/config / POST /api/config.

4. Argumentos de línea de comandos

ArgumentoPredeterminadoDescripción
--platformObligatorioNPU de destino, rk3576 o rk3588.
--model_pathObligatorioDetector YOLO-World cuantizado.
--text_modelmodel/clip_text_fp16.rknnCodificador de texto CLIP para prompts dinámicos.
--text_featuresmodel/coco_text_outp.npyCaracterísticas COCO iniciales (1,80,512).
--vocab_pathmodel/clip_vocab.txtVocabulario BPE CLIP sin conexión.
--class_pathEtiquetas COCO integradasEtiquetas que coinciden con las filas iniciales de características.
--prompts80 clases COCOFrases de prompt iniciales separadas por barras verticales.
--video_pathNingunoMP4 local en bucle; prevalece sobre la cámara.
--camera_id1Índice de cámara; -1 habilita el modo de solo análisis.
--host / --port0.0.0.0 / 8000Dirección y puerto del servicio.

Interfaz de vídeo en tiempo real (Video Feed)

Obtenga el último flujo MJPEG anotado para la vista previa en el navegador:

  • Endpoint: GET /api/video_feed
  • Ejemplo de uso: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Guía para desarrolladores (recomendaciones de producción)

Restricciones para sustituir modelos

El detector y el codificador de texto forman un pipeline emparejado. Las sustituciones deben conservar la entrada de características de texto de 80 filas, el ancho del embedding CLIP, una tokenización compatible y la disposición de salida esperada por el posprocesamiento.

Compilar localmente

bash
docker build -f docker/rk3576/yolo_world.dockerfile \
  -t rk3576-yolo-world:local src/rk3576_yolo_world

docker build -f docker/rk3588/yolo_world.dockerfile \
  -t rk3588-yolo-world:local src/rk3588_yolo_world

Entradas y salidas

Input: image, video frame, or camera frame plus up to 80 prompts. Output: prompt-matched boxes and confidence scores.