Transformers documentation
키포인트 탐지
시작하기
튜토리얼
Pipeline으로 추론하기AutoClass로 사전 학습된 인스턴스 로드하기데이터 전처리하기사전 학습된 모델 미세 조정하기스크립트로 학습하기🤗 Accelerate로 분산 학습 구성하기🤗 PEFT로 어댑터 로드 및 학습하기만든 모델 공유하기대규모 언어 모델로 생성하기Transformers로 채팅하기
태스크 가이드
자연어처리
오디오
컴퓨터 비전
이미지 분류의미적 분할(Semantic segmentation)영상 분류객체 탐지제로샷(zero-shot) 객체 탐지제로샷(zero-shot) 이미지 분류단일 영상 기반 깊이 추정Image-to-Image이미지 특징 추출마스크 생성키포인트 탐지컴퓨터 비전(이미지 분류)를 위한 지식 증류(knowledge distillation)
멀티모달
생성
프롬프팅
(번역중) 개발자 가이드
🤗 Tokenizers 라이브러리에서 토크나이저 사용하기다국어 모델 추론하기모델별 API 사용하기사용자 정의 모델 공유하기챗봇 템플릿 익히기Trainer 사용하기Amazon SageMaker에서 학습 실행하기ONNX로 내보내기GPU 선택하기TFLite로 내보내기TorchScript로 내보내기(번역중) Notebooks with examples커뮤니티 리소스문제 해결GGUF 파일들과의 상호 운용성transformers에서의 모듈성
(번역중) 경량화 메소드
(번역중) Getting startedbitsandbytesGPTQAWQ(번역중) AQLM(번역중) VPTQQuantoEETQ(번역중) HQQ(번역중) Optimum(번역중) Contribute new quantization method
(번역중) 성능 및 확장성
성능 및 확장성(번역중) QuantizationLLM 추론 최적화 대형 모델을 인스턴스화디버깅TensorFlow 모델을 위한 XLA 통합(번역중) Optimize inference using `torch.compile()`
(번역중) 효율적인 학습 기술들
(번역중) Methods and tools for efficient training on a single GPU다중 GPU에서 훈련 진행하기DeepSpeed완전 분할 데이터 병렬 처리CPU에서 훈련다중 CPU에서 훈련하기TensorFlow로 TPU에서 훈련하기Apple 실리콘에서 PyTorch 학습훈련용 사용자 맞춤형 하드웨어Trainer API를 사용한 하이퍼파라미터 탐색
추론 최적화하기
기여하기
🤗 Transformers에 기여하는 방법🤗 Transformers에 새로운 모델을 추가하는 방법어떻게 🤗 Transformers에 파이프라인을 추가하나요?테스트Pull Request에 대한 검사
(번역중) 개념 가이드
이념과 목표(번역중) Glossary🤗 Transformers로 할 수 있는 작업🤗 Transformers로 작업을 해결하는 방법Transformer 모델군토크나이저 요약어텐션 매커니즘패딩과 잘라내기BERTology고정 길이 모델의 펄플렉서티(Perplexity)추론 웹 서버를 위한 파이프라인모델 학습 해부하기LLM을 최대한 활용하기
(번역중) API
(번역중) 메인 클래스
자동 클래스(번역중) Backbones콜백구성데이터 콜레이터케라스 콜백로깅Models텍스트 생성ONNX(번역중) Optimization모델 출력(번역중) Pipelines(번역중) Processors양자화(번역중) TokenizerTrainerDeepSpeedExecuTorch특성 추출기(번역중) Image Processor
(번역중) 모델
(번역중) 텍스트 모델
(번역중) 비전 모델
(번역중) 오디오 모델
(번역중) 비디오 모델
(번역중) 멀티모달 모델
(번역중) 강화학습 모델
시계열 모델
그래프 모델
(번역중) Internal Helpers
You are viewing v4.53.1 version. A newer version v5.13.0 is available.
키포인트 탐지
키포인트 감지(Keypoint detection)은 이미지 내의 특정 포인트를 식별하고 위치를 탐지합니다. 이러한 키포인트는 랜드마크라고도 불리며 얼굴 특징이나 물체의 일부와 같은 의미 있는 특징을 나타냅니다. 키포인트 감지 모델들은 이미지를 입력으로 받아 아래와 같은 출력을 반환합니다.
- 키포인트들과 점수: 관심 포인트들과 해당 포인트에 대한 신뢰도 점수
- 디스크립터(Descriptors): 각 키포인트를 둘러싼 이미지 영역의 표현으로 텍스처, 그라데이션, 방향 및 기타 속성을 캡처합니다.
이번 가이드에서는 이미지에서 키포인트를 추출하는 방법을 다루어 보겠습니다.
이번 튜토리얼에서는 키포인트 감지의 기본이 되는 모델인 SuperPoint를 사용해보겠습니다.
from transformers import AutoImageProcessor, SuperPointForKeypointDetection
processor = AutoImageProcessor.from_pretrained("magic-leap-community/superpoint")
model = SuperPointForKeypointDetection.from_pretrained("magic-leap-community/superpoint")아래의 이미지로 모델을 테스트 해보겠습니다.

import torch
from PIL import Image
import requests
import cv2
url_image_1 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"
image_1 = Image.open(requests.get(url_image_1, stream=True).raw)
url_image_2 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png"
image_2 = Image.open(requests.get(url_image_2, stream=True).raw)
images = [image_1, image_2]이제 입력을 처리하고 추론을 할 수 있습니다.
inputs = processor(images,return_tensors="pt").to(model.device, model.dtype)
outputs = model(**inputs)모델 출력에는 배치 내의 각 항목에 대한 상대적인 키포인트, 디스크립터, 마스크와 점수가 있습니다. 마스크는 이미지에서 키포인트가 있는 영역을 강조하는 역할을 합니다.
SuperPointKeypointDescriptionOutput(loss=None, keypoints=tensor([[[0.0437, 0.0167],
[0.0688, 0.0167],
[0.0172, 0.0188],
...,
[0.5984, 0.9812],
[0.6953, 0.9812]]]),
scores=tensor([[0.0056, 0.0053, 0.0079, ..., 0.0125, 0.0539, 0.0377],
[0.0206, 0.0058, 0.0065, ..., 0.0000, 0.0000, 0.0000]],
grad_fn=<CopySlices>), descriptors=tensor([[[-0.0807, 0.0114, -0.1210, ..., -0.1122, 0.0899, 0.0357],
[-0.0807, 0.0114, -0.1210, ..., -0.1122, 0.0899, 0.0357],
[-0.0807, 0.0114, -0.1210, ..., -0.1122, 0.0899, 0.0357],
...],
grad_fn=<CopySlices>), mask=tensor([[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 0, 0, 0]], dtype=torch.int32), hidden_states=None)이미지에 실제 키포인트를 표시하기 위해선 결과값을 후처리 해야합니다. 이를 위해 실제 이미지 크기를 결과값과 함께 post_process_keypoint_detection에 전달해야 합니다.
image_sizes = [(image.size[1], image.size[0]) for image in images]
outputs = processor.post_process_keypoint_detection(outputs, image_sizes)위 코드를 통해 결과값은 딕셔너리를 갖는 리스트가 되고, 각 딕셔너리들은 후처리된 키포인트, 점수 및 디스크립터로 이루어져있습니다.
[{'keypoints': tensor([[ 226, 57],
[ 356, 57],
[ 89, 64],
...,
[3604, 3391]], dtype=torch.int32),
'scores': tensor([0.0056, 0.0053, ...], grad_fn=<IndexBackward0>),
'descriptors': tensor([[-0.0807, 0.0114, -0.1210, ..., -0.1122, 0.0899, 0.0357],
[-0.0807, 0.0114, -0.1210, ..., -0.1122, 0.0899, 0.0357]],
grad_fn=<IndexBackward0>)},
{'keypoints': tensor([[ 46, 6],
[ 78, 6],
[422, 6],
[206, 404]], dtype=torch.int32),
'scores': tensor([0.0206, 0.0058, 0.0065, 0.0053, 0.0070, ...,grad_fn=<IndexBackward0>),
'descriptors': tensor([[-0.0525, 0.0726, 0.0270, ..., 0.0389, -0.0189, -0.0211],
[-0.0525, 0.0726, 0.0270, ..., 0.0389, -0.0189, -0.0211]}]이제 위 딕셔너리를 사용하여 키포인트를 표시할 수 있습니다.
import matplotlib.pyplot as plt
import torch
for i in range(len(images)):
keypoints = outputs[i]["keypoints"]
scores = outputs[i]["scores"]
descriptors = outputs[i]["descriptors"]
keypoints = outputs[i]["keypoints"].detach().numpy()
scores = outputs[i]["scores"].detach().numpy()
image = images[i]
image_width, image_height = image.size
plt.axis('off')
plt.imshow(image)
plt.scatter(
keypoints[:, 0],
keypoints[:, 1],
s=scores * 100,
c='cyan',
alpha=0.4
)
plt.show()아래에서 결과를 확인할 수 있습니다.
