Transformers documentation

OmDet-Turbo

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق HF في 11 مارس 2024، وأُضيف إلى Hugging Face Transformers في 25 سبتمبر 2024.

OmDet-Turbo

نظرة عامة

قُدِّم نموذج OmDet-Turbo في Real-time Transformer-based Open-Vocabulary Detection with Efficient Fusion Head من قِبل Tiancheng Zhao وPeng Liu وXuan He وLu Zhang وKyusong Lee. يدمج OmDet-Turbo مكوّنات من RT-DETR ويقدّم وحدة اندماج متعددة الوسائط سريعة لتحقيق قدرات كشف كائنات مفتوحة المفردات في الوقت الفعلي مع الحفاظ على دقة عالية. يحقق النموذج الأساسي أداءً يصل إلى 100.2 إطار في الثانية و53.4 AP على COCO zero-shot.

المستخلص من الورقة البحثية هو كالتالي:

أظهرت كاشفات التحويل (DETRs) القائمة على التحويلات أداءً استثنائيًا في مهام كشف الكائنات ذات المجموعة المغلقة ومهام كشف الكائنات ذات المفردات المفتوحة (OVD) من خلال دمج أنماط اللغة. ومع ذلك، فإن متطلباتها الحسابية المكثفة عرقلت تطبيقها العملي في سيناريوهات كشف الكائنات في الوقت الفعلي (OD). في هذه الورقة، نفحص حدود نموذجين رائدين في معيار OVDEval، وهما OmDet وGrounding-DINO، ونقدم OmDet-Turbo. يتميز هذا النموذج الجديد لكشف الكائنات في الوقت الفعلي والقائم على التحويلات بوحدة رأس دمج فعّال (EFH) مبتكرة مصممة للتخفيف من الاختناقات المرصودة في OmDet وGrounding-DINO. ومن الجدير بالذكر أن OmDet-Turbo-Base يحقق 100.2 إطارًا في الثانية (FPS) عند تطبيق تقنيات TensorRT وتخزين اللغة المؤقت. ومن الجدير بالذكر أيضًا أنه في سيناريوهات الصفرية على مجموعات بيانات COCO وLVIS، يحقق OmDet-Turbo مستويات أداء تكاد تكون على قدم المساواة مع أحدث النماذج المُشرَفة حاليًا. علاوة على ذلك، فإنه يحدد معايير جديدة لأحدث التقنيات على ODinW وOVDEval، حيث يبلغ AP 30.1 وNMS-AP 26.86 على التوالي. وتُبرز عملية OmDet-Turbo في التطبيقات الصناعية من خلال أدائه الاستثنائي على مجموعات البيانات المرجعية وسرعة الاستدلال المتفوقة، مما يجعله خيارًا جذابًا لمهام كشف الكائنات في الوقت الفعلي.

drawing OmDet-Turbo architecture overview. Taken from the original paper.

تمت مساهمة هذا النموذج من قِبل yonigozlan. يمكن العثور على الكود الأصلي هنا.

نصائح للاستخدام

من الخصائص الفريدة لـ OmDet-Turbo مقارنةً بنماذج كشف الأشياء بدون تدريب مسبق أخرى، مثل Grounding DINO، هي بنية التضمين المفصولة للفئات والأوامر النصية التي تتيح تخزين التضمينات النصية مؤقتًا. وهذا يعني أن النموذج يحتاج إلى كلا المدخلين: الفئات والمهمة، حيث تكون الفئات قائمةً بالأشياء التي نرغب في كشفها، والمهمة هي النص المرتبط بالواقع المستخدم لتوجيه عملية الكشف مفتوح المفردات. تقتصر هذه الطريقة على نطاق الكشف مفتوح المفردات وتجعل عملية فك الترميز أسرع.

يُستخدم OmDetTurboProcessor لتحضير ثلاثية الفئات والمهمة والصورة. مدخل المهمة اختياري، وعند عدم تقديمه، يكون الافتراضي "Detect [class1], [class2], [class3], ...". لمعالجة النتائج من النموذج، يمكن استخدام post_process_grounded_object_detection من OmDetTurboProcessor. ومن اللافت أن هذه الدالة تستقبل الفئات المدخلة، فبخلاف نماذج كشف الكائنات بدون تدريب الأخرى، يعني فصل ترميزات الفئات عن ترميزات المهمة أنه لا حاجة إلى فك ترميز الترميزات المتوقعة للفئات في خطوة ما بعد المعالجة، ويمكن مطابقة الفئات المتوقعة مع الفئات المدخلة مباشرة.

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

استدلال صورة واحدة

إليك كيفية تحميل النموذج وتحضير المدخلات لتنفيذ كشف الأشياء بدون تدريب على صورة واحدة:

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]

الاستدلال على صور متعددة

يمكن لـ OmDet-Turbo تنفيذ الاستدلال على عدة صور دفعة واحدة، مع دعم أوامر نصية وفئات مختلفة في نفس الدفعة:

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

فئة transformers.OmDetTurboConfig

< >

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

المعاملات

  • is_encoder_decoder (bool، اختياري، القيمة الافتراضية True) — ما إذا كان النموذج يُستخدم كمُشفِّر/مُفكِّك أم لا.
  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig]، اختياري) — كائن الإعدادات أو قاموس العمود الفقري النصي.
  • backbone_config (Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — إعدادات نموذج الهيكل العظمي.
  • apply_layernorm_after_vision_backbone (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تطبيق تطبيع الطبقة على خرائط الميزات الناتجة عن مخرج العمود الفقري البصري.
  • image_size (Union[int, list[int], tuple[int, int]]، اختياري، القيمة الافتراضية 640) — حجم (دقة) كل صورة.
  • disable_custom_kernels (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تعطيل النوى المخصصة.
  • layer_norm_eps (float, اختياري، القيمة الافتراضية 1e-05) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة.
  • batch_norm_eps (float، اختياري، القيمة الافتراضية 1e-05) — قيمة إيبسلون المستخدمة في طبقات تطبيع الدفعة.
  • init_std (float، اختياري، القيمة الافتراضية 0.02) — انحراف معياري لمُهيّئ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
  • text_projection_in_dim (int، اختياري، القيمة الافتراضية 512) — البُعد المدخل للتحوّل النصي.
  • text_projection_out_dim (int، اختياري، القيمة الافتراضية 512) — البُعد المخرج للتحوّل النصي.
  • task_encoder_hidden_dim (int، اختياري، القيمة الافتراضية 1024) — البُعد الأمامي (feedforward) لمُشفِّر المهمة.
  • class_embed_dim (int، اختياري، القيمة الافتراضية 512) — أبعاد تضمينات الفئات.
  • class_distance_type (str، اختياري، القيمة الافتراضية "cosine") — نوع المسافة المقارنة بين الفئات المتوقعة وتضمينات الفئات المُسقطَة. يمكن أن يكون "cosine" أو "dot".
  • num_queries (int، اختياري، القيمة الافتراضية 900) — عدد الاستعلامات.
  • csp_activation (str, اختياري، القيمة الافتراضية "silu") — دالة التنشيط لشبكات Cross Stage Partial (CSP) في المُشفِّر.
  • conv_norm_activation (str، اختياري، القيمة الافتراضية "gelu") — دالة التنشيط لطبقات ConvNormLayer في المُشفِّر.
  • encoder_feedforward_activation (str، اختياري، القيمة الافتراضية "relu") — دالة التنشيط للشبكة الأمامية (feedforward) في المُشفِّر (encoder).
  • encoder_feedforward_dropout (float, اختياري، القيمة الافتراضية 0.0) — معدل dropout الذي يلي تفعيل شبكة feedforward في المُشفِّر.
  • encoder_dropout (Union[float, int]، اختياري، القيمة الافتراضية 0.0) — النسبة لجميع طبقات dropout.
  • hidden_expansion (int, اختياري، القيمة الافتراضية 1) — تمديد الطبقات المخفية في شبكات CSP داخل المُشفِّر.
  • encoder_hidden_dim (int، اختياري، القيمة الافتراضية 256) — أبعاد التمثيلات المخفية.
  • vision_features_channels (tuple(int)، اختياري، القيمة الافتراضية [256, 256, 256]) — قنوات ميزات الرؤية المُساقطة المستخدمة كمُدخلات لمُفكّك الترميز.
  • encoder_in_channels (List(int)، اختياري، القيمة الافتراضية [192, 384, 768]) — قنوات الإدخال للمُشفِّر.
  • encoder_projection_indices (List(int)، اختياري، القيمة الافتراضية [2]) — فهارس ميزات الإدخال التي تُسقطها كل طبقة.
  • encoder_attention_heads (int، اختياري، القيمة الافتراضية 8) — عدد رؤوس الانتباه لكل طبقة انتباه في مُشفِّر Transformer.
  • encoder_dim_feedforward (int, اختياري، القيمة الافتراضية 2048) — بعد البوابة الأمامية (feedforward) للمُشفِّر.
  • encoder_layers (int, اختياري، القيمة الافتراضية 1) — عدد الطبقات المخفية في مُشفِّر Transformer. سيستخدم نفس قيمة num_layers إذا لم يتم تعيينه.
  • positional_encoding_temperature (int، اختياري، القيمة الافتراضية 10000) — درجة حرارة الترميز الموضعي في المُشفِّر.
  • num_feature_levels (int، اختياري، القيمة الافتراضية 3) — عدد مستويات الميزات (feature levels) لوحدة الانتباه القابل للتشوه متعدد المقاييس (multi-scale deformable attention) في وحدة فك الترميز (decoder).
  • decoder_hidden_dim (int، اختياري، القيمة الافتراضية 256) — أبعاد التمثيلات المخفية.
  • decoder_num_heads (int, اختياري، القيمة الافتراضية 8) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer.
  • decoder_num_layers (int, اختياري، القيمة الافتراضية 6) — عدد الطبقات المخفية في مُفكِّك Transformer. سيُستخدم نفس قيمة num_layers إذا لم يتم ضبطه.
  • decoder_activation (str، اختياري، القيمة الافتراضية "relu") — دالة التنشيط الخاصة بفك الترميز.
  • decoder_dim_feedforward (int، اختياري، القيمة الافتراضية 2048) — بعد البوابة الأمامية (feedforward) الخاص بالمفكك.
  • decoder_num_points (int، اختياري، القيمة الافتراضية 4) — عدد النقاط المُستخرجة في وحدة الانتباه التشوّهي متعدد المقاييس في المُفكِّك.
  • decoder_dropout (float, اختياري، القيمة الافتراضية 0.0) — معدل الإسقاط (dropout) الخاص بفك الترميز.
  • eval_size (tuple[int, int], اختياري) — الارتفاع والعرض المستخدمان لحساب الارتفاع والعرض الفعليين لتضمينات المواقع بعد مراعاة الخطوة (انظر RTDetr).
  • learn_initial_query (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تعلّم الاستعلام الأولي.
  • cache_size (int، اختياري، القيمة الافتراضية 100) — حجم ذاكرة التخزين المؤقت لكتالوجات الفئات والأوامر.

هذه فئة الإعدادات المخزنة لإعدادات نموذج Omdet TurboModel. تُستخدم لاستحداث نموذج Omdet Turbo وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ omlab/omdet-turbo-swin-tiny-hf

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

أمثلة:

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

OmDetTurboProcessor

فئة transformers.OmDetTurboProcessor

< >

( image_processortokenizer )

المعاملات

  • image_processor (DetrImageProcessor) — معالج الصور هو مدخل إلزامي.
  • tokenizer (CLIPTokenizer) — مُجزِّئ الرموز هو مدخل إلزامي.

ينشئ OmDetTurboProcessor الذي يجمع معالج الصور ومعالج الرموز في معالج واحد.

يوفر OmDetTurboProcessor جميع وظائف DetrImageProcessor وCLIPTokenizer. راجع ~DetrImageProcessor و~CLIPTokenizer لمزيد من المعلومات.

__call__

< >

( 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

المعاملات

  • images (Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], اختياري) — الصورة التي سيتم معالجتها مسبقًا. يتوقع صورة واحدة أو دفعة من الصور بقيم بكسل تتراوح بين 0 و255. إذا كنت تمرر صورًا بقيم بكسل بين 0 و1، فاضبط do_rescale=False.
  • text (Union[list[str], list[list[str]]]، اختياري) — التسلسل أو الدفعة من التسلسلات المراد ترميزها. يمكن أن يكون كل تسلسل نصًا أو قائمة من النصوص (نص مُقسَّم مسبقًا إلى رموز). إذا مررت مدخلًا مُقسَّمًا مسبقًا إلى رموز، فاضبط is_split_into_words=True لتجنب الغموض مع المدخلات الدفعية.
  • task (str، kwargs، list[str]، أو TextInput، أو PreTokenizedInput، اختياري) — وصف مهمة الكشف التي سيتم ترميزها. إذا لم يُقدَّم، يتم توليد وصف مهمة افتراضي من مدخل text (مثلًا: “Detect {text}.”). يمكن أن يكون نصًا واحدًا، أو قائمة من النصوص (واحد لكل صورة)، أو مدخل مُرمَّز مسبقًا. يوجّه وصف المهمة النموذج حول الكائنات التي يجب كشفها في الصور.
  • return_tensors (str أو TensorType, اختياري) — إذا تم تعيينه، فسيُعاد تينسورات من إطار عمل محدد. القيم المقبولة هي:
    • 'pt': إرجاع كائنات torch.Tensor من PyTorch.
    • 'np': إرجاع كائنات np.ndarray من NumPy.
  • **kwargs (ProcessingKwargs، اختياري) — خيارات معالجة إضافية لكل نمط (نص، صور، مقاطع فيديو، صوت). تُدرج المعلمات الخاصة بالنموذج أعلاه؛ راجع فئة TypedDict للحصول على القائمة الكاملة للحجج المدعومة.

يعيد

~feature_extraction_utils.BatchFeature

  • data (dict، اختياري) — قاموس من القوائم/المصفوفات/الموترات التي تُعاد بواسطة طريقتي call/pad (مثل ‘input_values’، ‘attention_mask’، وما إلى ذلك).
  • tensor_type (Union[None, str, TensorType]، اختياري) — يمكنك تحديد tensor_type هنا لتحويل قوائم الأعداد الصحيحة إلى تينسورات PyTorch/Numpy عند التهيئة.
  • skip_tensor_conversion (list[str] أو set[str]، اختياري) — قائمة أو مجموعة من المفاتيح التي يجب ألا تُحوَّل إلى متجهات، حتى لو تم تحديد tensor_type.

post_process_grounded_object_detection

< >

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

المعاملات

  • outputs (OmDetTurboObjectDetectionOutput) — المخرجات الخام للنموذج.
  • text_labels (Union[list[str], list[list[str]]], اختياري) — أسماء الفئات المدخلة. إذا لم يُقدَّم، فسيتم تعيين text_labels إلى None في outputs.
  • threshold (float، القيمة الافتراضية 0.3) — إرجاع الاكتشافات التي تتجاوز درجة ثقتها هذا العتبة فقط.
  • nms_threshold (float، القيمة الافتراضية 0.5) — العتبة المستخدمة لكبح القيم القصوى غير القصوى للمربعات. القيمة ضمن [0, 1].
  • target_sizes (torch.Tensor أو list[tuple[int, int]]، اختياري) — مصفوفة (Tensor) بأبعاد (batch_size, 2) أو قائمة من الأزواج (tuple[int, int]) تحتوي على الحجم المستهدف (height, width) لكل صورة في الدفعة. إذا لم يتم ضبطه، فلن يتم تغيير حجم التنبؤات.
  • max_num_det (int، اختياري) — الحد الأقصى لعدد الاكتشافات التي يجب إرجاعها.

يعيد

list[Dict]

قائمة من القواميس، حيث يحتوي كل قاموس على الدرجات والفئات والمربعات الخاصة بصورة ضمن الدفعة كما تتنبأ بها النموذج.

يحوّل المخرجات الخام لـ OmDetTurboForObjectDetection إلى صناديق محيطة نهائية بصيغة (top_left_x, top_left_y, bottom_right_x, bottom_right_y) ويحصل على فئة النص المرتبطة بها.

OmDetTurboForObjectDetection

فئة transformers.OmDetTurboForObjectDetection

< >

( config: OmDetTurboConfig )

المعاملات

  • config (OmDetTurboConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج OmDetTurbo (المكوّن من عمود فقري للرؤية وعمود فقري للنص، وبهيكلة مشفّر-مفكّك) والذي يُخرج صناديق الإحاطة ودرجات الفئات لمهام مثل كشف COCO.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

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

المعاملات

  • pixel_values (torch.Tensor من الشكل (batch_size, num_channels, image_size, image_size)) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسلات باستخدام DetrImageProcessor. راجع DetrImageProcessor.call() للتفاصيل (OmDetTurboProcessor يستخدم DetrImageProcessor لمعالجة الصور).
  • classes_input_ids (torch.LongTensor بشكل (total_classes (>= batch_size), sequence_length)) — مؤشرات رموز تسلسل فئات الإدخال في مفردات نموذج اللغة. يمكن تقديم عدة فئات لكل مهمة، لذلك يتم تسطيح الفئات المُرمَّزة، ويتم تقديم بنية الفئات في classes_structure الحجج.

    يمكن الحصول على الفهارس باستخدام OmDetTurboProcessor. راجع OmDetTurboProcessor.call() للاطلاع على التفاصيل.

    ما هي معرّفات الإدخال؟

  • classes_attention_mask (torch.BoolTensor of shape (total_classes (>= batch_size), num_classes, sequence_length)) — قناع الانتباه (Attention mask) للفئات. هذا قناع ثنائي يحدد الرموز التي يجب الانتباه إليها، والرموز التي يجب عدم الانتباه إليها.
  • tasks_input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل مهام الإدخال في مفردات نموذج اللغة. يمكن الحصول على المؤشرات باستخدام OmDetTurboProcessor. راجع OmDetTurboProcessor.call() للتفاصيل. ما هي معرّفات الإدخال؟

    يمكن الحصول على الفهارس باستخدام OmDetTurboProcessor. راجع OmDetTurboProcessor.call() للاطلاع على التفاصيل.

    ما هي معرّفات الإدخال؟

  • tasks_attention_mask (torch.BoolTensor من الشكل (batch_size, sequence_length)) — قناع الانتباه للمهام. هذا قناع ثنائي يحدد الرموز التي يجب الانتباه إليها، والرموز التي يجب عدم الانتباه إليها.
  • classes_structure (torch.LongTensor من الشكل (batch_size)) — هيكل الفئات. يوضح هذا المصفوفة عدد الفئات لكل مهمة.
  • labels (list[Dict] بطول (batch_size,)، اختياري) — التسميات لحساب خسارة المطابقة الثنائية. قائمة من القواميس، يحتوي كل قاموس على الأقل على المفتاحين التاليين: ‘class_labels’ و ‘boxes’ (تسميات الفئات وصناديق الحدود لصورة في الدفعة على التوالي). يجب أن تكون تسميات الفئات نفسها torch.LongTensor بطول (number of bounding boxes in the image,) وأن تكون الصناديق torch.Tensor بشكل (number of bounding boxes in the image, 4).
  • output_attentions (bool، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • output_hidden_states (bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجع hidden_states ضمن الموترات المُرجعة للحصول على مزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

OmDetTurboObjectDetectionOutput أو tuple(torch.Tensor)

OmDetTurboObjectDetectionOutput أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعدادات (OmDetTurboConfig) والمدخلات.

تُعيد طريقة OmDetTurboForObjectDetection الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن Module بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

  • loss (torch.Tensor, اختياري) — قيمة الخسارة.
  • decoder_coord_logits (torch.Tensor من الشكل (batch_size, num_queries, 4)) — إحداثيات الكائنات المتوقعة.
  • decoder_class_logits (torch.Tensor من الشكل (batch_size, num_queries, num_classes)) — الفئة المتوقعة للكائنات.
  • init_reference_points (torch.Tensor من الشكل (batch_size, num_queries, 4)) — نقاط المرجع الأولية.
  • intermediate_reference_points (tuple[tuple[torch.Tensor]]، اختياري) — نقاط المرجع الوسيطة.
  • encoder_coord_logits (torch.Tensor من الشكل (batch_size, num_queries, 4)) — الإحداثيات المتوقعة للأجسام من المُشفِّر.
  • encoder_class_logits (tuple[torch.Tensor]، اختياري) — الفئة المتوقعة للأجسام من المُشفِّر.
  • encoder_extracted_states (torch.Tensor، اختياري) — الحالات المستخرجة من شبكة هرم الميزات (FPN) وشبكة تجميع المسارات (PAN) في المُشفِّر.
  • decoder_hidden_states (tuple[torch.Tensor]، اختياري) — مجموعة من torch.Tensor (واحدة لمخرجات التضمينات + واحدة لمخرجات كل طبقة) بأبعاد (batch_size, sequence_length, hidden_size). حالات المخفية للنموذج عند مخرجات كل طبقة بالإضافة إلى مخرجات التضمين الأولية.
  • decoder_attentions (tuple[tuple[torch.Tensor]], اختياري) — مجموعة من المجموعات من torch.Tensor (واحدة لكل طبقة من طبقات الانتباه) بأبعاد (batch_size, num_heads, sequence_length, sequence_length). أوزان الانتباه بعد تطبيق softmax على الانتباه، وتُستخدم لحساب المتوسط المرجح في رؤوس الانتباه الذاتي والانتباه المتقاطع والانتباه المتشوه متعدد المقاييس.
  • encoder_hidden_states (tuple[torch.Tensor]، اختياري) — مجموعة من torch.Tensor (واحدة لمخرجات التضمينات + واحدة لمخرجات كل طبقة) بأبعاد (batch_size, sequence_length, hidden_size). حالات النموذج المخفية عند مخرجات كل طبقة بالإضافة إلى مخرجات التضمين الأولية.
  • encoder_attentions (tuple[tuple[torch.Tensor]], اختياري) — مجموعة من المجموعات من torch.Tensor (واحدة لكل طبقة من أوزان الانتباه) بأبعاد (batch_size, num_heads, sequence_length, sequence_length). أوزان الانتباه بعد تطبيق softmax على الانتباه، وتُستخدم لحساب المتوسط المرجح في رؤوس الانتباه الذاتي والانتباه المتقاطع والانتباه التشوّهي متعدد المقاييس.
  • classes_structure (torch.LongTensor، اختياري) — عدد الفئات المستعلم عنها لكل صورة.

أمثلة:

>>> 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]
Update on GitHub