Transformers documentation

EdgeTAMVideo

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

Ce modèle a été publié dans HF papers le 2025-01-13 et ajouté à Hugging Face Transformers le 2025-09-29.

SDPA FlashAttention

EdgeTAMVideo

Aperçu

Le modèle EdgeTAM a été proposé dans 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 est une adaptation efficace de SAM 2 qui introduit une architecture 2D Spatial Perceiver afin d'optimiser les mécanismes d'attention mémoire pour la segmentation vidéo en temps réel sur des appareils mobiles.

L'abstract de l'article est le suivant :

Au-delà de Segment Anything Model (SAM), SAM 2 étend davantage sa capacité des images aux entrées vidéo grâce à un mécanisme de mémoire et obtient des performances remarquables par rapport aux méthodes précédentes, ce qui en fait un modèle de base pour la tâche de segmentation vidéo. Dans cet article, nous visons à rendre SAM 2 beaucoup plus efficace afin qu'il puisse même s'exécuter sur des appareils mobiles tout en maintenant des performances comparables. Malgré plusieurs travaux optimisant SAM pour une meilleure efficacité, nous constatons qu'ils ne sont pas suffisants pour SAM 2, car ils se concentrent tous sur la compression de l'encodeur d'image, alors que notre référence montre que les nouveaux blocs d'attention mémoire introduits constituent également le goulot d'étranglement de latence. Compte tenu de cette observation, nous proposons EdgeTAM, qui exploite un nouveau 2D Spatial Perceiver pour réduire le coût de calcul. En particulier, le 2D Spatial Perceiver proposé encode les mémoires de niveau image stockées de manière dense avec un Transformer léger contenant un ensemble fixe de requêtes apprenables. Étant donné que la segmentation vidéo est une tâche de prédiction dense, nous constatons qu'il est essentiel de préserver la structure spatiale des mémoires, de sorte que les requêtes sont divisées en groupes de niveau global et de niveau patch. Nous proposons également un pipeline de distillation qui améliore davantage les performances sans surcharge d'inférence. En conséquence, EdgeTAM atteint 87,7, 70,0, 72,3 et 71,7 J&F sur DAVIS 2017, MOSE, SA-V val et SA-V test, tout en fonctionnant à 16 FPS sur iPhone 15 Pro Max.

Ce modèle a été contribué par yonigozlan. Le code d'origine peut être trouvé ici.

Exemple d'utilisation

Segmentation et suivi vidéo

La principale force d’EdgeTAM Video est sa capacité à suivre efficacement des objets à travers les images d’une vidéo sur des appareils mobiles. Voici comment l’utiliser pour la segmentation vidéo :

Suivi vidéo de base

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

Suivi vidéo multi-objets

Suivre plusieurs objets simultanément à travers les images vidéo :

# 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

Affiner la segmentation vidéo

Vous pouvez ajouter des clics supplémentaires sur n'importe quel plan pour affiner le suivi :

# 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

Inférence vidéo en streaming

Pour les applications en temps réel, EdgeTAM Video prend en charge le traitement des images vidéo à mesure qu’elles arrivent :

# 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])
...

Traitement par lots de vidéos pour plusieurs objets

Suivre plusieurs objets simultanément dans une vidéo en les ajoutant tous d'un coup :

# 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

classe transformers.EdgeTamVideoMaskDecoderConfig

< >

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

Paramètres

  • hidden_size (int, facultatif, par défaut 256) — Dimension des représentations cachées.
  • hidden_act (str, facultatif, par défaut gelu) — La fonction d'activation non linéaire (fonction ou chaîne de caractères) du décodeur. Par exemple, "gelu", "relu", "silu", etc.
  • mlp_dim (int, facultatif, valeur par défaut 2048) — La dimension du MLP dans le transformateur bidirectionnel.
  • num_hidden_layers (int, facultatif, par défaut 2) — Nombre de couches cachées dans le décodeur Transformer.
  • num_attention_heads (int, facultatif, valeur par défaut 8) — Nombre de têtes d'attention pour chaque couche d'attention du décodeur Transformer.
  • attention_downsample_rate (int, facultatif, valeur par défaut 2) — Le taux de sous-échantillonnage pour les couches d'attention.
  • num_multimask_outputs (int, facultatif, valeur par défaut 3) — Le nombre de sorties multimask.
  • iou_head_depth (int, facultatif, valeur par défaut 3) — La profondeur de la tête IoU.
  • iou_head_hidden_dim (int, facultatif, valeur par défaut 256) — La dimension cachée de la tête IoU.
  • dynamic_multimask_via_stability (bool, facultatif, valeur par défaut True) — Indique s'il faut utiliser le multimask dynamique via la stabilité.
  • dynamic_multimask_stability_delta (float, facultatif, valeur par défaut 0.05) — La stabilité delta pour le multimask dynamique.
  • dynamic_multimask_stability_thresh (float, facultatif, valeur par défaut 0.98) — Seuil de stabilité pour le multimask dynamique.

Ceci est la classe de configuration destinée à stocker la configuration d'un EdgeTamVideoModel. Elle est utilisée pour instancier un modèle Edgetam Video en fonction des arguments spécifiés, définissant ainsi l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de yonigozlan/EdgeTAM-hf

Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.

EdgeTamVideoPromptEncoderConfig

classe transformers.EdgeTamVideoPromptEncoderConfig

< >

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

Paramètres

  • hidden_size (int, facultatif, par défaut 256) — Dimension des représentations cachées.
  • image_size (Union[int, list[int], tuple[int, int]], facultatif, par défaut 1024) — La taille (résolution) de chaque image.
  • patch_size (Union[int, list[int], tuple[int, int]], facultatif, par défaut 16) — La taille (résolution) de chaque patch.
  • mask_input_channels (int, facultatif, valeur par défaut 16) — Le nombre de canaux à transmettre au module MaskDecoder.
  • num_point_embeddings (int, facultatif, par défaut 4) — Le nombre d'embeddings de points à utiliser.
  • hidden_act (str, facultatif, par défaut gelu) — La fonction d'activation non linéaire (fonction ou chaîne de caractères) du décodeur. Par exemple, "gelu", "relu", "silu", etc.
  • layer_norm_eps (float, facultatif, valeur par défaut 1e-06) — L'épsilon utilisé par les couches de normalisation de couche.
  • scale (float, facultatif, valeur par défaut 1) — Le facteur d'échelle pour l'encodeur de prompt.

Ceci est la classe de configuration destinée à stocker la configuration d'un EdgeTamVideoModel. Elle est utilisée pour instancier un modèle Edgetam Video en fonction des arguments spécifiés, définissant ainsi l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de yonigozlan/EdgeTAM-hf

Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.

EdgeTamVideoConfig

classe transformers.EdgeTamVideoConfig

< >

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

Paramètres

  • vision_config (Union[dict, ~configuration_utils.PreTrainedConfig], facultatif) — L'objet de configuration ou le dictionnaire du backbone visuel.
  • prompt_encoder_config (Union[dict, EdgeTamVideoPromptEncoderConfig], facultatif) — Dictionnaire des options de configuration utilisées pour initialiser EdgeTamVideoPromptEncoderConfig.
  • mask_decoder_config (Union[dict, EdgeTamVideoMaskDecoderConfig], facultatif) — Dictionnaire des options de configuration utilisées pour initialiser EdgeTamMaskDecoderConfig.
  • initializer_range (float, facultatif, par défaut 0.02) — L'écart-type de la truncated_normal_initializer utilisé pour initialiser toutes les matrices de poids.
  • num_maskmem (int, facultatif, valeur par défaut : 7) — Le nombre de slots mémoire pour la mémoire de masque.
  • image_size (Union[int, list[int], tuple[int, int]], facultatif, par défaut 1024) — La taille (résolution) de chaque image.
  • sigmoid_scale_for_mem_enc (float, facultatif, valeur par défaut 20.0) — Facteur d'échelle de la fonction sigmoïde dans l'encodeur mémoire.
  • sigmoid_bias_for_mem_enc (float, facultatif, valeur par défaut -10.0) — Biais de la fonction sigmoïde dans l'encodeur mémoire.
  • enable_occlusion_spatial_embedding (bool, facultatif, valeur par défaut True) — Indique s'il faut activer l'incorporation spatiale pour les occlusions.
  • multimask_output_in_sam (bool, facultatif, par défaut True) — Indique s'il faut générer plusieurs masques à partir de la tête SAM.
  • multimask_min_pt_num (int, facultatif, valeur par défaut 0) — Nombre minimal de points pour déclencher la sortie multimask.
  • multimask_max_pt_num (int, facultatif, valeur par défaut 1) — Le nombre maximal de points pour déclencher la sortie multimask.
  • multimask_output_for_tracking (bool, facultatif, par défaut True) — Indique s'il faut utiliser la sortie multimask pour le suivi.
  • max_object_pointers_in_encoder (int, facultatif, valeur par défaut : 16) — Le nombre maximal de pointeurs d'objets dans l'encodeur.
  • max_cond_frame_num (int, facultatif, valeur par défaut -1) — Nombre maximal de frames de conditionnement à utiliser dans l'attention mémoire. Définissez la valeur à -1 pour utiliser toutes les frames de conditionnement.
  • enable_temporal_pos_encoding_for_object_pointers (bool, facultatif, valeur par défaut True) — Indique s'il faut activer l'encodage positionnel temporel pour les pointeurs d'objets.
  • memory_attention_hidden_size (int, facultatif, valeur par défaut 256) — Dimension des états cachés de l'attention mémoire.
  • memory_attention_num_layers (int, facultatif, valeur par défaut : 2) — Le nombre de couches dans le module d'attention mémoire.
  • memory_attention_num_attention_heads (int, facultatif, valeur par défaut : 1) — Nombre de têtes d'attention pour chaque couche d'attention dans l'attention mémoire.
  • memory_attention_downsample_rate (int, facultatif, valeur par défaut 1) — Le taux de sous-échantillonnage pour les couches d'attention.
  • memory_attention_mlp_hidden_size (int, facultatif, valeur par défaut 2048) — La dimension du réseau feedforward dans le module d'attention mémoire.
  • memory_attention_mlp_hidden_act (str, facultatif, par défaut "relu") — La fonction d'activation non linéaire du réseau feedforward dans le module d'attention mémoire.
  • memory_attention_dropout (float, facultatif, valeur par défaut 0.1) — Taux de dropout pour le module d'attention mémoire.
  • memory_attention_rope_feat_sizes (Tuple[int, int], facultatif, par défaut [64, 64]) — Les tailles de caractéristiques pour l'encodage positionnel Rope.
  • memory_attention_rope_k_sizes (List[int], facultatif, par défaut [16, 16]) — Tailles des caractéristiques des clés pour l'encodage positionnel RoPE dans l'attention mémoire.
  • memory_attention_rope_dropout (float, facultatif, valeur par défaut 0.1) — Taux de dropout pour l'encodage positionnel Rope.
  • rope_parameters (dict, facultatif) — Dictionnaire contenant les paramètres de configuration des embeddings RoPE. Le dictionnaire doit contenir une valeur pour rope_theta et, le cas échéant, les paramètres utilisés pour le mise à l’échelle si vous souhaitez utiliser RoPE avec des max_position_embeddings plus longs.
  • perceiver_resampler_num_latents (int, facultatif, valeur par défaut 256) — Le nombre de jetons latents 1D dans le perceiver resampler.
  • perceiver_resampler_num_latents_2d (int, facultatif, valeur par défaut 256) — Le nombre de jetons latents 2D dans le perceiver resampler.
  • perceiver_resampler_hidden_size (int, facultatif, valeur par défaut 64) — La taille cachée du perceiver resampler.
  • perceiver_resampler_mlp_intermediate_size (int, facultatif, valeur par défaut 256) — Taille intermédiaire du réseau feedforward dans le perceiver resampler.
  • perceiver_resampler_num_attention_heads (int, facultatif, valeur par défaut : 1) — Le nombre de têtes d'attention dans le perceiver resampler.
  • perceiver_resampler_attention_head_dim (int, facultatif, valeur par défaut 64) — La dimension de chaque tête d'attention dans le perceiver resampler.
  • perceiver_resampler_num_layers (int, facultatif, valeur par défaut : 2) — Le nombre de couches dans le perceiver resampler.
  • perceiver_resampler_hidden_dropout (float, facultatif, valeur par défaut 0.0) — Taux de dropout pour les couches cachées du perceiver resampler.
  • perceiver_resampler_attention_dropout (float, facultatif, valeur par défaut 0.0) — Taux de dropout pour les couches d'attention du perceiver resampler.
  • memory_encoder_hidden_size (int, facultatif, valeur par défaut 256) — Dimension des états cachés de l'encodeur mémoire.
  • memory_encoder_output_channels (int, facultatif, valeur par défaut 64) — Le nombre de canaux de sortie pour l'encodeur mémoire.
  • mask_downsampler_embed_dim (int, facultatif, valeur par défaut 256) — La dimension de l’embedding du sous-échantillonneur de masque.
  • memory_fuser_intermediate_dim (int, facultatif, valeur par défaut 1024) — La dimension intermédiaire du réseau feedforward du memory fuser.
  • mask_downsampler_kernel_size (int, facultatif, valeur par défaut 3) — Taille du noyau pour le réducteur de masque.
  • mask_downsampler_stride (int, facultatif, valeur par défaut 2) — Le pas (stride) du sous-échantillonneur de masque.
  • mask_downsampler_padding (int, facultatif, valeur par défaut 1) — Le padding pour le réducteur de masque.
  • mask_downsampler_total_stride (int, facultatif, valeur par défaut 16) — Le pas total pour le réducteur de masque.
  • mask_downsampler_hidden_act (str, facultatif, par défaut "gelu") — La fonction d'activation non linéaire dans le sous-échantillonneur de masque.
  • memory_fuser_num_layers (int, facultatif, valeur par défaut : 2) — Le nombre de couches dans le fuser mémoire.
  • memory_fuser_embed_dim (int, facultatif, valeur par défaut 256) — La dimension de l'embedding du memory fuser.
  • memory_fuser_kernel_size (int, facultatif, valeur par défaut : 7) — Taille du noyau pour le fuser mémoire.
  • memory_fuser_padding (int, facultatif, valeur par défaut : 3) — Le padding pour le memory fuser.
  • memory_fuser_layer_scale_init_value (float, facultatif, valeur par défaut 1e-06) — La valeur initiale de l'échelle de couche dans le fuser mémoire.
  • memory_fuser_hidden_act (str, facultatif, par défaut "gelu") — La fonction d'activation non linéaire dans le fuser mémoire.

Ceci est la classe de configuration destinée à stocker la configuration d'un EdgeTamVideoModel. Elle est utilisée pour instancier un modèle Edgetam Video en fonction des arguments spécifiés, définissant ainsi l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de yonigozlan/EdgeTAM-hf

Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.

Exemple :

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

classe transformers.EdgeTamVideoInferenceSession

< >

( video: typing.Optional[torch.Tensor] = Nonevideo_height: int | None = Nonevideo_width: int | None = Noneinference_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 )

Paramètres

  • video (torch.Tensor, facultatif) — La vidéo à traiter. Inutile de la fournir lors d’un flux en continu.
  • video_height (int, facultatif) — La hauteur de la vidéo.
  • video_width (int, facultatif) — La largeur de la vidéo.
  • inference_device (torch.device, facultatif, par défaut "cpu") — L’appareil à utiliser pour l’inférence.
  • inference_state_device (torch.device, facultatif, par défaut "cpu") — L’appareil sur lequel stocker l’état d’inférence.
  • video_storage_device (torch.device, facultatif, par défaut "cpu") — L’appareil sur lequel stocker la vidéo.
  • dtype (torch.dtype, facultatif, par défaut "float32") — Le dtype à utiliser pour la vidéo.
  • max_vision_features_cache_size (int, facultatif, valeur par défaut 1) — Nombre maximal de fonctionnalités visuelles à mettre en cache.

Gère les paramètres, l'état et le cache des sessions d'inférence vidéo.

add_mask_inputs

< >

( obj_idx: intframe_idx: intinputs: Tensor )

Ajoutez des entrées de masque avec un placement automatique sur l'appareil.

add_new_frame

< >

( pixel_values: Tensorframe_idx: int | None = None )

Ajouter un nouveau frame avec un placement automatique des appareils.

add_point_inputs

< >

( obj_idx: intframe_idx: intinputs: dict )

Ajoutez des entrées de points avec un placement automatique sur l'appareil.

get_frame

< >

( frame_idx: int )

Obtenir une image à partir d'une vidéo.

get_obj_num

< >

( )

Obtenir le nombre total d'identifiants d'objets uniques reçus jusqu'à présent dans cette session.

get_output

< >

( obj_idx: intframe_idx: intoutput_key: stris_conditioning_frame: bool = True )

Paramètres

  • obj_idx (int) — L'index de l'objet.
  • frame_idx (int) — L'index de la frame.
  • output_key (str) — La clé de la sortie.
  • is_conditioning_frame (bool) — Indique si la sortie correspond à une image de conditionnement.

Obtenez la sortie avec une gestion intelligente des appareils.

obj_id_to_idx

< >

( obj_id: int )

Associer l'ID d'objet à un index, en créant une nouvelle entrée si nécessaire.

obj_idx_to_id

< >

( obj_idx: int )

Associer l'index d'objet côté modèle à l'identifiant d'objet côté client.

remove_mask_inputs

< >

( obj_idx: intframe_idx: int )

Supprimer les entrées de masque.

remove_point_inputs

< >

( obj_idx: intframe_idx: int )

Supprimer les entrées de points.

reset_inference_session

< >

( )

Réinitialiser les données de suivi et le cache.

reset_tracking_data

< >

( )

Réinitialiser les données de suivi mais conserver le cache.

store_output

< >

( obj_idx: intframe_idx: intoutput_key: str | None = Noneoutput_value: typing.Union[torch.Tensor, dict, NoneType] = Noneis_conditioning_frame: bool = True )

Paramètres

  • obj_idx (int) — L'index de l'objet.
  • frame_idx (int) — L'index de la frame.
  • output_key (Optional[str]) — La clé de la sortie. Si None, la sortie est stockée sous forme de dictionnaire.
  • output_value (Optional[Union[torch.Tensor, dict]]) — La valeur de la sortie.
  • is_conditioning_frame (bool) — Indique si la sortie correspond à une image de conditionnement.

Stockage de la sortie avec une gestion intelligente des appareils. Si output_key est None, la sortie est stockée sous forme de dictionnaire.

EdgeTamVideoModel

classe transformers.EdgeTamVideoModel

< >

( config: EdgeTamVideoConfig )

Paramètres

  • config (EdgeTamVideoConfig) — Classe de configuration du modèle contenant tous les paramètres du modèle. L’initialisation à partir d’un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode from_pretrained() pour charger les poids du modèle.

Le modèle Edgetam Video brut, qui produit des états cachés bruts sans aucune tête spécifique au sommet.

Ce modèle hérite de PreTrainedModel. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, la taille des têtes, etc.)

Ce modèle est également une sous-classe de torch.nn.Module de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l'utilisation et le comportement généraux.

forward

< >

( inference_session: EdgeTamVideoInferenceSessionframe_idx: int | None = Noneframe: typing.Optional[torch.Tensor] = Nonereverse: bool = False**kwargs ) → EdgeTamVideoSegmentationOutput or tuple(torch.Tensor)

Paramètres

  • inference_session (~models.edgetam_video.modeling_edgetam_video.EdgeTamVideoInferenceSession) — L'objet de session d'inférence vidéo.
  • frame_idx (int, facultatif) — L’index de la frame sur laquelle exécuter l’inférence. Pas besoin de le fournir lors de l’inférence sur une nouvelle frame diffusée en continu.
  • frame (torch.Tensor, facultatif) — La frame à traiter. À fournir lors du streaming.
  • reverse (bool, facultatif, par défaut False) — Indique s'il faut propager en sens inverse.

Retourne

EdgeTamVideoSegmentationOutput ou tuple(torch.Tensor)

Un EdgeTamVideoSegmentationOutput ou un tuple de torch.Tensor (si return_dict=False est passé ou lorsque config.return_dict=False) comprenant divers éléments en fonction de la configuration (EdgeTamVideoConfig) et des entrées.

Propagez les objets à travers une image vidéo diffusée en continu.

  • object_ids (list[int], facultatif) — Liste des identifiants d'objets suivis dans l'image actuelle.
  • pred_masks (torch.Tensor de forme (batch_size, num_masks, height, width)) — Les masques prédits stockés à la résolution du modèle.
  • object_score_logits (torch.Tensor de forme (batch_size,), facultatif) — Logits des scores d'objets, indiquant si des objets sont présents.
  • frame_idx (int, facultatif) — L'index de la frame de la vidéo.

get_image_features

< >

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

Paramètres

  • pixel_values (torch.Tensor) — Valeurs de pixels d'entrée de forme (batch_size, num_channels, height, width).

Retourne

EdgeTamVideoVisionEncoderOutput ou tuple(torch.Tensor)

Un EdgeTamVideoVisionEncoderOutput ou un tuple de torch.Tensor (si return_dict=False est passé ou lorsque config.return_dict=False) comprenant divers éléments en fonction de la configuration (EdgeTamVideoConfig) et des entrées.

  • last_hidden_state (torch.Tensor de forme (batch_size, height, width, hidden_size)) — Séquence d'états cachés à la sortie de la dernière couche du modèle.

  • pooler_output (torch.Tensor de forme (batch_size, hidden_size)) — État caché de la dernière couche du premier jeton de la séquence (jeton de classification) après un traitement supplémentaire par les couches utilisées pour la tâche de pré-entraînement auxiliaire. Par exemple, pour les modèles de la famille BERT, cela renvoie le jeton de classification après traitement par une couche linéaire et une fonction d'activation tanh. Les poids de la couche linéaire sont entraînés à partir de l'objectif de prédiction de la phrase suivante (classification) pendant le pré-entraînement.

  • hidden_states (tuple(torch.Tensor), facultatif, renvoyé lorsque output_hidden_states=True est passé ou lorsque config.output_hidden_states=True) — Tuple de torch.Tensor (un pour la sortie des embeddings, si le modèle possède une couche d’embedding, + un pour la sortie de chaque couche) de forme (batch_size, sequence_length, hidden_size).

    États cachés du modèle à la sortie de chaque couche, ainsi que les sorties d'incorporation initiales facultatives.

  • attentions (tuple(torch.Tensor), facultatif, renvoyé lorsque output_attentions=True est passé ou lorsque config.output_attentions=True) — Tuple de torch.Tensor (un par couche) de forme (batch_size, num_heads, sequence_length, sequence_length).

    Poids des attentions après le softmax d'attention, utilisés pour calculer la moyenne pondérée dans les têtes d'auto-attention.

  • fpn_hidden_states (tuple(torch.Tensor)) — Tuple de torch.Tensor (un pour chaque niveau de caractéristique, de la résolution la plus haute à la plus basse) de forme (batch_size, hidden_size, height, width). Cartes de caractéristiques issues du cou Feature Pyramid Network.

  • fpn_position_encoding (tuple(torch.Tensor)) — Tuple de torch.Tensor (un pour chaque niveau de caractéristiques, de la résolution la plus haute à la plus basse) de forme (batch_size, hidden_size, height, width). Encodages positionnels correspondant aux fpn_hidden_states.

Update on GitHub