CV / YOLO-World

YOLO-World

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

24 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

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer 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. Exécuter le projet (une commande, aperçu double mode)

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

Étape A : télécharger les images

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

Étape B : exécuter en un clic

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

Pour 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

Pour 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.


🔌 Documentation de l’API

1. Configuration des prompts

Endpoint: POST /api/prompts

Paramètres de requête (JSON) :

  • text: De 1 à 80 expressions non vides séparées par |.

Exemples d’utilisation :

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

2. Interface d’inférence du modèle (Predict)

Endpoint: POST /api/models/yolo_world/predict

Paramètres de requête (Multipart/Form-Data) :

Vous pouvez fournir file, video, timestamp, realtime, conf et iou ; les seuils par défaut sont 0.25 et 0.45.

Exemples d’utilisation :

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"

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.

3. Interface de configuration système (Config)

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

4. Arguments de ligne de commande

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.

Interface de flux vidéo en temps réel (Video Feed)

Obtenez le dernier flux MJPEG annoté pour l’aperçu dans le navigateur :

  • Endpoint: GET /api/video_feed
  • Exemple d’utilisation: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Guide du développeur (recommandations de production)

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.