Transformers documentation

EdgeTAM

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق HF في 13 يناير 2025، وأُضيف إلى مكتبة Hugging Face Transformers في 29 سبتمبر 2025.

SDPA FlashAttention

EdgeTAM

نظرة عامة

قُدِّم نموذج EdgeTAM في EdgeTAM: On-Device Track Anything Model Chong Zhou, Chenchen Zhu, Yunyang Xiong, Saksham Suri, Fanyi Xiao, Lemeng Wu, Raghuraman Krishnamoorthi, Bo Dai, Chen Change Loy, Vikas Chandra, Bilge Soran.

EdgeTAM هو تكييف فعّال لـ SAM 2 يُدخل بنية Perceiver مكانية ثنائية الأبعاد لتحسين آليات الانتباه في الذاكرة من أجل تجزئة الفيديو في الوقت الفعلي على الأجهزة المحمولة.

المستخلص من الورقة البحثية هو كالتالي:

بالإضافة إلى نموذج Segment Anything Model (SAM)، يوسّع SAM 2 قدرته من مدخلات الصور إلى مدخلات الفيديو من خلال آلية بنك الذاكرة، ويحقق أداءً ملحوظًا مقارنةً بالطرق السابقة، مما يجعله نموذجًا أساسيًا لمهمة تجزئة الفيديو. في هذه الورقة، نهدف إلى جعل SAM 2 أكثر كفاءة بكثير بحيث يعمل حتى على الأجهزة المحمولة مع الحفاظ على أداء مماثل. على الرغم من وجود عدة أعمال تهدف إلى تحسين كفاءة SAM، نجد أنها غير كافية لـ SAM 2 لأنها تركز جميعها على ضغط مشفّر الصورة، بينما تُظهر معاييرنا المرجعية أن كتل الانتباه الذاكري الجديدة المُدخلة هي أيضًا عنق الزجاجة في زمن الاستجابة. بناءً على هذه الملاحظة، نقترح EdgeTAM، الذي يستفيد من Perceiver مكاني ثنائي الأبعاد جديد لتقليل التكلفة الحسابية. على وجه التحديد، يُشفّر Perceiver المكاني ثنائي الأبعاد المقترح الذاكرات على مستوى الإطار المخزنة بكثافة باستخدام Transformer خفيف يحتوي على مجموعة ثابتة من الاستعلامات القابلة للتعلم. ونظرًا لأن تجزئة الفيديو مهمة تنبؤ كثيف، نجد أن الحفاظ على البنية المكانية للذاكرات أمر جوهري، لذا يتم تقسيم الاستعلامات إلى مجموعات على مستوى عام ومجموعات على مستوى الباتش. كما نقترح خط أنابيب تقطير يحسّن الأداء بشكل أكبر دون أي عبء على الاستدلال. ونتيجةً لذلك، يحقق EdgeTAM قيم J&F تبلغ 87.7 و70.0 و72.3 و71.7 على DAVIS 2017 وMOSE وSA-V val وSA-V test، بينما يعمل بسرعة 16 إطارًا في الثانية على iPhone 15 Pro Max.

تمت مساهمة هذا النموذج من قِبل yonigozlan. يمكن العثور على الكود الأصلي هنا.

مثال على الاستخدام

إنشاء الأقنعة تلقائيًا باستخدام Pipeline

يمكن استخدام EdgeTAM لتوليد الأقنعة تلقائيًا لتجزئة جميع الكائنات في صورة باستخدام خط أنابيب mask-generation:

from transformers import pipeline


generator = pipeline("mask-generation", model="yonigozlan/edgetam-1", 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 Sam2Processor, EdgeTamModel
import torch
from PIL import Image
import requests


model = EdgeTamModel.from_pretrained("yonigozlan/edgetam-1", device_map="auto")
processor = Sam2Processor.from_pretrained("yonigozlan/edgetam-1")

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, 1200, 1800])
print(f"IoU scores: {outputs.iou_scores.squeeze()}")
IoU scores: tensor([0.0463, 0.4859, 0.7616], device='cuda:0')

نقاط متعددة للتحسين

يمكنك تقديم عدة نقاط لتحسين التقسيم:

# 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]
print(f"IoU scores: {outputs.iou_scores.squeeze()}")
IoU scores: tensor([0.8362, 0.6900, 0.2120], device='cuda:0')

إدخال صندوق الحدود

يدعم EdgeTAM أيضاً مدخلات صندوق الحدود (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]
print(f"IoU scores: {outputs.iou_scores.squeeze()}")
IoU scores: tensor([0.9301, 0.9348, 0.6605], device='cuda: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
print(f"IoU scores: {outputs.iou_scores.squeeze()}")
IoU scores: tensor([0.7616, 0.9465], device='cuda:0')

الاستدلال الدُفعي

الصور المجمعة

معالجة عدة صور في وقت واحد لتحسين الكفاءة:

from transformers import Sam2Processor, EdgeTamModel
import torch
from PIL import Image
import requests


model = EdgeTamModel.from_pretrained("yonigozlan/edgetam-1", device_map="auto")
processor = Sam2Processor.from_pretrained("yonigozlan/edgetam-1")

# 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
print(f"IoU scores: {outputs.iou_scores.squeeze()}")
IoU scores: tensor([0.7618, 0.7999], device='cuda:0')

كائنات مُجمّعة لكل صورة

قم بتجزئة عدة كائنات داخل كل صورة باستخدام الاستدلال الدُفعي:

# 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
print(f"IoU scores: {outputs.iou_scores.squeeze()}")
IoU scores: tensor([0.9301, 0.9348, 0.6605, 0.9465], device='cuda:0')

استخدام الأقنعة السابقة كمدخلات

يمكن لـ EdgeTAM استخدام الأقنعة من التنبؤات السابقة كمدخلات لتحسين التقطيع:

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

EdgeTamConfig

فئة transformers.EdgeTamConfig

< >

( 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, EdgeTamPromptEncoderConfig], اختياري) — قاموس لخيارات التهيئة المستخدمة في تهيئة EdgeTamPromptEncoderConfig.
  • mask_decoder_config (Union[dict, EdgeTamMaskDecoderConfig], اختياري) — قائمة خيارات الإعدادات المستخدمة لتبويب EdgeTamMaskDecoderConfig.
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamModel. تُستخدم لاستحداث نموذج Edgetam وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ yonigozlan/EdgeTAM-hf

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

مثال:

>>> from transformers import (
...     EdgeTamVisionConfig,
...     EdgeTamPromptEncoderConfig,
...     EdgeTamMaskDecoderConfig,
...     EdgeTamModel,
... )

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

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

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

>>> # We can also initialize a EdgeTamConfig from a EdgeTamVisionConfig, EdgeTamPromptEncoderConfig, and EdgeTamMaskDecoderConfig
>>> # Initializing EDGETAM vision encoder, memory attention, and memory encoder configurations
>>> vision_config = EdgeTamVisionConfig()
>>> prompt_encoder_config = EdgeTamPromptEncoderConfig()
>>> mask_decoder_config = EdgeTamMaskDecoderConfig()

>>> config = EdgeTamConfig(vision_config, prompt_encoder_config, mask_decoder_config)

EdgeTamVisionConfig

فئة transformers.EdgeTamVisionConfig

< >

( 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 = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonebackbone_channel_list: list[int] | None = Nonebackbone_feature_sizes: list | None = Nonefpn_hidden_size: int = 256fpn_kernel_size: int = 1fpn_stride: int = 1fpn_padding: int = 0fpn_top_down_levels: list[int] | None = Nonenum_feature_levels: int = 3hidden_act: str = 'gelu'layer_norm_eps: float = 1e-06initializer_range: float = 0.02 )

المعاملات

  • backbone_config (Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — إعدادات نموذج الهيكل العظمي.
  • backbone_channel_list (List[int]، اختياري، القيمة الافتراضية [384, 192, 96, 48]) — قائمة بأبعاد القنوات الخاصة بالهيكل العظمي (backbone).
  • backbone_feature_sizes (List[List[int]]، اختياري، القيمة الافتراضية [[256, 256], [128, 128], [64, 64]]) — الأحجام المكانية لخرائط الميزات الصادرة من الهيكل العظمي.
  • fpn_hidden_size (int، اختياري، القيمة الافتراضية 256) — البُعد الخفي لـ FPN.
  • fpn_kernel_size (int، اختياري، القيمة الافتراضية 1) — حجم النواة للعمليات التجميعية في العنق (neck).
  • fpn_stride (int، اختياري، القيمة الافتراضية 1) — خطوة الالتفاف في العنق.
  • fpn_padding (int, اختياري، القيمة الافتراضية 0) — الحشو الخاص باللافحات في العنق.
  • fpn_top_down_levels (List[int]، اختياري، القيمة الافتراضية [2, 3]) — المستويات لروابط FPN من الأعلى إلى الأسفل.
  • num_feature_levels (int، اختياري، القيمة الافتراضية 3) — عدد مستويات الميزات من FPN التي سيتم استخدامها.
  • hidden_act (str، اختياري، القيمة الافتراضية gelu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وما إلى ذلك.
  • layer_norm_eps (float, اختياري، القيمة الافتراضية 1e-06) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة.
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamModel. تُستخدم لاستحداث نموذج Edgetam وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ yonigozlan/EdgeTAM-hf

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

EdgeTamMaskDecoderConfig

فئة transformers.EdgeTamMaskDecoderConfig

< >

( 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.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamModel. تُستخدم لاستحداث نموذج Edgetam وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ yonigozlan/EdgeTAM-hf

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

EdgeTamPromptEncoderConfig

فئة transformers.EdgeTamPromptEncoderConfig

< >

( 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] = 1024patch_size: int | list[int] | tuple[int, int] = 16mask_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]]، اختياري، القيمة الافتراضية 1024) — حجم (دقة) كل صورة.
  • patch_size (Union[int, list[int], tuple[int, int]]، اختياري، القيمة الافتراضية 16) — حجم (دقة) كل رقعة.
  • 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) — معامل المقياس لمُشفِّر المُوجِّه.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamModel. تُستخدم لاستحداث نموذج Edgetam وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ yonigozlan/EdgeTAM-hf

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

EdgeTamVisionModel

فئة transformers.EdgeTamVisionModel

< >

( config: EdgeTamVisionConfig )

المعاملات

  • config (EdgeTamVisionConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج الرؤية من EdgeTAM دون أي رأس أو إسقاط في الأعلى.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )

EdgeTamModel

فئة transformers.EdgeTamModel

< >

( config: EdgeTamConfig )

المعاملات

  • config (EdgeTamConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج Segment Anything Model 2 (SAM 2) لتوليد أقنعة التقسيم، بناءً على صورة مدخلة ونقاط وسمات مدخلة، أو صناديق، أو أقنعة.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( 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'> ) → EdgeTamImageSegmentationOutput or tuple(torch.Tensor)

المعاملات

  • pixel_values (torch.Tensor من الشكل (batch_size, num_channels, image_size, image_size)، اختياري) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام Sam2ImageProcessor. راجع Sam2ImageProcessor.call() للتفاصيل (Sam2Processor يستخدم Sam2ImageProcessor لمعالجة الصور).
  • input_points (torch.Tensor من الشكل (batch_size, num_points, 2)) — نقاط مكانية ثنائية الأبعاد مدخلة، تُستخدم بواسطة مُشفِّر الموجه (prompt encoder) لتشفير الموجه. عادةً ما يؤدي ذلك إلى نتائج أفضل بكثير. يمكن الحصول على النقاط عن طريق تمرير قائمة من قوائم القوائم إلى المُعالِج (processor) الذي سيُنشئ torch tensors المقابلة من البُعد الرابع. البُعد الأول هو حجم دفعة الصور (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.

يعيد

EdgeTamImageSegmentationOutput أو tuple(torch.Tensor)

EdgeTamImageSegmentationOutput أو مجموعة مرتبة من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (EdgeTamConfig) والمدخلات.

تتجاوز طريقة EdgeTamModel الخاصة بالتقديم (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/edgetam.1_hiera_tiny")
>>> processor = AutoProcessor.from_pretrained("danelcsb/edgetam.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

< >

( pixel_values: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → EdgeTamVisionEncoderOutput or tuple(torch.Tensor)

المعاملات

  • pixel_values (torch.Tensor) — قيم البكسلات المدخلة ذات الشكل (batch_size, num_channels, height, width).

يعيد

EdgeTamVisionEncoderOutput أو tuple(torch.Tensor)

EdgeTamVisionEncoderOutput أو مجموعة (tuple) من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على التهيئة (EdgeTamConfig) والمدخلات.

  • 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.

مثال:

Update on GitHub