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 papers 11.03.2024 и добавлена в Hugging Face Transformers 25.09.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 FPS и 53.4 AP на COCO zero-shot.

Аннотация из статьи следующая:

Детекторы объектов на основе трансформеров, работающие «от входа до выхода» (DETR), продемонстрировали выдающуюся производительность как в задачах детектирования объектов с фиксированным набором классов, так и в задачах детектирования объектов с открытым словарем (OVD) благодаря интеграции языковых модальностей. Однако высокие вычислительные требования этих моделей препятствуют их практическому применению в сценариях детектирования объектов в реальном времени (OD). В данной статье мы подробно рассматриваем ограничения двух ведущих моделей в бенчмарке OVDEval — OmDet и Grounding-DINO — и представляем OmDet-Turbo. Эта новая модель OVD в реальном времени на основе трансформеров включает инновационный модуль Efficient Fusion Head (EFH), разработанный для устранения узких мест, наблюдаемых в OmDet и Grounding-DINO. Примечательно, что OmDet-Turbo-Base достигает 100,2 кадров в секунду (FPS) при использовании TensorRT и техник кэширования языковых признаков. Примечательно, что в сценариях zero-shot на наборах данных 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 по сравнению с другими моделями zero-shot обнаружения объектов, такими как Grounding DINO, является структура с разделёнными эмбеддингами классов и промптов, которая позволяет кэшировать текстовые эмбеддинги. Это означает, что модели в качестве входных данных необходимы и классы, и задача, где classes — это список объектов, которые мы хотим обнаружить, а task — это привязанный текст, используемый для управления обнаружением объектов произвольного словаря. Такой подход ограничивает область применения обнаружения объектов произвольного словаря и ускоряет процесс декодирования.

OmDetTurboProcessor используется для подготовки тройки «классы, задача, изображение». Входной параметр задачи является необязательным; если он не указан, по умолчанию используется значение "Detect [class1], [class2], [class3], ...". Для обработки результатов модели можно использовать функцию post_process_grounded_object_detection из OmDetTurboProcessor. Примечательно, что эта функция принимает на вход список классов, поскольку, в отличие от других zero-shot моделей обнаружения объектов, разделение эмбеддингов классов и задач означает, что на этапе постобработки не требуется декодирование предсказанных эмбеддингов классов: предсказанные классы можно напрямую сопоставить с переданными на вход.

Пример использования

Инференс для одного изображения

Вот как загрузить модель и подготовить входные данные для выполнения детекции объектов в режиме zero-shot на одном изображении:

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) — Значение epsilon, используемое слоями нормализации.
  • batch_norm_eps (float, необязательный, по умолчанию 1e-05) — Значение epsilon, используемое слоями batch normalization.
  • 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) — Размерность полносвязного слоя для кодировщика задачи.
  • 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") — Функция активации для полносвязной сети энкодера.
  • 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) — Размерность полносвязного слоя в кодере.
  • encoder_layers (int, необязательный, по умолчанию 1) — Количество скрытых слоев в кодере Transformer. Если не задано, используется то же значение, что и у num_layers.
  • positional_encoding_temperature (int, необязательный, по умолчанию 10000) — Температура позиционного кодирования в энкодере.
  • num_feature_levels (int, необязательный, по умолчанию 3) — Количество уровней признаков для модуля многомасштабного деформируемого внимания в декодере.
  • 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) — Размерность полносвязного слоя в декодере.
  • 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, optional) — Описание задачи детектирования для кодирования. Если не указано, описание задачи по умолчанию генерируется из входных данных text (например, «Detect {text}»). Может быть строкой, списком строк (по одной на изображение) или предтокенизированным входом. Описание задачи указывает модели, какие объекты необходимо детектировать на изображениях.
  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры конкретного фреймворка. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты NumPy np.ndarray.
  • **kwargs (ProcessingKwargs, optional) — Дополнительные параметры обработки для каждой модальности (текст, изображения, видео, аудио). Специфичные для модели параметры перечислены выше; полный список поддерживаемых аргументов см. в классе 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) — Порог для подавления не-максимумов (non-maximum suppression) по рамкам. Значение в диапазоне [0, 1].
  • target_sizes (torch.Tensor or list[tuple[int, int]], необязательный) — Тензор формы (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: FloatTensorclasses_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.FloatTensor)

Параметры

  • pixel_values (torch.FloatTensor формы (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 формы (total_classes (>= batch_size), num_classes, sequence_length)) — Маска внимания для классов. Это бинарная маска, указывающая, к каким токенам следует обращать внимание, а к каким — нет.
  • tasks_input_ids (torch.LongTensor формы (batch_size, sequence_length)) — Индексы токенов входной последовательности задач в словаре языковой модели.

    Индексы можно получить с помощью 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.FloatTensor формы (number of bounding boxes in the image, 4).
  • output_attentions (bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описании attentions в разделе возвращаемых тензоров.
  • output_hidden_states (bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описании hidden_states среди возвращаемых тензоров.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

OmDetTurboObjectDetectionOutput или tuple(torch.FloatTensor)

OmDetTurboObjectDetectionOutput или кортеж из torch.FloatTensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (OmDetTurboConfig) и входных данных.

Метод forward класса OmDetTurboForObjectDetection переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • loss (torch.FloatTensor, необязательный) — Значение функции потерь.
  • decoder_coord_logits (torch.FloatTensor формы (batch_size, num_queries, 4)) — Предсказанные координатные логиты объектов.
  • decoder_class_logits (torch.FloatTensor формы (batch_size, num_queries, num_classes)) — Предсказанный класс объектов.
  • init_reference_points (torch.FloatTensor формы (batch_size, num_queries, 4)) — Начальные опорные точки.
  • intermediate_reference_points (tuple[tuple[torch.FloatTensor]], необязательный) — Промежуточные опорные точки.
  • encoder_coord_logits (torch.FloatTensor формы (batch_size, num_queries, 4)) — Предсказанные координаты объектов, полученные из энкодера.
  • encoder_class_logits (tuple[torch.FloatTensor], необязательный) — Предсказанный класс объектов, полученный из энкодера.
  • encoder_extracted_states (torch.FloatTensor, необязательный) — Извлечённые состояния из Feature Pyramid Network (FPN) и Path Aggregation Network (PAN) энкодера.
  • decoder_hidden_states (tuple[torch.FloatTensor], необязательный) — Кортеж torch.FloatTensor (один для вывода эмбеддингов + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size). Скрытые состояния модели на выходе каждого слоя, а также начальные выводы эмбеддингов.
  • decoder_attentions (tuple[tuple[torch.FloatTensor]], необязательный) — Кортеж кортежей torch.FloatTensor (по одному для внимания каждого слоя) формы (batch_size, num_heads, sequence_length, sequence_length). Веса внимания после softmax-функции внимания, используемые для вычисления взвешенного среднего в головах self-attention, cross-attention и multi-scale deformable attention.
  • encoder_hidden_states (tuple[torch.FloatTensor], необязательный) — Кортеж torch.FloatTensor (один для вывода эмбеддингов + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size). Скрытые состояния модели на выходе каждого слоя, а также начальные выводы эмбеддингов.
  • encoder_attentions (tuple[tuple[torch.FloatTensor]], необязательный) — Кортеж кортежей torch.FloatTensor (по одному для внимания каждого слоя) формы (batch_size, num_heads, sequence_length, sequence_length). Веса внимания после softmax-функции внимания, используемые для вычисления взвешенного среднего в головах self-attention, cross-attention и multi-scale deformable attention.
  • classes_structure (torch.LongTensor, optional) — Количество запрашиваемых классов для каждого изображения.

Примеры:

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