CV / CLIP
CLIP ViT-B/32
reComputer RK3588
Correspondencia imagen-texto con OpenAI CLIP ViT-B/32 acelerada mediante RKNN en reComputer RK3576 y RK3588.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-clip:latestAPI REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "clip-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "clip-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())Detalles del modelo
Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.
Inicio rápido
1. Instalar Docker
Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker2. Ejecutar el proyecto (un comando, vista previa de dos modos)
Este proyecto permite clasificar imágenes sin entrenamiento específico (zero-shot) y recuperar imágenes mediante lenguaje natural desde un navegador web. Tanto el codificador de imágenes como el de texto se ejecutan como modelos RKNN.
Paso A: descargar las imágenes
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-clip:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-clip:latestPaso B: ejecutar con un solo comando
Para RK3588:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 \
-e RKNN_LOG_LEVEL=0 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-clip:latestAcceda mediante: http://<Board_IP>:8000
Para RK3576:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 \
-e RKNN_LOG_LEVEL=0 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-clip:latestAcceda mediante: http://<Board_IP>:8000
3. Inferencia por línea de comandos
Clasificar una imagen con descripciones candidatas:
python inference.py --platform rk3576 --model_dir model \
--file samples/dog_224x224.jpg \
--prompts 'a photo of a dog|a photo of a cat'Ordenar varias imágenes mediante una consulta en lenguaje natural:
python inference.py --platform rk3576 --model_dir model \
--files image1.jpg image2.jpg --query 'a red car' --topk 2Use --platform rk3588 al ejecutar el directorio fuente de RK3588.
🔌 Documentación de la API
El servicio proporciona interfaces REST independientes para clasificación zero-shot y recuperación de imágenes a partir de texto. La documentación interactiva de OpenAPI está disponible en http://<Board_IP>:8000/docs.
1. Clasificación de imágenes zero-shot
Punto de acceso: POST /api/models/clip/predict
Parámetros de la solicitud (Multipart/Form-Data):
file: Archivo de imagen obligatorio. Las imágenes se preprocesan a224 x 224.prompts: Etiquetas candidatas obligatorias, como matriz JSON, texto separado por saltos de línea o texto separado por|. Se aceptan como máximo 32 etiquetas.topk: Número opcional de etiquetas devueltas, de 1 a 32. El valor predeterminado es 5.
Ejemplo de uso:
curl -X POST "http://127.0.0.1:8000/api/models/clip/predict" \
-F 'file=@samples/dog_224x224.jpg' \
-F $'prompts=a photo of a dog\na photo of a cat' \
-F 'topk=2'Formato de respuesta (JSON):
{
"success": true,
"model": "clip",
"platform": "rk3576",
"inference_time_ms": 58.2,
"result": {
"mode": "classification",
"image": {"width": 224, "height": 224},
"candidate_count": 2,
"predictions": [
{"text": "a photo of a dog", "score": 0.97}
]
}
}2. Recuperación de imágenes mediante lenguaje natural
Punto de acceso: POST /api/models/clip/retrieve
Parámetros de la solicitud (Multipart/Form-Data):
files: Campo repetido obligatorio que contiene entre 1 y 32 imágenes.text: Consulta obligatoria en lenguaje natural.topk: Número opcional de coincidencias devueltas, de 1 a 32.
Ejemplo de uso:
curl -X POST "http://127.0.0.1:8000/api/models/clip/retrieve" \
-F 'files=@image1.jpg' \
-F 'files=@image2.jpg' \
-F 'text=a red car' \
-F 'topk=2'El codificador de texto convertido tiene una entrada fija de 20 tokens, por lo que las descripciones y consultas deben ser concisas. La similitud se calcula con características de imagen y texto normalizadas.
3. Interfaz de configuración del sistema
Obtener la configuración actual
- Punto de acceso:
GET /api/config - Respuesta:
{"topk": 5}
Actualizar la configuración
curl -X POST "http://127.0.0.1:8000/api/config" \
-H 'Content-Type: application/json' \
-d '{"topk": 3}'Use GET /api/health para consultar la plataforma activa, los archivos RKNN cargados y las capacidades del entorno de ejecución.
🛠️ Guía para desarrolladores (recomendaciones de producción)
Descripción del código
web_service.py:- API web: Proporciona la interfaz del navegador, la API de predicción, la API de recuperación, la API de configuración y el estado de salud.
- Validación de solicitudes: Limita las cargas a 64 MB y la recuperación a 32 imágenes.
task_runtime.py:- Procesamiento de imágenes: Redimensiona la entrada a
224 x 224y normaliza las características de imagen. - Procesamiento de texto: Tokeniza las descripciones con
clip_vocab.hy aplica la entrada fija de 20 tokens del modelo convertido. - Ordenación: Calcula la similitud coseno normalizada para clasificación y recuperación.
- Procesamiento de imágenes: Redimensiona la entrada a
inference.py: Proporciona clasificación y recuperación de una sola ejecución por línea de comandos.
Archivos del modelo
| Componente | Archivo |
|---|---|
| Codificador de imágenes | model/clip_images.rknn |
| Codificador de texto | model/clip_text.rknn |
| Vocabulario | model/clip_vocab.h |
Modificar los modelos
- Coloque archivos
.rknncompatibles de los codificadores de imagen y texto en el directoriomodel/y conserve los nombres indicados arriba. - Mantenga los dos codificadores y el vocabulario del mismo paquete de conversión.
- Antes del despliegue, confirme que el reemplazo conserva la entrada de imagen
224 x 224y el contrato de entrada de texto fija de 20 tokens.
Actualmente, el proyecto original proporciona un paquete de modelos por plataforma. Los dos codificadores son componentes de una canalización, no tamaños de cuantización alternativos; esta versión no tiene un parámetro de variante de modelo.
Crear imágenes locales
Ejecute desde la raíz de reComputer-RK-CV:
docker build -f docker/rk3576/clip.dockerfile \
-t rk3576-clip:local src/rk3576_clip
docker build -f docker/rk3588/clip.dockerfile \
-t rk3588-clip:local src/rk3588_clipEntradas y salidas
Entrada: una imagen y textos candidatos, o hasta 32 imágenes y una consulta de texto. Salida: puntuaciones de similitud normalizadas y resultados ordenados.