Transformers documentation
DAB-DETR
이 모델은 2022-01-28에 HF papers에 게시되었으며, 2025-02-04에 Hugging Face Transformers에 기여되었습니다.
DAB-DETR
개요
DAB-DETR 모델은 Shilong Liu, Feng Li, Hao Zhang, Xiao Yang, Xianbiao Qi, Hang Su, Jun Zhu, Lei Zhang가 DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR에서 제안했습니다. DAB-DETR은 Conditional DETR의 강화된 변형입니다. 동적으로 업데이트되는 앵커 박스를 활용하여 참조 쿼리 점 (x, y)과 참조 앵커 크기 (w, h)를 모두 제공함으로써 cross-attention 계산을 개선합니다. 이 새로운 접근법은 단일 ResNet-50 모델을 backbone으로 사용하여 50 epochs 동안 학습했을 때 45.7% AP를 달성합니다.
해당 논문의 초록은 다음과 같습니다:
본 논문에서는 DETR(DEtection TRansformer)에 동적 앵커 박스를 활용한 새로운 쿼리 구성 방식을 제시하고, DETR에서 쿼리가 수행하는 역할에 대한 심층적인 이해를 제공합니다. 이 새로운 구성 방식은 Transformer 디코더에서 박스 좌표를 쿼리로 직접 사용하며, 레이어별로 이를 동적으로 업데이트합니다. 박스 좌표를 사용하면 명시적인 위치 선행 지식을 활용하여 쿼리-특징 유사도를 개선하고 DETR의 느린 학습 수렴 문제를 제거할 수 있을 뿐만 아니라, 박스의 너비와 높이 정보를 사용하여 위치 주의력 맵을 변조(modulate)할 수도 있습니다. 이러한 설계는 DETR의 쿼리가 캐스케이드 방식으로 레이어별로 소프트 ROI 풀링을 수행하는 것으로 구현될 수 있음을 명확히 보여줍니다. 그 결과, 동일한 설정 하에서 DETR 계열의 객체 탐지 모델 중 MS-COCO 벤치마크에서 최고의 성능을 달성합니다. 예를 들어, ResNet50-DC5를 백본으로 사용하여 50에포크 동안 학습했을 때 AP 45.7%를 기록했습니다. 또한 광범위한 실험을 수행하여 우리의 분석을 확인하고 제안한 방법의 효과성을 검증했습니다.
이 모델은 davidhajdu님이 기여했습니다. 원본 코드는 여기에서 찾을 수 있습니다.
모델 시작하기
아래 코드를 사용하여 모델을 시작해 보세요.
import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
model = AutoModelForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50", device_map="auto")
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
results = image_processor.post_process_object_detection(outputs, target_sizes=torch.tensor([image.size[::-1]]), threshold=0.3)
for result in results:
for score, label_id, box in zip(result["scores"], result["labels"], result["boxes"]):
score, label = score.item(), label_id.item()
box = [round(i, 2) for i in box.tolist()]
print(f"{model.config.id2label[label]}: {score:.2f} {box}")이것은 다음을 출력해야 합니다
cat: 0.87 [14.7, 49.39, 320.52, 469.28] remote: 0.86 [41.08, 72.37, 173.39, 117.2] cat: 0.86 [344.45, 19.43, 639.85, 367.86] remote: 0.61 [334.27, 75.93, 367.92, 188.81] couch: 0.59 [-0.04, 1.34, 639.9, 477.09]
DAB-DETR 모델을 인스턴스화하는 다른 세 가지 방법(선호도에 따라 선택)이 있습니다:
옵션 1: 전체 모델에 대해 사전 학습된 가중치로 DAB-DETR 인스턴스화
from transformers import DabDetrForObjectDetection
model = DabDetrForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50", device_map="auto")옵션 2: Transformer는 무작위 초기화 가중치, backbone은 사전 학습된 가중치를 사용하여 DAB-DETR을 인스턴스화
from transformers import DabDetrConfig, DabDetrForObjectDetection
config = DabDetrConfig()
model = DabDetrForObjectDetection(config)옵션 3: backbone + Transformer에 무작위로 초기화된 가중치를 사용하여 DAB-DETR 인스턴스화
config = DabDetrConfig() model = DabDetrForObjectDetection(config)
DabDetrConfig
클래스 transformers.DabDetrConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0id2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneis_encoder_decoder: bool = Truebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonenum_queries: int = 300encoder_layers: int = 6encoder_ffn_dim: int = 2048encoder_attention_heads: int = 8decoder_layers: int = 6decoder_ffn_dim: int = 2048decoder_attention_heads: int = 8activation_function: str = 'prelu'hidden_size: int = 256dropout: float | int = 0.1attention_dropout: float | int = 0.0activation_dropout: float | int = 0.0init_std: float = 0.02init_xavier_std: float = 1.0auxiliary_loss: bool = Falsedilation: bool = Falseclass_cost: int = 2bbox_cost: int = 5giou_cost: int = 2cls_loss_coefficient: int = 2bbox_loss_coefficient: int = 5giou_loss_coefficient: int = 2focal_alpha: float = 0.25temperature_height: int = 20temperature_width: int = 20query_dim: int = 4random_refpoints_xy: bool = Falsekeep_query_pos: bool = Falsenum_patterns: int = 0normalize_before: bool = Falsesine_position_embedding_scale: float | None = Noneinitializer_bias_prior_prob: float | None = Nonetie_word_embeddings: bool = True )
매개변수
- is_encoder_decoder (
bool, 선택 사항, 기본값True) — 모델이 인코더/디코더로 사용되는지 여부를 나타냅니다. - backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], 선택) — backbone 모델의 설정입니다. - num_queries (
int, 선택 사항, 기본값 300) — 객체 쿼리의 수, 즉 감지 슬롯의 수입니다. 이는 DabDetrModel이 단일 이미지에서 감지할 수 있는 최대 객체 수입니다. COCO의 경우 100개의 쿼리를 권장합니다. - encoder_layers (
int, 선택 사항, 기본값6) — Transformer 인코더의 숨겨진 레이어 수입니다. 설정하지 않으면num_layers와 동일한 값을 사용합니다. - encoder_ffn_dim (
int, 선택 사항, 기본값2048) — 인코더의 “중간” 레이어(일반적으로 feed-forward 레이어라고도 함)의 차원입니다. - encoder_attention_heads (
int, 선택 사항, 기본값8) — Transformer 인코더의 각 어텐션 레이어에 사용할 어텐션 헤드 수입니다. - decoder_layers (
int, 선택 사항, 기본값6) — Transformer decoder의 hidden layer 수입니다. 설정하지 않으면num_layers와 동일한 값을 사용합니다. - decoder_ffn_dim (
int, 선택 사항, 기본값2048) — decoder의 “intermediate”(일반적으로 feed-forward라고도 함) 레이어의 차원입니다. - decoder_attention_heads (
int, 선택 사항, 기본값8) — Transformer decoder의 각 attention layer에 사용할 attention head 수입니다. - activation_function (
str, 선택 사항, 기본값prelu) — 디코더의 비선형 활성화 함수(함수 또는 문자열). 예를 들어"gelu","relu","silu"등. - hidden_size (
int, 선택 사항, 기본값256) — 숨겨진 표현의 차원입니다. - dropout (
Union[float, int], 선택 사항, 기본값0.1) — 모든 dropout 레이어에 적용할 비율입니다. - attention_dropout (
Union[float, int], 선택 사항, 기본값0.0) — Attention 확률에 적용할 dropout 비율입니다. - activation_dropout (
Union[float, int], 선택 사항, 기본값0.0) — 완전 연결 레이어 내부 활성화에 적용할 dropout 비율입니다. - init_std (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - init_xavier_std (
float, 선택 사항, 기본값1.0) — 크로스 어텐션 가중치의 Xavier 초기화에 사용되는 스케일링 계수입니다. - auxiliary_loss (
bool, 선택 사항, 기본값False) — 보조 디코딩 손실(각 디코더 레이어의 손실)을 사용할지 여부입니다. - dilation (
bool, 선택 사항, 기본값False) — 마지막 컨볼루션 블록(DC5)에서 stride를 dilation으로 대체할지 여부입니다.use_timm_backbone=True인 경우에만 지원됩니다. - class_cost (
int, 선택 사항, 기본값2) — 헝가리안 매칭 비용에서 분류 오류의 상대적 가중치입니다. - bbox_cost (
int, 선택 사항, 기본값5) — 헝가리안 매칭 비용에서 L1 바운딩 박스 오차의 상대적 가중치입니다. - giou_cost (
int, 선택 사항, 기본값2) — 헝가리안 매칭 비용에서 일반화 IoU 손상의 상대적 가중치. - cls_loss_coefficient (
int, 선택 사항, 기본값2) — panoptic segmentation loss에서 분류 손실의 상대적 가중치입니다. - bbox_loss_coefficient (
int, 선택 사항, 기본값5) — panoptic segmentation loss에서 L1 bounding box loss의 상대적 가중치입니다. - giou_loss_coefficient (
int, 선택 사항, 기본값2) — panoptic segmentation loss에서 generalized IoU loss의 상대적 가중치입니다. - focal_alpha (
float, 선택 사항, 기본값0.25) — focal loss의 Alpha 매개변수입니다. - temperature_height (
int, 선택 사항, 기본값 20) — 위치 주의(HEIGHT)의 평탄도를 조정하는 Temperature 매개변수 - temperature_width (
int, 선택 사항, 기본값 20) — 위치 주의력(WIDTH)의 평탄도를 조정하는 Temperature 매개변수 - query_dim (
int, 선택 사항, 기본값 4) — Query dimension 파라미터는 출력 벡터의 크기를 나타냅니다. - random_refpoints_xy (
bool, 선택 사항, 기본값False) — 앵커 박스의 x, y 좌표를 무작위 초기화로 고정할지 여부입니다. - keep_query_pos (
bool, 선택 사항, 기본값False) — 모든 decoder 레이어에서 object query의 투영된 positional embedding을 원래 query(key)에 연결할지 여부. - num_patterns (
int, 선택, 기본값 0) — 패턴 임베딩의 개수. - normalize_before (
bool, 선택 사항, 기본값False) — Encoder에서 정규화 레이어를 사용할지 여부입니다. - sine_position_embedding_scale (
float, 선택 사항, 기본값 ‘None’) — 정규화된 위치 인코딩에 적용되는 스케일링 계수입니다. - initializer_bias_prior_prob (
float, 선택 사항) —enc_score_head와class_embed의 bias를 초기화하는 데 사용되는 bias initializer의 사전 확률입니다.None인 경우, 모델 가중치를 초기화할 때prior_prob을prior_prob = 1 / (num_labels + 1)로 계산합니다. - tie_word_embeddings (
bool, 선택, 기본값True) — 모델의tied_weights_keys매핑에 따라 가중치 임베딩을 묶을지 여부.
이것은 Dab DetrModel의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인수를 기반으로 Dab Detr 모델을 인스턴스화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 IDEA-Research/dab-detr-resnet-50과 유사한 설정이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
예:
>>> from transformers import DabDetrConfig, DabDetrModel
>>> # Initializing a DAB-DETR IDEA-Research/dab-detr-resnet-50 style configuration
>>> configuration = DabDetrConfig()
>>> # Initializing a model (with random weights) from the IDEA-Research/dab-detr-resnet-50 style configuration
>>> model = DabDetrModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDabDetrModel
클래스 transformers.DabDetrModel
< source >( config: DabDetrConfig )
매개변수
- config (DabDetrConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
특정 헤드가 없는 맨 DAB-DETR 모델(백본과 인코더-디코더 Transformer로 구성)은 원시 hidden-states, 중간 hidden states, reference points, 출력 좌표를 출력합니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DabDetrModelOutput or tuple(torch.Tensor)
매개변수
- pixel_values (
torch.Tensor, shape(batch_size, num_channels, image_size, image_size)) — 입력 이미지에 해당하는 텐서입니다. 픽셀 값은image_processor_class를 사용하여 얻을 수 있습니다. 자세한 내용은image_processor_class.__call__를 참조하세요. (processor_class는 이미지 처리에image_processor_class를 사용합니다.) - pixel_mask (
torch.LongTensor다음 형식의(batch_size, height, width), 선택 사항) — 패딩 픽셀 값에 대한 attention을 수행하지 않도록 하는 마스크. [0, 1]에서 선택된 마스크 값: 실제 픽셀(즉, 마스크되지 않은 픽셀)은 1, 패딩 픽셀(즉, 마스크된 픽셀)은 0. attention 마스크란 무엇일까요?[0, 1]:- 실제 픽셀(즉, 마스크가 적용되지 않은 픽셀)에 대해 1
- 패딩(즉, 마스크 처리된) 픽셀은 0
- decoder_attention_mask (
torch.Tensor, shape(batch_size, num_queries), 선택 사항) — 기본적으로 사용되지 않습니다. 객체 쿼리를 마스킹하는 데 사용할 수 있습니다. - encoder_outputs (
torch.Tensor, 선택 사항) — (last_hidden_state, 선택 사항:hidden_states, 선택 사항:attentions)로 구성된 Tuplelast_hidden_state의 shape은(batch_size, sequence_length, hidden_size), 선택 사항)이며, 인코더의 마지막 레이어 출력에서 생성된 hidden-states 시퀀스입니다. 디코더의 cross-attention에 사용됩니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 플랫된 특징 맵(백본 + 투영 레이어의 출력)을 전달하는 대신, 이미지의 플랫된 표현을 직접 전달하도록 선택할 수 있습니다. - decoder_inputs_embeds (
torch.Tensor, shape(batch_size, num_queries, hidden_size), 선택 사항) — 제로 텐서로 쿼리를 초기화하는 대신 임베디드 표현을 직접 전달할 수 있습니다. - output_attentions (
bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의attentions항목을 참조하세요. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
DabDetrModelOutput 또는 tuple(torch.Tensor)
DabDetrModelOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(DabDetrConfig)과 입력에 따라 다양한 요소를 포함합니다.
DabDetrModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size)) — 모델의 decoder 마지막 레이어 출력의 hidden-state 시퀀스입니다.past_key_values가 사용되면,(batch_size, 1, hidden_size)형태의 시퀀스의 마지막 hidden-state만 출력됩니다.past_key_values (
EncoderDecoderCache, 선택 사항,use_cache=True가 전달되었거나config.use_cache=True인 경우 반환됨) — EncoderDecoderCache 인스턴스입니다. 자세한 내용은 kv 캐시 가이드를 참고하세요.순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록과 크로스 어텐션 블록의 key 및 value)를 포함합니다(입력
past_key_values참조).decoder_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어 출력의 decoder hidden-states와 선택적인 초기 embedding 출력
decoder_attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True가 전달되거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는, attention softmax 이후의 decoder의 attention 가중치입니다.
cross_attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.decoder의 cross-attention 레이어에서 attention softmax를 적용한 후, cross-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention 가중치입니다.
encoder_last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 모델 인코더의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.encoder_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되었거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어 출력의 인코더 hidden-states와 선택적인 초기 임베딩 출력.
encoder_attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True가 전달되거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는, attention softmax 이후의 인코더 attention 가중치입니다.
intermediate_hidden_states (
torch.Tensor, shape(config.decoder_layers, batch_size, sequence_length, hidden_size), 선택 사항,config.auxiliary_loss=True일 때 반환됨) — 중간 디코더 활성화 값, 즉 각 디코더 레이어의 출력으로, 각각 layernorm을 거친 값입니다.reference_points (
torch.Tensor, shape(config.decoder_layers, batch_size, num_queries, 2 (anchor points))) — 참조 점(디코더의 각 레이어의 참조 점).
예:
>>> from transformers import AutoImageProcessor, AutoModel
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> model = AutoModel.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> # forward pass
>>> outputs = model(**inputs)
>>> # the last hidden states are the final query embeddings of the Transformer decoder
>>> # these are of shape (batch_size, num_queries, hidden_size)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 300, 256]DabDetrForObjectDetection
클래스 transformers.DabDetrForObjectDetection
< source >( config: DabDetrConfig )
매개변수
- config (DabDetrConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
COCO detection과 같은 작업을 위해, backbone과 encoder-decoder Transformer로 구성된 DAB_DETR Model 위에 객체 탐지 헤드가 있는 모델입니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DabDetrObjectDetectionOutput or tuple(torch.Tensor)
매개변수
- pixel_values (
torch.Tensor, shape(batch_size, num_channels, image_size, image_size)) — 입력 이미지에 해당하는 텐서입니다. 픽셀 값은image_processor_class를 사용하여 얻을 수 있습니다. 자세한 내용은image_processor_class.__call__를 참조하세요. (processor_class는 이미지 처리에image_processor_class를 사용합니다.) - pixel_mask (
torch.LongTensor다음 형식의(batch_size, height, width), 선택 사항) — 패딩 픽셀 값에 대한 attention을 수행하지 않도록 하는 마스크. [0, 1]에서 선택된 마스크 값: 실제 픽셀(즉, 마스크되지 않은 픽셀)은 1, 패딩 픽셀(즉, 마스크된 픽셀)은 0. attention 마스크란 무엇일까요?[0, 1]:- 실제 픽셀(즉, 마스크가 적용되지 않은 픽셀)에 대해 1
- 패딩(즉, 마스크 처리된) 픽셀은 0
- decoder_attention_mask (
torch.Tensor, shape(batch_size, num_queries), 선택 사항) — 기본적으로 사용되지 않습니다. 객체 쿼리를 마스킹하는 데 사용할 수 있습니다. - encoder_outputs (
torch.Tensor, 선택 사항) — (last_hidden_state, 선택 사항:hidden_states, 선택 사항:attentions)로 구성된 Tuplelast_hidden_state의 shape은(batch_size, sequence_length, hidden_size), 선택 사항)이며, 인코더의 마지막 레이어 출력에서 생성된 hidden-states 시퀀스입니다. 디코더의 cross-attention에 사용됩니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 플랫된 특징 맵(백본 + 투영 레이어의 출력)을 전달하는 대신, 이미지의 플랫된 표현을 직접 전달하도록 선택할 수 있습니다. - decoder_inputs_embeds (
torch.Tensor, shape(batch_size, num_queries, hidden_size), 선택 사항) — 제로 텐서로 쿼리를 초기화하는 대신 임베디드 표현을 직접 전달할 수 있습니다. - labels (
list[Dict], 길이(batch_size,), 선택 사항) — 이분 매칭 손실을 계산하기 위한 라벨. 각 딕셔너리는 최소한 ‘class_labels’와 ‘boxes’라는 두 개의 키를 포함해야 합니다(각각 배치 내 이미지의 클래스 라벨과 바운딩 박스). 클래스 라벨 자체는torch.LongTensor이며 길이는(number of bounding boxes in the image,)이고, boxes는torch.Tensor이며 모양은(number of bounding boxes in the image, 4)입니다. - output_attentions (
bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의attentions항목을 참조하세요. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
DabDetrObjectDetectionOutput 또는 tuple(torch.Tensor)
DabDetrObjectDetectionOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(DabDetrConfig)과 입력에 따라 다양한 요소를 포함합니다.
DabDetrForObjectDetection의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(1,), 선택 사항,labels가 제공될 때 반환됨) — 클래스 예측에 대한 음의 로그 가능도(교차 엔트로피)와 바운딩 박스 손실의 선형 결합으로 계산된 총 손실입니다. 후자는 L1 손실과 일반화된 스케일 불변 IoU 손실의 선형 결합으로 정의됩니다.loss_dict (
Dict, 선택) — 개별 손실 값을 포함하는 사전입니다. 로깅에 유용합니다.logits (
torch.Tensor, shape(batch_size, num_queries, num_classes + 1)) — 모든 query에 대한 분류 logits(no-object 포함).pred_boxes (
torch.Tensor, shape(batch_size, num_queries, 4)) — 모든 쿼리에 대한 정규화된 박스 좌표로, (center_x, center_y, width, height)로 표현됩니다. 이 값들은 배치 내 각 개별 이미지의 크기에 대해 [0, 1] 범위로 정규화되어 있습니다(가능한 패딩은 무시).~DabDetrImageProcessor.post_process_object_detection를 사용하여 정규화되지 않은 바운딩 박스를 가져올 수 있습니다.auxiliary_outputs (
list[Dict], 선택) — 선택 사항이며, 보조 손실이 활성화된 경우(즉,config.auxiliary_loss가True로 설정된 경우)와 라벨이 제공된 경우에만 반환됩니다. 각 디코더 레이어에 대해 위의 두 키(logits와pred_boxes)를 포함하는 사전의 목록입니다.last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 디코더 마지막 레이어 출력의 hidden-state 시퀀스입니다.decoder_hidden_states (
tuple[torch.Tensor], 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 디코더의 Hidden-states와 초기 임베딩 출력을 더한 값.
decoder_attentions (
tuple[torch.Tensor], 선택 사항,output_attentions=True가 전달되거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는, attention softmax 이후의 decoder의 attention 가중치입니다.
cross_attentions (
tuple[torch.Tensor], 선택 사항,output_attentions=True가 전달되거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.decoder의 cross-attention 레이어에서 attention softmax를 적용한 후, cross-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention 가중치입니다.
encoder_last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 모델 인코더의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.encoder_hidden_states (
tuple[torch.Tensor], 선택 사항,output_hidden_states=True가 전달되었거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 인코더의 Hidden-states와 초기 임베딩 출력을 더한 값.
encoder_attentions (
tuple[torch.Tensor], 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는, attention softmax 이후의 인코더 attention 가중치입니다.
예:
>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> model = AutoModelForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
>>> outputs = model(**inputs)
>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([(image.height, image.width)])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.5, target_sizes=target_sizes)[0]
>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
... box = [round(i, 2) for i in box.tolist()]
... print(
... f"Detected {model.config.id2label[label.item()]} with confidence "
... f"{round(score.item(), 3)} at location {box}"
... )
Detected remote with confidence 0.833 at location [38.31, 72.1, 177.63, 118.45]
Detected cat with confidence 0.831 at location [9.2, 51.38, 321.13, 469.0]
Detected cat with confidence 0.804 at location [340.3, 16.85, 642.93, 370.95]
Detected remote with confidence 0.683 at location [334.48, 73.49, 366.37, 190.01]
Detected couch with confidence 0.535 at location [0.52, 1.19, 640.35, 475.1]