Transformers documentation

Anahtar nokta eşleştirme

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

and get access to the augmented documentation experience

to get started

Anahtar nokta eşleştirme

Keypoint matching, iki farklı görüntüde yer alan aynı nesneye ait farklı ilgi noktalarını eşleştirir. Çoğu modern keypoint matcher, girdi olarak görüntüleri alır ve aşağıdakileri çıktılar:

  • Keypoint koordinatları (x,y): iki liste kullanarak ilk ve ikinci görüntü arasındaki piksel koordinatlarının birebir eşlemesi. İlk listedeki belirli bir indeksteki keypoint, ikinci listedeki aynı indeksteki keypoint ile eşleştirilir.
  • Eşleşme puanları: Anahtar nokta eşleşmelerine atanan puanlar.

Bu öğreticide, MatchAnything framework ile eğitilmiş EfficientLoFTR modelini kullanarak anahtar nokta eşleşmelerini çıkaracak ve eşleşmeleri iyileştireceksiniz. Bu model yalnızca 16M parametreye sahiptir ve bir CPU üzerinde çalıştırılabilir. AutoModelForKeypointMatching sınıfını kullanacaksınız.

from transformers import AutoImageProcessor, AutoModelForKeypointMatching
import torch

processor = AutoImageProcessor.from_pretrained("zju-community/matchanything_eloftr")
model = AutoModelForKeypointMatching.from_pretrained("zju-community/matchanything_eloftr")

Aynı ilgi nesnesine sahip iki görüntü yükleyin. İkinci fotoğraf bir saniye sonra çekilmiş, renkleri düzenlenmiş ve daha fazla kırpılmış ve döndürülmüştür.

Bee Bee edited
from transformers.image_utils import load_image
image1 = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg")
image2 = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee_edited.jpg")

images = [image1, image2]

Görselleri işlemciye (processor) iletebilir ve çıkarım (inference) yapabiliriz.

inputs = processor(images, return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)

Çıktıları son işlemeye (postprocess) tabi tutabiliriz. threshold parametresi, çıktı eşleşmelerindeki gürültüyü (düşük güven eşikleri) iyileştirmek için kullanılır.

image_sizes = [[(image.height, image.width) for image in images]]

outputs = processor.post_process_keypoint_matching(outputs, image_sizes, threshold=0.2)
print(outputs)

İşte çıktılar.

[{'keypoints0': tensor([[4514,  550],
          [4813,  683],
          [1972, 1547],
          ...
          [3916, 3408]], dtype=torch.int32),
  'keypoints1': tensor([[2280,  463],
          [2378,  613],
          [2231,  887],
          ...
          [1521, 2560]], dtype=torch.int32),
  'matching_scores': tensor([0.2189, 0.2073, 0.2414, ...
    ])}]

Çıktıyı kısalttık ama 401 eşleşme var!

len(outputs[0]["keypoints0"])
# 401

Bunları, işleyicinin visualize_keypoint_matching() yöntemiyle görselleştirebiliriz.

plot_images = processor.visualize_keypoint_matching(images, outputs)
plot_images

Matched Image

İsteğe bağlı olarak, Pipeline API'sini kullanabilir ve görevi keypoint-matching olarak ayarlayabilirsiniz.

from transformers import pipeline 

image_1 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"
image_2 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee_edited.jpg"

pipe = pipeline("keypoint-matching", model="zju-community/matchanything_eloftr")
pipe([image_1, image_2])

Çıktı aşağıdaki gibidir.

[{'keypoint_image_0': {'x': 2444, 'y': 2869},
  'keypoint_image_1': {'x': 837, 'y': 1500},
  'score': 0.9756593704223633},
 {'keypoint_image_0': {'x': 1248, 'y': 2819},
  'keypoint_image_1': {'x': 862, 'y': 866},
  'score': 0.9735618829727173},
 {'keypoint_image_0': {'x': 1547, 'y': 3317},
  'keypoint_image_1': {'x': 1436, 'y': 1500},
  ...
 }
]
Update on GitHub