Downloads · 30 days
1
3% of all-time downloads
l0zi/vit-base-oxford-iiit-pets
vit-base-oxford-iiit-pets is a image classification model from l0zi. Use it when you need a label for an image. The card lists the license as apache-2.0.
This model is a fine-tuned version of google/vit-base-patch16-224 on the pcuenq/oxford-pets dataset. It achieves the following results on the evaluation set: - Loss: 0.1790 - Accuracy: 0.9499
Downloads · 30 days
1
3% of all-time downloads
All-time downloads
35
Public
Parameters
85.8M
1.7 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors343 MB · 100%
From the Hugging Face model README
This model is a fine-tuned version of google/vit-base-patch16-224 on the pcuenq/oxford-pets dataset. It achieves the following results on the evaluation set:
Dieses Modell basiert auf dem Vision Transformer (ViT), einer Architektur, die das Transformer-Konzept auf Bilddaten überträgt. Anstelle von konvolutionalen Filtern verarbeitet ViT Bildausschnitte ("Patches") als Sequenzen und lernt auf Basis von Selbstaufmerksamkeit Mechanismen relevante Bildmerkmale. Die Architektur wurde ursprünglich auf dem ImageNet-Datensatz vortrainiert und anschliessend auf das Oxford-Pets-Dataset feinjustiert. Ziel war es, die Klassifikation von Haustieren ohne grossen Daten- und Rechenaufwand performant umzusetzen.
Dieses Modell eignet sich für die Bildklassifikation im Bereich von Haustierbildern – insbesondere zur automatischen Erkennung von Rassen. Mögliche Anwendungsbereiche:
Tiererkennungs-Apps
automatisierte Sortierung in Bildarchiven
Das Modell wurde ausschliesslich auf Haustierarten des Oxford-IIIT-Datensatzes trainiert und generalisiert möglicherweise nicht gut auf andere Tierarten oder stark abweichende Bildstile.
Verzerrungen im Datensatz (z. B. hinsichtlich Hintergrund, Beleuchtung oder Kamerawinkel) können das Ergebnis beeinflussen.
Das Modell wurde mit dem Oxford-IIIT Pet Dataset trainiert und evaluiert. Der Datensatz enthält 7.349 Bilder von 37 Katzen- und Hunderassen, aufgeteilt in Trainings- und Evaluationssets. Jedes Bild ist einer Rasse sowie einem Tier (Hund oder Katze) zugeordnet.
The following hyperparameters were used during training:
| Training Loss | Epoch | Step | Validation Loss | Accuracy |
|---|---|---|---|---|
| 0.3775 | 1.0 | 370 | 0.3127 | 0.9147 |
| 0.2164 | 2.0 | 740 | 0.2418 | 0.9323 |
| 0.1623 | 3.0 | 1110 | 0.2253 | 0.9323 |
| 0.1542 | 4.0 | 1480 | 0.2226 | 0.9323 |
| 0.1344 | 5.0 | 1850 | 0.2182 | 0.9337 |
Im Nachgang wurde folgender Codeabschnitt am Ende des Notebooks hinzugefügt, um eine einfache Zero-Shot-Bildklassifikation durchzuführen – ohne das zugrunde liegende Modell erneut zu trainieren:
from transformers import pipeline
from datasets import load_dataset
from sklearn.metrics import accuracy_score, precision_score, recall_score
from PIL import Image
import os
# Lade das Oxford-Pet-Testset
dataset = load_dataset("/teamspace/studios/this_studio/oxford-iiit-pet", split="test")
# Extrahiere Dateinamen & Klassennamen
data = []
class_names = set()
for row in dataset:
filename = row["text"].split()[0] + ".jpg"
label_name = filename.split("_")[0]
class_names.add(label_name)
data.append({
"filename": filename,
"label": label_name
})
# Sortierte Klassennamen als Labels
labels = sorted(class_names)
candidate_labels = [f"a photo of a {label}" for label in labels]
# Lade CLIP Zero-Shot Modell
classifier = pipeline("zero-shot-image-classification", model="openai/clip-vit-base-patch32")
# Begrenze auf 100 Beispiele
y_true = []
y_pred = []
for entry in data[:100]:
image_path = os.path.join("/teamspace/studios/this_studio/oxford-iiit-pet/images", entry["filename"])
if not os.path.exists(image_path):
continue
try:
image = Image.open(image_path).convert("RGB")
true_label = entry["label"]
result = classifier(image, candidate_labels=candidate_labels, top_k=1)
predicted = result[0]["label"].replace("a photo of a ", "")
y_true.append(true_label)
y_pred.append(predicted)
except Exception as e:
print(f"Fehler bei {entry['filename']}: {e}")
# Metriken berechnen
acc = accuracy_score(y_true, y_pred)
prec = precision_score(y_true, y_pred, average="macro", zero_division=0)
rec = recall_score(y_true, y_pred, average="macro", zero_division=0)
print(f"Zero-Shot Accuracy: {acc:.3f}")
print(f"Precision: {prec:.3f}")
print(f"Recall: {rec:.3f}")
## Ergebnisse und Feedback
| Metrik | Wert |
|-----------|-------|
| Accuracy | 0.890 |
| Precision | 0.125 |
| Recall | 0.114 |
| AUC | n/a |
### Interpretation
- **Accuracy**: Das Modell erkennt rund 89 % der getesteten Bilder korrekt – ein beachtlicher Wert, insbesondere ohne Feinabstimmung.
- **Precision & Recall**: Die niedrigen Werte deuten darauf hin, dass das Modell bei der Erkennung aller Klassen eher selektiv und teilweise unausgewogen vorgeht.
- **AUC**: Da es sich um ein Multi-Class-Problem handelt, müsste AUC über ein One-vs-Rest-Verfahren berechnet werden. Aufgrund der eingeschränkten Datenlage (nur 100 Beispiele) wurde dieser Wert hier nicht ausgewiesen.
- Insgesamt zeigen die Ergebnisse, dass das CLIP-Modell auch ohne Training nützliche Vorhersagen liefern kann – insbesondere für explorative Anwendungen oder als Baseline-Modell.