# SAM3 Tracker

    
        
        
    

## Ikhtisar

SAM3 (Segment Anything Model 3) diperkenalkan dalam [SAM 3: Segment Anything with Concepts](https://ai.meta.com/research/publications/sam-3-segment-anything-with-concepts/).

Sam3Tracker melakukan **Promptable Visual Segmentation (PVS)** pada gambar. PVS menerima prompt visual interaktif (titik, kotak, mask) atau input teks untuk memsegmentasi **instans objek tertentu** per prompt. Ini adalah tugas yang menjadi fokus SAM 1 dan SAM 2, dan SAM 3 memperbaikinya.

Sam3Tracker adalah versi pembaruan dari SAM2 (Segment Anything Model 2) yang mempertahankan API yang sama sambil menyediakan kinerja dan kemampuan yang lebih baik.

Abstrak dari makalah tersebut adalah sebagai berikut:

*Kami memperkenalkan Segment Anything Model (SAM) 3, sebuah model terpadu yang mendeteksi, memsegmentasi, dan melacak objek dalam gambar dan video berdasarkan prompt konsep, yang kami definisikan sebagai frasa nomina pendek (misalnya, "yellow school bus"), contoh gambar, atau kombinasi keduanya. Promptable Concept Segmentation (PCS) mengambil prompt semacam itu dan mengembalikan mask segmentasi serta identitas unik untuk semua instans objek yang cocok. Untuk memajukan PCS, kami membangun mesin data yang dapat diskalakan yang menghasilkan dataset berkualitas tinggi dengan 4 juta label konsep unik, termasuk negatif yang sulit, di seluruh gambar dan video. Model kami terdiri dari detektor tingkat gambar dan pelacak video berbasis memori yang berbagi satu backbone tunggal. Pengenalan dan lokalisasi dipisahkan dengan presence head, yang meningkatkan akurasi deteksi. SAM 3 menggandakan akurasi sistem yang ada dalam PCS gambar dan video, serta meningkatkan kemampuan SAM sebelumnya pada tugas segmentasi visual. Kami membuka sumber SAM 3 bersama dengan benchmark baru kami, Segment Anything with Concepts (SA-Co), untuk segmentasi konsep yang dapat diprompt.*

Model ini disumbangkan oleh [yonigozlan](https://huggingface.co/yonigozlan) dan [ronghanghu](https://huggingface.co/ronghanghu).

## Contoh penggunaan

### Generasi Mask Otomatis dengan Pipeline

Sam3Tracker dapat digunakan untuk pembuatan maska otomatis guna memsegmentasi semua objek dalam gambar menggunakan pipeline `mask-generation`:

```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
```

### Segmentasi Gambar Dasar

#### Klik Titik Tunggal

Anda dapat memsegmentasi objek dengan memberikan satu kali klik pada objek yang ingin Anda segmentasi:

```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])
```

#### Beberapa Poin untuk Penyempurnaan

Anda dapat memberikan beberapa titik untuk menyempurnakan segmentasi:

```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]
```

#### Input Kotak Batas

Sam3Tracker juga mendukung input kotak pembatas untuk segmentasi:

```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]
```

#### Segmentasi Objek Ganda

Anda dapat memsegmentasikan beberapa objek secara bersamaan:

```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
```

### Inferensi Batch

#### Gambar Berbatch

Proses beberapa gambar secara bersamaan untuk efisiensi yang lebih baik:

```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
```

#### Objek Batch per Gambar

Segmentasikan beberapa objek di dalam setiap gambar menggunakan inferensi batch:

```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"])
```

#### Gambar Berbatch dengan Objek Berbatch dan Beberapa Titik

Atasi skenario batch kompleks dengan beberapa titik per objek:

```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"])
```

#### Kotak Batas Berbatch

Proses beberapa gambar dengan input kotak pembatas:

```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
```

### Menggunakan Masker Sebelumnya sebagai Input

Sam3Tracker dapat menggunakan mask dari prediksi sebelumnya sebagai input untuk menyempurnakan segmentasi:

```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)
```

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

**Parameter:**

vision_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *opsional*) : Objek config atau dictionary dari vision backbone.

prompt_encoder_config (Union[`dict`, `Sam3TrackerPromptEncoderConfig`], *opsional*) : Kamus opsi konfigurasi yang digunakan untuk menginisialisasi [Sam3TrackerPromptEncoderConfig](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerPromptEncoderConfig).

mask_decoder_config (Union[`dict`, `Sam3TrackerMaskDecoderConfig`], *opsional*) : Kamus opsi konfigurasi yang digunakan untuk menginisialisasi [Sam3TrackerMaskDecoderConfig](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerMaskDecoderConfig).

initializer_range (`float`, *opsional*, defaultnya `0.02`) : Deviasi standar dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari Sam3TrackerModel. Kelas ini digunakan untuk membuat instance model Sam3 Tracker sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instance konfigurasi dengan nilai default akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari [facebook/sam3](https://huggingface.co/facebook/sam3)

Objek konfigurasi mewarisi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) dan dapat digunakan untuk mengontrol keluaran model. Baca dokumentasi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) untuk informasi lebih lanjut.

Contoh:

```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)
```

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

**Parameter:**

hidden_size (`int`, *opsional*, defaultnya `256`) : Dimensi dari representasi tersembunyi.

image_size (`Union[int, list[int], tuple[int, int]]`, *opsional*, defaultnya `1008`) : Ukuran (resolusi) dari setiap gambar.

patch_size (`Union[int, list[int], tuple[int, int]]`, *opsional*, defaultnya `14`) : Ukuran (resolusi) dari setiap patch.

mask_input_channels (`int`, *opsional*, default 16) : Jumlah channel yang akan diberikan ke modul `MaskDecoder`.

num_point_embeddings (`int`, *opsional*, defaultnya 4) : Jumlah point embedding yang akan digunakan.

hidden_act (`str`, *opsional*, defaultnya `gelu`) : Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya, `"gelu"`, `"relu"`, `"silu"`, dan sebagainya.

layer_norm_eps (`float`, *opsional*, defaultnya `1e-06`) : Epsilon yang digunakan oleh lapisan normalisasi lapisan.

scale (`float`, *opsional*, default 1) : Faktor skala untuk prompt encoder.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari Sam3TrackerModel. Kelas ini digunakan untuk membuat instance model Sam3 Tracker sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instance konfigurasi dengan nilai default akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari [facebook/sam3](https://huggingface.co/facebook/sam3)

Objek konfigurasi mewarisi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) dan dapat digunakan untuk mengontrol keluaran model. Baca dokumentasi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) untuk informasi lebih lanjut.

## 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)
```

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

**Parameter:**

hidden_size (`int`, *opsional*, defaultnya `256`) : Dimensi dari representasi tersembunyi.

hidden_act (`str`, *opsional*, defaultnya `gelu`) : Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya, `"gelu"`, `"relu"`, `"silu"`, dan sebagainya.

mlp_dim (`int`, *opsional*, defaultnya 2048) : Dimensi dari MLP dalam transformer dua arah.

num_hidden_layers (`int`, *opsional*, defaultnya `2`) : Jumlah lapisan tersembunyi dalam decoder Transformer.

num_attention_heads (`int`, *opsional*, defaultnya `8`) : Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer.

attention_downsample_rate (`int`, *opsional*, defaultnya 2) : Laju downsampling untuk lapisan attention.

num_multimask_outputs (`int`, *opsional*, defaultnya 3) : Jumlah output multimask.

iou_head_depth (`int`, *opsional*, defaultnya 3) : Kedalaman dari kepala IoU.

iou_head_hidden_dim (`int`, *opsional*, default 256) : Dimensi tersembunyi dari kepala IoU.

dynamic_multimask_via_stability (`bool`, *opsional*, defaultnya `True`) : Apakah akan menggunakan multimask dinamis melalui stabilitas.

dynamic_multimask_stability_delta (`float`, *opsional*, default 0.05) : Delta stabilitas untuk multimask dinamis.

dynamic_multimask_stability_thresh (`float`, *opsional*, default 0.98) : Ambang batas stabilitas untuk multimask dinamis.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari Sam3TrackerModel. Kelas ini digunakan untuk membuat instance model Sam3 Tracker sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instance konfigurasi dengan nilai default akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari [facebook/sam3](https://huggingface.co/facebook/sam3)

Objek konfigurasi mewarisi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) dan dapat digunakan untuk mengontrol keluaran model. Baca dokumentasi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) untuk informasi lebih lanjut.

## Sam3TrackerProcessor[[transformers.Sam3TrackerProcessor]]

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

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

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

**Parameter:**

image_processor (`Sam3ImageProcessor`) : Prosesor gambar adalah input yang wajib.

target_size (`int`, *opsional*) : Ukuran target (dalam piksel) untuk menormalisasi titik dan kotak batas input. Jika tidak disediakan, secara default menggunakan konfigurasi ukuran dari image processor. Semua koordinat input (titik dan kotak) dinormalisasi ke ukuran ini sebelum diteruskan ke model. Hal ini memastikan representasi koordinat yang konsisten terlepas dari dimensi gambar asli.

point_pad_value (`int`, *opsional*, defaultnya -10) : Nilai yang digunakan untuk mengisi titik input saat pengelompokan (batching) sekuens dengan panjang berbeda. Nilai ini digunakan untuk menandai posisi yang di-*padding* dan dipertahankan selama normalisasi koordinat.

Membangun Sam3TrackerProcessor yang membungkus image processor menjadi satu processor.

[Sam3TrackerProcessor](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerProcessor) menyediakan semua fungsionalitas dari [Sam3ImageProcessor](/docs/transformers/main/id/model_doc/sam3#transformers.Sam3ImageProcessor). Lihat [~Sam3ImageProcessor](/docs/transformers/main/id/model_doc/sam3#transformers.Sam3ImageProcessor) untuk informasi lebih lanjut.

#### __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)
```

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

**Parameter:**

images (`Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]`, *opsional*) : Gambar untuk dipreprocess. Mengharapkan satu gambar atau batch gambar dengan nilai piksel berkisar dari 0 hingga 255. Jika memasukkan gambar dengan nilai piksel antara 0 dan 1, atur `do_rescale=False`.

segmentation_maps (`ImageInput`, *opsional*) : Peta segmentasi yang akan diproses.

input_points (`list[list[list[list[float]]]]`, `torch.Tensor`, *opsional*) : Titik-titik yang akan ditambahkan ke frame.

input_labels (`list[list[list[int]]]`, `torch.Tensor`, *opsional*) : Label untuk titik-titik.

input_boxes (`list[list[list[float]]]`, `torch.Tensor`, *opsional*) : Kotak pembatas yang akan ditambahkan ke bingkai.

original_sizes (`list[list[float]]`, `torch.Tensor`, *opsional*) : Ukuran asli dari gambar-gambar tersebut.

return_tensors (`Union[str, ~utils.generic.TensorType]`, *opsional*) : Jika diatur, akan mengembalikan tensor dari framework tertentu. Nilai yang dapat diterima adalah:  - `'pt'`: Mengembalikan objek PyTorch `torch.Tensor`. - `'np'`: Mengembalikan objek NumPy `np.ndarray`.

**Mengembalikan:** Sebuah [BatchEncoding](/docs/transformers/main/id/main_classes/tokenizer#transformers.BatchEncoding) dengan field berikut

- `pixel_values` (`torch.Tensor`): Gambar yang telah diproses.
- `original_sizes` (`list[list[float]]`): Ukuran asli dari gambar-gambar tersebut.
- `labels` (`torch.Tensor`): Peta segmentasi yang telah diproses (jika disediakan).
- `input_points` (`torch.Tensor`): Titik-titik yang telah diproses.
- `input_labels` (`torch.Tensor`): Label yang telah diproses.
- `input_boxes` (`torch.Tensor`): Kotak pembatas yang telah diproses.

#### 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)
```

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

**Parameter:**

masks (`Union[List[torch.Tensor], List[np.ndarray]]`) : Mask yang di-batch dari mask_decoder dalam format (batch_size, num_channels, height, width).

original_sizes (`Union[torch.Tensor, List[Tuple[int,int]]]`) : Ukuran asli setiap gambar sebelum di-resize ke bentuk input yang diharapkan oleh model, dalam format (tinggi, lebar).

mask_threshold (`float`, *opsional*, default 0.0) : Ambang batas untuk operasi binarisasi dan pascaproses.

binarize (`bool`, *opsional*, defaultnya `True`) : Apakah akan mbinerisasi mask.

max_hole_area (`float`, *opsional*, default 0.0) : Area maksimum lubang yang akan diisi.

max_sprinkle_area (`float`, *opsional*, default 0.0) : Area maksimum sprinkle untuk diisi.

apply_non_overlapping_constraints (`bool`, *opsional*, defaultnya `False`) : Apakah akan menerapkan kendala non-tumpang tindih pada masker.

**Mengembalikan:** (`torch.Tensor`)

Mask yang di-batch dalam format batch_size, num_channels, height, width, di mana (height, width) ditentukan oleh original_size.

Hapus padding dan upscale mask ke ukuran gambar asli.

## Sam3TrackerModel[[transformers.Sam3TrackerModel]]

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

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

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

**Parameter:**

config ([Sam3TrackerConfig](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerConfig)) : Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode [from_pretrained()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Segment Anything Model 2 (SAM 2) untuk menghasilkan mask segmentasi, diberikan gambar input dan titik serta label input, kotak, atau mask.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.

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

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

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

**Parameter:**

pixel_values (`torch.FloatTensor` dengan bentuk `(batch_size, num_channels, image_size, image_size)`, *opsional*) : Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan [Sam3ImageProcessor](/docs/transformers/main/id/model_doc/sam3#transformers.Sam3ImageProcessor). Lihat [Sam3ImageProcessor.__call__()](/docs/transformers/main/id/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) untuk detailnya ([Sam3TrackerProcessor](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerProcessor) menggunakan [Sam3ImageProcessor](/docs/transformers/main/id/model_doc/sam3#transformers.Sam3ImageProcessor) untuk memproses gambar).

input_points (`torch.FloatTensor` dengan bentuk `(batch_size, num_points, 2)`) : Titik spasial 2D sebagai input, yang digunakan oleh prompt encoder untuk mengkodekan prompt. Umumnya menghasilkan hasil yang jauh lebih baik. Titik-titik ini dapat diperoleh dengan meneruskan daftar dari daftar dari daftar ke processor, yang akan membuat tensor `torch` yang sesuai dengan dimensi 4. Dimensi pertama adalah ukuran batch gambar, dimensi kedua adalah ukuran batch titik (yaitu berapa banyak mask segmentasi yang ingin diprediksi model per titik input), dimensi ketiga adalah jumlah titik per mask segmentasi (dimungkinkan untuk meneruskan beberapa titik untuk satu mask), dan dimensi terakhir adalah koordinat x (vertikal) dan y (horizontal) dari titik. Jika jumlah titik yang berbeda diteruskan untuk setiap gambar, atau untuk setiap mask, processor akan membuat titik "PAD" yang akan sesuai dengan koordinat (0, 0), dan perhitungan embedding akan dilewati untuk titik-titik ini menggunakan label.

input_labels (`torch.LongTensor` dengan bentuk `(batch_size, point_batch_size, num_points)`) : Label input untuk titik-titik, yang digunakan oleh prompt encoder untuk meng-encode prompt. Menurut implementasi resmi, terdapat 3 jenis label - `1`: titik tersebut adalah titik yang mengandung objek yang diminati - `0`: titik tersebut adalah titik yang tidak mengandung objek yang diminati - `-1`: titik tersebut sesuai dengan latar belakang  Kami menambahkan label: - `-10`: titik tersebut adalah titik padding, sehingga harus diabaikan oleh prompt encoder Label padding seharusnya dilakukan secara otomatis oleh processor.

input_boxes (`torch.FloatTensor` dengan bentuk `(batch_size, num_boxes, 4)`) : Kotak input untuk titik-titik, ini digunakan oleh prompt encoder untuk mengkodekan prompt. Umumnya menghasilkan mask yang dihasilkan jauh lebih baik. Kotak-kotak ini dapat diperoleh dengan meneruskan daftar dari daftar dari daftar ke processor, yang akan menghasilkan tensor `torch`, dengan setiap dimensi yang masing-masing sesuai dengan ukuran batch gambar, jumlah kotak per gambar, dan koordinat titik kiri atas dan kanan bawah kotak. Dalam urutan (`x1`, `y1`, `x2`, `y2`):  - `x1`: koordinat x dari titik kiri atas kotak input - `y1`: koordinat y dari titik kiri atas kotak input - `x2`: koordinat x dari titik kanan bawah kotak input - `y2`: koordinat y dari titik kanan bawah kotak input

input_masks (`torch.FloatTensor` dengan bentuk `(batch_size, image_size, image_size)`) : Model SAM juga menerima mask segmentasi sebagai input. Mask akan di-embed oleh prompt encoder untuk menghasilkan embedding yang sesuai, yang kemudian akan diberikan ke mask decoder. Mask-mask ini perlu diberikan secara manual oleh pengguna, dan harus memiliki bentuk (`batch_size`, `image_size`, `image_size`).

image_embeddings (`torch.FloatTensor` dengan bentuk `(batch_size, output_channels, window_size, window_size)`) : Embedding gambar, ini digunakan oleh mask decoder untuk menghasilkan mask dan skor iou. Untuk komputasi yang lebih hemat memori, pengguna dapat terlebih dahulu mengambil embedding gambar menggunakan metode `get_image_embeddings`, lalu memasukkannya ke metode `forward` alih-alih memasukan `pixel_values`.

multimask_output (`bool`, *opsional*) : Pada implementasi dan paper aslinya, model selalu mengoutput 3 mask per gambar (atau per titik / per bounding box jika relevan). Namun, dimungkinkan untuk hanya mengoutput satu mask yang sesuai dengan mask "terbaik" dengan menentukan `multimask_output=False`.

attention_similarity (`torch.FloatTensor`, *opsional*) : Tensor kemiripan perhatian, yang akan diberikan ke decoder masker untuk perhatian yang dipandu target dalam kasus model digunakan untuk personalisasi seperti yang diperkenalkan dalam [PerSAM](https://huggingface.co/papers/2305.03048).

target_embedding (`torch.FloatTensor`, *opsional*) : Embedding dari konsep target, yang akan diberikan ke mask decoder untuk target-semantic prompting dalam kasus model digunakan untuk personalisasi sebagaimana diperkenalkan dalam [PerSAM](https://huggingface.co/papers/2305.03048).

**Mengembalikan:** `Sam3TrackerImageSegmentationOutput` atau `tuple(torch.FloatTensor)`

A `Sam3TrackerImageSegmentationOutput` atau tuple dari `torch.FloatTensor` (jika `return_dict=False` diteruskan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([Sam3TrackerConfig](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerConfig)) dan input.

Metode forward dari [Sam3TrackerModel](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerModel) menimpa metode khusus `__call__`.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance `Module` setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

- **iou_scores** (`torch.FloatTensor` dengan bentuk `(batch_size, point_batch_size, num_masks)`) -- Skor Intersection over Union (IoU) dari mask yang diprediksi.
- **pred_masks** (`torch.FloatTensor` dengan bentuk `(batch_size, point_batch_size, num_masks, height, width)`) -- Mask resolusi rendah yang diprediksi. Ini adalah alias untuk `low_res_masks`. Mask ini perlu diproses lebih lanjut oleh processor agar ukurannya sesuai dengan ukuran gambar asli.
- **object_score_logits** (`torch.FloatTensor` dengan bentuk `(batch_size, point_batch_size, 1)`) -- Logits untuk skor objek, yang menunjukkan apakah objek hadir.
- **image_embeddings** (`tuple(torch.FloatTensor)`) -- Fitur dari FPN, yang digunakan oleh mask decoder. Ini adalah tuple dari `torch.FloatTensor` di mana setiap tensor memiliki bentuk `(batch_size, channels, height, width)`.
- **vision_hidden_states** (`tuple(torch.FloatTensor)`, *opsional*, dikembalikan saat `output_hidden_states=True`) -- Tuple dari `torch.FloatTensor` (satu untuk output dari setiap tahap) dengan bentuk `(batch_size, height, width, hidden_size)`. Hidden-states dari model visi pada output dari setiap tahap.
- **vision_attentions** (`tuple(torch.FloatTensor)`, *opsional*, dikembalikan saat `output_attentions=True`) -- Tuple dari `torch.FloatTensor` (satu untuk setiap lapisan) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`. Bobot perhatian dari model visi.
- **mask_decoder_attentions** (`tuple(torch.FloatTensor)`, *opsional*, dikembalikan saat `output_attentions=True`) -- Tuple dari `torch.FloatTensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`. Bobot perhatian dari mask decoder.

Contoh:

```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: FloatTensor, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

**Parameter:**

pixel_values (`torch.FloatTensor`) : Nilai piksel input dengan bentuk `(batch_size, num_channels, height, width)`.

**Mengembalikan:** `Sam3TrackerVisionEncoderOutput` atau `tuple(torch.FloatTensor)`

A `Sam3TrackerVisionEncoderOutput` atau tuple dari `torch.FloatTensor` (jika `return_dict=False` diteruskan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([Sam3TrackerConfig](/docs/transformers/main/id/model_doc/sam3_tracker#transformers.Sam3TrackerConfig)) dan input.

- **last_hidden_state** (`torch.FloatTensor` dengan bentuk `(batch_size, height, width, hidden_size)`) -- Urutan hidden-states pada keluaran lapisan terakhir model.
- **pooler_output** (`torch.FloatTensor` dengan bentuk `(batch_size, hidden_size)`) -- Hidden-state lapisan terakhir dari token pertama dalam urutan (token klasifikasi) setelah diproses lebih lanjut melalui lapisan yang digunakan untuk tugas pra-pelatihan tambahan. Misalnya, untuk keluarga model BERT, ini mengembalikan token klasifikasi setelah diproses melalui lapisan linear dan fungsi aktivasi tanh. Bobot lapisan linear dilatih dari tujuan prediksi kalimat berikutnya (klasifikasi) selama pra-pelatihan.
- **hidden_states** (`tuple(torch.FloatTensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.FloatTensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple(torch.FloatTensor)`, *opsional*, dikembalikan saat `output_attentions=True` dilewatkan atau saat `config.output_attentions=True`) -- Tuple dari `torch.FloatTensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
- **fpn_hidden_states** (`tuple(torch.FloatTensor)`) -- Tuple dari `torch.FloatTensor` (satu untuk setiap level fitur, dari resolusi tinggi ke rendah) dengan bentuk `(batch_size, hidden_size, height, width)`. Peta fitur dari leher Feature Pyramid Network.
- **fpn_position_encoding** (`tuple(torch.FloatTensor)`) -- Tuple dari `torch.FloatTensor` (satu untuk setiap level fitur, dari resolusi tinggi ke rendah) dengan bentuk `(batch_size, hidden_size, height, width)`. Encoding posisi yang sesuai dengan `fpn_hidden_states`.

Contoh:

```python
```

## Sam3TrackerPreTrainedModel[[transformers.Sam3TrackerPreTrainedModel]]

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

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

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

**Parameter:**

config ([PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig)) : Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode [from_pretrained()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Segment Anything Model 3 (SAM 3) untuk menghasilkan mask segmentasi, diberikan gambar input dan titik serta label input, kotak, atau mask.

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

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

Nilai mock untuk jalur bertitik (misalnya `torch.float32`): rantai akses atribut, panggilan berperilaku sebagai dekorator pass-through, `repr` adalah jalur bertitik, dan penggunaannya sebagai kelas dasar menggantikan kelas dasar `type` polos (PEP 560 `__mro_entries__`), sehingga subclass asli tetap mempertahankan metaclass normal dan `inspect.signature` membaca `__init__` asli mereka, bukan milik mock.

