CV / YOLO-World
YOLO-World
Change detection categories at runtime with English natural-language prompts without rebuilding the model.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
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
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
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())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 busytraffic light.
Información del modelo
| Componente | Archivo |
|---|---|
| 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
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 8000Abra 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
| Argumento | Predeterminado | Descripción |
|---|---|---|
--platform | Obligatorio | NPU de destino, rk3576 o rk3588. |
--model_path | Obligatorio | Detector YOLO-World cuantizado. |
--text_model | model/clip_text_fp16.rknn | Codificador de texto CLIP para prompts dinámicos. |
--text_features | model/coco_text_outp.npy | Características COCO iniciales (1,80,512). |
--vocab_path | model/clip_vocab.txt | Vocabulario BPE CLIP sin conexión. |
--class_path | Etiquetas COCO integradas | Etiquetas que coinciden con las filas iniciales de características. |
--prompts | 80 clases COCO | Frases de prompt iniciales separadas por barras verticales. |
--video_path | Ninguno | MP4 local en bucle; prevalece sobre la cámara. |
--camera_id | 1 | Índice de cámara; -1 habilita el modo de solo análisis. |
--host / --port | 0.0.0.0 / 8000 | Dirección y puerto del servicio. |
API de prompts y predicción
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
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_worldEntradas y salidas
Input: image, video frame, or camera frame plus up to 80 prompts. Output: prompt-matched boxes and confidence scores.