CV / CLIP
CLIP ViT-B/32
reComputer RK3588
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
Armbian 26.8.7 Gnome ou version ultérieure avec OTA overlayroot : Configurez le stockage de Docker avant de lancer des conteneurs pour éviter les erreurs de montage 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
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
Armbian 26.8.7 Gnome ou version ultérieure avec OTA overlayroot : Configurez le stockage de Docker avant de lancer des conteneurs pour éviter les erreurs de montage overlay.
Démarrage rapide
1. Installer Docker
Exécutez les commandes suivantes sur la carte de développement pour installer 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. Exécuter le projet (une commande, aperçu à deux modes)
Ce projet permet la classification d'images zero-shot et la recherche d'images en langage naturel depuis un navigateur web. Les encodeurs d'images et de texte s'exécutent tous deux comme des modèles 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 via : 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 via : http://<Board_IP>:8000
3. Inférence en ligne de commande
Classer une image avec des descriptions candidates :
python inference.py --platform rk3576 --model_dir model \
--file samples/dog_224x224.jpg \
--prompts 'a photo of a dog|a photo of a cat'Classer plusieurs images à l'aide d'une requête en langage naturel :
python inference.py --platform rk3576 --model_dir model \
--files image1.jpg image2.jpg --query 'a red car' --topk 2Utilisez --platform rk3588 lorsque vous exécutez le répertoire source RK3588.
🔌 Documentation de l'API
Le service fournit des interfaces REST distinctes pour la classification zero-shot et la recherche d'images à partir de texte. La documentation OpenAPI interactive est disponible à http://<Board_IP>:8000/docs.
1. Classification d'images zero-shot
Point d'accès : POST /api/models/clip/predict
Paramètres de la requête (Multipart/Form-Data) :
file: Fichier image obligatoire. Les images sont prétraitées en224 x 224.prompts: Étiquettes candidates obligatoires, sous forme de tableau JSON, de texte séparé par des sauts de ligne ou de texte séparé par|. Au maximum 32 étiquettes sont acceptées.topk: Nombre facultatif d'étiquettes renvoyées, de 1 à 32. La valeur par défaut est 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\na 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}
]
}
}2. Recherche d'images en langage naturel
Point d'accès : 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 correspondances renvoyées, 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'L'encodeur de texte converti possède une entrée fixe de 20 tokens ; les descriptions et les requêtes doivent donc rester concises. La similarité est calculée à partir des caractéristiques normalisées d'images et de texte.
3. Interface de configuration du système
Obtenir la configuration actuelle
- Point d'accès :
GET /api/config - Réponse :
{"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 examiner la plateforme active, les fichiers RKNN chargés et les capacités de l'environnement d'exécution.
🛠️ Guide du développeur (recommandations de production)
Description du code
web_service.py:- API web : Fournit l'interface du navigateur, les API de prédiction, de recherche et de configuration, ainsi que l'état de santé.
- Validation des requêtes : Limite les téléversements à 64 MB et la recherche à 32 images.
task_runtime.py:- Traitement des images : Redimensionne l'entrée en
224 x 224et normalise les caractéristiques des images. - Traitement du texte : Tokenise les descriptions avec
clip_vocab.het applique l'entrée fixe de 20 tokens du modèle converti. - Classement : Calcule la similarité cosinus normalisée pour la classification et la recherche.
- Traitement des images : Redimensionne l'entrée en
inference.py: Fournit la classification et la recherche en une exécution en ligne de commande.
Fichiers du modèle
| Composant | Fichier |
|---|---|
| Encodeur d'images | model/clip_images.rknn |
| Encodeur de texte | model/clip_text.rknn |
| Vocabulaire | model/clip_vocab.h |
Modifier les modèles
- Placez des fichiers
.rknncompatibles pour les encodeurs d'images et de texte dans le répertoiremodel/et conservez les noms ci-dessus. - Utilisez les deux encodeurs et le vocabulaire issus du même ensemble de conversion.
- Avant le déploiement, vérifiez que le remplacement conserve l'entrée image
224 x 224et le contrat d'entrée texte fixe de 20 tokens.
Le projet amont fournit actuellement un ensemble de modèles par plateforme. Les deux encodeurs sont des composants du pipeline, pas des tailles de quantification alternatives ; cette version n'a aucun paramètre de variante de modèle.
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.