CV / YOLO-World
YOLO-World
Change detection categories at runtime with English natural-language prompts without rebuilding the model.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
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 8000API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "yolo-world-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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 busettraffic lightsont recommandés.
Informations sur le modèle
| Composant | Fichier |
|---|---|
| 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
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 8000RK3588
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 8000Ouvrez 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
| Argument | Valeur par défaut | Description |
|---|---|---|
--platform | Obligatoire | NPU cible, rk3576 ou rk3588. |
--model_path | Obligatoire | Détecteur YOLO-World quantifié. |
--text_model | model/clip_text_fp16.rknn | Encodeur de texte CLIP pour les prompts dynamiques. |
--text_features | model/coco_text_outp.npy | Caractéristiques COCO initiales (1,80,512). |
--vocab_path | model/clip_vocab.txt | Vocabulaire CLIP BPE hors ligne. |
--class_path | Labels COCO intégrés | Labels correspondant aux lignes initiales de caractéristiques. |
--prompts | 80 classes COCO | Prompts initiaux séparés par des barres verticales. |
--video_path | Aucun | MP4 local en boucle ; remplace la caméra. |
--camera_id | 1 | Indice de caméra ; -1 active le mode analyse uniquement. |
--host / --port | 0.0.0.0 / 8000 | Adresse et port du service. |
API de prompts et de prédiction
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
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_worldEntrées et sorties
Input: image, video frame, or camera frame plus up to 80 prompts. Output: prompt-matched boxes and confidence scores.