CV / CLIP

CLIP ViT-B/32

reComputer RK3588

OpenAI CLIP ViT-B/32 voor beeld-tekstvergelijking, versneld met RKNN op reComputer RK3576 en RK3588.

36 downloads
Precisie
RKNN

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.

Implementeren
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

REST API

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

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())

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:

bash
# 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 docker

2. 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

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

Stap B: met één opdracht starten

Voor 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

Openen via: http://<Board_IP>:8000


Voor 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

Openen via: http://<Board_IP>:8000

3. Inferentie via de opdrachtregel

Classificeer een afbeelding met kandidaatprompts:

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'

Rangschik meerdere afbeeldingen met een zoekopdracht in natuurlijke taal:

bash
python inference.py --platform rk3576 --model_dir model \
    --files image1.jpg image2.jpg --query 'a red car' --topk 2

Gebruik --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 naar 224 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:

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

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

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:

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'

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

bash
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 224 en normaliseert de afbeeldingskenmerken.
    • Tekstverwerking: tokeniseert prompts met clip_vocab.h en past de vaste invoer van 20 tokens van het geconverteerde model toe.
    • Rangschikking: berekent genormaliseerde cosinusovereenkomst voor classificatie en zoeken.
  • inference.py: biedt eenmalige classificatie en het zoeken via de opdrachtregel.

Modelbestanden

OnderdeelBestand
Afbeeldingsencodermodel/clip_images.rknn
Tekstencodermodel/clip_text.rknn
Woordenschatmodel/clip_vocab.h

Modellen wijzigen

  1. Plaats compatibele .rknn-bestanden van de afbeeldings- en tekstencoder in de map model/ en behoud de bovenstaande bestandsnamen.
  2. Houd de twee encoders en de woordenschat uit dezelfde conversiebundel.
  3. Controleer dat de vervanging de afbeeldingsinvoer van 224 x 224 en 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:

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

Invoer en uitvoer

Invoer: afbeelding en kandidaatprompts, of maximaal 32 afbeeldingen en een tekstvraag. Uitvoer: genormaliseerde gelijkenisscores en gerangschikte resultaten.