CV / CLIP
CLIP ViT-B/32
reComputer RK3588
Mit RKNN beschleunigter OpenAI-CLIP-ViT-B/32-Abgleich von Bild und Text auf reComputer RK3576 und RK3588.
Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.
Erste Schritte
Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.
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:latestREST API
Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.
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())Modelldetails
Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.
Schnellstart
1. Docker installieren
Führen Sie zur Installation von Docker folgende Befehle auf dem Entwicklungsboard aus:
# 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. Projekt ausführen (ein Befehl, Dual-Modus-Vorschau)
Dieses Projekt unterstützt Zero-Shot-Bildklassifizierung und natürlichsprachliche Bildsuche über einen Webbrowser. Sowohl der Bild- als auch der Text-Encoder laufen als RKNN-Modelle.
Schritt A: Images abrufen
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:latestSchritt B: mit einem Befehl starten
Für 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:latestAufruf: http://<Board_IP>:8000
Für 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:latestAufruf: http://<Board_IP>:8000
3. Inferenz über die Befehlszeile
Klassifizieren Sie ein Bild mit Kandidaten-Prompts:
python inference.py --platform rk3576 --model_dir model \
--file samples/dog_224x224.jpg \
--prompts 'a photo of a dog|a photo of a cat'Sortieren Sie mehrere Bilder anhand einer natürlichsprachlichen Abfrage:
python inference.py --platform rk3576 --model_dir model \
--files image1.jpg image2.jpg --query 'a red car' --topk 2Verwenden Sie --platform rk3588, wenn Sie im RK3588-Quellverzeichnis arbeiten.
🔌 API-Dokumentation
Der Dienst bietet getrennte REST-Schnittstellen für Zero-Shot-Klassifikation und Text-zu-Bild-Suche. Die interaktive OpenAPI-Dokumentation ist unter http://<Board_IP>:8000/docs verfügbar.
1. Zero-Shot-Bildklassifikation
Endpunkt: POST /api/models/clip/predict
Anfrageparameter (Multipart/Form-Data):
file: Erforderliche Bilddatei. Bilder werden auf224 x 224vorverarbeitet.prompts: Erforderliche Kandidatenlabels als JSON-Array, durch Zeilenumbrüche oder|getrennter Text. Höchstens 32 Labels werden akzeptiert.topk: Optionale Anzahl zurückgegebener Labels von 1 bis 32. Der Standardwert ist 5.
Anwendungsbeispiel:
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'Antwortformat (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. Natürlichsprachliche Bildsuche
Endpunkt: POST /api/models/clip/retrieve
Anfrageparameter (Multipart/Form-Data):
files: Erforderliches wiederholtes Feld mit 1–32 Bildern.text: Erforderliche natürlichsprachliche Abfrage.topk: Optionale Anzahl zurückgegebener Treffer von 1 bis 32.
Anwendungsbeispiel:
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'Der konvertierte Text-Encoder hat eine feste Eingabe von 20 Tokens; Prompts und Abfragen sollten deshalb kurz bleiben. Die Ähnlichkeit wird aus normalisierten Bild- und Textmerkmalen berechnet.
3. Schnittstelle zur Systemkonfiguration
Aktuelle Konfiguration abrufen
- Endpunkt:
GET /api/config - Antwort:
{"topk": 5}
Konfiguration aktualisieren
curl -X POST "http://127.0.0.1:8000/api/config" \
-H 'Content-Type: application/json' \
-d '{"topk": 3}'Prüfen Sie mit GET /api/health die aktive Plattform, die geladenen RKNN-Dateien und die Laufzeitfunktionen.
🛠️ Entwicklerhandbuch (Empfehlungen für den Produktionseinsatz)
Codebeschreibung
web_service.py:- Web-API: Stellt die Browseroberfläche, die Vorhersage-API, die Such-API, die Konfigurations-API und den Systemstatus bereit.
- Anfragevalidierung: Begrenzt Uploads auf 64 MB und die Suche auf 32 Bilder.
task_runtime.py:- Bildverarbeitung: Skaliert die Eingabe auf
224 x 224und normalisiert die Bildmerkmale. - Textverarbeitung: Tokenisiert Prompts mit
clip_vocab.hund wendet die feste 20-Token-Eingabe des konvertierten Modells an. - Ranking: Berechnet die normalisierte Kosinus-Ähnlichkeit für Klassifikation und Suche.
- Bildverarbeitung: Skaliert die Eingabe auf
inference.py: Bietet einmalige Klassifikation und Suche über die Befehlszeile.
Modelldateien
| Komponente | Datei |
|---|---|
| Bild-Encoder | model/clip_images.rknn |
| Text-Encoder | model/clip_text.rknn |
| Vokabular | model/clip_vocab.h |
Modelle ändern
- Legen Sie kompatible
.rknn-Dateien für Bild- und Text-Encoder im Verzeichnismodel/ab und behalten Sie die obigen Dateinamen bei. - Verwenden Sie die beiden Encoder und das Vokabular aus demselben Konvertierungspaket.
- Stellen Sie vor der Bereitstellung sicher, dass der Ersatz die Bildeingabe von
224 x 224und den festen 20-Token-Textvertrag einhält.
Das Upstream-Projekt liefert derzeit ein Modellpaket pro Plattform. Die beiden Encoder sind Pipeline-Komponenten und keine alternativen Quantisierungsgrößen; diese Version hat keinen Modellvarianten-Parameter.
Lokale Images erstellen
Im Stammverzeichnis von reComputer-RK-CV ausführen:
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_clipEingaben und Ausgaben
Eingabe: Bild und Kandidaten-Prompts oder bis zu 32 Bilder und eine Textabfrage. Ausgabe: normalisierte Ähnlichkeitswerte und sortierte Treffer.