Transformers documentation
SAM3 Tracker Video
Mô hình này đã được đóng góp cho Hugging Face Transformers vào ngày 2025-11-19.
SAM3 Tracker Video
Tổng quan
SAM3 (Segment Anything Model 3) được giới thiệu trong SAM 3: Segment Anything with Concepts.
Sam3TrackerVideo thực hiện Phân đoạn thị giác có thể gợi ý (Promptable Visual Segmentation - PVS) trên video. PVS nhận các gợi ý thị giác tương tác (điểm, hộp, mặt nạ) hoặc đầu vào dạng văn bản để theo dõi một phiên bản đối tượng cụ thể cho mỗi gợi ý xuyên suốt các khung hình của video.
Sam3TrackerVideo là phiên bản cập nhật của SAM2 Video, giữ nguyên API nhưng cung cấp hiệu suất và khả năng được cải thiện.
Tóm tắt từ bài báo như sau:
Chúng tôi giới thiệu Segment Anything Model (SAM) 3, một mô hình thống nhất có khả năng phát hiện, phân đoạn và theo dõi các đối tượng trong ảnh và video dựa trên các prompt khái niệm, được chúng tôi định nghĩa là các cụm danh từ ngắn (ví dụ: “yellow school bus”), các ví dụ hình ảnh, hoặc sự kết hợp của cả hai. Promptable Concept Segmentation (PCS) nhận các prompt như vậy và trả về các mặt nạ phân đoạn cùng với danh tính duy nhất cho tất cả các phiên bản đối tượng khớp. Để thúc đẩy PCS, chúng tôi xây dựng một động cơ dữ liệu có khả năng mở rộng, tạo ra một bộ dữ liệu chất lượng cao với 4 triệu nhãn khái niệm duy nhất, bao gồm cả các âm tính khó, trên cả ảnh và video. Mô hình của chúng tôi bao gồm một bộ phát hiện ở cấp độ ảnh và một bộ theo dõi video dựa trên bộ nhớ, chia sẻ một backbone duy nhất. Nhận dạng và định vị được tách rời bằng một presence head, giúp tăng độ chính xác của việc phát hiện. SAM 3 gấp đôi độ chính xác so với các hệ thống hiện có trong cả PCS trên ảnh và video, đồng thời cải thiện các khả năng trước đó của SAM trên các nhiệm vụ phân đoạn thị giác. Chúng tôi mã nguồn mở SAM 3 cùng với bộ chuẩn đánh giá mới Segment Anything with Concepts (SA-Co) của chúng tôi cho phân đoạn khái niệm có thể prompt.
Mô hình này được đóng góp bởi yonigozlan và ronghanghu.
Ví dụ sử dụng
Phân đoạn và Theo dõi Video
Theo dõi video cơ bản
from transformers import Sam3TrackerVideoModel, Sam3TrackerVideoProcessor
import torch
model = Sam3TrackerVideoModel.from_pretrained("facebook/sam3", device_map="auto")
processor = Sam3TrackerVideoProcessor.from_pretrained("facebook/sam3")
# 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 (optional, you can also propagate the masks through the video directly)
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, 480, 854])
# Propagate through the entire video
video_segments = {}
for sam3_tracker_video_output in model.propagate_in_video_iterator(inference_session):
video_res_masks = processor.post_process_masks(
[sam3_tracker_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
)[0]
video_segments[sam3_tracker_video_output.frame_idx] = video_res_masks
print(f"Tracked object through {len(video_segments)} frames")
Tracked object through 180 framesTheo dõi video đa đối tượng
Theo dõi nhiều đối tượng đồng thời qua các khung hình video:
# 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 (optional, you can also propagate the masks through the video directly)
outputs = model(
inference_session=inference_session,
frame_idx=ann_frame_idx,
)
# Propagate both objects through video
video_segments = {}
for sam3_tracker_video_output in model.propagate_in_video_iterator(inference_session):
video_res_masks = processor.post_process_masks(
[sam3_tracker_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
)[0]
video_segments[sam3_tracker_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 180 framesTinh chỉnh phân đoạn video
Bạn có thể thêm các lần nhấp bổ sung vào bất kỳ khung hình nào để tinh chỉnh việc theo dõi:
# 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 sam3_tracker_video_output in model.propagate_in_video_iterator(inference_session):
video_res_masks = processor.post_process_masks(
[sam3_tracker_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
)[0]
video_segments[sam3_tracker_video_output.frame_idx] = video_res_masksSuy luận Video trực tiếp
Đối với các ứng dụng thời gian thực, Sam3TrackerVideo hỗ trợ xử lý các khung hình video ngay khi chúng được nhận:
# 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
sam3_tracker_video_output = model(inference_session=inference_session, frame=inputs.pixel_values[0])
...
video_res_masks = processor.post_process_masks(
[sam3_tracker_video_output.pred_masks], original_sizes=inputs.original_sizes, binarize=False
)[0]
print(f"Frame {frame_idx}: mask shape {video_res_masks.shape}")Xử lý hàng loạt video cho nhiều đối tượng
Theo dõi nhiều đối tượng đồng thời trong video bằng cách thêm tất cả chúng cùng lúc:
# 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 sam3_tracker_video_output in model.propagate_in_video_iterator(inference_session):
video_res_masks = processor.post_process_masks(
[sam3_tracker_video_output.pred_masks], original_sizes=[[inference_session.video_height, inference_session.video_width]], binarize=False
)[0]
video_segments[sam3_tracker_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 180 framesSam3TrackerVideoConfig
lớp transformers.Sam3TrackerVideoConfig
< 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 = 7sigmoid_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 = 4enable_temporal_pos_encoding_for_object_pointers: bool = Truememory_attention_hidden_size: int = 256memory_attention_num_layers: int = 4memory_attention_num_attention_heads: int = 1memory_attention_downsample_rate: int = 1memory_attention_feed_forward_hidden_size: int = 2048memory_attention_feed_forward_hidden_act: str = 'relu'memory_attention_dropout: float | int = 0.1memory_attention_rope_feat_sizes: list | None = Nonememory_attention_rope_dropout: float | int = 0.1memory_encoder_hidden_size: int = 256memory_encoder_output_channels: int = 64rope_parameters: dict | None = Nonemask_downsampler_embed_dim: int = 256mask_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_intermediate_dim: int = 1024memory_fuser_kernel_size: int = 7memory_fuser_padding: int = 3memory_fuser_layer_scale_init_value: float = 1e-06memory_fuser_hidden_act: str = 'gelu' )
Tham số
- vision_config (
Union[dict, ~configuration_utils.PreTrainedConfig], tùy chọn) — Đối tượng cấu hình hoặc từ điển của bộ khung thị giác. - prompt_encoder_config (Union[
dict,Sam3TrackerVideoPromptEncoderConfig], không bắt buộc) — Từ điển các tùy chọn cấu hình được sử dụng để khởi tạo Sam3TrackerVideoPromptEncoderConfig. - mask_decoder_config (Union[
dict,Sam3TrackerVideoMaskDecoderConfig], tuỳ chọn) — Từ điển các tùy chọn cấu hình được sử dụng để khởi tạo Sam3TrackerVideoMaskDecoderConfig. - initializer_range (
float, tùy chọn, mặc định là 0.02) — Độ lệch chuẩn cho việc khởi tạo tham số. - num_maskmem (
int, tuỳ chọn, mặc định là 7) — Số lượng ô nhớ cho bộ nhớ mask. - sigmoid_scale_for_mem_enc (
float, tùy chọn, mặc định là 20.0) — Hệ số tỷ lệ cho hàm sigmoid trong bộ mã hóa bộ nhớ. - sigmoid_bias_for_mem_enc (
float, tùy chọn, mặc định là -10.0) — Bias cho hàm sigmoid trong bộ mã hóa bộ nhớ. - enable_occlusion_spatial_embedding (
bool, tùy chọn, mặc định làTrue) — Có bật spatial embedding cho các vùng bị che khuất hay không. - multimask_output_in_sam (
bool, tùy chọn, mặc định làTrue) — Có nên xuất nhiều mask từ đầu SAM hay không. - multimask_min_pt_num (
int, tùy chọn, mặc định là 0) — Số lượng điểm tối thiểu để kích hoạt đầu ra multimask. - multimask_max_pt_num (
int, tùy chọn, mặc định là 1) — Số lượng điểm tối đa để kích hoạt đầu ra multimask. - multimask_output_for_tracking (
bool, tùy chọn, mặc định làTrue) — Có sử dụng đầu ra đa mặt nạ cho việc theo dõi hay không. - max_object_pointers_in_encoder (
int, tùy chọn, mặc định là 16) — Số lượng con trỏ đối tượng tối đa trong bộ mã hóa. - max_cond_frame_num (
int, tùy chọn, mặc định là 4) — Số lượng khung điều kiện tối đa được sử dụng trong chú ý bộ nhớ. - enable_temporal_pos_encoding_for_object_pointers (
bool, tùy chọn, mặc định làTrue) — Có bật mã hóa vị trí theo thời gian cho các con trỏ đối tượng hay không. - memory_attention_hidden_size (
int, tùy chọn, mặc định là 256) — Kích thước chiều của các trạng thái ẩn của chú ý bộ nhớ. - memory_attention_num_layers (
int, tùy chọn, mặc định là 4) — Số lượng lớp trong module chú ý bộ nhớ. - memory_attention_num_attention_heads (
int, tùy chọn, mặc định là 1) — Số lượng attention heads cho mỗi lớp attention trong memory attention. - memory_attention_downsample_rate (
int, tùy chọn, mặc định là 1) — Tỷ lệ hạ mẫu cho các lớp attention. - memory_attention_feed_forward_hidden_size (
int, tùy chọn, mặc định là 2048) — Kích thước của mạng feedforward trong module memory attention. - memory_attention_feed_forward_hidden_act (
str, tùy chọn, mặc định là"relu") — Hàm kích hoạt phi tuyến trong mạng feedforward của module memory attention. - memory_attention_dropout (
float, tùy chọn, mặc định là 0.1) — Tỷ lệ dropout cho module chú ý bộ nhớ. - memory_attention_rope_feat_sizes (
list[int], tùy chọn, mặc định là[72, 72]) — Kích thước đặc trưng cho mã hóa vị trí Rope. - memory_attention_rope_dropout (
float, tùy chọn, mặc định là 0.1) — Tỷ lệ dropout cho mã hóa vị trí Rope. - memory_encoder_hidden_size (
int, tùy chọn, mặc định là 256) — Kích thước chiều của các trạng thái ẩn của bộ mã hóa bộ nhớ. - memory_encoder_output_channels (
int, tùy chọn, mặc định là 64) — Số lượng kênh đầu ra của bộ mã hóa bộ nhớ. - rope_parameters (
dict, tùy chọn) — Từ điển chứa các tham số cấu hình cho các embedding RoPE. Từ điển phải chứa một giá trị chorope_thetavà tùy chọn các tham số được sử dụng để mở rộng trong trường hợp bạn muốn sử dụng RoPE vớimax_position_embeddingsdài hơn. - mask_downsampler_embed_dim (
int, tùy chọn, mặc định là 256) — Kích thước của embedding cho bộ giảm mẫu mặt nạ. - mask_downsampler_kernel_size (
int, tùy chọn, mặc định là 3) — Kích thước kernel cho bộ giảm mẫu mặt nạ. - mask_downsampler_stride (
int, tùy chọn, mặc định là 2) — Bước (stride) của bộ giảm kích thước mask. - mask_downsampler_padding (
int, tùy chọn, mặc định là 1) — Độ đệm cho bộ giảm kích thước mask. - mask_downsampler_total_stride (
int, tùy chọn, mặc định là 16) — Tổng số bước nhảy (stride) của bộ giảm kích thước mask. - mask_downsampler_hidden_act (
str, tùy chọn, mặc định là"gelu") — Hàm kích hoạt phi tuyến trong bộ giảm mẫu mặt nạ. - memory_fuser_num_layers (
int, tuỳ chọn, mặc định là 2) — Số lượng lớp trong bộ hợp nhất bộ nhớ. - memory_fuser_embed_dim (
int, tùy chọn, mặc định là 256) — Kích thước của lớp nhúng trong bộ hợp nhất bộ nhớ. - memory_fuser_intermediate_dim (
int, tuỳ chọn, mặc định là 1024) — Kích thước của lớp trung gian trong bộ hợp nhất bộ nhớ. - memory_fuser_kernel_size (
int, tuỳ chọn, mặc định là 7) — Kích thước kernel cho bộ hợp nhất bộ nhớ. - memory_fuser_padding (
int, tùy chọn, mặc định là 3) — Độ đệm cho bộ hợp nhất bộ nhớ. - memory_fuser_layer_scale_init_value (
float, tuỳ chọn, mặc định là 1e-06) — Giá trị ban đầu cho layer scale trong memory fuser. - memory_fuser_hidden_act (
str, tùy chọn, mặc định là"gelu") — Hàm kích hoạt phi tuyến tính trong bộ hợp nhất bộ nhớ.
Đây là lớp cấu hình để lưu trữ cấu hình của một Sam3TrackerVideoModel. Nó được sử dụng để khởi tạo một mô hình Sam3 Tracker Video theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như của facebook/sam3
Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.
Ví dụ:
>>> from transformers import (
... Sam3VisionConfig,
... Sam3TrackerVideoPromptEncoderConfig,
... Sam3TrackerVideoMaskDecoderConfig,
... Sam3TrackerVideoModel,
... )
>>> # Initializing a Sam3TrackerVideoConfig with `"facebook/sam3"` style configuration
>>> configuration = Sam3TrackerVideoConfig()
>>> # Initializing a Sam3TrackerVideoModel (with random weights) from the `"facebook/sam3"` style configuration
>>> model = Sam3TrackerVideoModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a Sam3TrackerVideoConfig from a Sam3TrackerVideoVisionConfig, Sam3TrackerVideoPromptEncoderConfig, and Sam3TrackerVideoMaskDecoderConfig
>>> # Initializing SAM3 tracker video vision encoder, memory attention, and memory encoder configurations
>>> vision_config = Sam3TrackerVideoVisionConfig()
>>> prompt_encoder_config = Sam3TrackerVideoPromptEncoderConfig()
>>> mask_decoder_config = Sam3TrackerVideoMaskDecoderConfig()
>>> config = Sam3TrackerVideoConfig(vision_config, prompt_encoder_config, mask_decoder_config)Sam3TrackerVideoMaskDecoderConfig
lớp transformers.Sam3TrackerVideoMaskDecoderConfig
< 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 )
Tham số
- hidden_size (
int, tùy chọn, mặc định là256) — Kích thước của các biểu diễn ẩn. - hidden_act (
str, tùy chọn, mặc định làgelu) — Hàm kích hoạt phi tuyến (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ,"gelu","relu","silu", v.v. - mlp_dim (
int, tùy chọn, mặc định là 2048) — Kích thước của MLP trong transformer hai chiều. - num_hidden_layers (
int, tùy chọn, mặc định là2) — Số lượng lớp ẩn trong bộ giải mã Transformer. - num_attention_heads (
int, tùy chọn, mặc định là8) — Số lượng đầu attention cho mỗi lớp attention trong bộ giải mã Transformer. - attention_downsample_rate (
int, tùy chọn, mặc định là 2) — Tỷ lệ hạ mẫu cho các lớp attention. - num_multimask_outputs (
int, tùy chọn, mặc định là 3) — Số lượng đầu ra đa mặt nạ. - iou_head_depth (
int, tùy chọn, mặc định là 3) — Độ sâu của đầu IoU. - iou_head_hidden_dim (
int, tùy chọn, mặc định là 256) — Chiều ẩn của đầu IoU. - dynamic_multimask_via_stability (
bool, tùy chọn, mặc định làTrue) — Có sử dụng dynamic multimask qua stability hay không. - dynamic_multimask_stability_delta (
float, tùy chọn, mặc định là 0.05) — Delta ổn định cho dynamic multimask. - dynamic_multimask_stability_thresh (
float, tùy chọn, mặc định là 0.98) — Ngưỡng ổn định cho dynamic multimask.
Đây là lớp cấu hình để lưu trữ cấu hình của một Sam3TrackerVideoModel. Nó được sử dụng để khởi tạo một mô hình Sam3 Tracker Video theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như của facebook/sam3
Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.
Sam3TrackerVideoPromptEncoderConfig
lớp transformers.Sam3TrackerVideoPromptEncoderConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 256image_size: int | list[int] | tuple[int, int] = 1008patch_size: int | list[int] | tuple[int, int] = 14mask_input_channels: int = 16num_point_embeddings: int = 4hidden_act: str = 'gelu'layer_norm_eps: float = 1e-06scale: int = 1 )
Tham số
- hidden_size (
int, tùy chọn, mặc định là256) — Kích thước của các biểu diễn ẩn. - image_size (
Union[int, list[int], tuple[int, int]], tùy chọn, mặc định là1008) — Kích thước (độ phân giải) của mỗi hình ảnh. - patch_size (
Union[int, list[int], tuple[int, int]], tùy chọn, mặc định là14) — Kích thước (độ phân giải) của mỗi patch. - mask_input_channels (
int, tùy chọn, mặc định là 16) — Số lượng kênh được đưa vào moduleMaskDecoder. - num_point_embeddings (
int, tùy chọn, mặc định là 4) — Số lượng point embeddings sẽ được sử dụng. - hidden_act (
str, tùy chọn, mặc định làgelu) — Hàm kích hoạt phi tuyến (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ,"gelu","relu","silu", v.v. - layer_norm_eps (
float, tùy chọn, mặc định là1e-06) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization). - scale (
float, tùy chọn, mặc định là 1) — Hệ số tỷ lệ cho bộ mã hóa prompt.
Đây là lớp cấu hình để lưu trữ cấu hình của một Sam3TrackerVideoModel. Nó được sử dụng để khởi tạo một mô hình Sam3 Tracker Video theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như của facebook/sam3
Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.
Sam3TrackerVideoProcessor
lớp transformers.Sam3TrackerVideoProcessor
< source >( image_processorvideo_processortarget_size: int | None = Nonepoint_pad_value: int = -10**kwargs )
Tham số
- image_processor (
Sam3ImageProcessor) — Bộ xử lý ảnh là một đầu vào bắt buộc. - video_processor (
video_processor_class) — Bộ xử lý video là một đầu vào bắt buộc. - target_size (
int, tùy chọn) — Kích thước đích (tính bằng pixel) để chuẩn hóa các điểm đầu vào và hộp bao. Nếu không được cung cấp, mặc định sẽ dùng cấu hình kích thước của bộ xử lý ảnh. Tất cả tọa độ đầu vào (điểm và hộp) sẽ được chuẩn hóa về kích thước này trước khi được truyền vào mô hình. Điều này đảm bảo biểu diễn tọa độ nhất quán bất kể kích thước gốc của ảnh. - point_pad_value (
int, tùy chọn, mặc định là -10) — Giá trị được sử dụng để đệm các điểm đầu vào khi xử lý các chuỗi có độ dài khác nhau theo lô. Giá trị này được dùng để đánh dấu các vị trí đã đệm và được giữ nguyên trong quá trình chuẩn hóa tọa độ.
Tạo một Sam3TrackerVideoProcessor, đóng gói một bộ xử lý ảnh và một bộ xử lý video thành một bộ xử lý duy nhất.
Sam3TrackerVideoProcessor cung cấp đầy đủ các chức năng của Sam3ImageProcessor và video_processor_class. Xem ~Sam3ImageProcessor và ~video_processor_class để biết thêm thông tin.
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonesegmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneinput_points: typing.Union[list[list[list[list[float]]]], torch.Tensor, NoneType] = Noneinput_labels: typing.Union[list[list[list[int]]], torch.Tensor, NoneType] = Noneinput_boxes: typing.Union[list[list[list[float]]], torch.Tensor, NoneType] = Noneoriginal_sizes: typing.Union[list[list[float]], torch.Tensor, NoneType] = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = None**kwargs ) → A BatchEncoding with the following fields
Tham số
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], tuỳ chọn) — Hình ảnh cần tiền xử lý. Kỳ vọng một hình ảnh đơn lẻ hoặc một lô hình ảnh có giá trị pixel từ 0 đến 255. Nếu truyền vào các hình ảnh có giá trị pixel từ 0 đến 1, hãy đặtdo_rescale=False. - segmentation_maps (
ImageInput, tùy chọn) — Các bản đồ phân đoạn cần xử lý. - input_points (
list[list[list[list[float]]]],torch.Tensor, tùy chọn) — Các điểm cần thêm vào khung. - input_labels (
list[list[list[int]]],torch.Tensor, tùy chọn) — Nhãn cho các điểm. - input_boxes (
list[list[list[float]]],torch.Tensor, tùy chọn) — Các hộp bao quanh cần thêm vào khung hình. - original_sizes (
list[list[float]],torch.Tensor, tùy chọn) — Kích thước gốc của các hình ảnh. - return_tensors (
Union[str, ~utils.generic.TensorType], tuỳ chọn) — Nếu được đặt, sẽ trả về tensor của một framework cụ thể. Các giá trị chấp nhận được là:'pt': Trả về các đối tượngtorch.Tensorcủa PyTorch.'np': Trả về các đối tượngnp.ndarraycủa NumPy.
Trả về
Một BatchEncoding với các trường sau
pixel_values(torch.Tensor): Ảnh đã được xử lý.original_sizes(list[list[float]]): Kích thước gốc của các hình ảnh.labels(torch.Tensor): Các bản đồ phân đoạn đã được xử lý (nếu được cung cấp).input_points(torch.Tensor): Các điểm đã được xử lý.input_labels(torch.Tensor): Nhãn đã được xử lý.input_boxes(torch.Tensor): Các hộp bao đã được xử lý.
post_process_masks
< source >( masksoriginal_sizesmask_threshold = 0.0binarize = Truemax_hole_area = 0.0max_sprinkle_area = 0.0apply_non_overlapping_constraints = False**kwargs ) → (torch.Tensor)
Tham số
- masks (
Union[List[torch.Tensor], List[np.ndarray]]) — Các mask dạng batch từ mask_decoder ở định dạng (batch_size, num_channels, height, width). - original_sizes (
Union[torch.Tensor, List[Tuple[int,int]]]) — Kích thước gốc của từng ảnh trước khi được điều chỉnh kích thước thành hình dạng đầu vào mong đợi của mô hình, theo định dạng (chiều cao, chiều rộng). - mask_threshold (
float, tùy chọn, mặc định là 0.0) — Ngưỡng cho các thao tác nhị phân hóa và xử lý hậu kỳ. - binarize (
bool, tùy chọn, mặc định làTrue) — Có nên nhị phân hóa các mặt nạ hay không. - max_hole_area (
float, tùy chọn, mặc định là 0.0) — Diện tích tối đa của một lỗ cần lấp đầy. - max_sprinkle_area (
float, tùy chọn, mặc định là 0.0) — Diện tích tối đa của một sprinkle để lấp đầy. - apply_non_overlapping_constraints (
bool, tùy chọn, mặc định làFalse) — Có áp dụng các ràng buộc không chồng lấn lên các mặt nạ hay không.
Trả về
(torch.Tensor)
Mặt nạ dạng batch có định dạng batch_size, num_channels, height, width, trong đó (height, width) được xác định bởi original_size.
Loại bỏ padding và phóng to các mask lên kích thước ảnh gốc.
init_video_session
< source >( video: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]], NoneType] = Noneinference_device: typing.Union[str, ForwardRef('torch.device')] = 'cpu'inference_state_device: typing.Union[str, ForwardRef('torch.device'), NoneType] = Noneprocessing_device: typing.Union[str, ForwardRef('torch.device'), NoneType] = Nonevideo_storage_device: typing.Union[str, ForwardRef('torch.device'), NoneType] = Nonemax_vision_features_cache_size: int = 1dtype: dtype = torch.float32 )
Tham số
- video (
VideoInput, tùy chọn) — Video cần xử lý. Không cần cung cấp khi đang phát trực tiếp. - inference_device (
strhoặctorch.device, tùy chọn, mặc định là “cpu”) — Thiết bị được sử dụng để suy luận. - inference_state_device (
strhoặctorch.device, tùy chọn) — Thiết bị để lưu trữ trạng thái suy luận. - processing_device (
strhoặctorch.device, tùy chọn) — Thiết bị được sử dụng để xử lý video. - video_storage_device (
strhoặctorch.device, tùy chọn) — Thiết bị để lưu trữ các khung hình video đã được xử lý. - max_vision_features_cache_size (
int, tùy chọn, mặc định là 1) — Số lượng tối đa các đặc trưng thị giác được lưu vào bộ nhớ đệm. - dtype (
torch.dtype, tùy chọn, mặc định làtorch.float32) — torch dtype được sử dụng cho toàn bộ phiên.
Khởi tạo phiên video cho suy luận.
Nếu một video được cung cấp (suy luận bất đồng bộ), video sẽ được xử lý và lưu trữ trên video_storage_device.
add_inputs_to_inference_session
< source >( inference_session: Sam3TrackerVideoInferenceSessionframe_idx: intobj_ids: list[int] | intinput_points: typing.Union[list[list[list[list[float]]]], torch.Tensor, NoneType] = Noneinput_labels: typing.Union[list[list[list[int]]], torch.Tensor, NoneType] = Noneinput_boxes: typing.Union[list[list[list[float]]], torch.Tensor, NoneType] = Noneinput_masks: typing.Union[numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneoriginal_size: tuple[int, int] | None = Noneclear_old_inputs: bool = True )
Tham số
- inference_session (
Sam3TrackerVideoInferenceSession) — Phiên suy luận cho video. - frame_idx (
int) — Chỉ số của khung hình cần xử lý. - obj_ids (
list[int]hoặcint) — ID của đối tượng cần liên kết với các điểm hoặc hộp. Đây có thể là bất kỳ số nguyên nào và có thể được sử dụng lại sau đó để chỉ định một đối tượng. - input_points (
list[list[list[list[float]]]],torch.Tensor, tùy chọn) — Các điểm cần thêm vào khung. - input_labels (
list[list[list[int]]],torch.Tensor, tùy chọn) — Nhãn cho các điểm. - input_boxes (
list[list[list[float]]],torch.Tensor, tùy chọn) — Các hộp bao quanh cần thêm vào khung hình. - input_masks (
np.ndarray,torch.Tensor,list[np.ndarray], hoặclist[torch.Tensor], tùy chọn) — Mặt nạ (mask) cần thêm vào khung hình. - original_size (
tuple[int, int], tuỳ chọn) — Kích thước gốc của video. Cung cấp khi phát trực tiếp. - clear_old_inputs (
bool, tùy chọn, mặc định làTrue) — Có nên xóa các đầu vào cũ cho đối tượng hay không.
Xử lý các điểm, hộp hoặc mặt nạ mới cho một khung hình video và thêm chúng vào phiên suy luận.
Sam3TrackerVideoInferenceSession
lớp transformers.Sam3TrackerVideoInferenceSession
< 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 )
Tham số
- video (
torch.Tensor, tùy chọn) — Video cần xử lý. Không cần cung cấp khi đang phát trực tiếp. - video_height (
int, tùy chọn) — Chiều cao của video. - video_width (
int, tùy chọn) — Chiều rộng của video. - inference_device (
torch.device, tùy chọn, mặc định là"cpu") — Thiết bị được sử dụng cho suy luận. - inference_state_device (
torch.device, tùy chọn, mặc định là"cpu") — Thiết bị để lưu trữ trạng thái suy luận. - video_storage_device (
torch.device, tùy chọn, mặc định là"cpu") — Thiết bị để lưu trữ video. - dtype (
torch.dtype, tùy chọn, mặc định là"float32") — Dtype được sử dụng cho video. - max_vision_features_cache_size (
int, tùy chọn, mặc định là 1) — Số lượng tối đa các đặc trưng thị giác được lưu vào bộ nhớ đệm.
Quản lý các tham số, trạng thái và bộ nhớ đệm của phiên suy luận video.
Thêm đầu vào mask với việc đặt thiết bị tự động.
Thêm khung mới với việc đặt thiết bị tự động.
Thêm các đầu vào điểm với việc đặt thiết bị tự động.
Lấy khung từ video.
Lấy tổng số lượng id đối tượng duy nhất đã nhận được cho đến nay trong phiên này.
get_output
< source >( obj_idx: intframe_idx: intoutput_key: stris_conditioning_frame: bool = True )
Lấy kết quả với quản lý thiết bị thông minh.
Ánh xạ ID đối tượng tới chỉ số, tạo mục mới nếu cần.
Ánh xạ chỉ mục đối tượng phía mô hình sang id đối tượng phía client.
Xóa các đầu vào mask.
Xóa các đầu vào điểm.
Đặt lại dữ liệu theo dõi và bộ nhớ đệm.
Đặt lại dữ liệu theo dõi nhưng giữ lại bộ nhớ đệm.
store_output
< source >( obj_idx: intframe_idx: intoutput_key: str | None = Noneoutput_value: typing.Union[torch.Tensor, dict, NoneType] = Noneis_conditioning_frame: bool = True )
Tham số
- obj_idx (int) — Chỉ số của đối tượng.
- frame_idx (int) — Chỉ số của khung hình.
- output_key (Optional[str]) — Khóa của đầu ra. Nếu là None, đầu ra sẽ được lưu dưới dạng từ điển.
- output_value (Optional[Union[torch.Tensor, dict]]) — Giá trị của đầu ra.
- is_conditioning_frame (bool) — Xác định xem đầu ra có dành cho khung điều kiện (conditioning frame) hay không.
Lưu trữ đầu ra với quản lý thiết bị thông minh. Nếu output_key là None, đầu ra sẽ được lưu trữ dưới dạng từ điển.
Sam3TrackerVideoModel
lớp transformers.Sam3TrackerVideoModel
< source >( config: Sam3TrackerVideoConfigremove_vision_encoder: bool = False )
Tham số
- config (Sam3TrackerVideoConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số mô hình.
- remove_vision_encoder (
bool, tùy chọn, mặc định làFalse) — Có nên loại bỏ bộ mã hóa thị giác hay không. Nếu là True, bộ mã hóa thị giác sẽ được đặt thành None.
Mô hình Sam3 Tracker Video thô, xuất ra các hidden-states thô mà không có bất kỳ head cụ thể nào ở phía trên.
Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)
Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.
forward
< source >( inference_session: Sam3TrackerVideoInferenceSessionframe_idx: int | None = Noneframe: typing.Optional[torch.Tensor] = Nonereverse: bool = Falserun_mem_encoder: bool = True**kwargs ) → Sam3TrackerVideoSegmentationOutput or tuple(torch.Tensor)
Tham số
- inference_session (
~models.sam3_tracker_video.modeling_sam3_tracker_video.Sam3TrackerVideoInferenceSession) — Đối tượng phiên suy luận video. - frame_idx (
int, tùy chọn) — Chỉ số của khung hình cần chạy suy luận. Không cần cung cấp khi suy luận trên một khung hình mới được phát trực tiếp. - frame (
torch.Tensor, tùy chọn) — Khung cần xử lý. Cung cấp khi đang phát trực tiếp. - reverse (
bool, tùy chọn, mặc định làFalse) — Có nên lan truyền theo chiều ngược lại hay không. - run_mem_encoder (
bool, tùy chọn, mặc định làTrue) — Có chạy bộ mã hóa bộ nhớ trên các mặt nạ dự đoán hay không. Bộ mã hóa bộ nhớ được xử lý theo lô trên tất cả các đối tượng để đạt hiệu quả cao.
Trả về
Sam3TrackerVideoSegmentationOutput hoặc tuple(torch.Tensor)
Một Sam3TrackerVideoSegmentationOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (Sam3TrackerVideoConfig) và đầu vào.
Truyền các đối tượng qua một khung video được phát trực tiếp.
- object_ids (
list[int], tùy chọn) — Danh sách các ID đối tượng đang được theo dõi trong khung hình hiện tại. - pred_masks (
torch.Tensorcó hình dạng(batch_size, num_masks, height, width)) — Các mặt nạ dự đoán được lưu trữ ở độ phân giải của mô hình. - object_score_logits (
torch.Tensorcó hình dạng(batch_size,), tùy chọn) — Logits cho điểm của các đối tượng, cho biết các đối tượng có hiện diện hay không. - frame_idx (
int, tùy chọn) — Chỉ số khung của video.
propagate_in_video_iterator
< source >( inference_session: Sam3TrackerVideoInferenceSessionstart_frame_idx: int | None = Nonemax_frame_num_to_track: int | None = Nonereverse: bool = Falseshow_progress_bar: bool = False ) → Sam3TrackerVideoSegmentationOutput or tuple(torch.Tensor)
Tham số
- inference_session (
~models.sam3_tracker_video.modeling_sam3_tracker_video.Sam3TrackerVideoInferenceSession) — Đối tượng phiên suy luận video. - start_frame_idx (
int, tuỳ chọn) — Chỉ số khung hình bắt đầu cho quá trình lan truyền. Cần được cung cấp nếuforwardchưa được gọi trên các đầu vào mới. Nếu không được cung cấp, chỉ số khung hình bắt đầu sẽ là khung hình sớm nhất có các điểm đầu vào. - max_frame_num_to_track (
int, tùy chọn) — Số khung hình tối đa cần theo dõi. - reverse (
bool, tùy chọn, mặc định làFalse) — Có nên lan truyền theo chiều ngược lại hay không. - show_progress_bar (
bool, tùy chọn, mặc định làFalse) — Có hiển thị thanh tiến trình trong quá trình lan truyền hay không.
Trả về
Sam3TrackerVideoSegmentationOutput hoặc tuple(torch.Tensor)
Một Sam3TrackerVideoSegmentationOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (Sam3TrackerVideoConfig) và đầu vào.
Truyền các đối tượng qua các khung hình video. Được sử dụng khi khởi tạo phiên suy luận với một video hoàn chỉnh. Trả về Sam3TrackerVideoSegmentationOutput cho mỗi khung hình.
- object_ids (
list[int], tùy chọn) — Danh sách các ID đối tượng đang được theo dõi trong khung hình hiện tại. - pred_masks (
torch.Tensorcó hình dạng(batch_size, num_masks, height, width)) — Các mặt nạ dự đoán được lưu trữ ở độ phân giải của mô hình. - object_score_logits (
torch.Tensorcó hình dạng(batch_size,), tùy chọn) — Logits cho điểm của các đối tượng, cho biết các đối tượng có hiện diện hay không. - frame_idx (
int, tùy chọn) — Chỉ số khung của video.
get_image_features
< source >( pixel_values: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Sam3TrackerVideoVisionEncoderOutput or tuple(torch.Tensor)
Tham số
- pixel_values (
torch.Tensor) — Giá trị pixel đầu vào có hình dạng(batch_size, num_channels, height, width).
Trả về
Sam3TrackerVideoVisionEncoderOutput hoặc tuple(torch.Tensor)
Một Sam3TrackerVideoVisionEncoderOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (Sam3TrackerVideoConfig) và đầu vào.
last_hidden_state (
torch.Tensorcó hình dạng(batch_size, height, width, hidden_size)) — Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.pooler_output (
torch.Tensorcó hình dạng(batch_size, hidden_size)) — Trạng thái ẩn của lớp cuối cùng của token đầu tiên trong chuỗi (token phân loại) sau khi được xử lý thêm qua các lớp được sử dụng cho tác vụ tiền huấn luyện bổ trợ. Ví dụ, đối với các mô hình thuộc họ BERT, giá trị này trả về token phân loại sau khi được xử lý qua một lớp tuyến tính và một hàm kích hoạt tanh. Trọng số của lớp tuyến tính được huấn luyện từ mục tiêu dự đoán câu tiếp theo (phân loại) trong quá trình tiền huấn luyện.hidden_states (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Bộ tuple củatorch.Tensor(một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size).Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
attentions (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.Tensor(một cho mỗi lớp) có hình dạng(batch_size, num_heads, sequence_length, sequence_length).Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.
fpn_hidden_states (
tuple(torch.Tensor)) — Tuple củatorch.Tensor(một tensor cho mỗi mức đặc trưng, từ độ phân giải cao xuống thấp) có hình dạng(batch_size, hidden_size, height, width). Các bản đồ đặc trưng từ phần neck của Feature Pyramid Network.fpn_position_encoding (
tuple(torch.Tensor)) — Tuple củatorch.Tensor(một cho mỗi mức đặc trưng, từ độ phân giải cao xuống thấp) có hình dạng(batch_size, hidden_size, height, width). Các mã hóa vị trí tương ứng vớifpn_hidden_states.