Transformers documentation
DAB-DETR
Эта модель была опубликована в HF papers 28.01.2022 и добавлена в Hugging Face Transformers 04.02.2025.
DAB-DETR
Обзор
Модель DAB-DETR была предложена в статье DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR авторами Shilong Liu, Feng Li, Hao Zhang, Xiao Yang, Xianbiao Qi, Hang Su, Jun Zhu, Lei Zhang. DAB-DETR — это улучшенный вариант Conditional DETR. Он использует динамически обновляемые якорные рамки для предоставления как опорной точки запроса (x, y), так и опорного размера якоря (w, h), что улучшает вычисления кросс-внимания. Этот новый подход достигает 45,7% AP при обучении в течение 50 эпох с использованием одной модели ResNet-50 в качестве базовой сети.
Аннотация из статьи следующая:
В данной статье мы предлагаем новый подход к формированию запросов с использованием динамических якорных окон для DETR (DEtection TRansformer) и даём более глубокое понимание роли запросов в DETR. Эта новая формулировка напрямую использует координаты окон в качестве запросов в декодерах Transformer и динамически обновляет их слой за слоем. Использование координат окон не только позволяет применять явные позиционные априорные знания для улучшения сходства между запросами и признаками и устранения проблемы медленной сходимости обучения в DETR, но и даёт возможность модулировать карту позиционного внимания с помощью информации о ширине и высоте окна. Такой дизайн делает очевидным, что запросы в DETR могут быть реализованы как выполнение мягкого ROI-пулинга слой за слоем в каскадном режиме. В результате это обеспечивает наилучшие показатели на бенчмарке MS-COCO среди моделей детектирования, подобных DETR, при одинаковых условиях, например, AP 45,7% с использованием ResNet50-DC5 в качестве базовой модели при обучении в течение 50 эпох. Мы также провели обширные эксперименты для подтверждения нашего анализа и проверки эффективности наших методов.
Эта модель была предоставлена пользователем davidhajdu. Исходный код можно найти здесь.
Как начать работу с моделью
Используйте код ниже, чтобы начать работу с моделью.
import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
model = AutoModelForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50", device_map="auto")
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
results = image_processor.post_process_object_detection(outputs, target_sizes=torch.tensor([image.size[::-1]]), threshold=0.3)
for result in results:
for score, label_id, box in zip(result["scores"], result["labels"], result["boxes"]):
score, label = score.item(), label_id.item()
box = [round(i, 2) for i in box.tolist()]
print(f"{model.config.id2label[label]}: {score:.2f} {box}")Это должно вывести
cat: 0.87 [14.7, 49.39, 320.52, 469.28] remote: 0.86 [41.08, 72.37, 173.39, 117.2] cat: 0.86 [344.45, 19.43, 639.85, 367.86] remote: 0.61 [334.27, 75.93, 367.92, 188.81] couch: 0.59 [-0.04, 1.34, 639.9, 477.09]
Существует ещё три способа инициализации модели DAB-DETR (в зависимости от ваших предпочтений):
Вариант 1: Инициализация DAB-DETR с предобученными весами для всей модели
from transformers import DabDetrForObjectDetection
model = DabDetrForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50", device_map="auto")Вариант 2: Инициализация DAB-DETR со случайными весами для Transformer, но с предобученными весами для backbone
from transformers import DabDetrConfig, DabDetrForObjectDetection
config = DabDetrConfig()
model = DabDetrForObjectDetection(config)Вариант 3: Инициализация DAB-DETR со случайными весами для backbone + Transformer
config = DabDetrConfig() model = DabDetrForObjectDetection(config)
DabDetrConfig
класс transformers.DabDetrConfig
< 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 = Truebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonenum_queries: int = 300encoder_layers: int = 6encoder_ffn_dim: int = 2048encoder_attention_heads: int = 8decoder_layers: int = 6decoder_ffn_dim: int = 2048decoder_attention_heads: int = 8activation_function: str = 'prelu'hidden_size: int = 256dropout: float | int = 0.1attention_dropout: float | int = 0.0activation_dropout: float | int = 0.0init_std: float = 0.02init_xavier_std: float = 1.0auxiliary_loss: bool = Falsedilation: bool = Falseclass_cost: int = 2bbox_cost: int = 5giou_cost: int = 2cls_loss_coefficient: int = 2bbox_loss_coefficient: int = 5giou_loss_coefficient: int = 2focal_alpha: float = 0.25temperature_height: int = 20temperature_width: int = 20query_dim: int = 4random_refpoints_xy: bool = Falsekeep_query_pos: bool = Falsenum_patterns: int = 0normalize_before: bool = Falsesine_position_embedding_scale: float | None = Noneinitializer_bias_prior_prob: float | None = Nonetie_word_embeddings: bool = True )
Параметры
- is_encoder_decoder (
bool, необязательный, по умолчаниюTrue) — Указывает, используется ли модель в качестве энкодера/декодера. - backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Конфигурация модели-бэкбона. - num_queries (
int, необязательный, по умолчанию 300) — Количество запросов объектов, то есть слотов для обнаружения. Это максимальное число объектов, которые DabDetrModel может обнаружить на одном изображении. Для COCO рекомендуется использовать 100 запросов. - encoder_layers (
int, необязательный, по умолчанию6) — Количество скрытых слоев в кодере Transformer. Если не задано, используется то же значение, что и уnum_layers. - encoder_ffn_dim (
int, необязательный, по умолчанию2048) — Размерность «промежуточного» (часто называемого feed-forward) слоя в энкодере. - encoder_attention_heads (
int, необязательный, по умолчанию8) — Количество голок внимания в каждом слое внимания в кодере Transformer. - decoder_layers (
int, необязательный, по умолчанию6) — Количество скрытых слоев в декодере Transformer. Если не задано, будет использовано то же значение, что и уnum_layers. - decoder_ffn_dim (
int, необязательный, по умолчанию2048) — Размерность «промежуточного» (часто называемого feed-forward) слоя в декодере. - decoder_attention_heads (
int, необязательный, по умолчанию8) — Количество головок внимания в каждом слое внимания декодера Transformer. - activation_function (
str, необязательный, по умолчаниюprelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - hidden_size (
int, необязательный, по умолчанию256) — Размерность скрытых представлений. - dropout (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент для всех слоёв dropout. - attention_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - activation_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для активаций внутри полносвязного слоя. - init_std (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов. - init_xavier_std (
float, необязательный, по умолчанию1.0) — Коэффициент масштабирования, используемый для инициализации кросс-внимания по методу Ксавье. - auxiliary_loss (
bool, необязательный, по умолчаниюFalse) — Использовать ли вспомогательные потери декодирования (потери на каждом слое декодера). - dilation (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли заменить stride на dilation в последнем свёрточном блоке (DC5). Поддерживается только приuse_timm_backbone=True. - class_cost (
int, необязательный, по умолчанию2) — Относительный вес ошибки классификации в стоимости венгерского сопоставления. - bbox_cost (
int, необязательный, по умолчанию5) — Относительный вес ошибки L1 для ограничивающих прямоугольников в стоимости венгерского сопоставления. - giou_cost (
int, необязательный, по умолчанию2) — Относительный вес потерь обобщённого IoU в стоимости венгерского сопоставления. - cls_loss_coefficient (
int, необязательный, по умолчанию2) — Относительный вес функции потерь классификации в функции потерь паноптической сегментации. - bbox_loss_coefficient (
int, необязательный, по умолчанию5) — Относительный вес потерь L1 для ограничивающих прямоугольников в потере панорамной сегментации. - giou_loss_coefficient (
int, необязательный, по умолчанию2) — Относительный вес функции потерь обобщённого IoU в функции потерь паноптической сегментации. - focal_alpha (
float, необязательный, по умолчанию0.25) — Параметр alpha в функции потерь focal loss. - temperature_height (
int, необязательный, по умолчанию 20) — Параметр температуры для настройки плоскостности позиционного внимания (HEIGHT) - temperature_width (
int, необязательный, по умолчанию 20) — Параметр температуры для настройки плоскостности позиционного внимания (WIDTH) - query_dim (
int, необязательный, по умолчанию 4) — Параметр размерности запроса определяет размер выходного вектора. - random_refpoints_xy (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли фиксировать координаты x и y якорных boxes с помощью случайной инициализации. - keep_query_pos (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли в каждом слое декодера конкатенировать проецированное позиционное вложение из object query с исходным query (key). - num_patterns (
int, необязательный, по умолчанию 0) — Количество встраиваний паттернов. - normalize_before (
bool, необязательный, по умолчаниюFalse) — Использовать ли слой нормализации в Encoder. - sine_position_embedding_scale (
float, необязательный, по умолчанию ‘None’) — Коэффициент масштабирования, применяемый к нормализованным позиционным кодировкам. - initializer_bias_prior_prob (
float, необязательный) — Априорная вероятность, используемая инициализатором смещения для инициализации смещений вenc_score_headиclass_embed. ЕслиNone,prior_probвычисляется какprior_prob = 1 / (num_labels + 1)при инициализации весов модели. - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели.
Это класс конфигурации для хранения настроек модели Dab DetrModel. Он используется для создания модели Dab Detr в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации IDEA-Research/dab-detr-resnet-50
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Примеры:
>>> from transformers import DabDetrConfig, DabDetrModel
>>> # Initializing a DAB-DETR IDEA-Research/dab-detr-resnet-50 style configuration
>>> configuration = DabDetrConfig()
>>> # Initializing a model (with random weights) from the IDEA-Research/dab-detr-resnet-50 style configuration
>>> model = DabDetrModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDabDetrModel
класс transformers.DabDetrModel
< source >( config: DabDetrConfig )
Параметры
- config (DabDetrConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель DAB-DETR без дополнительных модулей (состоящая из базовой сети и трансформера с кодировщиком-декодировщиком), выводящая необработанные скрытые состояния, промежуточные скрытые состояния, опорные точки и выходные координаты без какого-либо специализированного модуля на верхнем уровне.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DabDetrModelOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощьюimage_processor_class. Подробности см. вimage_processor_class.__call__(processor_classиспользуетimage_processor_classдля обработки изображений). - pixel_mask (
torch.LongTensorформы(batch_size, height, width), , необязательный) — Маска для исключения пикселей padding из вычислений внимания. Значения маски из диапазона[0, 1]:- 1 для пикселей, которые являются реальными (т. е. не замаскированы),
- 0 для пикселей, являющихся заполнением (т. е. замаскированных).
- decoder_attention_mask (
torch.Tensorформы(batch_size, num_queries), необязательный) — По умолчанию не используется. Может применяться для маскирования запросов объектов. - encoder_outputs (
torch.Tensor, необязательный) — Кортеж, состоящий из (last_hidden_state, необязательный:hidden_states, необязательный:attentions)last_hidden_stateформы(batch_size, sequence_length, hidden_size), необязательный) — последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании декодера. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Необязательно, вместо передачи сглаженной карты признаков (выход backbone + проекционного слоя), вы можете напрямую передать сглаженное представление изображения. - decoder_inputs_embeds (
torch.Tensorформы(batch_size, num_queries, hidden_size), необязательный) — Необязательно, вместо инициализации запросов тензором нулей, можно передать встроенное представление напрямую. - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
DabDetrModelOutput или tuple(torch.Tensor)
DabDetrModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (DabDetrConfig) и входных данных.
Метод forward модели DabDetrModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя декодера модели.Если используется
past_key_values, выводится только последнее скрытое состояние последовательностей формы(batch_size, 1, hidden_size).past_key_values (
EncoderDecoderCache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр EncoderDecoderCache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования.decoder_hidden_states (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили приconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода эмбеддингов, если у модели есть слой эмбеддингов, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния декодера на выходе каждого слоя, а также необязательные выходные значения начального эмбеддинга.
decoder_attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
cross_attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания кросс-внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
encoder_last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера модели.encoder_hidden_states (
tuple(torch.Tensor), необязательный, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — Кортежtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния энкодера на выходе каждого слоя, а также необязательные выходные значения начального эмбеддинга.
encoder_attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
intermediate_hidden_states (
torch.Tensorформы(config.decoder_layers, batch_size, sequence_length, hidden_size), необязательный, возвращается приconfig.auxiliary_loss=True) — Промежуточные активации декодера, то есть выход каждого слоя декодера, каждый из которых прошёл через layernorm.reference_points (
torch.Tensorформы(config.decoder_layers, batch_size, num_queries, 2 (anchor points))) — Точки отсчёта (точки отсчёта каждого слоя декодера).
Примеры:
>>> from transformers import AutoImageProcessor, AutoModel
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> model = AutoModel.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> # forward pass
>>> outputs = model(**inputs)
>>> # the last hidden states are the final query embeddings of the Transformer decoder
>>> # these are of shape (batch_size, num_queries, hidden_size)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 300, 256]DabDetrForObjectDetection
класс transformers.DabDetrForObjectDetection
< source >( config: DabDetrConfig )
Параметры
- config (DabDetrConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель DAB_DETR (состоящая из backbone и encoder-decoder Transformer) с головками для обнаружения объектов, предназначенная для таких задач, как COCO detection.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DabDetrObjectDetectionOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощьюimage_processor_class. Подробности см. вimage_processor_class.__call__(processor_classиспользуетimage_processor_classдля обработки изображений). - pixel_mask (
torch.LongTensorформы(batch_size, height, width), , необязательный) — Маска для исключения пикселей padding из вычислений внимания. Значения маски из диапазона[0, 1]:- 1 для пикселей, которые являются реальными (т. е. не замаскированы),
- 0 для пикселей, являющихся заполнением (т. е. замаскированных).
- decoder_attention_mask (
torch.Tensorформы(batch_size, num_queries), необязательный) — По умолчанию не используется. Может применяться для маскирования запросов объектов. - encoder_outputs (
torch.Tensor, необязательный) — Кортеж, состоящий из (last_hidden_state, необязательный:hidden_states, необязательный:attentions)last_hidden_stateформы(batch_size, sequence_length, hidden_size), необязательный) — последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании декодера. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Необязательно, вместо передачи сглаженной карты признаков (выход backbone + проекционного слоя), вы можете напрямую передать сглаженное представление изображения. - decoder_inputs_embeds (
torch.Tensorформы(batch_size, num_queries, hidden_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, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
DabDetrObjectDetectionOutput или tuple(torch.Tensor)
DabDetrObjectDetectionOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (DabDetrConfig) и входных данных.
Метод forward класса DabDetrForObjectDetection переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если предоставленыlabels) — Суммарная потеря, представляющая собой линейную комбинацию отрицательного логарифма правдоподобия (кросс-энтропии) для предсказания класса и потери для ограничивающих прямоугольников. Последняя определяется как линейная комбинация L1-потери и обобщенной масштабно-инвариантной потери IoU.loss_dict (
Dict, необязательный) — словарь, содержащий отдельные значения потерь. Полезен для логирования.logits (
torch.Tensorформы(batch_size, num_queries, num_classes + 1)) — Логиты классификации (включая no-object) для всех запросов.pred_boxes (
torch.Tensorформы(batch_size, num_queries, 4)) — Нормализованные координаты границ для всех запросов, представленные в виде (center_x, center_y, width, height). Эти значения нормализованы в диапазоне [0, 1] относительно размера каждого отдельного изображения в батче (игнорируя возможное выравнивание). Вы можете использовать~DabDetrImageProcessor.post_process_object_detection, чтобы получить ненормализованные границы.auxiliary_outputs (
list[Dict], необязательный) — Необязательный параметр, возвращается только при активации вспомогательных потерь (т. е. когдаconfig.auxiliary_lossустановлено вTrue) и при наличии меток. Это список словарей, содержащих два указанных выше ключа (logitsиpred_boxes) для каждого слоя декодера.last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя декодера модели.decoder_hidden_states (
tuple[torch.Tensor], необязательный, возвращается при передачеoutput_hidden_states=Trueили приconfig.output_hidden_states=True) — Кортежtorch.Tensor(один для вывода эмбеддингов, если у модели есть слой эмбеддингов, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния декодера на выходе каждого слоя, а также выходные значения начального слоя встраивания.
decoder_attentions (
tuple[torch.Tensor], необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
cross_attentions (
tuple[torch.Tensor], необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания кросс-внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
encoder_last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера модели.encoder_hidden_states (
tuple[torch.Tensor], необязательный, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — Кортежtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния кодировщика на выходе каждого слоя, а также выходные значения начального слоя встраиваний.
encoder_attentions (
tuple[torch.Tensor], необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> model = AutoModelForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
>>> outputs = model(**inputs)
>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([(image.height, image.width)])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.5, target_sizes=target_sizes)[0]
>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
... box = [round(i, 2) for i in box.tolist()]
... print(
... f"Detected {model.config.id2label[label.item()]} with confidence "
... f"{round(score.item(), 3)} at location {box}"
... )
Detected remote with confidence 0.833 at location [38.31, 72.1, 177.63, 118.45]
Detected cat with confidence 0.831 at location [9.2, 51.38, 321.13, 469.0]
Detected cat with confidence 0.804 at location [340.3, 16.85, 642.93, 370.95]
Detected remote with confidence 0.683 at location [334.48, 73.49, 366.37, 190.01]
Detected couch with confidence 0.535 at location [0.52, 1.19, 640.35, 475.1]