Transformers documentation
FocalNet
이 모델은 2022-03-22에 HF papers에 게시되었으며, 2023-04-23에 Hugging Face Transformers에 기여되었습니다.
FocalNet
개요
FocalNet 모델은 Jianwei Yang, Chunyuan Li, Xiyang Dai, Lu Yuan, Jianfeng Gao가 Focal Modulation Networks에서 제안했습니다. FocalNet은 ViT와 Swin와 같은 모델에서 사용되는 self-attention을 완전히 제거하고, 비전에서 토큰 간 상호작용을 모델링하기 위해 focal modulation 메커니즘을 사용합니다. 저자들은 FocalNet이 이미지 분류, 객체 감지, 분할 작업에서 유사한 계산 비용으로 self-attention 기반 모델보다 우수한 성능을 보인다고 주장합니다.
해당 논문의 초록은 다음과 같습니다:
본 논문에서는 비전 도메인에서 토큰 간 상호작용을 모델링하기 위해 셀프 어텐션(SA)을 완전히 초점 모듈레이션 메커니즘으로 대체하는 초점 모듈레이션 네트워크(FocalNets)를 제안합니다. 초점 모듈레이션은 세 가지 구성 요소로 이루어져 있습니다: (i) 짧은 범위에서 긴 범위에 이르는 시각적 컨텍스트를 인코딩하기 위해 딥스 와이즈 컨볼루션 레이어 스택을 사용하여 구현되는 계층적 컨텍스트화, (ii) 각 쿼리 토큰의 콘텐츠에 기반하여 컨텍스트를 선택적으로 수집하는 게이트드 어그리게이션, (iii) 어그리게이트된 컨텍스트를 쿼리에 주입하기 위한 엘리먼트 와이즈 모듈레이션 또는 아핀 변환. 광범위한 실험 결과, FocalNets는 이미지 분류, 객체 감지, 분할 작업에서 유사한 계산 비용으로 최첨단 SA 기반 모델(예: Swin, Focal Transformers)보다 우수한 성능을 보였습니다. 구체적으로, tiny 및 base 크기의 FocalNets는 ImageNet-1K에서 각각 82.3%와 83.9%의 top-1 정확도를 달성했습니다. 224 해상도로 ImageNet-22K에서 사전 학습된 후, 224와 384 해상도로 파인튜닝할 때 각각 86.5%와 87.3%의 top-1 정확도를 달성했습니다. 다운스트림 작업으로 이전할 때 FocalNets는 명확한 우월성을 보였습니다. Mask R-CNN을 사용한 객체 감지에서, 1\times 스케줄로 학습된 FocalNet base는 Swin 대비 2.1포인트 높은 성능을 보였으며, 이미 3\times 스케줄로 학습된 Swin(49.0 대 48.5)을 능가했습니다. UPerNet을 사용한 의미론적 분할에서, 단일 스케일의 FocalNet base는 Swin보다 2.4 높았으며, 멀티 스케일 Swin(50.5 대 49.7)을 능가했습니다. 대형 FocalNet과 Mask2former를 사용하여 ADE20K 의미론적 분할에서 58.5 mIoU, COCO 팬옵틱 분할에서 57.9 PQ를 달성했습니다. 대형 FocalNet과 DINO를 사용하여 COCO minival과 test-dev에서 각각 64.3과 64.4 mAP를 달성하여, Swinv2-G와 BEIT-3와 같이 훨씬 더 큰 어텐션 기반 모델 위에 새로운 SoTA를 수립했습니다.
이 모델은 nielsr님이 기여했습니다. 원본 코드는 여기에서 찾을 수 있습니다.
FocalNetConfig
클래스 transformers.FocalNetConfig
< 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 = Noneimage_size: int | list[int] | tuple[int, int] = 224patch_size: int | list[int] | tuple[int, int] = 4num_channels: int = 3embed_dim: int = 96use_conv_embed: bool = Falsehidden_sizes: list[int] | tuple[int, ...] = (192, 384, 768, 768)depths: list[int] | tuple[int, ...] = (2, 2, 6, 2)focal_levels: list[int] | tuple[int, ...] = (2, 2, 2, 2)focal_windows: list[int] | tuple[int, ...] = (3, 3, 3, 3)hidden_act: str = 'gelu'mlp_ratio: float = 4.0hidden_dropout_prob: float | int = 0.0drop_path_rate: float | int = 0.1use_layerscale: bool = Falselayerscale_value: float = 0.0001use_post_layernorm: bool = Falseuse_post_layernorm_in_modulation: bool = Falsenormalize_modulator: bool = Falseinitializer_range: float = 0.02layer_norm_eps: float = 1e-05encoder_stride: int = 32_out_features: list[str] | None = None_out_indices: list[int] | None = None )
매개변수
- image_size (
Union[int, list[int], tuple[int, int]], 선택 사항, 기본값224) — 각 이미지의 크기(해상도). - patch_size (
Union[int, list[int], tuple[int, int]], 선택 사항, 기본값4) — 각 패치의 크기(해상도)입니다. - num_channels (
int, 선택 사항, 기본값3) — 입력 채널의 수입니다. - embed_dim (
int, 선택 사항, 기본값96) — 임베딩 및 숨겨진 상태의 차원입니다. - use_conv_embed (
bool, 선택 사항, 기본값False) — 컨볼루션 임베딩을 사용할지 여부입니다. 저자들은 컨볼루션 임베딩을 사용하면 일반적으로 성능이 향상된다고 언급했지만, 기본적으로는 사용하지 않습니다. - hidden_sizes (
Union[list[int], tuple[int, ...]], 선택 사항, 기본값(192, 384, 768, 768)) — 모델의 각 단계에서의 차원(숨김 크기). - depths (
Union[list[int], tuple[int, ...]], 선택 사항, 기본값(2, 2, 6, 2)) — Transformer의 각 레이어 깊이. - focal_levels (
list(int), 선택 사항, 기본값[2, 2, 2, 2]) — 인코더의 각 단계에서 해당 레이어의 초점 레벨 수입니다. - focal_windows (
list(int), 선택 사항, 기본값[3, 3, 3, 3]) — 인코더의 각 단계에서 해당 레이어의 Focal 윈도우 크기입니다. - hidden_act (
str, 선택 사항, 기본값gelu) — 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - mlp_ratio (
float, 선택 사항, 기본값4.0) — 임베딩 차원에 대한 MLP 숨겨진 차원의 비율입니다. - hidden_dropout_prob (
float, 선택 사항, 기본값 0.0) — 임베딩 및 인코더의 모든 완전 연결 계층에 적용되는 dropout 확률입니다. - drop_path_rate (
Union[float, int], 선택 사항, 기본값0.1) — 패치 융합에 사용할 드롭 패스 비율입니다. - use_layerscale (
bool, 선택 사항, 기본값False) — 인코더에서 layer scale을 사용할지 여부. - layerscale_value (
float, 선택 사항, 기본값 0.0001) — 레이어 스케일의 초기 값입니다. - use_post_layernorm (
bool, 선택 사항, 기본값False) — 인코더에서 post layer normalization을 사용할지 여부입니다. - use_post_layernorm_in_modulation (
bool, 선택 사항, 기본값False) — modulation layer에서 post layer normalization을 사용할지 여부. - normalize_modulator (
bool, 선택 사항, 기본값False) — modulator를 정규화할지 여부입니다. - initializer_range (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - layer_norm_eps (
float, 선택 사항, 기본값1e-05) — 레이어 정규화 레이어에서 사용되는 epsilon 값입니다. - encoder_stride (
int, 선택 사항, 기본값 32) — masked image modeling에서 decoder head의 공간 해상도를 높이는 배율입니다.
이것은 FocalNetModel의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Focalnet 모델을 인스턴스화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 microsoft/focalnet-tiny와 유사한 설정이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
예:
>>> from transformers import FocalNetConfig, FocalNetModel
>>> # Initializing a FocalNet microsoft/focalnet-tiny style configuration
>>> configuration = FocalNetConfig()
>>> # Initializing a model (with random weights) from the microsoft/focalnet-tiny style configuration
>>> model = FocalNetModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configFocalNetModel
class transformers.FocalNetModel
< source >( config: FocalNetConfigadd_pooling_layer = Trueuse_mask_token = False )
매개변수
- config (FocalNetConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
- add_pooling_layer (
bool, 선택 사항, 기본값True) — pooling layer를 추가할지 여부 - use_mask_token (
bool, 선택 사항, 기본값False) — 마스크 이미지 모델링에 마스크 토큰을 사용할지 여부입니다.
특정 헤드가 위에 없는 상태에서 원시 hidden-states를 출력하는 기본 Focalnet 모델입니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonebool_masked_pos: typing.Optional[torch.BoolTensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → FocalNetModelOutput or tuple(torch.Tensor)
매개변수
- pixel_values (
torch.Tensor, shape(batch_size, num_channels, image_size, image_size), 선택 사항) — 입력 이미지에 해당하는 텐서입니다. 픽셀 값은 BitImageProcessor를 사용하여 얻을 수 있습니다. 자세한 내용은 BitImageProcessor.call()를 참조하세요 (processor_class는 이미지 처리에 BitImageProcessor를 사용합니다). - bool_masked_pos (
torch.BoolTensor, shape(batch_size, num_patches)) — Boolean masked positions. 어떤 patch가 mask된 것(1)이고 어떤 patch가 mask되지 않은 것(0)인지를 나타냅니다. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
FocalNetModelOutput 또는 tuple(torch.Tensor)
FocalNetModelOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되거나 config.return_dict=False인 경우)로, FocalNetConfig 및 입력에 따라 다양한 요소를 포함합니다.
FocalNetModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.pooler_output (
torch.Tensor, shape(batch_size, hidden_size), 선택 사항,add_pooling_layer=True가 전달될 때 반환됨) — 마지막 레이어 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와 선택적 초기 임베딩 출력을 포함합니다.
reshaped_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(임베딩 출력 1개 + 각 단계의 출력 1개)로, shape는(batch_size, hidden_size, height, width)입니다.각 레이어의 출력에서 모델의 Hidden-states와 공간 차원을 포함하도록 재구성된 초기 임베딩 출력을 더한 값.
FocalNetForMaskedImageModeling
class transformers.FocalNetForMaskedImageModeling
< source >( config: FocalNetConfig )
매개변수
- config (FocalNetConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
마스크 이미지 모델링을 위해 상단에 디코더가 있는 FocalNet 모델.
이것은 SimMIM의 구현과 동일한 방식을 따릅니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonebool_masked_pos: typing.Optional[torch.BoolTensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → FocalNetMaskedImageModelingOutput or tuple(torch.Tensor)
매개변수
- pixel_values (
torch.Tensor, shape(batch_size, num_channels, image_size, image_size), 선택 사항) — 입력 이미지에 해당하는 텐서입니다. 픽셀 값은 BitImageProcessor를 사용하여 얻을 수 있습니다. 자세한 내용은 BitImageProcessor.call()를 참조하세요 (processor_class는 이미지 처리에 BitImageProcessor를 사용합니다). - bool_masked_pos (
torch.BoolTensor, shape(batch_size, num_patches)) — Boolean masked positions. 어떤 patch가 mask된 것(1)이고 어떤 patch가 mask되지 않은 것(0)인지를 나타냅니다. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
FocalNetMaskedImageModelingOutput 또는 tuple(torch.Tensor)
FocalNetMaskedImageModelingOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(FocalNetConfig)과 입력에 따라 다양한 요소를 포함합니다.
FocalNetForMaskedImageModeling의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(1,), 선택 사항,bool_masked_pos가 제공될 때 반환됨) — Masked image modeling (MLM) 손실.reconstruction (
torch.Tensor, shape(batch_size, num_channels, height, width)) — 재구성된 픽셀 값.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와 선택적 초기 임베딩 출력을 포함합니다.
reshaped_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(임베딩 출력 1개 + 각 단계의 출력 1개)로, shape는(batch_size, hidden_size, height, width)입니다.각 레이어의 출력에서 모델의 Hidden-states와 공간 차원을 포함하도록 재구성된 초기 임베딩 출력을 더한 값.
예:
>>> from transformers import AutoImageProcessor, FocalNetConfig, FocalNetForMaskedImageModeling
>>> import torch
>>> 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("microsoft/focalnet-base-simmim-window6-192")
>>> config = FocalNetConfig()
>>> model = FocalNetForMaskedImageModeling(config)
>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()
>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.logits
>>> list(reconstructed_pixel_values.shape)
[1, 3, 192, 192]FocalNetForImageClassification
class transformers.FocalNetForImageClassification
< source >( config: FocalNetConfig )
매개변수
- config (FocalNetConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
FocalNet 모델은 상단에 이미지 분류 헤드가 있는 경우, 예를 들어 ImageNet과 같이 풀링된 출력 위에 선형 레이어를 배치한 형태입니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → FocalNetImageClassifierOutput or tuple(torch.Tensor)
매개변수
- pixel_values (
torch.Tensor, shape(batch_size, num_channels, image_size, image_size), 선택 사항) — 입력 이미지에 해당하는 텐서입니다. 픽셀 값은 BitImageProcessor를 사용하여 얻을 수 있습니다. 자세한 내용은 BitImageProcessor.call()를 참조하세요 (processor_class는 이미지 처리에 BitImageProcessor를 사용합니다). - labels (
torch.LongTensor, shape(batch_size,), 선택 사항) — 이미지 분류/회귀 손실을 계산하는 데 사용되는 라벨입니다. 인덱스는[0, ..., config.num_labels - 1]범위에 있어야 합니다.config.num_labels == 1인 경우 회귀 손실(평균 제곱 오차)이 계산되고,config.num_labels > 1인 경우 분류 손실(교차 엔트로피)이 계산됩니다. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
FocalNetImageClassifierOutput 또는 tuple(torch.Tensor)
FocalNetImageClassifierOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(FocalNetConfig)과 입력에 따라 다양한 요소를 포함합니다.
FocalNetForImageClassification의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(1,), 선택 사항,labels이 제공될 때 반환됨) — 분류 (또는 config.num_labels==1인 경우 회귀) 손실.logits (
torch.Tensor, shape(batch_size, config.num_labels)) — SoftMax 적용 전 분류(또는 config.num_labels==1인 경우 회귀) 점수.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와 선택적 초기 임베딩 출력을 포함합니다.
reshaped_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(임베딩 출력 1개 + 각 단계의 출력 1개)로, shape는(batch_size, hidden_size, height, width)입니다.각 레이어의 출력에서 모델의 Hidden-states와 공간 차원을 포함하도록 재구성된 초기 임베딩 출력을 더한 값.
예:
>>> from transformers import AutoImageProcessor, FocalNetForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/focalnet-tiny")
>>> model = FocalNetForImageClassification.from_pretrained("microsoft/focalnet-tiny")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...