CV / YOLO-World

YOLO-World

Change detection categories at runtime with English natural-language prompts without rebuilding the model.

4 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

YOLO-World en reComputer RK3576 y RK3588

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

Ejecutar el servicio

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

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

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.

Argumentos de inicio

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.

API de prompts y predicción

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

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.

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.