Transformers documentation
ViTDet
이 모델은 2022-03-30에 HF papers에 게시되었으며, 2023-08-29에 Hugging Face Transformers에 기여되었습니다.
ViTDet
개요
ViTDet 모델은 Yanghao Li, Hanzi Mao, Ross Girshick, Kaiming He가 Exploring Plain Vision Transformer Backbones for Object Detection에서 제안했습니다. VitDet은 객체 탐지 작업에 평범한 Vision Transformer를 활용합니다.
해당 논문의 초록은 다음과 같습니다:
객체 탐지를 위한 백본 네트워크로 계층 구조가 없는 일반 Vision Transformer(ViT)를 탐구합니다. 이 설계는 사전 학습을 위해 계층 구조 백본을 재설계할 필요 없이, 원래 ViT 아키텍처를 객체 탐지에 맞게 미세 조정할 수 있게 합니다. 미세 조정을 위한 최소한의 적응만으로도, 일반 백본 탐지기는 경쟁력 있는 결과를 달성할 수 있습니다. 놀랍게도, (i) 일반적인 FPN 설계 없이 단일 스케일 특징 맵에서 간단한 특징 피라미드를 구성하는 것만으로 충분하며, (ii) 매우 적은 수의 크로스 윈도우 전파 블록을 보조로 사용하여 윈도우 어텐션(시프트 없이)을 사용하는 것만으로 충분하다는 것을 관찰했습니다. Masked Autoencoders(MAE)로 사전 학습된 일반 ViT 백본을 사용하는 ViTDet이라는 이름의 우리의 탐지기는, 모두 계층 구조 백본에 기반했던 이전의 선두 방법들과 경쟁할 수 있으며, ImageNet-1K 사전 학습만으로도 COCO 데이터셋에서 최대 61.3 AP_box에 도달합니다. 우리의 연구가 일반 백본 탐지기에 대한 연구에 관심을 끌기를 바랍니다.
이 모델은 nielsr님이 기여했습니다. 원본 코드는 여기에서 찾을 수 있습니다.
팁:
- 현재 backbone만 사용할 수 있습니다.
VitDetConfig
클래스 transformers.VitDetConfig
< 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 = 0is_encoder_decoder: bool = Falseid2label: 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 = Nonehidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12mlp_ratio: int = 4hidden_act: str = 'gelu'dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06image_size: int | list[int] | tuple[int, int] = 224pretrain_image_size: int | list[int] | tuple[int, int] = 224patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3qkv_bias: bool = Truedrop_path_rate: float | int = 0.0window_block_indices: list[int] | tuple[int, ...] = ()residual_block_indices: list[int] | tuple[int, ...] = ()use_absolute_position_embeddings: bool = Trueuse_relative_position_embeddings: bool = Falsewindow_size: int = 0_out_features: list[str] | None = None_out_indices: list[int] | None = None )
매개변수
- hidden_size (
int, 선택 사항, 기본값768) — 숨겨진 표현의 차원입니다. - num_hidden_layers (
int, 선택 사항, 기본값12) — Transformer 디코더의 숨겨진 레이어 수. - num_attention_heads (
int, 선택 사항, 기본값12) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다. - mlp_ratio (
int, 선택 사항, 기본값4) — MLP 은닉 차원과 임베딩 차원의 비율입니다. - hidden_act (
str, 선택 사항, 기본값gelu) — 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - dropout_prob (
Union[float, int], 선택 사항, 기본값0.0) — 모든 dropout 레이어에 적용할 비율입니다. - initializer_range (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - layer_norm_eps (
float, 선택 사항, 기본값1e-06) — 레이어 정규화 레이어에서 사용되는 epsilon 값입니다. - image_size (
Union[int, list[int], tuple[int, int]], 선택 사항, 기본값224) — 각 이미지의 크기(해상도). - pretrain_image_size (
int, 선택 사항, 기본값 224) — 사전 학습 시 각 이미지의 크기(해상도)입니다. - patch_size (
Union[int, list[int], tuple[int, int]], 선택 사항, 기본값16) — 각 패치의 크기(해상도)입니다. - num_channels (
int, 선택 사항, 기본값3) — 입력 채널의 수입니다. - qkv_bias (
bool, 선택 사항, 기본값True) — 쿼리, 키, 값에 bias를 추가할지 여부. - drop_path_rate (
Union[float, int], 선택 사항, 기본값0.0) — 패치 융합에 사용할 드롭 패스 비율입니다. - window_block_indices (
list[int], 선택 사항, 기본값[]) — 일반적인 전역 self-attention 대신 window attention을 적용해야 하는 블록의 인덱스 목록입니다. - residual_block_indices (
list[int], 선택 사항, 기본값[]) — MLP 뒤에 추가 residual block이 필요한 block의 인덱스 목록입니다. - use_absolute_position_embeddings (
bool, 선택 사항, 기본값True) — 절대 위치 임베딩을 사용할지 여부. - use_relative_position_embeddings (
bool, 선택 사항, 기본값False) — attention map에 상대 위치 임베딩을 추가할지 여부. - window_size (
int, 선택 사항, 기본값 0) — Attention window의 크기입니다.
이것은 VitDetModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Vitdet 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 인스턴스화하면 google/vitdet-base-patch16-224와 유사한 구성이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
예:
>>> from transformers import VitDetConfig, VitDetModel
>>> # Initializing a VitDet configuration
>>> configuration = VitDetConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = VitDetModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVitDetModel
class transformers.VitDetModel
< source >( config: VitDetConfig )
매개변수
- config (VitDetConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
특정 헤드가 위에 없는 Vitdet Model로, 원시 hidden-states를 출력합니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutput 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를 사용합니다). - output_attentions (
bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의attentions항목을 참조하세요. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
BaseModelOutput 또는 tuple(torch.Tensor)
torch.Tensor의 튜플 또는 BaseModelOutput (return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(VitDetConfig)과 입력에 따라 다양한 요소를 포함합니다.
VitDetModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size)) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.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와 선택적 초기 임베딩 출력을 포함합니다.
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 VitDetConfig, VitDetModel
>>> import torch
>>> config = VitDetConfig()
>>> model = VitDetModel(config)
>>> pixel_values = torch.randn(1, 3, 224, 224)
>>> with torch.no_grad():
... outputs = model(pixel_values)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 768, 14, 14]