# SAM3 트래커

    
        
        
    

## 개요

SAM3 (Segment Anything Model 3)은 [SAM 3: Segment Anything with Concepts](https://ai.meta.com/research/publications/sam-3-segment-anything-with-concepts/)에서 소개되었습니다.

Sam3Tracker는 이미지에서 **Promptable Visual Segmentation (PVS)**를 수행합니다. PVS는 인터랙티브 시각 프롬프트(점, 박스, 마스크) 또는 텍스트 입력을 받아 프롬프트마다 **특정 객체 인스턴스**를 분할합니다. 이는 SAM 1과 SAM 2가 집중했던 작업이며, SAM 3은 이를 개선합니다.

Sam3Tracker는 SAM2(Segment Anything Model 2)의 업데이트된 버전으로, 동일한 API를 유지하면서 향상된 성능과 기능을 제공합니다.

해당 논문의 초록은 다음과 같습니다:

*본문에서는 개념 프롬프트를 기반으로 이미지와 비디오에서 객체를 감지, 분할 및 추적하는 통합 모델인 Segment Anything Model (SAM) 3을 소개합니다. 여기서 개념 프롬프트는 짧은 명사 구(예: "yellow school bus"), 이미지 예시, 또는 이 둘의 조합으로 정의됩니다. Promptable Concept Segmentation (PCS)는 이러한 프롬프트를 받아 일치하는 모든 객체 인스턴스에 대한 분할 마스크와 고유한 ID를 반환합니다. PCS를 발전시키기 위해, 이미지와 비디오에 걸쳐 하드 네거티브를 포함한 400만 개의 고유한 개념 라벨을 가진 고품질 데이터셋을 생성하는 확장 가능한 데이터 엔진을 구축했습니다. 우리의 모델은 단일 백본을 공유하는 이미지 수준의 감지기와 메모리 기반 비디오 추적기로 구성됩니다. 인식과 위치 파악은 감지 정확도를 높이는 presence head를 통해 분리됩니다. SAM 3은 이미지와 비디오 PCS 모두에서 기존 시스템의 정확도를 2배로 높이고, 시각 분할 작업에서 이전 SAM의 기능을 향상시킵니다. 우리는 프롬프터블 개념 분할을 위한 새로운 Segment Anything with Concepts (SA-Co) 벤치마크와 함께 SAM 3을 오픈소스로 공개합니다.*

이 모델은 [yonigozlan](https://huggingface.co/yonigozlan)과 [ronghanghu](https://huggingface.co/ronghanghu)에 의해 기여되었습니다.

## 사용 예시

### Pipeline을 이용한 자동 마스크 생성

`mask-generation` 파이프라인을 사용하여 이미지 내 모든 객체를 분할하기 위한 자동 마스크 생성에 Sam3Tracker를 사용할 수 있습니다:

```python
from transformers import pipeline

generator = pipeline("mask-generation", model="facebook/sam3", device=0)
image_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/truck.jpg"
outputs = generator(image_url, points_per_batch=64)

len(outputs["masks"])  # Number of masks generated
39
```

### 기본 이미지 분할

#### 단일 클릭

…

```python
from transformers import Sam3TrackerProcessor, Sam3TrackerModel
import torch
from PIL import Image
import requests

model = Sam3TrackerModel.from_pretrained("facebook/sam3", device_map="auto")
processor = Sam3TrackerProcessor.from_pretrained("facebook/sam3")

image_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/truck.jpg"
raw_image = Image.open(requests.get(image_url, stream=True).raw).convert("RGB")

input_points = [[[[500, 375]]]]  # Single point click, 4 dimensions (image_dim, object_dim, point_per_object_dim, coordinates)
input_labels = [[[1]]]  # 1 for positive click, 0 for negative click, 3 dimensions (image_dim, object_dim, point_label)

inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]

# The model outputs multiple mask predictions ranked by quality score
print(f"Generated {masks.shape[1]} masks with shape {masks.shape}")
Generated 3 masks with shape torch.Size([1, 3, 1500, 2250])
```

#### 정교화를 위한 여러 포인트

세분화를 정밀하게 조정하기 위해 여러 지점을 제공할 수 있습니다:

```python
# Add both positive and negative points to refine the mask
input_points = [[[[500, 375], [1125, 625]]]]  # Multiple points for refinement
input_labels = [[[1, 1]]]  # Both positive clicks

inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]
```

#### Bounding Box 입력

Sam3Tracker는 분할을 위한 바운딩 박스 입력도 지원합니다:

```python
# Define bounding box as [x_min, y_min, x_max, y_max]
input_boxes = [[[75, 275, 1725, 850]]]

inputs = processor(images=raw_image, input_boxes=input_boxes, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]
```

#### 다중 객체 분할

여러 개체를 동시에 세그먼트할 수 있습니다:

```python
# Define points for two different objects
input_points = [[[[500, 375]], [[650, 750]]]]  # Points for two objects in same image
input_labels = [[[1], [1]]]  # Positive clicks for both objects

inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs, multimask_output=False)

# Each object gets its own mask
masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]
print(f"Generated masks for {masks.shape[0]} objects")
Generated masks for 2 objects
```

### 배치 추론

#### 배치된 이미지

효율성을 높이기 위해 여러 이미지를 동시에 처리합니다:

```python
from transformers import Sam3TrackerProcessor, Sam3TrackerModel
import torch
from PIL import Image
import requests

model = Sam3TrackerModel.from_pretrained("facebook/sam3", device_map="auto")
processor = Sam3TrackerProcessor.from_pretrained("facebook/sam3")

# Load multiple images
image_urls = [
    "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/truck.jpg",
    "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/dog_sam.png"
]
raw_images = [Image.open(requests.get(url, stream=True).raw).convert("RGB") for url in image_urls]

# Single point per image
input_points = [[[[500, 375]]], [[[770, 200]]]]  # One point for each image
input_labels = [[[1]], [[1]]]  # Positive clicks for both images

inputs = processor(images=raw_images, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs, multimask_output=False)

# Post-process masks for each image
all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])
print(f"Processed {len(all_masks)} images, each with {all_masks[0].shape[0]} objects")
Processed 2 images, each with 1 objects
```

#### 이미지당 배치된 개체

이미지별로 여러 개체를 세그먼트하기 위해 배치 추론을 사용합니다:

```python
# Multiple objects per image - different numbers of objects per image
input_points = [
    [[[500, 375]], [[650, 750]]],  # Truck image: 2 objects
    [[[770, 200]]]  # Dog image: 1 object
]
input_labels = [
    [[1], [1]],  # Truck image: positive clicks for both objects
    [[1]]  # Dog image: positive click for the object
]

inputs = processor(images=raw_images, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs, multimask_output=False)

all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])
```

#### 배치된 이미지와 배치된 객체, 여러 지점

개체당 여러 지점을 포함하는 복잡한 배치 시나리오를 처리합니다:

```python
# Add groceries image for more complex example
groceries_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/groceries.jpg"
groceries_image = Image.open(requests.get(groceries_url, stream=True).raw).convert("RGB")
raw_images = [raw_images[0], groceries_image]  # Use truck and groceries images

# Complex batching: multiple images, multiple objects, multiple points per object
input_points = [
    [[[500, 375]], [[650, 750]]],  # Truck image: 2 objects with 1 point each
    [[[400, 300]], [[630, 300], [550, 300]]]  # Groceries image: obj1 has 1 point, obj2 has 2 points
]
input_labels = [
    [[1], [1]],  # Truck image: positive clicks
    [[1], [1, 1]]  # Groceries image: positive clicks for refinement
]

inputs = processor(images=raw_images, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs, multimask_output=False)

all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])
```

#### 배치된 바운딩 박스

바운딩 박스 입력을 사용하여 여러 이미지를 처리합니다:

```python
# Multiple bounding boxes per image (using truck and groceries images)
input_boxes = [
    [[75, 275, 1725, 850], [425, 600, 700, 875], [1375, 550, 1650, 800], [1240, 675, 1400, 750]],  # Truck image: 4 boxes
    [[450, 170, 520, 350], [350, 190, 450, 350], [500, 170, 580, 350], [580, 170, 640, 350]]  # Groceries image: 4 boxes
]

# Update images for this example
raw_images = [raw_images[0], groceries_image]  # truck and groceries

inputs = processor(images=raw_images, input_boxes=input_boxes, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs, multimask_output=False)

all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])
print(f"Processed {len(input_boxes)} images with {len(input_boxes[0])} and {len(input_boxes[1])} boxes respectively")
Processed 2 images with 4 and 4 boxes respectively
```

### 이전 마스크를 입력으로 사용

Sam3Tracker는 이전 예측의 마스크를 입력으로 사용하여 분할을 정밀화할 수 있습니다:

```python
# Get initial segmentation
input_points = [[[[500, 375]]]]
input_labels = [[[1]]]
inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

# Use the best mask as input for refinement
mask_input = outputs.pred_masks[:, :, torch.argmax(outputs.iou_scores.squeeze())]

# Add additional points with the mask input
new_input_points = [[[[500, 375], [450, 300]]]]
new_input_labels = [[[1, 1]]]
inputs = processor(
    input_points=new_input_points,
    input_labels=new_input_labels,
    original_sizes=inputs["original_sizes"],
    return_tensors="pt",
).to(model.device)

with torch.no_grad():
    refined_outputs = model(
        **inputs,
        input_masks=mask_input,
        image_embeddings=outputs.image_embeddings,
        multimask_output=False,
    )
```

## Sam3TrackerConfig[[transformers.Sam3TrackerConfig]]

#### transformers.Sam3TrackerConfig[[transformers.Sam3TrackerConfig]]

```python
transformers.Sam3TrackerConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, prompt_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, mask_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, initializer_range: float = 0.02)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/configuration_sam3_tracker.py#L96)

**매개변수:**

vision_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *선택*) : 비전 백본의 config 객체 또는 사전 정의된 config 딕셔너리입니다.

prompt_encoder_config (Union[`dict`, `Sam3TrackerPromptEncoderConfig`], *선택*) : [Sam3TrackerPromptEncoderConfig](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerPromptEncoderConfig)를 초기화하는 데 사용되는 구성 옵션의 사전입니다.

mask_decoder_config (Union[`dict`, `Sam3TrackerMaskDecoderConfig`], *optional*) : [Sam3TrackerMaskDecoderConfig](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerMaskDecoderConfig)을 초기화하는 데 사용되는 구성 옵션의 사전.

initializer_range (`float`, *선택 사항*, 기본값 `0.02`) : 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다.

이것은 Sam3TrackerModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Sam3 Tracker 모델을 초기화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 초기화하면 [facebook/sam3](https://huggingface.co/facebook/sam3)와 유사한 구성이 생성됩니다.

Configuration 객체는 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)를 상속하며, 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)의 문서를 참고하세요.

예:

```python
>>> from transformers import (
...     Sam3TrackerVisionConfig,
...     Sam3TrackerPromptEncoderConfig,
...     Sam3TrackerMaskDecoderConfig,
...     Sam3TrackerModel,
... )

>>> # Initializing a Sam3TrackerConfig with `"facebook/sam3_tracker.1_hiera_tiny"` style configuration
>>> configuration = Sam3TrackerConfig()

>>> # Initializing a Sam3TrackerModel (with random weights) from the `"facebook/sam3_tracker.1_hiera_tiny"` style configuration
>>> model = Sam3TrackerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

>>> # We can also initialize a Sam3TrackerConfig from a Sam3TrackerVisionConfig, Sam3TrackerPromptEncoderConfig, and Sam3TrackerMaskDecoderConfig
>>> # Initializing SAM3_TRACKER vision encoder, memory attention, and memory encoder configurations
>>> vision_config = Sam3TrackerVisionConfig()
>>> prompt_encoder_config = Sam3TrackerPromptEncoderConfig()
>>> mask_decoder_config = Sam3TrackerMaskDecoderConfig()

>>> config = Sam3TrackerConfig(vision_config, prompt_encoder_config, mask_decoder_config)
```

## Sam3TrackerPromptEncoderConfig[[transformers.Sam3TrackerPromptEncoderConfig]]

#### transformers.Sam3TrackerPromptEncoderConfig[[transformers.Sam3TrackerPromptEncoderConfig]]

```python
transformers.Sam3TrackerPromptEncoderConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, hidden_size: int = 256, image_size: int | list[int] | tuple[int, int] = 1008, patch_size: int | list[int] | tuple[int, int] = 14, mask_input_channels: int = 16, num_point_embeddings: int = 4, hidden_act: str = 'gelu', layer_norm_eps: float = 1e-06, scale: int = 1)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/configuration_sam3_tracker.py#L31)

**매개변수:**

hidden_size (`int`, *선택 사항*, 기본값 `256`) : 숨겨진 표현의 차원.

image_size (`Union[int, list[int], tuple[int, int]]`, *선택 사항*, 기본값 `1008`) : 각 이미지의 크기(해상도).

patch_size (`Union[int, list[int], tuple[int, int]]`, *선택*, 기본값 `14`) : 각 패치의 크기(해상도).

mask_input_channels (`int`, *선택 사항*, 기본값 16) : `MaskDecoder` 모듈에 전달될 채널 수입니다.

num_point_embeddings (`int`, *선택 사항*, 기본값 4) : 사용할 포인트 임베딩의 개수입니다.

hidden_act (`str`, *선택 사항*, 기본값 `gelu`) : 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열). 예를 들어, `"gelu"`, `"relu"`, `"silu"` 등이 있습니다.

layer_norm_eps (`float`, *선택 사항*, 기본값 `1e-06`) : 레이어 정규화 레이어에서 사용되는 epsilon 값입니다.

scale (`float`, *선택 사항*, 기본값 1) : 프롬프트 인코더의 스케일 팩터입니다.

이것은 Sam3TrackerModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Sam3 Tracker 모델을 초기화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 초기화하면 [facebook/sam3](https://huggingface.co/facebook/sam3)와 유사한 구성이 생성됩니다.

Configuration 객체는 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)를 상속하며, 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)의 문서를 참고하세요.

## Sam3TrackerMaskDecoderConfig[[transformers.Sam3TrackerMaskDecoderConfig]]

#### transformers.Sam3TrackerMaskDecoderConfig[[transformers.Sam3TrackerMaskDecoderConfig]]

```python
transformers.Sam3TrackerMaskDecoderConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, hidden_size: int = 256, hidden_act: str = 'gelu', mlp_dim: int = 2048, num_hidden_layers: int = 2, num_attention_heads: int = 8, attention_downsample_rate: int = 2, num_multimask_outputs: int = 3, iou_head_depth: int = 3, iou_head_hidden_dim: int = 256, dynamic_multimask_via_stability: bool = True, dynamic_multimask_stability_delta: float = 0.05, dynamic_multimask_stability_thresh: float = 0.98)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/configuration_sam3_tracker.py#L57)

**매개변수:**

hidden_size (`int`, *선택 사항*, 기본값 `256`) : 숨겨진 표현의 차원.

hidden_act (`str`, *선택 사항*, 기본값 `gelu`) : 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열). 예를 들어, `"gelu"`, `"relu"`, `"silu"` 등이 있습니다.

mlp_dim (`int`, *선택 사항*, 기본값 2048) : 양방향 transformer의 MLP 차원입니다.

num_hidden_layers (`int`, *선택 사항*, 기본값 `2`) : Transformer 디코더의 숨겨진 레이어 수.

num_attention_heads (`int`, *선택 사항*, 기본값 `8`) : Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다.

attention_downsample_rate (`int`, *선택 사항*, 기본값 2) : attention 레이어의 다운샘플링 비율입니다.

num_multimask_outputs (`int`, *선택 사항*, 기본값 3) : 멀티마스크 출력의 개수입니다.

iou_head_depth (`int`, *선택 사항*, 기본값 3) : IoU head의 깊이입니다.

iou_head_hidden_dim (`int`, *선택 사항*, 기본값 256) : IoU 헤드의 숨겨진 차원입니다.

dynamic_multimask_via_stability (`bool`, *선택 사항*, 기본값 `True`) : 안정성을 통한 동적 멀티마스크를 사용할지 여부.

dynamic_multimask_stability_delta (`float`, *선택 사항*, 기본값 0.05) : 동적 멀티마스크의 안정성 델타입니다.

dynamic_multimask_stability_thresh (`float`, *선택 사항*, 기본값 0.98) : 동적 멀티마스크의 안정성 임계값입니다.

이것은 Sam3TrackerModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Sam3 Tracker 모델을 초기화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 초기화하면 [facebook/sam3](https://huggingface.co/facebook/sam3)와 유사한 구성이 생성됩니다.

Configuration 객체는 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)를 상속하며, 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)의 문서를 참고하세요.

## Sam3TrackerProcessor[[transformers.Sam3TrackerProcessor]]

#### transformers.Sam3TrackerProcessor[[transformers.Sam3TrackerProcessor]]

```python
transformers.Sam3TrackerProcessor(image_processor, target_size: int | None = None, point_pad_value: int = -10, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/processing_sam3_tracker.py#L36)

**매개변수:**

image_processor (`Sam3ImageProcessor`) : 이미지 프로세서가 필수 입력입니다.

target_size (`int`, *선택 사항*) : 입력 점과 바운딩 박스를 정규화하기 위한 대상 크기(픽셀 단위). 제공되지 않으면 이미지 프로세서의 크기 설정을 기본값으로 사용합니다. 모든 입력 좌표(점과 박스)는 모델에 전달되기 전에 이 크기로 정규화됩니다. 이를 통해 원본 이미지 차원과 관계없이 일관된 좌표 표현을 보장합니다.

point_pad_value (`int`, *선택 사항*, 기본값 -10) : 길이가 다른 시퀀스를 배치할 때 입력 포인트를 패딩하는 데 사용되는 값. 이 값은 패딩된 위치를 표시하는 데 사용되며 좌표 정규화 과정에서도 유지됩니다.

이미지 프로세서를 단일 프로세서로 감싸는 Sam3TrackerProcessor를 생성합니다.

[Sam3TrackerProcessor](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerProcessor)는 [Sam3ImageProcessor](/docs/transformers/main/ko/model_doc/sam3#transformers.Sam3ImageProcessor)의 모든 기능을 제공합니다. 자세한 내용은 [~Sam3ImageProcessor](/docs/transformers/main/ko/model_doc/sam3#transformers.Sam3ImageProcessor)를 참고하세요.

#### __call__[[transformers.Sam3TrackerProcessor.__call__]]

```python
__call__(images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None, segmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None, input_points: typing.Union[list[list[list[list[float]]]], torch.Tensor, NoneType] = None, input_labels: typing.Union[list[list[list[int]]], torch.Tensor, NoneType] = None, input_boxes: typing.Union[list[list[list[float]]], torch.Tensor, NoneType] = None, original_sizes: typing.Union[list[list[float]], torch.Tensor, NoneType] = None, return_tensors: str | transformers.utils.generic.TensorType | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/processing_sam3_tracker.py#L52)

**매개변수:**

images (`Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]`, *선택*) : 전처리할 이미지. 픽셀 값이 0에서 255 범위로 이루어진 단일 이미지 또는 배치 이미지를 기대합니다. 픽셀 값이 0에서 1 범위로 이루어진 이미지를 전달하는 경우 `do_rescale=False`로 설정하세요.

segmentation_maps (`ImageInput`, *선택 사항*) : 처리할 분할 맵입니다.

input_points (`list[list[list[list[float]]]]`, `torch.Tensor`, *선택 사항*) : 프레임에 추가할 점들.

input_labels (`list[list[list[int]]]`, `torch.Tensor`, *선택 사항*) : 포인트의 라벨입니다.

input_boxes (`list[list[list[float]]]`, `torch.Tensor`, *선택 사항*) : 프레임에 추가할 바운딩 박스입니다.

original_sizes (`list[list[float]]`, `torch.Tensor`, *선택 사항*) : 이미지의 원래 크기입니다.

return_tensors (`Union[str, ~utils.generic.TensorType]`, *선택*) : 설정된 경우, 특정 프레임워크의 텐서를 반환합니다. 허용되는 값은 다음과 같습니다: - `'pt'`: PyTorch `torch.Tensor` 객체를 반환합니다. - `'np'`: NumPy `np.ndarray` 객체를 반환합니다.

**반환값:** 다음 필드를 가진 [BatchEncoding](/docs/transformers/main/ko/main_classes/tokenizer#transformers.BatchEncoding)

- `pixel_values` (`torch.Tensor`): 처리된 이미지(들).
- `original_sizes` (`list[list[float]]`): 이미지의 원래 크기입니다.
- `labels` (`torch.Tensor`): 처리된 분할 맵(제공된 경우).
- `input_points` (`torch.Tensor`): 처리된 포인트.
- `input_labels` (`torch.Tensor`): 처리된 라벨입니다.
- `input_boxes` (`torch.Tensor`): 처리된 바운딩 박스입니다.

#### post_process_masks[[transformers.Sam3TrackerProcessor.post_process_masks]]

```python
post_process_masks(masks, original_sizes, mask_threshold = 0.0, binarize = True, max_hole_area = 0.0, max_sprinkle_area = 0.0, apply_non_overlapping_constraints = False, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/processing_sam3_tracker.py#L458)

**매개변수:**

masks (`Union[List[torch.Tensor], List[np.ndarray]]`) : (batch_size, num_channels, height, width) 형식의 mask_decoder에서 생성된 배치된 마스크.

original_sizes (`Union[torch.Tensor, List[Tuple[int,int]]]`) : 이미지가 모델의 예상 입력 형식으로 리사이즈되기 전의 원래 크기입니다. (height, width) 형식으로 제공됩니다.

mask_threshold (`float`, *선택 사항*, 기본값 0.0) : 이진화 및 후처리 작업에 사용되는 임계값.

binarize (`bool`, *선택 사항*, 기본값 `True`) : 마스크를 바이너리화할지 여부.

max_hole_area (`float`, *선택 사항*, 기본값 0.0) : 채울 구멍의 최대 면적.

max_sprinkle_area (`float`, *선택*, 기본값 0.0) : 채울 스프링클의 최대 면적입니다.

apply_non_overlapping_constraints (`bool`, *선택 사항*, 기본값 `False`) : 마스크에 겹치지 않는 제약 조건을 적용할지 여부.

**반환값:** (`torch.Tensor`)

batch_size, num_channels, height, width 형식의 배치된 마스크입니다. 여기서 (height, width)는 original_size로 주어집니다.

패딩을 제거하고 마스크를 원래 이미지 크기로 업스케일링합니다.

## Sam3TrackerModel[[transformers.Sam3TrackerModel]]

#### transformers.Sam3TrackerModel[[transformers.Sam3TrackerModel]]

```python
transformers.Sam3TrackerModel(config: Sam3TrackerConfig)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/modeling_sam3_tracker.py#L772)

**매개변수:**

config ([Sam3TrackerConfig](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerConfig)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

입력 이미지와 입력 점 및 라벨, 박스 또는 마스크를 기반으로 분할 마스크를 생성하는 Segment Anything Model 2 (SAM 2).

이 모델은 [PreTrainedModel](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel)에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대해서는 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법과 동작에 관한 모든 사항은 PyTorch 문서를 참조하세요.

#### forward[[transformers.Sam3TrackerModel.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, input_points: typing.Optional[torch.Tensor] = None, input_labels: typing.Optional[torch.LongTensor] = None, input_boxes: typing.Optional[torch.Tensor] = None, input_masks: typing.Optional[torch.LongTensor] = None, image_embeddings: typing.Optional[torch.Tensor] = None, multimask_output: bool = True, attention_similarity: typing.Optional[torch.Tensor] = None, target_embedding: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/modeling_sam3_tracker.py#L886)

**매개변수:**

pixel_values (`torch.Tensor`, shape `(batch_size, num_channels, image_size, image_size)`, *선택 사항*) : 입력 이미지에 해당하는 텐서입니다. 픽셀 값은 [Sam3ImageProcessor](/docs/transformers/main/ko/model_doc/sam3#transformers.Sam3ImageProcessor)를 사용하여 얻을 수 있습니다. 자세한 내용은 [Sam3ImageProcessor.__call__()](/docs/transformers/main/ko/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__)를 참조하세요 ([Sam3TrackerProcessor](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerProcessor)는 이미지 처리에 [Sam3ImageProcessor](/docs/transformers/main/ko/model_doc/sam3#transformers.Sam3ImageProcessor)를 사용합니다).

input_points (`torch.Tensor`, shape `(batch_size, num_points, 2)`) : 입력 2D 공간 점입니다. prompt encoder가 프롬프트를 인코딩하는 데 사용되며, 일반적으로 훨씬 더 나은 결과를 제공합니다. 이 점들은 list of list of list를 processor에 전달하여 얻을 수 있으며, processor는 이에 해당하는 차원 4의 `torch` 텐서를 생성합니다. 첫 번째 차원은 이미지 배치 크기, 두 번째 차원은 점 배치 크기(즉, 입력 점당 모델이 예측할 세그멘테이션 마스크의 수), 세 번째 차원은 세그멘테이션 마스크당 점의 수(단일 마스크에 여러 점을 전달할 수 있음), 마지막 차원은 점의 x(수직) 및 y(수평) 좌표입니다. 이미지별로 또는 마스크별로 서로 다른 수의 점이 전달되는 경우, processor는 (0, 0) 좌표에 해당하는 "PAD" 점을 생성하고, labels를 사용하여 해당 점에 대한 임베딩 계산이 건너뜁니다.

input_labels (`torch.LongTensor`, shape `(batch_size, point_batch_size, num_points)`) : 포인트에 대한 입력 라벨입니다. 프롬프트 인코더가 프롬프트를 인코딩하는 데 사용됩니다. 공식 구현에 따르면 라벨은 3가지 유형이 있습니다. - `1`: 관심 대상 객체를 포함하는 포인트 - `0`: 관심 대상 객체를 포함하지 않는 포인트 - `-1`: 배경에 해당하는 포인트  다음 라벨을 추가했습니다. - `-10`: 패딩 포인트이므로 프롬프트 인코더가 무시해야 합니다  패딩 라벨은 프로세서가 자동으로 처리해야 합니다.

input_boxes (`torch.Tensor`, shape `(batch_size, num_boxes, 4)`) : 점들을 위한 입력 박스입니다. 프롬프트 인코더가 프롬프트를 인코딩하는 데 사용되며, 일반적으로 훨씬 더 나은 생성된 마스크를 제공합니다. 프로세서에 리스트의 리스트의 리스트를 전달하면 `torch` 텐서가 생성되며, 각 차원은 각각 이미지 배치 크기, 이미지당 박스 수, 박스의 왼쪽 위 및 오른쪽 아래 점의 좌표에 해당합니다. (`x1`, `y1`, `x2`, `y2`) 순서로:  - `x1`: 입력 박스의 왼쪽 위 점의 x 좌표 - `y1`: 입력 박스의 왼쪽 위 점의 y 좌표 - `x2`: 입력 박스의 오른쪽 아래 점의 x 좌표 - `y2`: 입력 박스의 오른쪽 아래 점의 y 좌표

input_masks (`torch.Tensor`, shape `(batch_size, image_size, image_size)`) : SAM 모델은 세그멘테이션 마스크도 입력으로 받을 수 있습니다. 이 마스크는 prompt encoder에 의해 임베딩되어 해당하는 임베딩을 생성하며, 이후 mask decoder에 전달됩니다. 이 마스크들은 사용자가 수동으로 전달해야 하며, shape이 (`batch_size`, `image_size`, `image_size`)여야 합니다.

image_embeddings (`torch.Tensor`, shape `(batch_size, output_channels, window_size, window_size)`) : 이미지 임베딩입니다. mask decoder가 mask와 iou scores를 생성하는 데 사용됩니다. 메모리 효율적인 계산을 위해, 사용자는 먼저 `get_image_embeddings` 메서드를 사용하여 이미지 임베딩을 가져온 후, `pixel_values` 대신 이를 `forward` 메서드에 전달할 수 있습니다.

multimask_output (`bool`, *선택 사항*) : 원래 구현 및 논문에서는 모델이 항상 이미지당 3개의 마스크(해당하는 경우 점 또는 바운딩 박스당)를 출력합니다. 그러나 `multimask_output=False`를 지정하면 "최적"의 마스크에 해당하는 단일 마스크만 출력할 수 있습니다.

attention_similarity (`torch.Tensor`, *선택*) : [PerSAM](https://huggingface.co/papers/2305.03048)에서 소개된 개인화 용도로 모델이 사용되는 경우, target-guided attention을 위해 mask decoder에 제공되는 Attention 유사도 텐서.

target_embedding (`torch.Tensor`, *선택*) : [PerSAM](https://huggingface.co/papers/2305.03048)에서 소개된 개인화 용도로 모델이 사용되는 경우, mask decoder에 target-semantic prompting을 위해 제공되는 대상 개념의 임베딩입니다.

**반환값:** `Sam3TrackerImageSegmentationOutput` 또는 `tuple(torch.Tensor)`

`Sam3TrackerImageSegmentationOutput` 또는 `torch.Tensor`의 튜플(`return_dict=False`가 전달되었거나 `config.return_dict=False`인 경우)로, 구성([Sam3TrackerConfig](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerConfig))과 입력에 따라 다양한 요소를 포함합니다.

[Sam3TrackerModel](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerModel)의 forward 메서드는 `__call__` 특수 메서드를 오버라이드합니다.

`Module` 인스턴스는 전처리 및 후처리 단계를 실행하는 것을 처리하지만, 이 함수는 해당 단계를 조용히 무시하므로, 순전파(forward pass) 레시피를 이 함수 내에서 정의해야 하더라도 이후에는 이 함수 대신 `Module` 인스턴스를 호출해야 합니다.

- **iou_scores** (shape가 `(batch_size, point_batch_size, num_masks)`인 `torch.Tensor`) -- 예측된 마스크의 Intersection over Union (IoU) 점수입니다.
- **pred_masks** (`torch.Tensor`, shape `(batch_size, point_batch_size, num_masks, height, width)`) -- 예측된 저해상도 마스크입니다. `low_res_masks`의 별칭입니다. 이 마스크는 프로세서에 의해 후처리되어 원래 이미지 크기로 조정되어야 합니다.
- **object_score_logits** (`torch.Tensor`, shape `(batch_size, point_batch_size, 1)`) -- 객체 점수에 대한 logits로, 객체가 존재하는지 여부를 나타냅니다.
- **image_embeddings** (`tuple(torch.Tensor)`) -- FPN에서 추출된 특징으로, mask decoder에서 사용됩니다. 각 텐서의 shape이 `(batch_size, channels, height, width)`인 `torch.Tensor`의 tuple입니다.
- **vision_hidden_states** (`tuple(torch.Tensor)`, *선택*, `output_hidden_states=True`인 경우 반환됨) -- 각 단계의 출력 하나씩을 포함하는 `torch.Tensor` 튜플, shape `(batch_size, height, width, hidden_size)`. 각 단계 출력 시점의 비전 모델 hidden-states입니다.
- **vision_attentions** (`tuple(torch.Tensor)`, *선택*, `output_attentions=True`일 때 반환) -- 각 레이어마다 하나씩 포함된 `torch.Tensor`의 튜플로, shape는 `(batch_size, num_heads, sequence_length, sequence_length)`입니다. 비전 모델의 어텐션 가중치입니다.
- **mask_decoder_attentions** (`tuple(torch.Tensor)`, *선택*, `output_attentions=True`일 때 반환) -- 각 레이어마다 하나씩 포함된 `torch.Tensor` 튜플, shape는 `(batch_size, num_heads, sequence_length, sequence_length)`. mask decoder의 attention 가중치입니다.

예:

```python
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import AutoModel, AutoProcessor

>>> model = AutoModel.from_pretrained("danelcsb/sam3_tracker.1_hiera_tiny")
>>> processor = AutoProcessor.from_pretrained("danelcsb/sam3_tracker.1_hiera_tiny")

>>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/sam-car.png"
>>> with httpx.stream("GET", url) as response:
...     raw_image = Image.open(BytesIO(response.read())).convert("RGB")
>>> input_points = [[[400, 650]]]  # 2D location of a window on the car
>>> inputs = processor(images=raw_image, input_points=input_points, return_tensors="pt")

>>> # Get segmentation mask
>>> outputs = model(**inputs)

>>> # Postprocess masks
>>> masks = processor.post_process_masks(
...     outputs.pred_masks, inputs["original_sizes"]
... )
```

#### get_image_features[[transformers.Sam3TrackerModel.get_image_features]]

```python
get_image_features(pixel_values: Tensor, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/modeling_sam3_tracker.py#L1064)

**매개변수:**

pixel_values (`torch.Tensor`) : `(batch_size, num_channels, height, width)` 형식의 입력 픽셀 값.

**반환값:** `Sam3TrackerVisionEncoderOutput` 또는 `tuple(torch.Tensor)`

`Sam3TrackerVisionEncoderOutput` 또는 `torch.Tensor`의 튜플(`return_dict=False`가 전달되었거나 `config.return_dict=False`인 경우)로, 구성([Sam3TrackerConfig](/docs/transformers/main/ko/model_doc/sam3_tracker#transformers.Sam3TrackerConfig))과 입력에 따라 다양한 요소를 포함합니다.

- **last_hidden_state** (shape가 `(batch_size, height, width, hidden_size)`인 `torch.Tensor`) -- 모델의 마지막 레이어 출력의 hidden-state 시퀀스.
- **pooler_output** (`torch.Tensor`, shape `(batch_size, hidden_size)`) -- 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state입니다. 보조 사전학습 작업을 위해 사용되는 레이어들을 통해 추가 처리된 값입니다. 예를 들어 BERT 계열 모델의 경우, 선형 레이어와 tanh 활성화 함수를 통해 처리된 분류 토큰을 반환합니다. 선형 레이어의 가중치는 사전학습 단계에서 다음 문장 예측(분류) 목적 함수를 통해 학습됩니다.
- **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 가중치입니다.
- **fpn_hidden_states** (`tuple(torch.Tensor)`) -- shape이 `(batch_size, hidden_size, height, width)`인 `torch.Tensor`의 튜플(각 특징 레벨마다 하나씩, 고해상도에서 저해상도 순서로). Feature Pyramid Network neck에서 생성된 feature map입니다.
- **fpn_position_encoding** (`tuple(torch.Tensor)`) -- shape이 `(batch_size, hidden_size, height, width)`인 `torch.Tensor`의 튜플(해상도가 높은 수준부터 낮은 수준까지 각 feature level에 하나씩). `fpn_hidden_states`에 해당하는 positional encodings입니다.

예:

```python
```

## Sam3TrackerPreTrainedModel[[transformers.Sam3TrackerPreTrainedModel]]

#### transformers.Sam3TrackerPreTrainedModel[[transformers.Sam3TrackerPreTrainedModel]]

```python
transformers.Sam3TrackerPreTrainedModel(config: PreTrainedConfig, *inputs, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/sam3_tracker/modeling_sam3_tracker.py#L117)

**매개변수:**

config ([PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

입력 이미지와 입력 점 및 라벨, 박스 또는 마스크를 기반으로 분할 마스크를 생성하는 Segment Anything Model 3 (SAM 3).

#### forward[[transformers.Sam3TrackerPreTrainedModel.forward]]

```python
forward(*args, **kwargs)
```

점으로 구분된 경로(예: `torch.float32`)에 대한 mock 값입니다: 속성 접근 체인, 호출은 pass-through 데코레이터처럼 동작하며, `repr`은 해당 점으로 구분된 경로입니다. 또한 이를 베이스 클래스로 사용하면 plain-`type` 베이스로 대체됩니다(PEP 560 `__mro_entries__`). 따라서 실제 서브클래스는 정상적인 메타클래스를 유지하고, `inspect.signature`는 mock의 `__init__`가 아닌 실제 `__init__`를 읽습니다.

