CV / CLIP

CLIP ViT-B/32

Mise en correspondance image-texte OpenAI CLIP ViT-B/32 accélérée par RKNN sur reComputer RK3576 et RK3588.

6 téléchargements
Précision
RKNN

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 --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:latest

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": "clip-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "clip-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
# Télécharger le script d’installation
curl -fsSL https://get.docker.com -o get-docker.sh
# Installer avec le miroir Aliyun
sudo sh get-docker.sh --mirror Aliyun
# Démarrer Docker et activer le lancement automatique
sudo systemctl enable docker
sudo systemctl start docker

2. Exécuter le projet (une commande et aperçu Web)

Ce projet fournit la classification d’images sans apprentissage et la recherche en langage naturel ; les deux encodeurs s’exécutent avec RKNN.

Étape A : récupérer les images

bash
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:latest

Étape B : exécuter en une commande

Pour RK3588:

bash
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:latest

Accès: http://<Board_IP>:8000


Pour RK3576:

bash
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:latest

Accès: http://<Board_IP>:8000

3. Inférence en ligne de commande

bash
python inference.py --platform rk3576 --model_dir model \
+    --file samples/dog_224x224.jpg \
+    --prompts 'a photo of a dog|a photo of a cat'

Utilisez --platform rk3588 depuis le répertoire source RK3588.


🔌 Documentation de l’API

Endpoint: POST /api/models/clip/predict

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

  • file : image obligatoire, prétraitée en 224 x 224.
  • prompts : libellés obligatoires sous forme de tableau JSON, de lignes ou de valeurs séparées par |, au maximum 32.
  • topk : nombre facultatif de résultats, de 1 à 32 ; valeur par défaut 5.

Exemple d’utilisation :

bash
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|a photo of a cat' -F 'topk=2'

Format de réponse (JSON) :

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
      }
    ]
  }
}

L’entrée texte est fixée à 20 jetons. POST /api/models/clip/retrieve accepte de 1 à 32 champs files, un champ text obligatoire et topk facultatif. Un seul lot est fourni par plateforme, sans choix de quantification.

2. Interface de recherche d’images en langage naturel

Endpoint : POST /api/models/clip/retrieve

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

  • files : champ répété obligatoire contenant de 1 à 32 images.
  • text : requête obligatoire en langage naturel.
  • topk : nombre facultatif de résultats, de 1 à 32.

Exemple d’utilisation :

bash
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'

3. Interface de configuration du système

Obtenir la configuration actuelle

  • Endpoint: GET /api/config
  • Response: {"topk": 5}

Mettre à jour la configuration

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
+    -H 'Content-Type: application/json' -d '{"topk": 3}'

Utilisez GET /api/health pour consulter la plateforme active, l’état du modèle, les fichiers RKNN chargés et les capacités. La documentation OpenAPI se trouve sous /docs.


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

Description du code

  • web_service.py:
    • API Web : fournit l’interface du navigateur, l’inférence, la configuration, l’état de santé et la validation des requêtes.
  • task_runtime.py:
    • Traite les images et les invites, normalise les caractéristiques et calcule les similarités.
  • inference.py: Fournit une inférence ponctuelle en ligne de commande.

Fichiers du modèle

ComposantFichier
Image encodermodel/clip_images.rknn
Text encodermodel/clip_text.rknn
Vocabularymodel/clip_vocab.h

Modifier les modèles

  1. Placez les fichiers convertis compatibles dans model/ en conservant les noms du tableau.
  2. Conservez tous les composants du même lot de conversion et respectez les contrats d’entrée, de sortie et de prétraitement.
  3. Avant publication, testez les parcours Web, REST et ligne de commande sur RK3576 et RK3588.

Construire les images locales

Exécutez depuis la racine de reComputer-RK-CV :

bash
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_clip

Entrées et sorties

Entrée : une image et des invites candidates, ou jusqu’à 32 images et une requête textuelle. Sortie : scores de similarité normalisés et résultats classés.