CV / CLIP
CLIP ViT-B/32
reComputer RK3588
OpenAI CLIP ViT-B/32 voor beeld-tekstvergelijking, versneld met RKNN op reComputer RK3576 en RK3588.
Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.
Aan de slag
Armbian 26.8.7 Gnome of nieuwer met OTA overlayroot: Configureer de Docker-opslag voordat je containers start om overlay-mountfouten te voorkomen.
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
Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.
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())Modeldetails
Armbian 26.8.7 Gnome of nieuwer met OTA overlayroot: Configureer de Docker-opslag voordat je containers start om overlay-mountfouten te voorkomen.
Snel aan de slag
1. Docker installeren
Voer de volgende opdrachten uit op het ontwikkelbord om Docker te installeren:
# 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. Het project uitvoeren (één opdracht, voorbeeld van beide modi)
Dit project biedt zero-shot-afbeeldingsclassificatie en het zoeken van afbeeldingen op natuurlijke taal via een webbrowser. Zowel de afbeeldingsencoder als de tekstencoder draait als RKNN-model.
Stap A: images ophalen
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:latestStap B: met één opdracht starten
Voor 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:latestOpenen via: http://<Board_IP>:8000
Voor 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:latestOpenen via: http://<Board_IP>:8000
3. Inferentie via de opdrachtregel
Classificeer een afbeelding met kandidaatprompts:
python inference.py --platform rk3576 --model_dir model \
--file samples/dog_224x224.jpg \
--prompts 'a photo of a dog|a photo of a cat'Rangschik meerdere afbeeldingen met een zoekopdracht in natuurlijke taal:
python inference.py --platform rk3576 --model_dir model \
--files image1.jpg image2.jpg --query 'a red car' --topk 2Gebruik --platform rk3588 wanneer u vanuit de RK3588-bronmap werkt.
🔌 API-documentatie
De service biedt afzonderlijke REST-interfaces voor zero-shot classificatie en het zoeken van afbeeldingen op tekst. Interactieve OpenAPI-documentatie is beschikbaar op http://<Board_IP>:8000/docs.
1. Zero-shot afbeeldingsclassificatie
Endpoint: POST /api/models/clip/predict
Aanvraagparameters (Multipart/Form-Data):
file: Verplicht afbeeldingsbestand. Afbeeldingen worden voorbewerkt naar224 x 224.prompts: Verplichte kandidaatlabels als JSON-array, tekst gescheiden door regeleinden of door|. Er worden maximaal 32 labels geaccepteerd.topk: Optioneel aantal teruggegeven labels, van 1 tot 32. De standaardwaarde is 5.
Gebruiksvoorbeeld:
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'Antwoordformaat (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. Afbeeldingen zoeken met natuurlijke taal
Endpoint: POST /api/models/clip/retrieve
Aanvraagparameters (Multipart/Form-Data):
files: Verplicht herhaald veld met 1–32 afbeeldingen.text: Verplichte zoekopdracht in natuurlijke taal.topk: Optioneel aantal teruggegeven resultaten, van 1 tot 32.
Gebruiksvoorbeeld:
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'De geconverteerde tekstencoder heeft een vaste invoer van 20 tokens; houd prompts en zoekopdrachten daarom kort. De overeenkomst wordt berekend met genormaliseerde afbeeldings- en tekstkenmerken.
3. Interface voor systeemconfiguratie
Huidige configuratie ophalen
- Endpoint:
GET /api/config - Antwoord:
{"topk": 5}
Configuratie bijwerken
curl -X POST "http://127.0.0.1:8000/api/config" \
-H 'Content-Type: application/json' \
-d '{"topk": 3}'Controleer met GET /api/health het actieve platform, de geladen RKNN-bestanden en de runtimefuncties.
🛠️ Handleiding voor ontwikkelaars (productieadvies)
Beschrijving van de code
web_service.py:- Web-API: biedt de browserinterface, voorspellings-API, zoek-API, configuratie-API en gezondheidsstatus.
- Aanvraagvalidatie: beperkt uploads tot 64 MB en het zoeken tot 32 afbeeldingen.
task_runtime.py:- Afbeeldingsverwerking: schaalt de invoer naar
224 x 224en normaliseert de afbeeldingskenmerken. - Tekstverwerking: tokeniseert prompts met
clip_vocab.hen past de vaste invoer van 20 tokens van het geconverteerde model toe. - Rangschikking: berekent genormaliseerde cosinusovereenkomst voor classificatie en zoeken.
- Afbeeldingsverwerking: schaalt de invoer naar
inference.py: biedt eenmalige classificatie en het zoeken via de opdrachtregel.
Modelbestanden
| Onderdeel | Bestand |
|---|---|
| Afbeeldingsencoder | model/clip_images.rknn |
| Tekstencoder | model/clip_text.rknn |
| Woordenschat | model/clip_vocab.h |
Modellen wijzigen
- Plaats compatibele
.rknn-bestanden van de afbeeldings- en tekstencoder in de mapmodel/en behoud de bovenstaande bestandsnamen. - Houd de twee encoders en de woordenschat uit dezelfde conversiebundel.
- Controleer dat de vervanging de afbeeldingsinvoer van
224 x 224en het vaste tekstcontract van 20 tokens handhaaft voordat u uitrolt.
Het upstream-project levert momenteel één modelbundel per platform. De twee encoders zijn onderdeel van de pipeline en geen alternatieve kwantiseringsgroottes; deze uitgave heeft geen parameter voor modelvarianten.
Lokale images bouwen
Voer dit uit vanuit de hoofdmap van 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_clipInvoer en uitvoer
Invoer: afbeelding en kandidaatprompts, of maximaal 32 afbeeldingen en een tekstvraag. Uitvoer: genormaliseerde gelijkenisscores en gerangschikte resultaten.