Transformers documentation
OmDet-Turbo
Mô hình này được công bố trên HF papers vào ngày 2024-03-11 và được đóng góp cho Hugging Face Transformers vào ngày 2024-09-25.
OmDet-Turbo
Tổng quan
Mô hình OmDet-Turbo được đề xuất trong Real-time Transformer-based Open-Vocabulary Detection with Efficient Fusion Head bởi Tiancheng Zhao, Peng Liu, Xuan He, Lu Zhang, Kyusong Lee. OmDet-Turbo tích hợp các thành phần từ RT-DETR và giới thiệu một module kết hợp đa phương thức nhanh chóng để đạt được khả năng phát hiện đối tượng từ vựng mở thời gian thực trong khi vẫn duy trì độ chính xác cao. Mô hình cơ sở đạt hiệu suất lên đến 100.2 FPS và 53.4 AP trên COCO zero-shot.
Tóm tắt từ bài báo như sau:
Các bộ phát hiện dựa trên transformer đầu-cuối (DETR) đã thể hiện hiệu suất vượt trội trong cả các tác vụ phát hiện đối tượng đóng (closed-set) và phát hiện đối tượng từ vựng mở (open-vocabulary object detection - OVD) thông qua việc tích hợp các chế độ ngôn ngữ. Tuy nhiên, yêu cầu tính toán khắt khe của chúng đã cản trở việc ứng dụng thực tế trong các kịch bản phát hiện đối tượng thời gian thực (OD). Trong bài báo này, chúng tôi xem xét kỹ lưỡng các hạn chế của hai mô hình hàng đầu trong bộ chuẩn OVDEval, OmDet và Grounding-DINO, và giới thiệu OmDet-Turbo. Mô hình OVD thời gian thực dựa trên transformer mới này có một module Efficient Fusion Head (EFH) sáng tạo được thiết kế để giảm thiểu các nút cổ chai quan sát được trong OmDet và Grounding-DINO. Đáng chú ý, OmDet-Turbo-Base đạt 100,2 khung hình mỗi giây (FPS) khi áp dụng TensorRT và các kỹ thuật bộ đệm ngôn ngữ. Đáng chú ý, trong các kịch bản zero-shot trên các bộ dữ liệu COCO và LVIS, OmDet-Turbo đạt mức hiệu suất gần tương đương với các mô hình giám sát tiên tiến hiện tại. Hơn nữa, nó thiết lập các mốc chuẩn tiên tiến mới trên ODinW và OVDEval, với AP là 30,1 và NMS-AP là 26,86, tương ứng. Tính thực tiễn của OmDet-Turbo trong các ứng dụng công nghiệp được nhấn mạnh bởi hiệu suất vượt trội của nó trên các bộ dữ liệu chuẩn và tốc độ suy luận vượt trội, đặt nó như một lựa chọn hấp dẫn cho các tác vụ phát hiện đối tượng thời gian thực.
OmDet-Turbo architecture overview. Taken from the original paper. Mô hình này được đóng góp bởi yonigozlan. Mã nguồn gốc có thể được tìm thấy tại đây.
Mẹo sử dụng
Một đặc tính độc đáo của OmDet-Turbo so với các mô hình phát hiện đối tượng zero-shot khác, chẳng hạn như Grounding DINO, là cấu trúc tách biệt giữa lớp (classes) và nhúng prompt (prompt embedding), cho phép lưu trữ bộ nhớ đệm (caching) các nhúng văn bản. Điều này có nghĩa là mô hình cần cả classes và task làm đầu vào, trong đó classes là danh sách các đối tượng mà chúng ta muốn phát hiện và task là văn bản có ngữ cảnh (grounded text) được sử dụng để hướng dẫn phát hiện từ vựng mở (open-vocabulary detection). Cách tiếp cận này giới hạn phạm vi của phát hiện từ vựng mở và làm cho quá trình giải mã nhanh hơn.
OmDetTurboProcessor được sử dụng để chuẩn bị bộ ba gồm các lớp, tác vụ và hình ảnh. Đầu vào tác vụ là tùy chọn, và khi không được cung cấp, giá trị mặc định sẽ là "Detect [class1], [class2], [class3], ...". Để xử lý kết quả từ mô hình, có thể sử dụng post_process_grounded_object_detection từ OmDetTurboProcessor. Đáng chú ý, hàm này nhận các lớp đầu vào, vì khác với các mô hình phát hiện đối tượng zero-shot khác, việc tách biệt các embedding của lớp và tác vụ có nghĩa là không cần giải mã các embedding lớp dự đoán trong bước hậu xử lý, và các lớp dự đoán có thể được khớp trực tiếp với các lớp đã nhập.
Ví dụ sử dụng
Suy luận hình ảnh đơn
Dưới đây là cách tải mô hình và chuẩn bị các đầu vào để thực hiện phát hiện đối tượng zero-shot trên một hình ảnh đơn:
import torch
import requests
from PIL import Image
from transformers import AutoProcessor, OmDetTurboForObjectDetection
processor = AutoProcessor.from_pretrained("omlab/omdet-turbo-swin-tiny-hf")
model = OmDetTurboForObjectDetection.from_pretrained("omlab/omdet-turbo-swin-tiny-hf", device_map="auto")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
text_labels = ["cat", "remote"]
inputs = processor(image, text=text_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
# convert outputs (bounding boxes and class logits)
results = processor.post_process_grounded_object_detection(
outputs,
target_sizes=[(image.height, image.width)],
text_labels=text_labels,
threshold=0.3,
nms_threshold=0.3,
)
result = results[0]
boxes, scores, text_labels = result["boxes"], result["scores"], result["text_labels"]
for box, score, text_label in zip(boxes, scores, text_labels):
box = [round(i, 2) for i in box.tolist()]
print(f"Detected {text_label} with confidence {round(score.item(), 3)} at location {box}")
Detected remote with confidence 0.768 at location [39.89, 70.35, 176.74, 118.04]
Detected cat with confidence 0.72 at location [11.6, 54.19, 314.8, 473.95]
Detected remote with confidence 0.563 at location [333.38, 75.77, 370.7, 187.03]
Detected cat with confidence 0.552 at location [345.15, 23.95, 639.75, 371.67]Suy luận nhiều hình ảnh
OmDet-Turbo có thể thực hiện suy luận đa ảnh theo lô (batched multi-image inference), với khả năng hỗ trợ các prompt văn bản và lớp khác nhau trong cùng một lô:
import torch
import requests
from io import BytesIO
from PIL import Image
from transformers import AutoProcessor, OmDetTurboForObjectDetection
processor = AutoProcessor.from_pretrained("omlab/omdet-turbo-swin-tiny-hf")
model = OmDetTurboForObjectDetection.from_pretrained("omlab/omdet-turbo-swin-tiny-hf", device_map="auto")
url1 = "http://images.cocodataset.org/val2017/000000039769.jpg"
image1 = Image.open(BytesIO(requests.get(url1).content)).convert("RGB")
text_labels1 = ["cat", "remote"]
task1 = "Detect {}.".format(", ".join(text_labels1))
url2 = "http://images.cocodataset.org/train2017/000000257813.jpg"
image2 = Image.open(BytesIO(requests.get(url2).content)).convert("RGB")
text_labels2 = ["boat"]
task2 = "Detect everything that looks like a boat."
url3 = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/statue_of_liberty.jpg"
image3 = Image.open(BytesIO(requests.get(url3).content)).convert("RGB")
text_labels3 = ["statue", "trees"]
task3 = "Focus on the foreground, detect statue and trees."
inputs = processor(
images=[image1, image2, image3],
text=[text_labels1, text_labels2, text_labels3],
task=[task1, task2, task3],
return_tensors="pt",
)
with torch.no_grad():
outputs = model(**inputs)
# convert outputs (bounding boxes and class logits)
results = processor.post_process_grounded_object_detection(
outputs,
text_labels=[text_labels1, text_labels2, text_labels3],
target_sizes=[(image.height, image.width) for image in [image1, image2, image3]],
threshold=0.2,
nms_threshold=0.3,
)
for i, result in enumerate(results):
for score, text_label, box in zip(
result["scores"], result["text_labels"], result["boxes"]
):
box = [round(i, 1) for i in box.tolist()]
print(
f"Detected {text_label} with confidence "
f"{round(score.item(), 2)} at location {box} in image {i}"
)
Detected remote with confidence 0.77 at location [39.9, 70.4, 176.7, 118.0] in image 0
Detected cat with confidence 0.72 at location [11.6, 54.2, 314.8, 474.0] in image 0
Detected remote with confidence 0.56 at location [333.4, 75.8, 370.7, 187.0] in image 0
Detected cat with confidence 0.55 at location [345.2, 24.0, 639.8, 371.7] in image 0
Detected boat with confidence 0.32 at location [146.9, 219.8, 209.6, 250.7] in image 1
Detected boat with confidence 0.3 at location [319.1, 223.2, 403.2, 238.4] in image 1
Detected boat with confidence 0.27 at location [37.7, 220.3, 84.0, 235.9] in image 1
Detected boat with confidence 0.22 at location [407.9, 207.0, 441.7, 220.2] in image 1
Detected statue with confidence 0.73 at location [544.7, 210.2, 651.9, 502.8] in image 2
Detected trees with confidence 0.25 at location [3.9, 584.3, 391.4, 785.6] in image 2
Detected trees with confidence 0.25 at location [1.4, 621.2, 118.2, 787.8] in image 2
Detected statue with confidence 0.2 at location [428.1, 205.5, 767.3, 759.5] in image 2
OmDetTurboConfig
lớp transformers.OmDetTurboConfig
< 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 = 0id2label: 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 = Noneis_encoder_decoder: bool = Truetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneapply_layernorm_after_vision_backbone: bool = Trueimage_size: int | list[int] | tuple[int, int] = 640disable_custom_kernels: bool = Falselayer_norm_eps: float = 1e-05batch_norm_eps: float = 1e-05init_std: float = 0.02text_projection_in_dim: int = 512text_projection_out_dim: int = 512task_encoder_hidden_dim: int = 1024class_embed_dim: int = 512class_distance_type: typing.Literal['cosine', 'dot'] = 'cosine'num_queries: int = 900csp_activation: str = 'silu'conv_norm_activation: str = 'gelu'encoder_feedforward_activation: str = 'relu'encoder_feedforward_dropout: float | int = 0.0encoder_dropout: float | int = 0.0hidden_expansion: int = 1encoder_hidden_dim: int = 256vision_features_channels: list[int] | tuple[int, ...] = (256, 256, 256)encoder_in_channels: list[int] | tuple[int, ...] = (192, 384, 768)encoder_projection_indices: list[int] | tuple[int, ...] = (2,)encoder_attention_heads: int = 8encoder_dim_feedforward: int = 2048encoder_layers: int = 1positional_encoding_temperature: int = 10000num_feature_levels: int = 3decoder_hidden_dim: int = 256decoder_num_heads: int = 8decoder_num_layers: int = 6decoder_activation: str = 'relu'decoder_dim_feedforward: int = 2048decoder_num_points: int = 4decoder_dropout: float | int = 0.0eval_size: int | None = Nonelearn_initial_query: bool = Falsecache_size: int = 100 )
Tham số
- is_encoder_decoder (
bool, tùy chọn, mặc định làTrue) — Xác định xem mô hình có được sử dụng như một encoder/decoder hay không. - text_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 văn bản. - backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], tùy chọn) — Cấu hình của mô hình backbone. - apply_layernorm_after_vision_backbone (
bool, tùy chọn, mặc định làTrue) — Có áp dụng layer normalization lên các feature map của đầu ra vision backbone hay không. - image_size (
Union[int, list[int], tuple[int, int]], tùy chọn, mặc định là640) — Kích thước (độ phân giải) của mỗi hình ảnh. - disable_custom_kernels (
bool, tùy chọn, mặc định làFalse) — Có vô hiệu hóa các kernel tùy chỉnh hay không. - layer_norm_eps (
float, tùy chọn, mặc định là1e-05) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization). - batch_norm_eps (
float, tùy chọn, mặc định là1e-05) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa theo lô (batch normalization). - init_std (
float, tùy chọn, mặc định là0.02) — Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số. - text_projection_in_dim (
int, tùy chọn, mặc định là 512) — Kích thước đầu vào cho phép chiếu văn bản. - text_projection_out_dim (
int, tùy chọn, mặc định là 512) — Kích thước đầu ra cho phép chiếu văn bản. - task_encoder_hidden_dim (
int, tuỳ chọn, mặc định là 1024) — Chiều kích feedforward cho task encoder. - class_embed_dim (
int, tùy chọn, mặc định là 512) — Kích thước của các embedding lớp. - class_distance_type (
str, tuỳ chọn, mặc định là"cosine") — Loại khoảng cách để so sánh các lớp dự đoán với các embedding của lớp được chiếu. Có thể là"cosine"hoặc"dot". - num_queries (
int, tùy chọn, mặc định là 900) — Số lượng truy vấn. - csp_activation (
str, tùy chọn, mặc định là"silu") — Hàm kích hoạt của các mạng Cross Stage Partial (CSP) trong bộ mã hóa. - conv_norm_activation (
str, tùy chọn, mặc định là"gelu") — Hàm kích hoạt của các lớp ConvNormLayer trong bộ mã hóa. - encoder_feedforward_activation (
str, tùy chọn, mặc định là"relu") — Hàm kích hoạt cho mạng feedforward của encoder. - encoder_feedforward_dropout (
float, tùy chọn, mặc định là 0.0) — Tỷ lệ dropout sau khi kích hoạt mạng feedforward của encoder. - encoder_dropout (
Union[float, int], tùy chọn, mặc định là0.0) — Tỷ lệ cho tất cả các lớp dropout. - hidden_expansion (
int, tùy chọn, mặc định là 1) — Hệ số mở rộng ẩn của các mạng CSP trong bộ mã hóa. - encoder_hidden_dim (
int, tùy chọn, mặc định là256) — Kích thước của các biểu diễn ẩn. - vision_features_channels (
tuple(int), tuỳ chọn, mặc định là[256, 256, 256]) — Số kênh của các đặc trưng thị giác đã được chiếu, được dùng làm đầu vào cho bộ giải mã. - encoder_in_channels (
List(int), tùy chọn, mặc định là[192, 384, 768]) — Số kênh đầu vào cho encoder. - encoder_projection_indices (
List(int), tùy chọn, mặc định là[2]) — Các chỉ số của các đặc trưng đầu vào được chiếu bởi từng lớp. - encoder_attention_heads (
int, tùy chọn, mặc định là8) — Số lượng đầu chú ý cho mỗi lớp chú ý trong bộ mã hóa Transformer. - encoder_dim_feedforward (
int, tùy chọn, mặc định là 2048) — Kích thước feedforward cho encoder. - encoder_layers (
int, tùy chọn, mặc định là1) — Số lượng lớp ẩn trong bộ mã hóa Transformer. Nếu không được đặt, giá trị này sẽ giống vớinum_layers. - positional_encoding_temperature (
int, tùy chọn, mặc định là 10000) — Nhiệt độ mã hóa vị trí trong bộ mã hóa. - num_feature_levels (
int, tuỳ chọn, mặc định là 3) — Số lượng cấp độ đặc trưng cho module chú ý biến dạng đa tỷ lệ của bộ giải mã. - decoder_hidden_dim (
int, tùy chọn, mặc định là256) — Kích thước của các biểu diễn ẩn. - decoder_num_heads (
int, tùy chọn, mặc định là8) — Số lượng đầu chú ý cho mỗi lớp chú ý trong bộ giải mã Transformer. - decoder_num_layers (
int, tùy chọn, mặc định là6) — Số lượng lớp ẩn trong bộ giải mã Transformer. Nếu không được đặt, giá trị này sẽ giống vớinum_layers. - decoder_activation (
str, tùy chọn, mặc định là"relu") — Hàm kích hoạt cho bộ giải mã. - decoder_dim_feedforward (
int, tùy chọn, mặc định là 2048) — Kích thước feedforward cho decoder. - decoder_num_points (
int, tùy chọn, mặc định là 4) — Số lượng điểm được lấy mẫu trong module chú ý biến dạng đa tỷ lệ của bộ giải mã. - decoder_dropout (
float, tùy chọn, mặc định là 0.0) — Tỷ lệ dropout cho bộ giải mã. - eval_size (
tuple[int, int], tuỳ chọn) — Chiều cao và chiều rộng được dùng để tính chiều cao và chiều rộng hiệu dụng của các position embeddings sau khi đã tính đến stride (xem RTDetr). - learn_initial_query (
bool, tùy chọn, mặc định làFalse) — Có học truy vấn ban đầu hay không. - cache_size (
int, tùy chọn, mặc định là 100) — Kích thước bộ nhớ đệm cho các bộ nhớ đệm lớp và prompt.
Đây là lớp cấu hình để lưu trữ cấu hình của một Omdet TurboModel. Nó được sử dụng để khởi tạo một mô hình Omdet Turbo 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ấu hình của omlab/omdet-turbo-swin-tiny-hf
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 OmDetTurboConfig, OmDetTurboForObjectDetection
>>> # Initializing a OmDet-Turbo omlab/omdet-turbo-swin-tiny-hf style configuration
>>> configuration = OmDetTurboConfig()
>>> # Initializing a model (with random weights) from the omlab/omdet-turbo-swin-tiny-hf style configuration
>>> model = OmDetTurboForObjectDetection(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configOmDetTurboProcessor
lớp transformers.OmDetTurboProcessor
< source >( image_processortokenizer )
Tạo một OmDetTurboProcessor, đóng gói một bộ xử lý ảnh và một tokenizer thành một bộ xử lý duy nhất.
OmDetTurboProcessor cung cấp đầy đủ các chức năng của DetrImageProcessor và CLIPTokenizer. Xem ~DetrImageProcessor và ~CLIPTokenizer để 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] = Nonetext: list[str] | list[list[str]] | None = None**kwargs: *<class 'transformers.models.omdet_turbo.processing_omdet_turbo.OmDetTurboProcessorKwargs'> ) → ~feature_extraction_utils.BatchFeature
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. - text (
Union[list[str], list[list[str]]], tùy chọn) — Chuỗi hoặc lô các chuỗi cần được mã hóa. Mỗi chuỗi có thể là một chuỗi ký tự hoặc một danh sách các chuỗi ký tự (chuỗi đã được tách token trước). Nếu bạn truyền vào dữ liệu đầu vào đã được tách token trước, hãy đặtis_split_into_words=Trueđể tránh nhầm lẫn với các đầu vào dạng lô. - task (
str, kwargs,list[str],TextInput, hoặcPreTokenizedInput, optional) — Mô tả tác vụ phát hiện cần mã hóa. Nếu không được cung cấp, một mô tả tác vụ mặc định sẽ được tạo từ đầu vàotext(ví dụ: “Detect {text}.”). Có thể là một chuỗi duy nhất, một danh sách các chuỗi (một cho mỗi ảnh), hoặc đầu vào đã được tiền mã hóa token. Mô tả tác vụ hướng dẫn mô hình về các đối tượng cần phát hiện trong các ảnh. - return_tensors (
strhoặc TensorType, tùy 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.
- **kwargs (ProcessingKwargs, optional) — Các tùy chọn xử lý bổ sung cho từng modality (text, images, videos, audio). Các tham số cụ thể của model được liệt kê ở trên; xem lớp TypedDict để biết danh sách đầy đủ các đối số được hỗ trợ.
Trả về
~feature_extraction_utils.BatchFeature
- data (
dict, tuỳ chọn) — Từ điển chứa các danh sách/mảng/tensor được trả về bởi các phương thức call/pad (‘input_values’, ‘attention_mask’, v.v.). - tensor_type (
Union[None, str, TensorType], tùy chọn) — Bạn có thể cung cấp một tensor_type tại đây để chuyển đổi các danh sách số nguyên trong Tensor PyTorch/Numpy khi khởi tạo. - skip_tensor_conversion (
list[str]hoặcset[str], tùy chọn) — Danh sách hoặc tập hợp các khóa KHÔNG được chuyển đổi thành tensor, ngay cả khitensor_typeđược chỉ định.
post_process_grounded_object_detection
< source >( outputs: OmDetTurboObjectDetectionOutputtext_labels: list[str] | list[list[str]] | None = Nonethreshold: float = 0.3nms_threshold: float = 0.5target_sizes: transformers.utils.generic.TensorType | list[tuple] | None = Nonemax_num_det: int | None = None ) → list[Dict]
Tham số
- outputs (
OmDetTurboObjectDetectionOutput) — Đầu ra thô của mô hình. - text_labels (Union[list[str], list[list[str]]], tuỳ chọn) —
Tên các lớp đầu vào. Nếu không được cung cấp,
text_labelssẽ được đặt thànhNonetrongoutputs. - threshold (float, mặc định là 0.3) — Chỉ trả về các phát hiện có điểm tin cậy vượt quá ngưỡng này.
- nms_threshold (float, mặc định là 0.5) — Ngưỡng sử dụng cho việc áp dụng non-maximum suppression lên các hộp. Giá trị trong [0, 1].
- target_sizes (
torch.Tensorhoặclist[tuple[int, int]], tuỳ chọn) — Tensor có shape(batch_size, 2)hoặc danh sách các tuple (tuple[int, int]) chứa kích thước đích(height, width)của từng ảnh trong batch. Nếu không được đặt, các dự đoán sẽ không được thay đổi kích thước. - max_num_det (
int, tùy chọn) — Số lượng phát hiện tối đa cần trả về.
Trả về
list[Dict]
Một danh sách các từ điển, mỗi từ điển chứa điểm số, các lớp và các hộp bao quanh cho một hình ảnh trong lô (batch) như được dự đoán bởi mô hình.
Chuyển đổi đầu ra thô của OmDetTurboForObjectDetection thành các hộp bao cuối cùng ở định dạng (top_left_x, top_left_y, bottom_right_x, bottom_right_y) và lấy lớp văn bản liên quan.
OmDetTurboForObjectDetection
lớp transformers.OmDetTurboForObjectDetection
< source >( config: OmDetTurboConfig )
Tham số
- config (OmDetTurboConfig) — 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 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.
Mô hình OmDetTurbo (gồm một backbone thị giác và một backbone văn bản, cùng kiến trúc encoder-decoder) tạo ra các bounding box và điểm số lớp cho các tác vụ như phát hiện COCO.
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 >( pixel_values: Tensorclasses_input_ids: LongTensorclasses_attention_mask: LongTensortasks_input_ids: LongTensortasks_attention_mask: LongTensorclasses_structure: LongTensorlabels: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → OmDetTurboObjectDetectionOutput or tuple(torch.Tensor)
Tham số
- pixel_values (
torch.Tensorcó hình dạng(batch_size, num_channels, image_size, image_size)) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng DetrImageProcessor. Xem DetrImageProcessor.call() để biết chi tiết (OmDetTurboProcessor sử dụng DetrImageProcessor để xử lý hình ảnh). - classes_input_ids (
torch.LongTensorcó hình dạng(total_classes (>= batch_size), sequence_length)) — Chỉ số của các token trong chuỗi lớp đầu vào trong từ vựng của mô hình ngôn ngữ. Có thể cung cấp nhiều lớp cho mỗi tác vụ, do đó các lớp đã được token hóa sẽ được làm phẳng và cấu trúc của các lớp được cung cấp trongclasses_structuretham số.Các chỉ số có thể được lấy bằng cách sử dụng OmDetTurboProcessor. Xem OmDetTurboProcessor.call() để biết chi tiết.
- classes_attention_mask (
torch.BoolTensorcó shape(total_classes (>= batch_size), num_classes, sequence_length)) — Attention mask cho các lớp. Đây là một mask nhị phân chỉ ra các token nào nên được chú ý và token nào không nên. - tasks_input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length)) — Chỉ số của các token trong chuỗi task đầu vào trong từ điển của mô hình ngôn ngữ. Có thể lấy chỉ số bằng cách sử dụng OmDetTurboProcessor. Xem OmDetTurboProcessor.call() để biết thêm chi tiết. input IDs là gì?Các chỉ số có thể được lấy bằng cách sử dụng OmDetTurboProcessor. Xem OmDetTurboProcessor.call() để biết chi tiết.
- tasks_attention_mask (
torch.BoolTensorcó shape(batch_size, sequence_length)) — Attention mask cho các tasks. Đây là một mask nhị phân chỉ ra các token nào nên được chú ý và token nào không nên. - classes_structure (
torch.LongTensorcó hình dạng(batch_size)) — Cấu trúc của các lớp. Tensor này chỉ ra số lượng lớp cho từng tác vụ. - labels (
list[Dict]có độ dài(batch_size,), tùy chọn) — Nhãn để tính toán tổn thất khớp hai phần (bipartite matching loss). Danh sách các từ điển, mỗi từ điển chứa ít nhất 2 khóa sau: ‘class_labels’ và ‘boxes’ (lần lượt là nhãn lớp và hộp bao quanh của một hình ảnh trong lô). Bản thân các nhãn lớp phải là mộttorch.LongTensorcó độ dài(number of bounding boxes in the image,)và các hộp bao quanh phải là mộttorch.Tensorcó hình dạng(number of bounding boxes in the image, 4). - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
OmDetTurboObjectDetectionOutput hoặc tuple(torch.Tensor)
Một OmDetTurboObjectDetectionOutput 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 (OmDetTurboConfig) và đầu vào.
Phương thức forward của OmDetTurboForObjectDetection ghi đè lên phương thức đặc biệt __call__.
Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.
- loss (
torch.Tensor, tuỳ chọn) — Giá trị loss. - decoder_coord_logits (
torch.Tensorcó hình dạng(batch_size, num_queries, 4)) — Các logits tọa độ dự đoán của các đối tượng. - decoder_class_logits (
torch.Tensorcó hình dạng(batch_size, num_queries, num_classes)) — Lớp được dự đoán của các đối tượng. - init_reference_points (
torch.Tensorcó hình dạng(batch_size, num_queries, 4)) — Các điểm tham chiếu ban đầu. - intermediate_reference_points (
tuple[tuple[torch.Tensor]], tùy chọn) — Các điểm tham chiếu trung gian. - encoder_coord_logits (
torch.Tensorcó hình dạng(batch_size, num_queries, 4)) — Tọa độ dự đoán của các đối tượng từ encoder. - encoder_class_logits (
tuple[torch.Tensor], optional) — Lớp dự đoán của các đối tượng từ encoder. - encoder_extracted_states (
torch.Tensor, tuỳ chọn) — Các trạng thái đã trích xuất từ Feature Pyramid Network (FPN) và Path Aggregation Network (PAN) của encoder. - decoder_hidden_states (
tuple[torch.Tensor], tuỳ chọn) — Tuple củatorch.Tensor(một cho đầu ra của embeddings + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size). Hidden-states của mô hình tại đầu ra của mỗi lớp cùng với đầu ra embedding ban đầu. - decoder_attentions (
tuple[tuple[torch.Tensor]], tuỳ chọn) — Tuple của các tupletorch.Tensor(một cho attention của mỗi lớp) có hình dạng(batch_size, num_heads, sequence_length, sequence_length). Trọng số attention sau softmax của attention, được dùng để tính trung bình có trọng số trong các đầu self-attention, cross-attention và multi-scale deformable attention. - encoder_hidden_states (
tuple[torch.Tensor], tuỳ chọn) — Tuple củatorch.Tensor(một cho đầu ra của embeddings + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size). Hidden-states của mô hình tại đầu ra của mỗi lớp cùng với đầu ra embedding ban đầu. - encoder_attentions (
tuple[tuple[torch.Tensor]], tuỳ chọn) — Tuple của các tupletorch.Tensor(một cho attention của mỗi lớp) có hình dạng(batch_size, num_heads, sequence_length, sequence_length). Trọng số attention sau softmax của attention, được dùng để tính trung bình có trọng số trong các đầu self-attention, cross-attention và multi-scale deformable attention. - classes_structure (
torch.LongTensor, optional) — Số lượng lớp được truy vấn cho mỗi hình ảnh.
Ví dụ:
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from PIL import Image
>>> from transformers import AutoProcessor, OmDetTurboForObjectDetection
>>> processor = AutoProcessor.from_pretrained("omlab/omdet-turbo-swin-tiny-hf")
>>> model = OmDetTurboForObjectDetection.from_pretrained("omlab/omdet-turbo-swin-tiny-hf")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> classes = ["cat", "remote"]
>>> task = "Detect {}.".format(", ".join(classes))
>>> inputs = processor(image, text=classes, task=task, return_tensors="pt")
>>> outputs = model(**inputs)
>>> # convert outputs (bounding boxes and class logits)
>>> results = processor.post_process_grounded_object_detection(
... outputs,
... classes=classes,
... target_sizes=[image.size[::-1]],
... score_threshold=0.3,
... nms_threshold=0.3,
>>> )[0]
>>> for score, class_name, box in zip(results["scores"], results["classes"], results["boxes"]):
... box = [round(i, 1) for i in box.tolist()]
... print(
... f"Detected {class_name} with confidence "
... f"{round(score.item(), 2)} at location {box}"
... )
Detected remote with confidence 0.76 at location [39.9, 71.3, 176.5, 117.9]
Detected cat with confidence 0.72 at location [345.1, 22.5, 639.7, 371.9]
Detected cat with confidence 0.65 at location [12.7, 53.8, 315.5, 475.3]
Detected remote with confidence 0.57 at location [333.4, 75.6, 370.7, 187.0]