Transformers documentation
D-FINE
Эта модель была опубликована в HF papers 17.10.2024 и добавлена в Hugging Face Transformers 29.04.2025.
D-FINE
Обзор
Модель D-FINE была предложена в статье D-FINE: Redefine Regression Task in DETRs as Fine-grained Distribution Refinement авторами Yansong Peng, Hebei Li, Peixi Wu, Yueyi Zhang, Xiaoyan Sun, Feng Wu
Аннотация из статьи следующая:
Мы представляем D-FINE — мощный детектор объектов в реальном времени, который обеспечивает выдающуюся точность локализации за счёт переопределения задачи регрессии ограничивающих прямоугольников в моделях DETR. D-FINE включает два ключевых компонента: Fine-grained Distribution Refinement (FDR) и Global Optimal Localization Self-Distillation (GO-LSD). FDR трансформирует процесс регрессии от предсказания фиксированных координат к итеративному уточнению распределений вероятностей, обеспечивая детальное промежуточное представление, которое значительно повышает точность локализации. GO-LSD — это двунаправленная стратегия оптимизации, которая передаёт знания о локализации из уточнённых распределений в более мелкие слои посредством само-дистилляции, одновременно упрощая задачи предсказания остатков для более глубоких слоёв. Кроме того, D-FINE включает лёгкие оптимизации в вычислительно интенсивных модулях и операциях, достигая лучшего баланса между скоростью и точностью. В частности, D-FINE-L / X достигает 54,0% / 55,8% AP на наборе данных COCO при 124 / 78 FPS на GPU NVIDIA T4. При предварительном обучении на Objects365 D-FINE-L / X достигает 57,1% / 59,3% AP, превосходя все существующие детекторы в реальном времени. Более того, наш метод значительно повышает производительность широкого спектра моделей DETR до 5,3% AP при пренебрежимо малых дополнительных параметрах и затратах на обучение. Наш код и предварительно обученные модели: this https URL.
Эта модель была предоставлена VladOS95-cyber. Исходный код можно найти здесь.
Советы по использованию
import torch
from transformers import AutoImageProcessor, DFineForObjectDetection
from transformers.image_utils import load_image
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = load_image(url)
image_processor = AutoImageProcessor.from_pretrained("ustc-community/dfine_x_coco")
model = DFineForObjectDetection.from_pretrained("ustc-community/dfine_x_coco", 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=[(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.96 [344.49, 23.4, 639.84, 374.27]
cat: 0.96 [11.71, 53.52, 316.64, 472.33]
remote: 0.95 [40.46, 73.7, 175.62, 117.57]
sofa: 0.92 [0.59, 1.88, 640.25, 474.74]
remote: 0.89 [333.48, 77.04, 370.77, 187.3]DFineConfig
класс transformers.DFineConfig
< 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 | list[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.0weight_loss_fgl: float = 0.15weight_loss_ddf: float = 1.5eos_coefficient: float = 0.0001eval_idx: int = -1layer_scale: int | float = 1.0max_num_bins: int = 32reg_scale: float = 4.0depth_mult: float = 1.0top_prob_values: int = 4lqe_hidden_dim: int = 64lqe_layers: int = 2decoder_offset_scale: float = 0.5decoder_method: str = 'default'up: float = 0.5tie_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"и т. д. - eval_size (
tuple[int, int], необязательный) — Высота и ширина, используемые для вычисления эффективной высоты и ширины позиционных эмбеддингов с учётом шага. - 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 в функции потерь обнаружения объектов. - weight_loss_fgl (
float, необязательный, по умолчанию 0.15) — Относительный вес потерь точной локализации в общей потере обнаружения объектов. - weight_loss_ddf (
float, необязательный, по умолчанию 1.5) — Относительный вес потерь фокальной дистилляции с развязкой в функции потерь обнаружения объектов. - eos_coefficient (
float, необязательный, по умолчанию0.0001) — Относительный вес класса «нет объекта» в функции потерь обнаружения объектов. - eval_idx (
int, необязательный, по умолчанию -1) — Индекс слоя декодера, используемого для оценки. Если значение отрицательное, отсчет ведется с конца (например, -1 означает использование последнего слоя). Это позволяет выполнять раннее предсказание в стеке декодера, продолжая обучение более поздних слоев. - layer_scale (
float, необязательный, по умолчанию1.0) — Коэффициент масштабирования скрытого измерения в последующих слоях декодера. Используется для корректировки ёмкости модели после слоя оценки. - max_num_bins (
int, необязательный, по умолчанию 32) — Максимальное количество интервалов для уточнения ограничивающих прямоугольников с использованием распределения. Более высокие значения позволяют выполнять более точную локализацию, но увеличивают вычислительные затраты. - reg_scale (
float, необязательный, по умолчанию 4.0) — Коэффициент масштабирования для распределения регрессии. Управляет диапазоном и точностью процесса уточнения ограничивающего прямоугольника. - depth_mult (
float, необязательный, по умолчанию 1.0) — Множитель для количества блоков в слоях RepNCSPELAN4. Используется для масштабирования глубины модели с сохранением её архитектуры. - top_prob_values (
int, необязательный, по умолчанию 4) — Количество верхних значений вероятностей, которые следует учитывать из распределения каждого угла. - lqe_hidden_dim (
int, необязательный, по умолчанию 64) — Размер скрытого слоя для сети Location Quality Estimator (LQE). - lqe_layers (
int, необязательный, по умолчанию 2) — Количество слоев в MLP Location Quality Estimator. - decoder_offset_scale (
float, необязательный, по умолчанию 0.5) — Масштаб смещения, используемый в деформируемом внимании. - decoder_method (
str, необязательный, по умолчанию"default") — Метод, используемый для декодера:"default"или"discrete". - up (
float, необязательный, по умолчанию 0.5) — Управляет верхними границами функции взвешивания. - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели.
Это класс конфигурации для хранения конфигурации модели DFineModel. Он используется для создания модели D Fine в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации ustc-community/dfine-xlarge-coco
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
DFineModel
класс transformers.DFineModel
< source >( config: DFineConfig )
Параметры
- config (DFineConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод 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'> ) → DFineModelOutput 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).
Возвращает
DFineModelOutput или tuple(torch.Tensor)
DFineModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (None) и входных данных.
Метод forward класса DFineModel переопределяет специальный метод __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, DFineModel
>>> 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/DFine_r50vd")
>>> model = DFineModel.from_pretrained("PekingU/DFine_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]DFineForObjectDetection
класс transformers.DFineForObjectDetection
< source >( config: DFineConfig )
Параметры
- config (DFineConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод 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'> ) → DFineObjectDetectionOutput 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), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - 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).
Возвращает
DFineObjectDetectionOutput или tuple(torch.Tensor)
DFineObjectDetectionOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (None) и входных данных.
Метод forward класса DFineForObjectDetection переопределяет специальный метод __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] относительно размера каждого отдельного изображения в батче (игнорируя возможное выравнивание). Вы можете использовать~DFineImageProcessor.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, необязательный) — Дополнительный словарь для значений, связанных с процессом денуазинга
Пример:
>>> import torch
>>> from transformers.image_utils import load_image
>>> from transformers import AutoImageProcessor, DFineForObjectDetection
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = load_image(url)
>>> image_processor = AutoImageProcessor.from_pretrained("ustc-community/dfine-xlarge-coco")
>>> model = DFineForObjectDetection.from_pretrained("ustc-community/dfine-xlarge-coco")
>>> # 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)
>>> result = results[0] # first image in batch
>>> for score, label, box in zip(result["scores"], result["labels"], result["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 cat with confidence 0.958 at location [344.49, 23.4, 639.84, 374.27]
Detected cat with confidence 0.956 at location [11.71, 53.52, 316.64, 472.33]
Detected remote with confidence 0.947 at location [40.46, 73.7, 175.62, 117.57]
Detected sofa with confidence 0.918 at location [0.59, 1.88, 640.25, 474.74]