Transformers documentation
Sıfır atımlı görüntü sınıflandırma
Sıfır atımlı görüntü sınıflandırma
Zero-shot görüntü sınıflandırma, belirli kategorilere ait etiketli örnekler içeren veriler üzerinde açıkça eğitilmemiş bir model kullanılarak görüntüleri farklı kategorilere ayırmayı içeren bir görevdir.
Geleneksel olarak, görüntü sınıflandırma belirli bir etiketli görüntü kümesinde bir model eğitmesini gerektirir ve bu model, belirli görüntü özelliklerini etiketlere “eşlemeyi” öğrenir. Yeni bir etiket kümesi tanıtan bir sınıflandırma görevi için bu tür bir modelin kullanılması gerektiğinde, modelin “yeniden kalibre edilmesi” için ince ayar (fine-tuning) gereklidir.
Buna karşın, sıfır atışlı veya açık sözlük resim sınıflandırma modelleri genellikle büyük bir resim ve ilişkili açıklamalar veri setinde eğitilmiş çok modlu modellerdir. Bu modeller, sıfır atışlı resim sınıflandırması dahil olmak üzere birçok aşağı akış görevinde kullanılabilen hizalanmış görme-dil temsillerini öğrenir.
Bu, ek eğitim verisi gerektirmeden modellerin yeni ve daha önce görülmemiş kategorilere genelleşmesine olanak tanıyan ve kullanıcıların hedef nesnelerine serbest biçimli metin açıklamalarıyla görüntü sorgusu yapmasını sağlayan, görüntü sınıflandırma için daha esnek bir yaklaşımdır.
Bu kılavuzda şunları öğreneceksiniz:
- sıfır atımlı bir görüntü sınıflandırma hattı oluşturun
- sıfır atımlı görüntü sınıflandırma çıkarımını elle çalıştırın
Başlamadan önce, gerekli tüm kütüphanelerin yüklendiğinden emin olun:
pip install -q "transformers[torch]" pillowSıfır atımlı görüntü sınıflandırma hattı
Sıfır atışlı görüntü sınıflandırma destekleyen bir modelle çıkarımı denemenin en basit yolu, ilgili pipeline() iş akışını kullanmaktır. Bir Hugging Face Hub kontrol noktasından bir iş akışı örneği oluşturun:
>>> from transformers import pipeline
>>> checkpoint = "openai/clip-vit-large-patch14"
>>> detector = pipeline(model=checkpoint, task="zero-shot-image-classification")Ardından, sınıflandırmak istediğiniz bir görsel seçin.
>>> from PIL import Image
>>> import requests
>>> url = "https://unsplash.com/photos/g8oS8-82DxI/download?ixid=MnwxMjA3fDB8MXx0b3BpY3x8SnBnNktpZGwtSGt8fHx8fDJ8fDE2NzgxMDYwODc&force=true&w=640"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image
Görseli ve aday nesne etiketlerini pipeline'a iletin. Burada görsel doğrudan iletilir; uygun diğer seçenekler arasında görselin yerel yolu veya bir görsel URL'si bulunur. Aday etiketler, bu örnekteki gibi basit kelimeler veya daha açıklayıcı ifadeler olabilir.
>>> predictions = detector(image, candidate_labels=["fox", "bear", "seagull", "owl"])
>>> predictions
[{'score': 0.9996670484542847, 'label': 'owl'},
{'score': 0.000199399160919711, 'label': 'seagull'},
{'score': 7.392891711788252e-05, 'label': 'fox'},
{'score': 5.96074532950297e-05, 'label': 'bear'}]El ile sıfır atımlı görüntü sınıflandırma
Sıfır atımlı görüntü sınıflandırma hattını nasıl kullanacağınızı gördüğünüze göre, şimdi sıfır atımlı görüntü sınıflandırmanın manuel olarak nasıl çalıştırılabileceğine bir bakalım.
Modeli ve ilişkili işlemciyi Hugging Face Hub'daki bir kontrol noktasından yükleyerek başlayın. Burada, daha öncekiyle aynı kontrol noktasını kullanacağız:
>>> from transformers import AutoProcessor, AutoModelForZeroShotImageClassification
>>> model = AutoModelForZeroShotImageClassification.from_pretrained(checkpoint)
>>> processor = AutoProcessor.from_pretrained(checkpoint)İşleri değiştirmek için farklı bir görsel alalım.
>>> from PIL import Image
>>> import requests
>>> url = "https://unsplash.com/photos/xBRQfR2bqNI/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc4Mzg4ODEx&force=true&w=640"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image
Model girdilerini hazırlamak için processor kullanın. İşleyici, görüntüyü yeniden boyutlandırıp normalize ederek model için hazırlayan bir görüntü işleyici ile metin girdilerini yöneten bir tokenizer birleştirir.
>>> candidate_labels = ["tree", "car", "bike", "cat"]
# follows the pipeline prompt template to get same results
>>> candidate_labels = [f'This is a photo of {label}.' for label in candidate_labels]
>>> inputs = processor(images=image, text=candidate_labels, return_tensors="pt", padding=True)Girdileri modelden geçirin ve sonuçları son işlemleyin:
>>> import torch
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> logits = outputs.logits_per_image[0]
>>> probs = logits.softmax(dim=-1).numpy()
>>> scores = probs.tolist()
>>> result = [
... {"score": score, "label": candidate_label}
... for score, candidate_label in sorted(zip(probs, candidate_labels), key=lambda x: -x[0])
... ]
>>> result
[{'score': 0.998572, 'label': 'car'},
{'score': 0.0010570387, 'label': 'bike'},
{'score': 0.0003393686, 'label': 'tree'},
{'score': 3.1572064e-05, 'label': 'cat'}]