Cross-modal text-to-image embeddings with Google SigLIP2 - GPU & CPU support
1.2K
Copyright © 2025-2026 Quadux IT GmbH
License: Quadux files Apache 2.0 (see LICENSE), SigLIP model: Apache 2.0 (Google) Author: Walter Hoffmann
Cross-Modal Text-Image Embeddings that actually work!
Wir haben diese Software geschrieben, um echte Cross-Modal-Suche zwischen Text und Bildern zu ermöglichen. SigLIP ist speziell für Text-zu-Bild-Matching trainiert - im Gegensatz zu vielen anderen Modellen, die zwar Text- und Bild-Embeddings bieten, aber nicht im gleichen Vektorraum arbeiten.
Mit diesem Projekt erhalten Sie:
google/siglip2-base-patch16-224
Alternative größere Modelle:
siglip2-so400m-patch14-384 (400M params, 1152 dim, 384px)⚠️ Wichtig: SigLIP wurde primär auf englischen Bild-Text-Paaren trainiert (WebLI Dataset).
| Sprache | Text→Image Accuracy | Empfehlung |
|---|---|---|
| 🇬🇧 Englisch | ~88% | ✅ Optimal |
| 🇩🇪 Deutsch | ~50% | ⚠️ Funktioniert, aber niedrigere Scores |
| Ansatz | Aufwand | Qualität |
|---|---|---|
| 🔄 Queries übersetzen | Gering | Sehr gut |
| 🌍 Multilingual-CLIP | Mittel | Gut |
| 📝 Englische Keywords | Gering | Okay |
Empfehlung: Deutsche Suchanfragen vor dem Embedding ins Englische übersetzen (z.B. via DeepL API oder lokales Übersetzungsmodell wie Helsinki-NLP/opus-mt-de-en).
Der Vision-Encoder ist sprachneutral - Bilder selbst brauchen keine Anpassung. Nur der Text-Encoder bevorzugt Englisch.
📊 Wichtige Erkenntnis aus Tests mit klassischer Literatur:
| Text-Stil | Accuracy | Beispiel |
|---|---|---|
| 🔤 Kurze, direkte Beschreibungen | ~88% | "a cat sitting on a chair" |
| 📜 Poetische/literarische Texte (EN) | ~0% | "Tyger Tyger, burning bright..." |
| 📜 Poetische/literarische Texte (DE) | ~50% | "Wie herrlich leuchtet mir die Natur!" |
SigLIP wurde auf Bild-Beschreibungen trainiert (Alt-Text, Captions), nicht auf metaphorische Literatur:
✅ DO: Kurze, beschreibende englische Queries verwenden
✅ DO: Konkrete Objekte und Szenen beschreiben
❌ DON'T: Metaphorische oder abstrakte Sprache verwenden
❌ DON'T: Lange literarische Texte als Suchquery nutzen
Die klassischen Texte im Test (test/texts/classic_texts.js) dienen als Benchmark für die Grenzen des Modells, nicht als Beispiel für produktive Nutzung.
| Endpoint | Method | Description |
|---|---|---|
/health | GET | Health check |
/info | GET | Model information |
/embed/text | POST | Text embeddings |
/embed/image | POST | Single image embedding |
/embed/images | POST | Multiple image embeddings |
/similarity | POST | Cross-modal similarity matrix |
/rank | POST | Rank images by text query |
.\start.bat # Windows
./start.sh # Linux/macOS
# Lokales Build
docker build -t quaduxit/siglip-embeddings .
# Oder von Docker Hub:
docker pull quaduxit/siglip-embeddings:latest
# Container starten
docker run -d --name siglip-embed \
--gpus all \
-p 8091:8000 \
quaduxit/siglip-embeddings
# Health Check
curl http://localhost:8091/health
curl -X POST http://localhost:8091/embed/text \
-H "Content-Type: application/json" \
-d '{"texts": ["a photo of a cat", "a photo of a dog"]}'
curl -X POST http://localhost:8091/embed/image \
-F "[email protected]"
curl -X POST http://localhost:8091/similarity \
-F "[email protected]" \
-F "[email protected]" \
-F "texts=[\"a photo of a cat\", \"a photo of a dog\"]"
Response:
{
"similarities": [
[0.85, 0.12], // "cat" query: 85% cat.jpg, 12% dog.jpg
[0.15, 0.82] // "dog" query: 15% cat.jpg, 82% dog.jpg
]
}
curl -X POST http://localhost:8091/rank \
-F "[email protected]" \
-F "[email protected]" \
-F "[email protected]" \
-F "query=a sunset over mountains"
| Feature | Jina v4 | SigLIP |
|---|---|---|
| Text ↔ Text | ✅ Excellent (0.81) | ⚠️ OK |
| Image ↔ Image | ⚠️ OK (0.30) | ✅ Good |
| Text ↔ Image | ❌ Broken (0.01-0.06) | ✅ Works! (0.3-0.8) |
| Modellgröße | 7.5GB | ~400MB |
| VRAM | ~16GB | ~2GB |
| Dimensionen | 2048 | 768 |
| Variable | Default | Beschreibung |
|---|---|---|
API_HOST | 0.0.0.0 | Bind-Adresse |
API_PORT | 8091 | API-Port |
FORCE_CPU | - | 1 für CPU-Modus |
HF_HOME | /models | Hugging Face Cache |
MODEL_NAME | google/siglip2-base-patch16-224 | Modellname |
cd test
node test.js
Testet:
siglip-embeddings-docker/
├── build/
│ ├── Dockerfile # Container-Definition
│ ├── app.py # FastAPI Server
│ ├── download_model.py # Model Download Script
│ └── requirements.txt # Python-Abhängigkeiten
├── test/
│ ├── photos/ # Testbilder (Unsplash)
│ ├── texts/ # Testtexte (Public Domain)
│ └── test.js # Test-Suite
├── LICENSE # Apache 2.0-Lizenz (Quadux-Dateien)
├── NOTICE # Third-Party-Hinweise (Google SigLIP)
├── CHANGELOG.md # Änderungsprotokoll
├── NOTICE # Third-Party-Hinweise (Google SigLIP)
├── start.bat # Windows Start-Script
├── start.sh # Linux/macOS Start-Script
└── README.md # Diese Dokumentation
pytorch/pytorch:2.9.1-cuda13.0-cudnn9-runtimegoogle/siglip2-base-patch16-224Dieser Docker-Container und die Quadux-spezifischen Container-Steuerungen stehen unter der Apache License 2.0 (siehe LICENSE).
Das Modell google/siglip2-base-patch16-224 ist ebenfalls unter der Apache License 2.0 von Google LLC lizenziert:
Weitere Details:
Die Testbilder stammen von Unsplash und unterliegen der Unsplash License (kostenlose kommerzielle Nutzung, keine Attribution erforderlich, aber Credits in test/photos/SOURCES.md angegeben).
Die Testtexte sind gemeinfreie klassische Literatur (Public Domain) mit Quellenangaben in test/texts/SOURCES.md.
⚠️ Kein Support durch Quadux IT GmbH
Dieses Projekt wird „as is" ohne Gewährleistung oder Support bereitgestellt. Wir können keine Fragen zum SigLIP-Modell selbst beantworten und leisten keinen technischen Support für dieses Paket.
Bei Fragen zum Modell
google/siglip2-base-patch16-224wenden Sie sich bitte an:
- Hugging Face: huggingface.co/google/siglip2-base-patch16-224
- Google Research: github.com/google-research/big_vision
Content type
Image
Digest
sha256:4ca4b1af1…
Size
4.3 GB
Last updated
9 months ago
docker pull quaduxit/siglip2-embeddings