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.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
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:latestAPI REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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())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 :
# 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 docker2. 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
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:
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:latestAccès: http://<Board_IP>:8000
Pour 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:latestAccès: http://<Board_IP>:8000
3. Inférence en ligne de commande
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 en224 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 :
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) :
{
"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 :
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
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
| Composant | Fichier |
|---|---|
| Image encoder | model/clip_images.rknn |
| Text encoder | model/clip_text.rknn |
| Vocabulary | model/clip_vocab.h |
Modifier les modèles
- Placez les fichiers convertis compatibles dans
model/en conservant les noms du tableau. - Conservez tous les composants du même lot de conversion et respectez les contrats d’entrée, de sortie et de prétraitement.
- 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 :
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_clipEntré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.