Transformers documentation

Görsel özellik çıkarımı

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Görsel özellik çıkarımı

Görsel özellik çıkarımı, bir görsel verildiğinde anlamsal olarak anlamlı özelliklerin çıkarılması görevidir. Bu, görsel benzerliği ve görsel geri getirme gibi birçok kullanım alanına sahiptir. Ayrıca, çoğu bilgisayarla görme modeli, görev özel başlığın (görsel sınıflandırma, nesne algılama vb.) kaldırılarak özelliklerin elde edilebildiği görsel özellik çıkarımı için kullanılabilir. Bu özellikler daha üst düzeyde çok faydalıdır: kenar algılama, köşe algılama ve benzeri. Modelin ne kadar derin olduğuna bağlı olarak, gerçek dünyaya dair bilgiler de (örneğin bir kedinin nasıl göründüğü) içerebilirler. Bu nedenle, bu çıktılar belirli bir veri setinde yeni sınıflandırıcılar eğitmek için kullanılabilir.

Bu kılavuzda şunları yapacaksınız:

  • image-feature-extraction hattının üzerine basit bir görsel benzerlik sistemi oluşturmayı öğrenin.
  • Sadece model çıkarımıyla aynı görevi gerçekleştirin.

image-feature-extraction Pipeline ile Görüntü Benzerliği

Balık ağlarının üzerinde oturan iki kedi görselimiz var, bunlardan biri üretilmiştir.

from PIL import Image
import requests

img_urls = ["https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png", "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.jpeg"]
image_real = Image.open(requests.get(img_urls[0], stream=True).raw).convert("RGB")
image_gen = Image.open(requests.get(img_urls[1], stream=True).raw).convert("RGB")

Pipeline'ın çalışmasını görelim. Önce pipeline'ı başlatın. Hiçbir model geçmezseniz, pipeline google/vit-base-patch16-224 ile otomatik olarak başlatılır. Benzerlik hesaplamak istiyorsanız, pool değerini True olarak ayarlayın.

import torch
from transformers import pipeline
from accelerate import Accelerator
# automatically detects the underlying device type (CUDA, CPU, XPU, MPS, etc.)
device = Accelerator().device
pipe = pipeline(task="image-feature-extraction", model="google/vit-base-patch16-384", device=device, pool=True)

pipe ile çıkarım yapmak için her iki görseli de ona iletin.

outputs = pipe([image_real, image_gen])

Çıktı, bu iki görselin havuzlanmış gömme değerlerini içerir.

# get the length of a single output
print(len(outputs[0][0]))
# show outputs
print(outputs)

# 768
# [[[-0.03909236937761307, 0.43381670117378235, -0.06913255900144577,

Benzerlik puanını almak için bunları bir benzerlik fonksiyonuna iletmemiz gerekir.

from torch.nn.functional import cosine_similarity

similarity_score = cosine_similarity(torch.Tensor(outputs[0]),
                                     torch.Tensor(outputs[1]), dim=1)

print(similarity_score)

# tensor([0.6043])

Poollama yapılmadan önceki son gizli durumları almak istiyorsanız, pool parametresi için herhangi bir değer geçirmemeye özen gösterin; bu parametre varsayılan olarak False olarak ayarlanmıştır. Bu gizli durumlar, modelin özelliklerine dayalı yeni sınıflandırıcılar veya modeller eğitmek için faydalıdır.

pipe = pipeline(task="image-feature-extraction", model="google/vit-base-patch16-224", device=device)
outputs = pipe(image_real)

Çıktılar havuzlanmamış (unpooled) olduğundan, ilk boyutu parti boyutunu (batch size), son iki boyutu ise gömme (embedding) şeklini temsil eden son gizli durumları (last hidden states) alırız.

import numpy as np
print(np.array(outputs).shape)
# (1, 197, 768)

AutoModel ile Özellikler ve Benzerlikler Alın

Özellikleri almak için transformers'in AutoModel sınıfını da kullanabiliriz. AutoModel, görev özel bir başlık olmadan herhangi bir transformers modelini yükler ve bu sayede özellikleri alabiliriz.

from transformers import AutoImageProcessor, AutoModel

processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")
model = AutoModel.from_pretrained("google/vit-base-patch16-224").to(device)

Basit bir çıkarım (inference) fonksiyonu yazalım. Girdileri önce processor’a, ardından onun çıktılarını model’e ileteceğiz.

def infer(image):
  inputs = processor(image, return_tensors="pt").to(device)
  outputs = model(**inputs)
  return outputs.pooler_output

Görselleri bu fonksiyona doğrudan iletebilir ve gömme değerlerini alabiliriz.

embed_real = infer(image_real)
embed_gen = infer(image_gen)

Gömceler üzerinde benzerliği tekrar elde edebiliriz.

from torch.nn.functional import cosine_similarity

similarity_score = cosine_similarity(embed_real, embed_gen, dim=1)
print(similarity_score)

# tensor([0.6061], device='cuda:0', grad_fn=<SumBackward1>)
Update on GitHub