Transformers documentation
EdgeTAMVideo
Ce modèle a été publié dans HF papers le 2025-01-13 et ajouté à Hugging Face Transformers le 2025-09-29.
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 framesSuivi 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 framesAffiner 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_masksInfé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 framesEdgeTamVideoMaskDecoderConfig
classe transformers.EdgeTamVideoMaskDecoderConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 256hidden_act: str = 'gelu'mlp_dim: int = 2048num_hidden_layers: int = 2num_attention_heads: int = 8attention_downsample_rate: int = 2num_multimask_outputs: int = 3iou_head_depth: int = 3iou_head_hidden_dim: int = 256dynamic_multimask_via_stability: bool = Truedynamic_multimask_stability_delta: float = 0.05dynamic_multimask_stability_thresh: float = 0.98 )
Paramètres
- hidden_size (
int, facultatif, par défaut256) — Dimension des représentations cachées. - hidden_act (
str, facultatif, par défautgelu) — 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éfaut2) — Nombre de couches cachées dans le décodeur Transformer. - num_attention_heads (
int, facultatif, valeur par défaut8) — 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éfautTrue) — 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
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 256image_size: int | list[int] | tuple[int, int] = 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éfaut256) — Dimension des représentations cachées. - image_size (
Union[int, list[int], tuple[int, int]], facultatif, par défaut1024) — La taille (résolution) de chaque image. - patch_size (
Union[int, list[int], tuple[int, int]], facultatif, par défaut16) — La taille (résolution) de chaque patch. - mask_input_channels (
int, facultatif, valeur par défaut 16) — Le nombre de canaux à transmettre au moduleMaskDecoder. - num_point_embeddings (
int, facultatif, par défaut 4) — Le nombre d'embeddings de points à utiliser. - hidden_act (
str, facultatif, par défautgelu) — 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éfaut1e-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
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneprompt_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonemask_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneinitializer_range: float = 0.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éfaut0.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éfaut1024) — 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éfautTrue) — Indique s'il faut activer l'incorporation spatiale pour les occlusions. - multimask_output_in_sam (
bool, facultatif, par défautTrue) — 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éfautTrue) — 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éfautTrue) — 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 pourrope_thetaet, le cas échéant, les paramètres utilisés pour le mise à l’échelle si vous souhaitez utiliser RoPE avec desmax_position_embeddingsplus 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
< source >( 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.
Ajoutez des entrées de masque avec un placement automatique sur l'appareil.
Ajouter un nouveau frame avec un placement automatique des appareils.
Ajoutez des entrées de points avec un placement automatique sur l'appareil.
Obtenir une image à partir d'une vidéo.
Obtenir le nombre total d'identifiants d'objets uniques reçus jusqu'à présent dans cette session.
get_output
< source >( obj_idx: intframe_idx: intoutput_key: stris_conditioning_frame: bool = True )
Obtenez la sortie avec une gestion intelligente des appareils.
Associer l'ID d'objet à un index, en créant une nouvelle entrée si nécessaire.
Associer l'index d'objet côté modèle à l'identifiant d'objet côté client.
Supprimer les entrées de masque.
Supprimer les entrées de points.
Réinitialiser les données de suivi et le cache.
Réinitialiser les données de suivi mais conserver le cache.
store_output
< source >( 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
< source >( 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
< source >( 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éfautFalse) — 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.Tensorde forme(batch_size, num_masks, height, width)) — Les masques prédits stockés à la résolution du modèle. - object_score_logits (
torch.Tensorde 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
< source >( 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.Tensorde 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.Tensorde 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é lorsqueoutput_hidden_states=Trueest passé ou lorsqueconfig.output_hidden_states=True) — Tuple detorch.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é lorsqueoutput_attentions=Trueest passé ou lorsqueconfig.output_attentions=True) — Tuple detorch.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 detorch.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 detorch.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 auxfpn_hidden_states.