Transformers documentation
SAM3 Tracker
تمت مساهمة هذا النموذج في Hugging Face Transformers في 2025-11-19.
SAM3 Tracker
نظرة عامة
تم تقديم SAM3 (نموذج تقسيم أي شيء 3) في SAM 3: Segment Anything with Concepts.
يُنفّذ Sam3Tracker مهمة التجزئة البصرية القابلة للتوجيه (PVS) على الصور. تعتمد PVS على تلميحات بصرية تفاعلية (نقاط، صناديق، أقنعة) أو مدخلات نصية لتجزئة كائن محدد لكل تلميح. هذه هي المهمة التي ركّز عليها SAM 1 وSAM 2، ويحسّن SAM 3 أداءها.
Sam3Tracker هو إصدار محدّث من SAM2 (نموذج تقسيم أي شيء 2) يحافظ على نفس واجهة البرمجة (API) مع توفير أداء وقدرات محسّنة.
المستخلص من الورقة البحثية هو كالتالي:
نقدّم نموذج Segment Anything Model (SAM) 3، وهو نموذج موحّد يكشف عن الكائنات ويقسّمها ويتتبّعها في الصور والفيديوهات بناءً على محفّزات المفاهيم، والتي نعرّفها إما على أنها عبارات اسمية قصيرة (مثل "حافلة مدرسية صفراء")، أو أمثلة مصوّرة، أو مزيج من الاثنين معاً. يستقبل تقسيم المفاهيم القابل للمحفّز (PCS) هذه المحفّزات ويعيد أقنعة التقسيم والهويات الفريدة لجميع حالات الكائنات المطابقة. ولتطوير PCS، بنينا محرك بيانات قابل للتوسّع ينتج مجموعة بيانات عالية الجودة تحتوي على 4 ملايين تسمية مفهوم فريدة، بما في ذلك السلبات الصعبة، عبر الصور والفيديوهات. يتكوّن نموذجنا من كاشف على مستوى الصورة ومتتبّع فيديو يعتمد على الذاكرة، يتشاركان في عمود فقري واحد. يتم فصل التعرّف عن تحديد الموقع بواسطة رأس حضور، مما يعزّز دقة الكشف. يضاعف SAM 3 دقة الأنظمة الحالية في كل من PCS للصور والفيديوهات، ويحسّن قدرات SAM السابقة في مهام التقسيم البصري. نفتح مصدر SAM 3 مع معيارنا الجديد Segment Anything with Concepts (SA-Co) لتقسيم المفاهيم القابل للمحفّز.
تمت مساهمة هذا النموذج من قِبل yonigozlan وronghanghu.
مثال على الاستخدام
إنشاء الأقنعة تلقائيًا باستخدام Pipeline
Sam3Tracker can be used for automatic mask generation to segment all objects in an image using the mask-generation pipeline:
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تقسيم الصور الأساسي
نقرة في نقطة واحدة
يمكنك تجزئة الكائنات من خلال تقديم نقرة نقطة واحدة على الكائن الذي تريد تجزئته:
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])نقاط متعددة للتحسين
يمكنك تقديم عدة نقاط لتحسين التقسيم:
# 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]إدخال صندوق الحدود
يدعم Sam3Tracker أيضاً مدخلات صندوق الحدود (bounding box) للتجزئة:
# 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]تجزئة كائنات متعددة
يمكنك تجزئة عدة كائنات في الوقت نفسه:
# 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الاستدلال الدُفعي
الصور المجمعة
معالجة عدة صور في وقت واحد لتحسين الكفاءة:
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كائنات مُجمّعة لكل صورة
قم بتجزئة عدة كائنات داخل كل صورة باستخدام الاستدلال الدُفعي:
# 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"])الصور المجمعة مع الكائنات المجمعة ونقاط متعددة
التعامل مع سيناريوهات الدفعات المعقدة التي تتضمن عدة نقاط لكل كائن:
# 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"])صناديق الحدود المجمّعة
معالجة عدة صور مع مدخلات مربعات محيطة:
# 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 استخدام الأقنعة من التنبؤات السابقة كمدخلات لتحسين التقسيم:
# 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
< 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 = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneprompt_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonemask_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneinitializer_range: float = 0.02 )
المعاملات
- vision_config (
Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — كائن الإعدادات أو قاموس العمود الفقري البصري. - prompt_encoder_config (Union[
dict,Sam3TrackerPromptEncoderConfig], اختياري) — قائمة خيارات الإعدادات المستخدمة لتبويب Sam3TrackerPromptEncoderConfig. - mask_decoder_config (Union[
dict,Sam3TrackerMaskDecoderConfig], اختياري) — قائمة خيارات الإعدادات المستخدمة لتبويب Sam3TrackerMaskDecoderConfig. - initializer_range (
float، اختياري، القيمة الافتراضية0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Sam3TrackerModel. تُستخدم لاستحداث نموذج Sam3 Tracker وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ facebook/sam3
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> 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
< 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 = 256image_size: int | list[int] | tuple[int, int] = 1008patch_size: int | list[int] | tuple[int, int] = 14mask_input_channels: int = 16num_point_embeddings: int = 4hidden_act: str = 'gelu'layer_norm_eps: float = 1e-06scale: int = 1 )
المعاملات
- 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) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة. - scale (
float، اختياري، القيمة الافتراضية 1) — معامل المقياس لمُشفِّر المُوجِّه.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Sam3TrackerModel. تُستخدم لاستحداث نموذج Sam3 Tracker وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ facebook/sam3
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
Sam3TrackerMaskDecoderConfig
فئة transformers.Sam3TrackerMaskDecoderConfig
< 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 = 256hidden_act: str = 'gelu'mlp_dim: int = 2048num_hidden_layers: int = 2num_attention_heads: int = 8attention_downsample_rate: int = 2num_multimask_outputs: int = 3iou_head_depth: int = 3iou_head_hidden_dim: int = 256dynamic_multimask_via_stability: bool = Truedynamic_multimask_stability_delta: float = 0.05dynamic_multimask_stability_thresh: float = 0.98 )
المعاملات
- hidden_size (
int، اختياري، القيمة الافتراضية256) — أبعاد التمثيلات المخفية. - hidden_act (
str، اختياري، القيمة الافتراضيةgelu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال،"gelu"،"relu"،"silu"، وما إلى ذلك. - mlp_dim (
int، اختياري، القيمة الافتراضية 2048) — أبعاد شبكة MLP في محوّل الاتجاهين. - num_hidden_layers (
int، اختياري، القيمة الافتراضية2) — عدد الطبقات المخفية في مُفكِّك Transformer. - num_attention_heads (
int، اختياري، القيمة الافتراضية8) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer. - attention_downsample_rate (
int, اختياري، القيمة الافتراضية 2) — معدل تقليل الدقة لطبقات الانتباه. - num_multimask_outputs (
int، اختياري، القيمة الافتراضية 3) — عدد مخرجات multimask. - iou_head_depth (
int، اختياري، القيمة الافتراضية 3) — عمق رأس IoU. - iou_head_hidden_dim (
int، اختياري، القيمة الافتراضية 256) — البُعد الخفي لرأس IoU. - dynamic_multimask_via_stability (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام dynamic multimask عبر stability. - dynamic_multimask_stability_delta (
float، اختياري، القيمة الافتراضية 0.05) — قيمة دلتا الاستقرار الخاصة بالقناع متعدد الطبقات الديناميكي. - dynamic_multimask_stability_thresh (
float، اختياري، القيمة الافتراضية 0.98) — حد الاستقرار الخاص بـ dynamic multimask.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Sam3TrackerModel. تُستخدم لتوليد نموذج Sam3 Tracker وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ facebook/sam3
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
Sam3TrackerProcessor
فئة transformers.Sam3TrackerProcessor
< source >( image_processortarget_size: int | None = Nonepoint_pad_value: int = -10**kwargs )
المعاملات
- image_processor (
Sam3ImageProcessor) — معالج الصور هو مدخل إلزامي. - target_size (
int, اختياري) — الحجم المستهدف (بالبكسل) لتطبيع نقاط الإدخال وصناديق الحدود. إذا لم يُقدَّم، فسيُستخدم حجم مُعالِج الصور الافتراضي. تُطبَّع جميع إحداثيات الإدخال (النقاط والصناديق) على هذا الحجم قبل تمريرها إلى النموذج. يضمن ذلك تمثيلاً متسقاً للإحداثيات بغض النظر عن أبعاد الصورة الأصلية. - point_pad_value (
int، اختياري، القيمة الافتراضية -10) — القيمة المستخدمة لحشو نقاط الإدخال عند تجميع تسلسلات ذات أطوال مختلفة. تُستخدم هذه القيمة لتمييز المواضع المحشوّة وتُحافظ عليها أثناء تطبيع الإحداثيات.
ينشئ Sam3TrackerProcessor الذي يغلّف معالج الصور في معالج واحد.
يوفر Sam3TrackerProcessor جميع وظائف Sam3ImageProcessor. راجع ~Sam3ImageProcessor لمزيد من المعلومات.
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonesegmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneinput_points: typing.Union[list[list[list[list[float]]]], torch.Tensor, NoneType] = Noneinput_labels: typing.Union[list[list[list[int]]], torch.Tensor, NoneType] = Noneinput_boxes: typing.Union[list[list[list[float]]], torch.Tensor, NoneType] = Noneoriginal_sizes: typing.Union[list[list[float]], torch.Tensor, NoneType] = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = None**kwargs ) → A BatchEncoding with the following fields
المعاملات
- 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], اختياري) — إذا تم تعيينه، فسيُرجع مُتجهات (tensors) لإطار عمل معين. القيم المقبولة هي:'pt': إرجاع كائناتtorch.Tensorمن PyTorch.'np': إرجاع كائناتnp.ndarrayمن NumPy.
يعيد
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
< source >( masksoriginal_sizesmask_threshold = 0.0binarize = Truemax_hole_area = 0.0max_sprinkle_area = 0.0apply_non_overlapping_constraints = False**kwargs ) → (torch.Tensor)
المعاملات
- masks (
Union[List[torch.Tensor], List[np.ndarray]]) — أقنعة مُجمَّعة من mask_decoder بصيغة (batch_size, num_channels, height, width). - original_sizes (
Union[torch.Tensor, List[Tuple[int,int]]]) — الأحجام الأصلية لكل صورة قبل إعادة تحجيمها إلى شكل الإدخال المتوقع للنموذج، بصيغة (الارتفاع، العرض). - 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)
أقنعة مجمّعة (Batched masks) بصيغة batch_size, num_channels, height, width، حيث يُحدَّد (height, width) بواسطة original_size.
إزالة الحشو وتكبير الأقنعة إلى حجم الصورة الأصلي.
Sam3TrackerModel
فئة transformers.Sam3TrackerModel
< source >( config: Sam3TrackerConfig )
المعاملات
- config (Sam3TrackerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Segment Anything Model 2 (SAM 2) لتوليد أقنعة التقسيم، بناءً على صورة مدخلة ونقاط وسمات مدخلة، أو صناديق، أو أقنعة.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneinput_points: typing.Optional[torch.Tensor] = Noneinput_labels: typing.Optional[torch.LongTensor] = Noneinput_boxes: typing.Optional[torch.Tensor] = Noneinput_masks: typing.Optional[torch.LongTensor] = Noneimage_embeddings: typing.Optional[torch.Tensor] = Nonemultimask_output: bool = Trueattention_similarity: typing.Optional[torch.Tensor] = Nonetarget_embedding: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Sam3TrackerImageSegmentationOutput or tuple(torch.Tensor)
المعاملات
- pixel_values (
torch.Tensorمن الشكل(batch_size, num_channels, image_size, image_size)، اختياري) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسلات باستخدام Sam3ImageProcessor. راجع Sam3ImageProcessor.call() للتفاصيل (Sam3TrackerProcessor يستخدم Sam3ImageProcessor لمعالجة الصور). - input_points (
torch.Tensorمن الشكل(batch_size, num_points, 2)) — نقاط مكانية ثنائية الأبعاد مدخلة، تُستخدم بواسطة مُشفِّر الموجه (prompt encoder) لتشفير الموجه. عادةً ما يؤدي ذلك إلى نتائج أفضل بكثير. يمكن الحصول على النقاط عن طريق تمرير قائمة من قوائم القوائم إلى المُعالِج (processor) الذي سيُنشئtorchtensors المقابلة من البُعد الرابع. البُعد الأول هو حجم دفعة الصور (image batch size)، والبُعد الثاني هو حجم دفعة النقاط (point batch size) (أي عدد أقنعة التقطيع (segmentation masks) التي نريد من النموذج أن يتنبأ بها لكل نقطة مدخلة)، والبُعد الثالث هو عدد النقاط لكل قناع تقطيع (من الممكن تمرير عدة نقاط لقناع واحد)، وآخر بُعد هو إحداثيات x (العمودية) و y (الأفقية) للنقطة. إذا تم تمرير عدد مختلف من النقاط إما لكل صورة، أو لكل قناع، فسيقوم المُعالِج بإنشاء نقاط “PAD” ستُطابق إحداثي (0, 0)، وسيتم تخطي حساب التضمين (embedding) لهذه النقاط باستخدام التسميات (labels). - input_labels (
torch.LongTensorبشكل(batch_size, point_batch_size, num_points)) — التسميات المدخلة للنقاط، تُستخدم هذه التسميات من قِبل مُشفِّر المُوجِّه (prompt encoder) لتشفير المُوجِّه. وفقًا للتنفيذ الرسمي، توجد ثلاثة أنواع من التسميات1: النقطة هي نقطة تحتوي على الكائن محل الاهتمام0: النقطة هي نقطة لا تحتوي على الكائن محل الاهتمام-1: النقطة المقابلة للخلفية
أضفنا التسمية:
-10: النقطة هي نقطة حشو، وبالتالي يجب تجاهلها من قِبل مُشفِّر المُوجِّه
يجب أن يتم ملء التسميات تلقائيًا بواسطة المعالج.
- input_boxes (
torch.Tensorبشكل(batch_size, num_boxes, 4)) — صناديق الإدخال للنقاط، تُستخدم هذه الصناديق بواسطة مُشفِّر المُوجِّه (prompt encoder) لتشفير المُوجِّه. بشكل عام، يؤدي ذلك إلى أقنعة (masks) مولَّدة أفضل بكثير. يمكن الحصول على الصناديق عن طريق تمرير قائمة من قوائم القوائم إلى المُعالِج (processor)، والذي سيولّدtorchمُتغيِّرًا (tensor)، حيث يتوافق كل بُعد على التوالي مع حجم دفعة الصور (batch size)، وعدد الصناديق لكل صورة، وإحداثيات النقطة العلوية اليسرى والنقطة السفلية اليمنى للصندوق. بالترتيب (x1,y1,x2,y2):x1: إحداثي x للنقطة العلوية اليسرى من الصندوق المدخلy1: إحداثي y للنقطة العلوية اليسرى من مربع الإدخالx2: إحداثي x للنقطة السفلية اليمنى من مربع الإدخالy2: إحداثي y للنقطة السفلية اليمنى من مربع الإدخال
- input_masks (
torch.Tensorمن الشكل(batch_size, image_size, image_size)) — يقبل نموذج SAM أيضًا أقنعة التقسيم كمدخلات. سيتم تضمين القناع بواسطة مُشفِّر المُوجِّه لتوليد تضمين مقابل، سيُغذَّى لاحقًا إلى مُفكِّك الأقنعة. يجب على المستخدم تغذية هذه الأقنعة يدويًا، ويجب أن تكون من الشكل (batch_size،image_size،image_size). - image_embeddings (
torch.Tensorمن الشكل(batch_size, output_channels, window_size, window_size)) — تضمينات الصور، تُستخدم من قِبَل مُفكّك الأقنعة لتوليد الأقنعة ودرجات iou. لحساب أكثر كفاءةً في استخدام الذاكرة، يمكن للمستخدمين أولاً استرجاع تضمينات الصور باستخدام طريقةget_image_embeddings، ثم تمريرها إلى طريقةforwardبدلاً من تمريرpixel_values. - multimask_output (
bool، اختياري) — في التنفيذ الأصلي والورقة البحثية، يُخرج النموذج دائمًا 3 أقنعة لكل صورة (أو لكل نقطة / لكل مربع محدد إذا كان ذلك ذا صلة). ومع ذلك، يمكن إخراج قناع واحد فقط، يقابل القناع «الأفضل»، عن طريق تحديدmultimask_output=False. - attention_similarity (
torch.Tensor، اختياري) — مصفوفة تشابه الانتباه، التي يجب تقديمها إلى فاحص الأقنعة (mask decoder) للانتباه الموجَّه بالهدف في حال استخدام النموذج للتخصيص كما تم تقديمه في PerSAM. - target_embedding (
torch.Tensor، اختياري) — تضمين المفهوم المستهدف، ليُقدَّم إلى فكّ الترميز القناعي (mask decoder) للتلميح الدلالي المستهدف في حال استخدام النموذج للتخصيص كما أُدخل في PerSAM.
يعيد
Sam3TrackerImageSegmentationOutput أو tuple(torch.Tensor)
أمر Sam3TrackerImageSegmentationOutput أو مجموعة مرتبة من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر
مختلفة اعتمادًا على الإعداد (Sam3TrackerConfig) والمدخلات.
تتجاوز طريقة Sam3TrackerModel الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
- iou_scores (
torch.Tensorمن الشكل(batch_size, point_batch_size, num_masks)) — درجات التقاطع مع الاتحاد (IoU) للأقنعة المتوقعة. - pred_masks (
torch.Tensorمن الشكل(batch_size, point_batch_size, num_masks, height, width)) — الأقنعة منخفضة الدقة المتوقعة. هذا هو اسم بديل لـlow_res_masks. يجب معالجة هذه الأقنعة ما بعد المعالجة بواسطة المعالج لجعلها بحجم الصورة الأصلي. - object_score_logits (
torch.Tensorمن الشكل(batch_size, point_batch_size, 1)) — قيم اللوجيت الخاصة بدرجة الكائن، والتي تشير إلى ما إذا كان الكائن موجودًا أم لا. - image_embeddings (
tuple(torch.Tensor)) — الميزات المستخرجة من FPN، والتي يستخدمها فكّ ترميز الأقنعة. هذا هو tuple منtorch.Tensorحيث يكون شكل كل tensor هو(batch_size, channels, height, width). - vision_hidden_states (
tuple(torch.Tensor)، اختياري، يُعاد عندoutput_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لكل مرحلة من مخرجات النموذج) بأبعاد(batch_size, height, width, hidden_size). حالات المخفية لنموذج الرؤية عند مخرج كل مرحلة. - vision_attentions (
tuple(torch.Tensor)، اختياري، يُعاد عندoutput_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) من الشكل(batch_size, num_heads, sequence_length, sequence_length). أوزان الانتباه لنموذج الرؤية. - mask_decoder_attentions (
tuple(torch.Tensor)، اختياري، يُعاد عندoutput_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length). أوزان الانتباه في فك الترميز للقناع.
مثال:
>>> 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
< source >( pixel_values: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Sam3TrackerVisionEncoderOutput or tuple(torch.Tensor)
المعاملات
- 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) والمدخلات.
last_hidden_state (
torch.Tensorمن الشكل(batch_size, height, width, hidden_size)) — تسلسل من حالات الإخفاء عند مخرجات الطبقة الأخيرة من النموذج.pooler_output (
torch.Tensorمن الشكل(batch_size, hidden_size)) — حالة الطبقة المخفية الأخيرة للرمز الأول من التسلسل (رمز التصنيف) بعد المعالجة الإضافية عبر الطبقات المستخدمة في مهمة ما قبل التدريب المساعدة. على سبيل المثال، بالنسبة لعائلة نماذج BERT، تُرجع هذه الخاصية رمز التصنيف بعد معالجته عبر طبقة خطية ودالة تفعيل tanh. تُدرَّب أوزان الطبقة الخطية من هدف التنبؤ بالجملة التالية (التصنيف) أثناء ما قبل التدريب.hidden_states (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
attentions (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
fpn_hidden_states (
tuple(torch.Tensor)) — مجموعة منtorch.Tensor(واحدة لكل مستوى من مستويات الميزات، من الدقة العالية إلى المنخفضة) بأبعاد(batch_size, hidden_size, height, width). خرائط الميزات القادمة من عنق شبكة هرم الميزات (Feature Pyramid Network).fpn_position_encoding (
tuple(torch.Tensor)) — مجموعة منtorch.Tensor(واحدة لكل مستوى من مستويات الميزات، من الدقة العالية إلى المنخفضة) بأبعاد(batch_size, hidden_size, height, width). ترميزات موضعية تتوافق معfpn_hidden_states.
Sam3TrackerPreTrainedModel
فئة transformers.Sam3TrackerPreTrainedModel
< source >( config: PreTrainedConfig*inputs**kwargs )
المعاملات
- config (PreTrainedConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Segment Anything 3 (SAM 3) لتوليد أقنعة التقسيم، بناءً على صورة مدخلة ونقاط وسمات مدخلة، أو صناديق، أو أقنعة.
قيمة وهمية لمسار منقّط (مثل torch.float32): سلاسل الوصول إلى السمات، والاستدعاءات تتصرف كمُزيّنات (decorators) مرّرة، وrepr هو المسار المنقّط، وعند استخدامه كصنف أساسي يُستبدل بصنف أساسي من نوع type عادي (بموجب __mro_entries__ في PEP 560)، بحيث تحتفظ الصنوف الفرعية الحقيقية بفئة ميتا (metaclass) عادية، وتقرأ inspect.signature دالة __init__ الحقيقية الخاصة بها بدلاً من تلك الوهمية.