CV / YOLO-World
YOLO-World
Open-vocabulary YOLO-World detection with RKNN detector and CLIP 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
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
Inicio rápido
1. Instalar Docker
Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:
# 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 docker2. Ejecutar el proyecto (un comando y vista previa de doble modo)
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 |
Paso A: Descargar las imágenes
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:latestPaso B: Ejecutar con un clic
Use la imagen correspondiente a la placa y establezca --platform con el mismo valor.
Para 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 8000Para RK3588:
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.
🔌 Documentación de la API
1. Configuración de prompts
Endpoint: POST /api/prompts
Parámetros de solicitud (JSON):
text: Entre 1 y 80 frases de prompt no vacías separadas por|.
Ejemplos de uso:
curl -X POST "http://<BOARD_IP>:8000/api/prompts" \
-H "Content-Type: application/json" \
-d '{"text":"person|red bus|traffic light"}'
2. Interfaz de inferencia del modelo (Predict)
Endpoint: POST /api/models/yolo_world/predict
Parámetros de solicitud (Multipart/Form-Data):
Puede usar file, video, timestamp, realtime, conf e iou; los umbrales predeterminados son 0.25 y 0.45.
Ejemplos de uso:
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.
3. Interfaz de configuración del sistema (Config)
GET /api/config / POST /api/config.
4. Argumentos de línea de comandos
| 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. |
Interfaz de vídeo en tiempo real (Video Feed)
Obtenga el último flujo MJPEG anotado para la vista previa en el navegador:
- Endpoint:
GET /api/video_feed - Ejemplo de uso:
<img src="http://<BOARD_IP>:8000/api/video_feed">
🛠️ Guía para desarrolladores (recomendaciones de producción)
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.