Transformers documentation
RT-DETRv2
Эта модель была опубликована в HF papers 24.07.2024 и добавлена в Hugging Face Transformers 06.02.2025.
RT-DETRv2
Обзор
Модель RT-DETRv2 была предложена в статье RT-DETRv2: Improved Baseline with Bag-of-Freebies for Real-Time Detection Transformer авторами Wenyu Lv, Yian Zhao, Qinyao Chang, Kui Huang, Guanzhong Wang, Yi Liu.
RT-DETRv2 дорабатывает RT-DETR, вводя селективное многомасштабное извлечение признаков, дискретный оператор выборки для более широкой совместимости при развертывании, а также улучшенные стратегии обучения, такие как динамическая аугментация данных и масштабно-адаптивные гиперпараметры. Эти изменения повышают гибкость и практичность, сохраняя при этом производительность в реальном времени.
Аннотация из статьи следующая:
В данном отчёте мы представляем RT-DETRv2 — улучшенную версию Real-Time DEtection TRansformer (RT-DETR). RT-DETRv2 основана на предыдущем детекторе реального времени, RT-DETR, и предлагает набор «бесплатных улучшений» (bag-of-freebies) для повышения гибкости и практичности, а также оптимизирует стратегию обучения для достижения более высоких показателей. Для повышения гибкости мы предлагаем задавать разное количество точек выборки для признаков на разных масштабах в деформируемом внимании, чтобы декодер мог выполнять селективное извлечение признаков с нескольких масштабов. Для повышения практичности мы предлагаем опциональный дискретный оператор выборки, заменяющий оператор grid_sample, который является специфичным для RT-DETR по сравнению с YOLOs. Это устраняет ограничения при развёртывании, обычно связанные с DETR. В части стратегии обучения мы предлагаем динамическое аугментирование данных и адаптивную настройку гиперпараметров в зависимости от масштаба, чтобы улучшить качество без потери скорости.
Эта модель была предоставлена пользователем jadechoghari. Исходный код можно найти здесь.
Советы по использованию
Эта вторая версия RT-DETR улучшает способ, которым декодер находит объекты на изображении.
- улучшенная выборка – корректирует смещения, чтобы модель обращала внимание на нужные области
- flexible attention – может использовать сглаженное (билинейное) или фиксированное (дискретное) сэмплирование
- оптимизированная обработка – улучшает способ, которым веса внимания смешивают информацию
Модель предназначена для использования с изображениями, изменёнными до размера 640x640 с помощью соответствующего ImageProcessor. Изменение размера до других значений, как правило, приводит к ухудшению качества.
import requests
import torch
from PIL import Image
from transformers import RTDetrImageProcessor, RTDetrV2ForObjectDetection
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image_processor = RTDetrImageProcessor.from_pretrained("PekingU/rtdetr_v2_r18vd")
model = RTDetrV2ForObjectDetection.from_pretrained("PekingU/rtdetr_v2_r18vd", 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.height, image.width)]), threshold=0.5)
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.97 [341.14, 25.11, 639.98, 372.89]
cat: 0.96 [12.78, 56.35, 317.67, 471.34]
remote: 0.95 [39.96, 73.12, 175.65, 117.44]
sofa: 0.86 [-0.11, 2.97, 639.89, 473.62]
sofa: 0.82 [-0.12, 1.78, 639.87, 473.52]
remote: 0.79 [333.65, 76.38, 370.69, 187.48]Ресурсы
Список официальных ресурсов Hugging Face и сообщества (отмечены 🌎), которые помогут вам начать работу с RT-DETRv2.
- См. также: Руководство по задаче обнаружения объектов.
- Ноутбуки для инференса и дообучения RT-DETRv2 на собственном наборе данных (🌎).
RTDetrV2Config
класс transformers.RTDetrV2Config
< 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 = Trueinitializer_range: float = 0.01initializer_bias_prior_prob: float | None = Nonelayer_norm_eps: float = 1e-05batch_norm_eps: float = 1e-05backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonefreeze_backbone_batch_norms: bool = Trueencoder_hidden_dim: int = 256encoder_in_channels: list[int] | tuple[int, ...] = (512, 1024, 2048)feat_strides: list[int] | tuple[int, ...] = (8, 16, 32)encoder_layers: int = 1encoder_ffn_dim: int = 1024encoder_attention_heads: int = 8dropout: float | int = 0.0activation_dropout: float | int = 0.0encode_proj_layers: list[int] | tuple[int, ...] = (2,)positional_encoding_temperature: int = 10000encoder_activation_function: str = 'gelu'activation_function: str = 'silu'eval_size: int | None = Nonenormalize_before: bool = Falsehidden_expansion: float = 1.0d_model: int = 256num_queries: int = 300decoder_in_channels: list[int] | tuple[int, ...] = (256, 256, 256)decoder_ffn_dim: int = 1024num_feature_levels: int = 3decoder_n_points: int = 4decoder_layers: int = 6decoder_attention_heads: int = 8decoder_activation_function: str = 'relu'attention_dropout: float | int = 0.0num_denoising: int = 100label_noise_ratio: float = 0.5box_noise_scale: float = 1.0learn_initial_query: bool = Falseanchor_image_size: int | list[int] | None = Nonewith_box_refine: bool = Truematcher_alpha: float = 0.25matcher_gamma: float = 2.0matcher_class_cost: float = 2.0matcher_bbox_cost: float = 5.0matcher_giou_cost: float = 2.0use_focal_loss: bool = Trueauxiliary_loss: bool = Truefocal_loss_alpha: float = 0.75focal_loss_gamma: float = 2.0weight_loss_vfl: float = 1.0weight_loss_bbox: float = 5.0weight_loss_giou: float = 2.0eos_coefficient: float = 0.0001decoder_n_levels: int = 3decoder_offset_scale: float = 0.5decoder_method: str = 'default'tie_word_embeddings: bool = True )
Параметры
- is_encoder_decoder (
bool, необязательный, по умолчаниюTrue) — Указывает, используется ли модель в качестве энкодера/декодера. - initializer_range (
float, необязательный, по умолчанию0.01) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - initializer_bias_prior_prob (
float, необязательный) — Априорная вероятность, используемая инициализатором смещения для инициализации смещений вenc_score_headиclass_embed. ЕслиNone,prior_probвычисляется какprior_prob = 1 / (num_labels + 1)при инициализации весов модели. - layer_norm_eps (
float, необязательный, по умолчанию1e-05) — Значение epsilon, используемое слоями нормализации. - batch_norm_eps (
float, необязательный, по умолчанию1e-05) — Значение epsilon, используемое слоями batch normalization. - backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Конфигурация модели-бэкбона. - freeze_backbone_batch_norms (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли заморозить слои batch normalization в backbone. - encoder_hidden_dim (
int, необязательный, по умолчанию256) — Размерность скрытых представлений. - encoder_in_channels (
list, необязательный, по умолчанию[512, 1024, 2048]) — Многоуровневые входные признаки для энкодера. - feat_strides (
list[int], необязательный, по умолчанию[8, 16, 32]) — Шаги, используемые в каждой feature map. - encoder_layers (
int, необязательный, по умолчанию1) — Количество скрытых слоев в кодере Transformer. Если не задано, используется то же значение, что и уnum_layers. - encoder_ffn_dim (
int, необязательный, по умолчанию1024) — Размерность «промежуточного» (часто называемого feed-forward) слоя в энкодере. - encoder_attention_heads (
int, необязательный, по умолчанию8) — Количество голок внимания в каждом слое внимания в кодере Transformer. - dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент для всех слоёв dropout. - activation_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для активаций внутри полносвязного слоя. - encode_proj_layers (
list[int], необязательный, по умолчанию[2]) — Индексы проецируемых слоёв, используемых в кодировщике. - positional_encoding_temperature (
int, необязательный, по умолчанию 10000) — Параметр температуры, используемый для создания позиционных кодировок. - encoder_activation_function (
str, необязательный, по умолчанию"gelu") — Нелинейная функция активации (функция или строка) в кодере и пулере. Если передана строка, поддерживаются значения"gelu","relu","silu"и"gelu_new". - activation_function (
str, необязательный, по умолчанию"silu") — Нелинейная функция активации (функция или строка) в общем слое. Если передана строка, поддерживаются"gelu","relu","silu"и"gelu_new". - eval_size (
tuple[int, int], необязательный) — Высота и ширина, используемые для вычисления эффективной высоты и ширины позиционных эмбеддингов с учетом шага (stride). - normalize_before (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли применять нормализацию слоя в слое кодировщика трансформера перед модулями само-внимания и последовательной обработки. - hidden_expansion (
float, необязательный, по умолчанию 1.0) — Коэффициент расширения для увеличения размерности RepVGGBlock и CSPRepLayer. - d_model (
int, необязательный, по умолчанию256) — Размер слоев кодировщика и пулера. - num_queries (
int, необязательный, по умолчанию 300) — Количество запросов объектов. - decoder_in_channels (
list, необязательный, по умолчанию[256, 256, 256]) — Размерность многоуровневых признаков для декодера - decoder_ffn_dim (
int, необязательный, по умолчанию1024) — Размерность «промежуточного» (часто называемого feed-forward) слоя в декодере. - num_feature_levels (
int, необязательный, по умолчанию 3) — Количество уровней входных признаков. - decoder_n_points (
int, необязательный, по умолчанию 4) — Количество выбранных ключей на каждом уровне признаков для каждой головы внимания в декодере. - decoder_layers (
int, необязательный, по умолчанию6) — Количество скрытых слоев в декодере Transformer. Если не задано, будет использовано то же значение, что и уnum_layers. - decoder_attention_heads (
int, необязательный, по умолчанию8) — Количество головок внимания в каждом слое внимания декодера Transformer. - decoder_activation_function (
str, необязательный, по умолчанию"relu") — Нелинейная функция активации (функция или строка) в декодере. Если передана строка, поддерживаются"gelu","relu","silu"и"gelu_new". - attention_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - num_denoising (
int, необязательный, по умолчанию 100) — Общее количество задач или запросов денойзинга, используемых для контрастивного денойзинга. - label_noise_ratio (
float, необязательный, по умолчанию 0.5) — Доля меток для денойзинга, к которым следует добавить случайный шум. - box_noise_scale (
float, необязательный, по умолчанию 1.0) — Масштаб или величина шума, добавляемого к ограничивающим рамкам. - learn_initial_query (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли обучать начальные эмбеддинги запросов для декодера в процессе обучения - anchor_image_size (
tuple[int, int], optional) — Высота и ширина входного изображения, используемые при оценке для генерации якорных ограничивающих прямоугольников. Если значение равно None, применяется автоматическая генерация якорей. - with_box_refine (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли применять итеративное уточнение ограничивающих прямоугольников, при котором каждый слой декодера уточняет прямоугольники на основе предсказаний предыдущего слоя. - matcher_alpha (
float, необязательный, по умолчанию 0.25) — Параметр alpha, используемый Hungarian Matcher. - matcher_gamma (
float, необязательный, по умолчанию 2.0) — Параметр gamma, используемый Hungarian Matcher. - matcher_class_cost (
float, необязательный, по умолчанию 2.0) — Относительный вес потерь по классам, используемый Hungarian Matcher. - matcher_bbox_cost (
float, необязательный, по умолчанию 5.0) — Относительный вес потерь по ограничивающим рамкам, используемый Hungarian Matcher. - matcher_giou_cost (
float, необязательный, по умолчанию 2.0) — Относительный вес потери giou, используемой Hungarian Matcher. - use_focal_loss (
bool, необязательный, по умолчаниюTrue) — Параметр, указывающий, следует ли использовать focal loss. - auxiliary_loss (
bool, необязательный, по умолчаниюTrue) — Использовать ли вспомогательные потери декодирования (потери на каждом слое декодера). - focal_loss_alpha (
float, необязательный, по умолчанию 0.75) — Параметр alpha, используемый для вычисления focal loss. - focal_loss_gamma (
float, необязательный, по умолчанию 2.0) — Параметр gamma, используемый для вычисления focal loss. - weight_loss_vfl (
float, необязательный, по умолчанию 1.0) — Относительный вес varifocal loss в функции потерь обнаружения объектов. - weight_loss_bbox (
float, необязательный, по умолчанию 5.0) — Относительный вес потерь L1 для ограничивающих прямоугольников в функции потерь обнаружения объектов. - weight_loss_giou (
float, необязательный, по умолчанию 2.0) — Относительный вес функции потерь обобщённого IoU в функции потерь обнаружения объектов. - eos_coefficient (
float, необязательный, по умолчанию0.0001) — Относительный вес класса «нет объекта» в функции потерь обнаружения объектов. - decoder_n_levels (
int, необязательный, по умолчанию 3) — Количество уровней признаков, используемых декодером. - decoder_offset_scale (
float, необязательный, по умолчанию 0.5) — Коэффициент масштабирования, применяемый к смещениям внимания в декодере. - decoder_method (
str, необязательный, по умолчанию"default") — Метод, используемый для декодера:"default"или"discrete". - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели.
Это класс конфигурации для хранения настроек модели RTDetrV2Model. Он используется для создания модели Rt Detr V2 в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации PekingU/rtdetr_r18vd
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Примеры:
>>> from transformers import RTDetrV2Config, RTDetrV2Model
>>> # Initializing a RT-DETR configuration
>>> configuration = RTDetrV2Config()
>>> # Initializing a model (with random weights) from the configuration
>>> model = RTDetrV2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configRTDetrV2Model
класс transformers.RTDetrV2Model
< source >( config: RTDetrV2Config )
Параметры
- config (RTDetrV2Config) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель RT-DETR (состоящая из backbone и encoder-decoder), выводящая необработанные скрытые состояния без какого-либо head сверху.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → RTDetrV2ModelOutput 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 для пикселей, являющихся заполнением (т. е. замаскированных).
- 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 + проекционного слоя), вы можете напрямую передать сглаженное представление изображения. - 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).
Возвращает
RTDetrV2ModelOutput или tuple(torch.Tensor)
RTDetrV2ModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (None) и входных данных.
Метод forward модели RTDetrV2Model переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, num_queries, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя декодера модели.intermediate_hidden_states (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, hidden_size)) — Стек промежуточных скрытых состояний (выход каждого слоя декодера).intermediate_logits (
torch.Tensorформы(batch_size, config.decoder_layers, sequence_length, config.num_labels)) — Стек промежуточных логитов (логиты каждого слоя декодера).intermediate_reference_points (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, 4)) — Стек промежуточных опорных точек (опорные точки каждого слоя декодера).intermediate_predicted_corners (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, 4)) — Стек промежуточных предсказанных углов (предсказанные углы каждого слоя декодера).initial_reference_points (
torch.Tensorформы(batch_size, num_queries, 4)) — Начальные опорные точки, используемые для первого слоя декодера.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 внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
init_reference_points (
torch.Tensorформы(batch_size, num_queries, 4)) — Начальные опорные точки, передаваемые через декодер Transformer.enc_topk_logits (
torch.Tensorформы(batch_size, sequence_length, config.num_labels)) — Оценки предсказанных ограничивающих прямоугольников, где верхние по оценкеconfig.two_stage_num_proposalsограничивающие прямоугольники выбираются в качестве региональных предложений на этапе кодировщика. Выход бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).enc_topk_bboxes (
torch.Tensorформы(batch_size, sequence_length, 4)) — Логиты координат предсказанных ограничивающих прямоугольников на этапе кодирования.enc_outputs_class (
torch.Tensorформы(batch_size, sequence_length, config.num_labels), необязательный, возвращается, еслиconfig.with_box_refine=Trueиconfig.two_stage=True) — Оценки предсказанных ограничивающих прямоугольников, где верхниеconfig.two_stage_num_proposalsпрямоугольников с наивысшими оценками выбираются в качестве региональных предложений на первом этапе. Результат бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).enc_outputs_coord_logits (
torch.Tensorформы(batch_size, sequence_length, 4), необязательный, возвращается, еслиconfig.with_box_refine=Trueиconfig.two_stage=True) — Логиты координат предсказанных ограничивающих прямоугольников на первом этапе.denoising_meta_values (
dict, необязательный) — Дополнительный словарь для значений, связанных с процессом денойзинга.
Примеры:
>>> from transformers import AutoImageProcessor, RTDetrV2Model
>>> 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("PekingU/RTDetrV2_r50vd")
>>> model = RTDetrV2Model.from_pretrained("PekingU/RTDetrV2_r50vd")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 300, 256]RTDetrV2ForObjectDetection
класс transformers.RTDetrV2ForObjectDetection
< source >( config: RTDetrV2Config )
Параметры
- config (RTDetrV2Config) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель RT-DETR (состоящая из backbone и encoder-decoder), которая выдает bounding boxes и logits для последующей декодировки в scores и classes.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → RTDetrV2ObjectDetectionOutput 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 для пикселей, являющихся заполнением (т. е. замаскированных).
- 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 + проекционного слоя), вы можете напрямую передать сглаженное представление изображения. - 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).
Возвращает
RTDetrV2ObjectDetectionOutput или tuple(torch.Tensor)
RTDetrV2ObjectDetectionOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (None) и входных данных.
Метод forward класса RTDetrV2ForObjectDetection переопределяет специальный метод __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] относительно размера каждого отдельного изображения в батче (игнорируя возможное выравнивание). Вы можете использовать~RTDetrV2ImageProcessor.post_process_object_detection, чтобы получить ненормализованные (абсолютные) границы объектов.auxiliary_outputs (
list[Dict], необязательный) — Необязательный параметр, возвращается только при активации вспомогательных потерь (т. е. когдаconfig.auxiliary_lossустановлено вTrue) и при наличии меток. Это список словарей, содержащих два указанных выше ключа (logitsиpred_boxes) для каждого слоя декодера.last_hidden_state (
torch.Tensorформы(batch_size, num_queries, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя декодера модели.intermediate_hidden_states (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, hidden_size)) — Стек промежуточных скрытых состояний (выход каждого слоя декодера).intermediate_logits (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, config.num_labels)) — Стек промежуточных логитов (логиты каждого слоя декодера).intermediate_reference_points (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, 4)) — Стек промежуточных опорных точек (опорные точки каждого слоя декодера).intermediate_predicted_corners (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, 4)) — Стек промежуточных предсказанных углов (предсказанные углы каждого слоя декодера).initial_reference_points (
torch.Tensorформы(batch_size, config.decoder_layers, num_queries, 4)) — Стек начальных опорных точек (начальные опорные точки каждого слоя декодера).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 внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
init_reference_points (
torch.Tensorформы(batch_size, num_queries, 4)) — Начальные опорные точки, передаваемые через декодер Transformer.enc_topk_logits (
torch.Tensorформы(batch_size, sequence_length, config.num_labels), необязательный, возвращается, еслиconfig.with_box_refine=Trueиconfig.two_stage=True) — Логиты координат предсказанных ограничивающих прямоугольников в энкодере.enc_topk_bboxes (
torch.Tensorформы(batch_size, sequence_length, 4), необязательный, возвращается, еслиconfig.with_box_refine=Trueиconfig.two_stage=True) — Логиты координат предсказанных ограничивающих прямоугольников в энкодере.enc_outputs_class (
torch.Tensorформы(batch_size, sequence_length, config.num_labels), необязательный, возвращается, еслиconfig.with_box_refine=Trueиconfig.two_stage=True) — Оценки предсказанных ограничивающих прямоугольников, где верхниеconfig.two_stage_num_proposalsпрямоугольников с наивысшими оценками выбираются в качестве региональных предложений на первом этапе. Результат бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).enc_outputs_coord_logits (
torch.Tensorформы(batch_size, sequence_length, 4), необязательный, возвращается, еслиconfig.with_box_refine=Trueиconfig.two_stage=True) — Логиты координат предсказанных ограничивающих прямоугольников на первом этапе.denoising_meta_values (
dict, необязательный) — Дополнительный словарь для значений, связанных с процессом денуазинга
Примеры:
>>> from transformers import RTDetrV2ImageProcessor, RTDetrV2ForObjectDetection
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> import torch
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = RTDetrV2ImageProcessor.from_pretrained("PekingU/RTDetrV2_r50vd")
>>> model = RTDetrV2ForObjectDetection.from_pretrained("PekingU/RTDetrV2_r50vd")
>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> # forward pass
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 300, 80]
>>> boxes = outputs.pred_boxes
>>> list(boxes.shape)
[1, 300, 4]
>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([image.size[::-1]])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.9, 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 sofa with confidence 0.97 at location [0.14, 0.38, 640.13, 476.21]
Detected cat with confidence 0.96 at location [343.38, 24.28, 640.14, 371.5]
Detected cat with confidence 0.958 at location [13.23, 54.18, 318.98, 472.22]
Detected remote with confidence 0.951 at location [40.11, 73.44, 175.96, 118.48]
Detected remote with confidence 0.924 at location [333.73, 76.58, 369.97, 186.99]