CV / YOLO-World

YOLO-World

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

4 téléchargements
Précision
INT8 detector / FP16 text encoder

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
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

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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())

Détails du modèle

YOLO-World sur reComputer RK3576 et RK3588

Ce projet fournit la détection à vocabulaire ouvert de reComputer-RK-CV. Le détecteur INT8 YOLO-World et l’encodeur de texte FP16 CLIP s’exécutent sur le NPU, ce qui permet de changer les catégories sans reconstruire le détecteur.

Le modèle CLIP fourni est principalement entraîné en anglais. Des groupes nominaux anglais courts comme person, red bus et traffic light sont recommandés.

Informations sur le modèle

ComposantFichier
Détecteur/app/model/yolo_world_v2s_i8.rknn
Encodeur de texte/app/model/clip_text_fp16.rknn
Caractéristiques COCO initiales/app/model/coco_text_outp.npy
Vocabulaire BPE/app/model/clip_vocab.txt
Labels par défaut/app/model/detect_classes.txt

Exécuter le service

Utilisez l’image correspondant à la carte et donnez la même valeur à --platform.

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

Ouvrez http://<BOARD_IP>:8000. Utilisez --prompts "person|red bus|bicycle" pour définir les prompts initiaux. De 1 à 80 prompts non vides séparés par des barres verticales sont acceptés, chacun étant tronqué à 20 tokens CLIP.

Arguments de démarrage

ArgumentValeur par défautDescription
--platformObligatoireNPU cible, rk3576 ou rk3588.
--model_pathObligatoireDétecteur YOLO-World quantifié.
--text_modelmodel/clip_text_fp16.rknnEncodeur de texte CLIP pour les prompts dynamiques.
--text_featuresmodel/coco_text_outp.npyCaractéristiques COCO initiales (1,80,512).
--vocab_pathmodel/clip_vocab.txtVocabulaire CLIP BPE hors ligne.
--class_pathLabels COCO intégrésLabels correspondant aux lignes initiales de caractéristiques.
--prompts80 classes COCOPrompts initiaux séparés par des barres verticales.
--video_pathAucunMP4 local en boucle ; remplace la caméra.
--camera_id1Indice de caméra ; -1 active le mode analyse uniquement.
--host / --port0.0.0.0 / 8000Adresse et port du service.

API de prompts et de prédiction

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"

Le champ text modifie les prompts uniquement pour cette prédiction ; /api/prompts modifie ceux du flux actif. Les embeddings sont mis en cache en mémoire. Les embeddings dynamiques remplissent les premières lignes de l’entrée texte fixe de 80 lignes, et les lignes de remplissage sont ignorées au post-traitement.

GET /api/prompts lit les prompts actifs. Des endpoints d’état, de configuration des seuils, MJPEG, de téléversement vidéo, d’analyse asynchrone, d’état, de liste et de téléchargement sont aussi disponibles. Le vocabulaire BPE hors ligne évite tout téléchargement de ressources du tokenizer depuis Hugging Face.

Contraintes de remplacement des modèles

Le détecteur et l’encodeur de texte forment un pipeline apparié. Les remplacements doivent conserver l’entrée texte de 80 lignes, la largeur d’embedding CLIP, une tokenisation compatible et la disposition de sortie attendue par le post-traitement.

Compiler localement

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

Entrées et sorties

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