# EdgeTAMVideo

## نظرة عامة

قُدِّم نموذج EdgeTAM في [EdgeTAM: On-Device Track Anything Model](https://huggingface.co/papers/2501.07256) 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](https://huggingface.co/yonigozlan). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/EdgeTAM).

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

### تجزئة الفيديو وتتبعه

تتمثل القوة الرئيسية لـ EdgeTAM Video في قدرته على تتبع الكائنات عبر إطارات الفيديو بكفاءة على الأجهزة المحمولة. فيما يلي كيفية استخدامه لتجزئة الفيديو:

#### تتبع الفيديو الأساسي

```python
from transformers import EdgeTamVideoModel, Sam2VideoProcessor
import torch

model = EdgeTamVideoModel.from_pretrained("yonigozlan/edgetam-video-1", device_map="auto")
processor = Sam2VideoProcessor.from_pretrained("yonigozlan/edgetam-video-1")

# Load video frames (example assumes you have a list of PIL Images)
# video_frames = [Image.open(f"frame_{i:05d}.jpg") for i in range(num_frames)]

# For this example, we'll use the video loading utility
from transformers.video_utils import load_video
video_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/bedroom.mp4"
video_frames, _ = load_video(video_url)

# Initialize video inference session
inference_session = processor.init_video_session(
    video=video_frames,
    inference_device=device,
)

# Add click on first frame to select object
ann_frame_idx = 0
ann_obj_id = 1
points = [[[[210, 350]]]]
labels = [[[1]]]

processor.add_inputs_to_inference_session(
    inference_session=inference_session,
    frame_idx=ann_frame_idx,
    obj_ids=ann_obj_id,
    input_points=points,
    input_labels=labels,
)

# Segment the object on the first frame
outputs = model(
    inference_session=inference_session,
    frame_idx=ann_frame_idx,
)
video_res_masks = processor.post_process_masks(
    [outputs.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
)[0]
print(f"Segmentation shape: {video_res_masks.shape}")
Segmentation shape: torch.Size([1, 1, 540, 960])

# Propagate through the entire video
video_segments = {}
for sam2_video_output in model.propagate_in_video_iterator(inference_session):
    video_res_masks = processor.post_process_masks(
        [sam2_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
    )[0]
    video_segments[sam2_video_output.frame_idx] = video_res_masks

print(f"Tracked object through {len(video_segments)} frames")
Tracked object through 200 frames
```

#### تتبع الفيديو متعدد الأهداف

تتبع عدة كائنات في وقت واحد عبر إطارات الفيديو:

```python
# Reset for new tracking session
inference_session.reset_inference_session()

# Add multiple objects on the first frame
ann_frame_idx = 0
obj_ids = [2, 3]
input_points = [[[[200, 300]], [[400, 150]]]]  # Points for two objects (batched)
input_labels = [[[1], [1]]]

processor.add_inputs_to_inference_session(
    inference_session=inference_session,
    frame_idx=ann_frame_idx,
    obj_ids=obj_ids,
    input_points=input_points,
    input_labels=input_labels,
)

# Get masks for both objects on first frame
outputs = model(
    inference_session=inference_session,
    frame_idx=ann_frame_idx,
)

# Propagate both objects through video
video_segments = {}
for sam2_video_output in model.propagate_in_video_iterator(inference_session):
    video_res_masks = processor.post_process_masks(
        [sam2_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
    )[0]
    video_segments[sam2_video_output.frame_idx] = {
        obj_id: video_res_masks[i]
        for i, obj_id in enumerate(inference_session.obj_ids)
    }

print(f"Tracked {len(inference_session.obj_ids)} objects through {len(video_segments)} frames")
Tracked 2 objects through 200 frames
```

#### تحسين تجزئة الفيديو

يمكنك إضافة نقرات إضافية على أي إطار لتحسين التتبع:

```python
# Add refinement click on a later frame
refine_frame_idx = 50
ann_obj_id = 2  # Refining first object
points = [[[[220, 280]]]]  # Additional point
labels = [[[1]]]  # Positive click

processor.add_inputs_to_inference_session(
    inference_session=inference_session,
    frame_idx=refine_frame_idx,
    obj_ids=ann_obj_id,
    input_points=points,
    input_labels=labels,
)

# Re-propagate with the additional information
video_segments = {}
for sam2_video_output in model.propagate_in_video_iterator(inference_session):
    video_res_masks = processor.post_process_masks(
        [sam2_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
    )[0]
    video_segments[sam2_video_output.frame_idx] = video_res_masks
```

### الاستدلال على الفيديو عبر البث

لتطبيقات الوقت الحقيقي، يدعم EdgeTAM Video معالجة إطارات الفيديو عند وصولها:

```python
# Initialize session for streaming
inference_session = processor.init_video_session(
    inference_device=device,
)

# Process frames one by one
for frame_idx, frame in enumerate(video_frames[:10]):  # Process first 10 frames
    inputs = processor(images=frame, device=device, return_tensors="pt").to(model.device)
...
    if frame_idx == 0:
        # Add point input on first frame
        processor.add_inputs_to_inference_session(
            inference_session=inference_session,
            frame_idx=0,
            obj_ids=1,
            input_points=[[[[210, 350], [250, 220]]]],
            input_labels=[[[1, 1]]],
            original_size=inputs.original_sizes[0], # need to be provided when using streaming video inference
        )
...
    # Process current frame
    sam2_video_output = model(inference_session=inference_session, frame=inputs.pixel_values[0])
...
    video_res_masks = processor.post_process_masks(
        [sam2_video_output.pred_masks], original_sizes=inputs.original_sizes, binarize=False
    )[0]
    print(f"Frame {frame_idx}: mask shape {video_res_masks.shape}")

Frame 0: mask shape torch.Size([1, 1, 540, 960])
...
```

#### معالجة الدُفعات من الفيديو لعدة كائنات

تتبّع عدة كائنات في نفس الوقت داخل الفيديو عن طريق إضافتها جميعًا دفعة واحدة:

```python
# Initialize video session
inference_session = processor.init_video_session(
    video=video_frames,
    inference_device=device,
)

# Add multiple objects on the first frame using batch processing
ann_frame_idx = 0
obj_ids = [2, 3]  # Track two different objects
input_points = [
    [[[200, 300], [230, 250], [275, 175]], [[400, 150]]]
]  # Object 2: 3 points (2 positive, 1 negative); Object 3: 1 point
input_labels = [
    [[1, 1, 0], [1]]
]  # Object 2: positive, positive, negative; Object 3: positive

processor.add_inputs_to_inference_session(
    inference_session=inference_session,
    frame_idx=ann_frame_idx,
    obj_ids=obj_ids,
    input_points=input_points,
    input_labels=input_labels,
)

# Get masks for all objects on the first frame
outputs = model(
    inference_session=inference_session,
    frame_idx=ann_frame_idx,
)
video_res_masks = processor.post_process_masks(
    [outputs.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
)[0]
print(f"Generated masks for {video_res_masks.shape[0]} objects")
Generated masks for 2 objects

# Propagate all objects through the video
video_segments = {}
for sam2_video_output in model.propagate_in_video_iterator(inference_session):
    video_res_masks = processor.post_process_masks(
        [sam2_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
    )[0]
    video_segments[sam2_video_output.frame_idx] = {
        obj_id: video_res_masks[i]
        for i, obj_id in enumerate(inference_session.obj_ids)
    }

print(f"Tracked {len(inference_session.obj_ids)} objects through {len(video_segments)} frames")
Tracked 2 objects through 200 frames
```

## EdgeTamVideoMaskDecoderConfig[[transformers.EdgeTamVideoMaskDecoderConfig]]

#### transformers.EdgeTamVideoMaskDecoderConfig[[transformers.EdgeTamVideoMaskDecoderConfig]]

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/configuration_edgetam_video.py#L57)

**المعاملات:**

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_delta (`float`، *اختياري*، القيمة الافتراضية 0.05) : دلتا الاستقرار للقناع متعدد الطبقات الديناميكي.

dynamic_multimask_stability_thresh (`float`، *اختياري*، القيمة الافتراضية 0.98) : عتبة الاستقرار للقناع متعدد الطبقات الديناميكي.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamVideoModel. تُستخدم لاستحداث نموذج Edgetam Video وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [yonigozlan/EdgeTAM-hf](https://huggingface.co/yonigozlan/EdgeTAM-hf)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

## EdgeTamVideoPromptEncoderConfig[[transformers.EdgeTamVideoPromptEncoderConfig]]

#### transformers.EdgeTamVideoPromptEncoderConfig[[transformers.EdgeTamVideoPromptEncoderConfig]]

```python
transformers.EdgeTamVideoPromptEncoderConfig(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] = 1024, patch_size: int | list[int] | tuple[int, int] = 16, mask_input_channels: int = 16, num_point_embeddings: int = 4, hidden_act: str = 'gelu', layer_norm_eps: float = 1e-06, scale: int = 1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/configuration_edgetam_video.py#L32)

**المعاملات:**

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) : معامل المقياس لمشفّر الاستدعاء.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamVideoModel. تُستخدم لاستحداث نموذج Edgetam Video وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [yonigozlan/EdgeTAM-hf](https://huggingface.co/yonigozlan/EdgeTAM-hf)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

## EdgeTamVideoConfig[[transformers.EdgeTamVideoConfig]]

#### transformers.EdgeTamVideoConfig[[transformers.EdgeTamVideoConfig]]

```python
transformers.EdgeTamVideoConfig(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, num_maskmem: int = 7, image_size: int | list[int] | tuple[int, int] = 1024, sigmoid_scale_for_mem_enc: float = 20.0, sigmoid_bias_for_mem_enc: float = -10.0, enable_occlusion_spatial_embedding: bool = True, multimask_output_in_sam: bool = True, multimask_min_pt_num: int = 0, multimask_max_pt_num: int = 1, multimask_output_for_tracking: bool = True, max_object_pointers_in_encoder: int = 16, max_cond_frame_num: int = -1, enable_temporal_pos_encoding_for_object_pointers: bool = True, memory_attention_hidden_size: int = 256, memory_attention_num_layers: int = 2, memory_attention_num_attention_heads: int = 1, memory_attention_downsample_rate: int = 1, memory_attention_mlp_hidden_size: int = 2048, memory_attention_mlp_hidden_act: str = 'relu', memory_attention_dropout: float | int = 0.1, memory_attention_rope_feat_sizes: list | None = None, memory_attention_rope_k_sizes: list | None = None, memory_attention_rope_dropout: float | int = 0.1, rope_parameters: dict | None = None, perceiver_resampler_num_latents: int = 256, perceiver_resampler_num_latents_2d: int = 256, perceiver_resampler_hidden_size: int = 64, perceiver_resampler_mlp_intermediate_size: int = 256, perceiver_resampler_num_attention_heads: int = 1, perceiver_resampler_attention_head_dim: int = 64, perceiver_resampler_num_layers: int = 2, perceiver_resampler_hidden_dropout: float | int = 0.0, perceiver_resampler_attention_dropout: float | int = 0.0, memory_encoder_hidden_size: int = 256, memory_encoder_output_channels: int = 64, mask_downsampler_embed_dim: int = 256, memory_fuser_intermediate_dim: int = 1024, mask_downsampler_kernel_size: int = 3, mask_downsampler_stride: int = 2, mask_downsampler_padding: int = 1, mask_downsampler_total_stride: int = 16, mask_downsampler_hidden_act: str = 'gelu', memory_fuser_num_layers: int = 2, memory_fuser_embed_dim: int = 256, memory_fuser_kernel_size: int = 7, memory_fuser_padding: int = 3, memory_fuser_layer_scale_init_value: float = 1e-06, memory_fuser_hidden_act: str = 'gelu')
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/configuration_edgetam_video.py#L96)

**المعاملات:**

vision_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`، *اختياري*) : كائن الإعداد أو قاموس العمود الفقري البصري.

prompt_encoder_config (Union[`dict`, `EdgeTamVideoPromptEncoderConfig`], *اختياري*) : قاموس لخيارات التهيئة المستخدمة لتبني [EdgeTamVideoPromptEncoderConfig](/docs/transformers/main/ar/model_doc/edgetam_video#transformers.EdgeTamVideoPromptEncoderConfig).

mask_decoder_config (Union[`dict`, `EdgeTamVideoMaskDecoderConfig`], *اختياري*) : قاموس لخيارات التهيئة المستخدمة لتبني [EdgeTamMaskDecoderConfig](/docs/transformers/main/ar/model_doc/edgetam#transformers.EdgeTamMaskDecoderConfig).

initializer_range (`float`، *اختياري*، القيمة الافتراضية `0.02`) : الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

num_maskmem (`int`، *اختياري*، القيمة الافتراضية 7) : عدد فتحات الذاكرة لذاكرة القناع.

image_size (`Union[int, list[int], tuple[int, int]]`، *اختياري*، القيمة الافتراضية `1024`) : حجم (دقة) كل صورة.

sigmoid_scale_for_mem_enc (`float`، *اختياري*، القيمة الافتراضية 20.0) : معامل التدرج لدالة سيجمويد في مُشفِّر الذاكرة.

sigmoid_bias_for_mem_enc (`float`، *اختياري*، القيمة الافتراضية -10.0) : انحياز لدالة سيجمويد في مُشفِّر الذاكرة.

enable_occlusion_spatial_embedding (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم تفعيل التضمين المكاني للإخفاءات.

multimask_output_in_sam (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم إخراج أقنعة متعددة من رأس SAM.

multimask_min_pt_num (`int`، *اختياري*، القيمة الافتراضية 0) : الحد الأدنى لعدد النقاط اللازمة لتفعيل إخراج multimask.

multimask_max_pt_num (`int`، *اختياري*، القيمة الافتراضية 1) : الحد الأقصى لعدد النقاط التي تُطلق إخراج multimask.

multimask_output_for_tracking (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم استخدام مخرجات متعددة الأقنعة للتتبع.

max_object_pointers_in_encoder (`int`، *اختياري*، القيمة الافتراضية 16) : الحد الأقصى لعدد مؤشرات الكائنات في المُشفِّر.

max_cond_frame_num (`int`، *اختياري*، القيمة الافتراضية -1) : الحد الأقصى لعدد إطارات الشرط المستخدمة في انتباه الذاكرة. اضبطه على -1 لاستخدام جميع إطارات الشرط.

enable_temporal_pos_encoding_for_object_pointers (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم تمكين الترميز الموضعي الزمني لمؤشرات الكائنات.

memory_attention_hidden_size (`int`، *اختياري*، القيمة الافتراضية 256) : بُعد حالات الإخفاء لانتباه الذاكرة.

memory_attention_num_layers (`int`، *اختياري*، القيمة الافتراضية 2) : عدد الطبقات في وحدة الانتباه الذاكري.

memory_attention_num_attention_heads (`int`، *اختياري*، القيمة الافتراضية 1) : عدد رؤوس الانتباه لكل طبقة انتباه في انتباه الذاكرة.

memory_attention_downsample_rate (`int`، *اختياري*، القيمة الافتراضية 1) : معدل تقليل الحجم لطبقات الانتباه.

memory_attention_mlp_hidden_size (`int`، *اختياري*، القيمة الافتراضية 2048) : بُعد الشبكة العصبية الأمامية في وحدة انتباه الذاكرة.

memory_attention_mlp_hidden_act (`str`، *اختياري*، القيمة الافتراضية `"relu"`) : دالة التنشيط غير الخطية في الشبكة الأمامية داخل وحدة انتباه الذاكرة.

memory_attention_dropout (`float`، *اختياري*، القيمة الافتراضية 0.1) : معدل الإسقاط (dropout) لوحدة الانتباه في الذاكرة.

memory_attention_rope_feat_sizes (`Tuple[int, int]`، *اختياري*، القيمة الافتراضية `[64, 64]`) : أحجام الميزات لتشفير الموضع Rope.

memory_attention_rope_k_sizes (`List[int]`، *اختياري*، القيمة الافتراضية `[16, 16]`) : أحجام ميزات المفتاح لتشفير الموضع RoPE في الانتباه الذاكري.

memory_attention_rope_dropout (`float`، *اختياري*، القيمة الافتراضية 0.1) : معدل الإسقاط (dropout) لتشفير المواقع في Rope.

rope_parameters (`dict`, *اختياري*) : قاموس يحتوي على معاملات التهيئة لتضمينات RoPE. يجب أن يحتوي القاموس على قيمة لـ `rope_theta`، ومعاملات اختيارية تُستخدم للتصعيد في حال رغبتك في استخدام RoPE مع `max_position_embeddings` أطول.

perceiver_resampler_num_latents (`int`، *اختياري*، القيمة الافتراضية 256) : عدد رموز الكامنة أحادية البعد في مُعيد التجميع (perceiver resampler).

perceiver_resampler_num_latents_2d (`int`، *اختياري*، القيمة الافتراضية 256) : عدد رموز الكامنة ثنائية الأبعاد في مُعيد التجميع (perceiver resampler).

perceiver_resampler_hidden_size (`int`، *اختياري*، القيمة الافتراضية 64) : حجم الطبقة المخفية لمُعيد عينة المُدرِك (perceiver resampler).

perceiver_resampler_mlp_intermediate_size (`int`، *اختياري*، القيمة الافتراضية 256) : الحجم الوسيط للشبكة الأمامية في مُعيد عينة المُدرِك (perceiver resampler).

perceiver_resampler_num_attention_heads (`int`، *اختياري*، القيمة الافتراضية 1) : عدد رؤوس الانتباه في مُعيد عينة المُدرِك (perceiver resampler).

perceiver_resampler_attention_head_dim (`int`، *اختياري*، القيمة الافتراضية 64) : بُعد كل رأس انتباه في مُعيد التجميع (perceiver resampler).

perceiver_resampler_num_layers (`int`، *اختياري*، القيمة الافتراضية 2) : عدد الطبقات في مُعيد التجميع (perceiver resampler).

perceiver_resampler_hidden_dropout (`float`، *اختياري*، القيمة الافتراضية 0.0) : معدل الإسقاط (dropout) للطبقات المخفية في مُعيد عينة المستشعر (perceiver resampler).

perceiver_resampler_attention_dropout (`float`، *اختياري*، القيمة الافتراضية 0.0) : معدل الإسقاط (dropout) لطبقات الانتباه في مُعيد التجميع (perceiver resampler).

memory_encoder_hidden_size (`int`، *اختياري*، القيمة الافتراضية 256) : بُعد حالات المخفي لمشفّر الذاكرة.

memory_encoder_output_channels (`int`، *اختياري*، القيمة الافتراضية 64) : عدد قنوات الإخراج لمشفّر الذاكرة.

mask_downsampler_embed_dim (`int`، *اختياري*، القيمة الافتراضية 256) : بُعد تضمين مُصغِّر القناع.

memory_fuser_intermediate_dim (`int`، *اختياري*، القيمة الافتراضية 1024) : البُعد الوسيط لشبكة التغذية الأمامية لمدمج الذاكرة.

mask_downsampler_kernel_size (`int`، *اختياري*، القيمة الافتراضية 3) : حجم النواة (kernel) لمُصغِّر القناع (mask downsampler).

mask_downsampler_stride (`int`، *اختياري*، القيمة الافتراضية 2) : خطوة (stride) لمُصغِّر القناع (mask downsampler).

mask_downsampler_padding (`int`، *اختياري*، القيمة الافتراضية 1) : الحشو الخاص بمُصغِّر القناع.

mask_downsampler_total_stride (`int`، *اختياري*، القيمة الافتراضية 16) : إجمالي الخطوة (stride) لمُصغِّر القناع (mask downsampler).

mask_downsampler_hidden_act (`str`، *اختياري*، القيمة الافتراضية `"gelu"`) : دالة التنشيط غير الخطية في مُصغِّر القناع.

memory_fuser_num_layers (`int`، *اختياري*، القيمة الافتراضية 2) : عدد الطبقات في دمج الذاكرة.

memory_fuser_embed_dim (`int`، *اختياري*، القيمة الافتراضية 256) : بُعد تضمين مدمج الذاكرة.

memory_fuser_kernel_size (`int`، *اختياري*، القيمة الافتراضية 7) : حجم النواة لمدمج الذاكرة.

memory_fuser_padding (`int`، *اختياري*، القيمة الافتراضية 3) : الحشو الخاص بدمج الذاكرة.

memory_fuser_layer_scale_init_value (`float`، *اختياري*، القيمة الافتراضية 1e-06) : القيمة الأولية لمقياس الطبقة في مدمج الذاكرة.

memory_fuser_hidden_act (`str`، *اختياري*، القيمة الافتراضية `"gelu"`) : دالة التنشيط غير الخطية في مدمج الذاكرة.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EdgeTamVideoModel. تُستخدم لاستحداث نموذج Edgetam Video وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [yonigozlan/EdgeTAM-hf](https://huggingface.co/yonigozlan/EdgeTAM-hf)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

مثال:

```python
>>> from transformers import (
...     EdgeTamVisionConfig,
...     EdgeTamVideoPromptEncoderConfig,
...     EdgeTamVideoMaskDecoderConfig,
...     EdgeTamVideoModel,
...     EdgeTamVideoConfig,
... )

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

>>> # Initializing a EdgeTamVideoModel (with random weights) from the `"facebook/edgetam.1_hiera_tiny"` style configuration
>>> model = EdgeTamVideoModel(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 = EdgeTamVideoPromptEncoderConfig()
>>> mask_decoder_config = EdgeTamVideoMaskDecoderConfig()

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

## EdgeTamVideoInferenceSession[[transformers.EdgeTamVideoInferenceSession]]

#### transformers.EdgeTamVideoInferenceSession[[transformers.EdgeTamVideoInferenceSession]]

```python
transformers.EdgeTamVideoInferenceSession(video: typing.Optional[torch.Tensor] = None, video_height: int | None = None, video_width: int | None = None, inference_device: typing.Union[torch.device, str] = 'cpu', inference_state_device: typing.Union[torch.device, str] = 'cpu', video_storage_device: typing.Union[torch.device, str] = 'cpu', dtype: typing.Union[torch.dtype, str] = 'float32', max_vision_features_cache_size: int = 1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L942)

**المعاملات:**

video (`torch.Tensor`، *اختياري*) : الفيديو الذي سيتم معالجته. لا حاجة إلى تقديمه عند البث.

video_height (`int`, *اختياري*) : ارتفاع الفيديو.

video_width (`int`, *اختياري*) : عرض الفيديو.

inference_device (`torch.device`، *اختياري*، الافتراضي `"cpu"`) : الجهاز المستخدم للاستدلال.

inference_state_device (`torch.device`، *اختياري*، الافتراضي `"cpu"`) : الجهاز الذي يُخزَّن عليه حالة الاستدلال.

video_storage_device (`torch.device`، *اختياري*، الافتراضي `"cpu"`) : الجهاز الذي سيتم تخزين الفيديو عليه.

dtype (`torch.dtype`، *اختياري*، الافتراضي `"float32"`) : نوع البيانات (dtype) المستخدم للفيديو.

max_vision_features_cache_size (`int`، *اختياري*، القيمة الافتراضية 1) : الحد الأقصى لعدد ميزات الرؤية التي يجب تخزينها مؤقتًا.

يدير معاملات جلسة الاستدلال على الفيديو وحالتها والذاكرة المؤقتة.

#### add_mask_inputs[[transformers.EdgeTamVideoInferenceSession.add_mask_inputs]]

```python
add_mask_inputs(obj_idx: int, frame_idx: int, inputs: Tensor)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1062)

أضف مدخلات الأقنعة مع تحديد تلقائي للأجهزة.

#### add_new_frame[[transformers.EdgeTamVideoInferenceSession.add_new_frame]]

```python
add_new_frame(pixel_values: Tensor, frame_idx: int | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1137)

إضافة إطار جديد مع وضع تلقائي للأجهزة.

#### add_point_inputs[[transformers.EdgeTamVideoInferenceSession.add_point_inputs]]

```python
add_point_inputs(obj_idx: int, frame_idx: int, inputs: dict)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1048)

أضف مدخلات نقاط مع وضع تلقائي للأجهزة.

#### get_frame[[transformers.EdgeTamVideoInferenceSession.get_frame]]

```python
get_frame(frame_idx: int)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1153)

الحصول على إطار من الفيديو.

#### get_obj_num[[transformers.EdgeTamVideoInferenceSession.get_obj_num]]

```python
get_obj_num()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1043)

احصل على العدد الإجمالي للمعرّفات الفريدة للأهداف التي تم استلامها حتى الآن في هذه الجلسة.

#### get_output[[transformers.EdgeTamVideoInferenceSession.get_output]]

```python
get_output(obj_idx: int, frame_idx: int, output_key: str, is_conditioning_frame: bool = True)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1110)

**المعاملات:**

obj_idx (int) : فهرس الكائن.

frame_idx (int) : فهرس الإطار.

output_key (str) : مفتاح المخرجات.

is_conditioning_frame (bool) : ما إذا كان المخرج مخصصًا لإطار تكييف.

احصل على المخرجات مع إدارة ذكية للأجهزة.

#### obj_id_to_idx[[transformers.EdgeTamVideoInferenceSession.obj_id_to_idx]]

```python
obj_id_to_idx(obj_id: int)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1017)

تعيين معرّف الكائن إلى الفهرس، مع إنشاء إدخال جديد عند الحاجة.

#### obj_idx_to_id[[transformers.EdgeTamVideoInferenceSession.obj_idx_to_id]]

```python
obj_idx_to_id(obj_idx: int)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1039)

تعيين فهرس الكائن على جانب النموذج إلى معرّف الكائن على جانب العميل.

#### remove_mask_inputs[[transformers.EdgeTamVideoInferenceSession.remove_mask_inputs]]

```python
remove_mask_inputs(obj_idx: int, frame_idx: int)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1068)

إزالة مدخلات القناع.

#### remove_point_inputs[[transformers.EdgeTamVideoInferenceSession.remove_point_inputs]]

```python
remove_point_inputs(obj_idx: int, frame_idx: int)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1058)

إزالة مدخلات النقاط.

#### reset_inference_session[[transformers.EdgeTamVideoInferenceSession.reset_inference_session]]

```python
reset_inference_session()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1169)

إعادة تعيين بيانات التتبع والذاكرة المؤقتة.

#### reset_tracking_data[[transformers.EdgeTamVideoInferenceSession.reset_tracking_data]]

```python
reset_tracking_data()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1157)

إعادة تعيين بيانات التتبع مع الاحتفاظ بالذاكرة المؤقتة.

#### store_output[[transformers.EdgeTamVideoInferenceSession.store_output]]

```python
store_output(obj_idx: int, frame_idx: int, output_key: str | None = None, output_value: typing.Union[torch.Tensor, dict, NoneType] = None, is_conditioning_frame: bool = True)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L1073)

**المعاملات:**

obj_idx (int) : فهرس الكائن.

frame_idx (int) : فهرس الإطار.

output_key (Optional[str]) : مفتاح المخرجات. إذا كان None، تُخزَّن المخرجات كقاموس.

output_value (Optional[Union[torch.Tensor, dict]]) : قيمة المخرجات.

is_conditioning_frame (bool) : ما إذا كان المخرج مخصصًا لإطار تكييف.

تخزين المخرجات مع إدارة ذكية للأجهزة. إذا كانت output_key تساوي None، يتم تخزين المخرجات كقاموس.

## EdgeTamVideoModel[[transformers.EdgeTamVideoModel]]

#### transformers.EdgeTamVideoModel[[transformers.EdgeTamVideoModel]]

```python
transformers.EdgeTamVideoModel(config: EdgeTamVideoConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L2062)

**المعاملات:**

config ([EdgeTamVideoConfig](/docs/transformers/main/ar/model_doc/edgetam_video#transformers.EdgeTamVideoConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Edgetam Video الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.EdgeTamVideoModel.forward]]

```python
forward(inference_session: EdgeTamVideoInferenceSession, frame_idx: int | None = None, frame: typing.Optional[torch.Tensor] = None, reverse: bool = False, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L2196)

**المعاملات:**

inference_session (`~models.edgetam_video.modeling_edgetam_video.EdgeTamVideoInferenceSession`) : كائن جلسة الاستدلال على الفيديو.

frame_idx (`int`, *اختياري*) : فهرس الإطار الذي سيتم تشغيل الاستدلال عليه. لا حاجة إلى تقديمه عند الاستدلال على إطار جديد تم بثه.

frame (`torch.Tensor`، *اختياري*) : الإطار الذي سيتم معالجته. يُقدَّم عند البث.

reverse (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب نشر القيم في الاتجاه العكسي.

**يعيد:** `EdgeTamVideoSegmentationOutput` أو `tuple(torch.Tensor)`

`EdgeTamVideoSegmentationOutput` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([EdgeTamVideoConfig](/docs/transformers/main/ar/model_doc/edgetam_video#transformers.EdgeTamVideoConfig)) والمدخلات.

نشر الكائنات عبر إطار فيديو مُبَثّ.

- **object_ids** (`list[int]`، *اختياري*) -- قائمة بمعرّفات الكائنات التي يتم تتبعها في الإطار الحالي.
- **pred_masks** (`torch.Tensor` من الشكل `(batch_size, num_masks, height, width)`) -- الأقنعة المتوقعة المخزنة بدقة النموذج.
- **object_score_logits** (`torch.Tensor` من الشكل `(batch_size,)`، *اختياري*) -- قيم اللوجيت الخاصة بدرجات الكائنات، والتي تشير إلى ما إذا كانت الكائنات موجودة أم لا.
- **frame_idx** (`int`، *اختياري*) -- فهرس الإطار في الفيديو.

#### get_image_features[[transformers.EdgeTamVideoModel.get_image_features]]

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/edgetam_video/modeling_edgetam_video.py#L2295)

**المعاملات:**

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

**يعيد:** `EdgeTamVideoVisionEncoderOutput` أو `tuple(torch.Tensor)`

`EdgeTamVideoVisionEncoderOutput` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([EdgeTamVideoConfig](/docs/transformers/main/ar/model_doc/edgetam_video#transformers.EdgeTamVideoConfig)) والمدخلات.

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

