Transformers documentation
Anahtar nokta eşleştirme
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.

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"])
# 401Bunları, işleyicinin visualize_keypoint_matching() yöntemiyle görselleştirebiliriz.
plot_images = processor.visualize_keypoint_matching(images, outputs) plot_images

İ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},
...
}
]