Transformers 文件
DAB-DETR
並獲得增強的文件體驗
開始使用
DAB-DETR
概述
DAB-DETR 模型由 Shilong Liu、Feng Li、Hao Zhang、Xiao Yang、Xianbiao Qi、Hang Su、Jun Zhu 和 Lei Zhang 在DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR中提出。DAB-DETR 是 Conditional DETR 的增強變體。它利用動態更新的錨框提供參考查詢點 (x, y) 和參考錨框大小 (w, h),從而改善交叉注意力計算。這種新方法在使用單個 ResNet-50 模型作為骨幹網路進行 50 個 epoch 的訓練後,達到了 45.7% 的 AP。

論文摘要如下:
本文提出了一種使用動態錨框進行 DETR(DEtection TRansformer)的新型查詢公式,並對 DETR 中查詢的作用提供了更深入的理解。這種新公式直接使用框座標作為 Transformer 解碼器中的查詢,並逐層動態更新它們。使用框座標不僅有助於使用明確的位置先驗來改善查詢到特徵的相似性,消除 DETR 中訓練收斂緩慢的問題,還允許我們使用框的寬度和高度資訊來調製位置注意力圖。這種設計清楚地表明,DETR 中的查詢可以實現為以級聯方式逐層執行軟 ROI 池化。因此,在相同設定下,例如使用 ResNet50-DC5 作為骨幹網路訓練 50 個 epoch 達到 45.7% 的 AP,它在 MS-COCO 基準測試中在 DETR 類檢測模型中取得了最佳效能。我們還進行了大量實驗來證實我們的分析並驗證我們方法的有效性。
此模型由davidhajdu貢獻。原始程式碼可在此處找到。
如何開始使用模型
使用以下程式碼開始使用模型。
import torch
import requests
from PIL import Image
from transformers import AutoModelForObjectDetection, AutoImageProcessor
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")
inputs = image_processor(images=image, return_tensors="pt")
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")
選項 2:使用 Transformer 的隨機初始化權重,但使用骨幹網路的預訓練權重例項化 DAB-DETR
>>> from transformers import DabDetrConfig, DabDetrForObjectDetection
>>> config = DabDetrConfig()
>>> model = DabDetrForObjectDetection(config)
選項 3:使用骨幹網路 + Transformer 的隨機初始化權重例項化 DAB-DETR
>>> config = DabDetrConfig(use_pretrained_backbone=False)
>>> model = DabDetrForObjectDetection(config)
DabDetrConfig
class transformers.DabDetrConfig
< 來源 >( use_timm_backbone = True backbone_config = None backbone = 'resnet50' use_pretrained_backbone = True backbone_kwargs = None num_queries = 300 encoder_layers = 6 encoder_ffn_dim = 2048 encoder_attention_heads = 8 decoder_layers = 6 decoder_ffn_dim = 2048 decoder_attention_heads = 8 is_encoder_decoder = True activation_function = 'prelu' hidden_size = 256 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 init_std = 0.02 init_xavier_std = 1.0 auxiliary_loss = False dilation = False class_cost = 2 bbox_cost = 5 giou_cost = 2 cls_loss_coefficient = 2 bbox_loss_coefficient = 5 giou_loss_coefficient = 2 focal_alpha = 0.25 temperature_height = 20 temperature_width = 20 query_dim = 4 random_refpoints_xy = False keep_query_pos = False num_patterns = 0 normalize_before = False sine_position_embedding_scale = None **kwargs )
引數
- use_timm_backbone (
bool
, optional, 預設為True
) — 是否使用timm
庫作為骨幹網路。如果設定為False
,將使用 AutoBackbone API。 - backbone_config (
PretrainedConfig
或dict
, optional) — 骨幹模型的配置。僅在use_timm_backbone
設定為False
時使用,預設為ResNetConfig()
。 - backbone (
str
, optional, 預設為"resnet50"
) — 當backbone_config
為None
時使用的骨幹網路名稱。如果use_pretrained_backbone
為True
,這將從 timm 或 transformers 庫載入相應的預訓練權重。如果use_pretrained_backbone
為False
,這將載入骨幹網路的配置並使用它來初始化具有隨機權重的骨幹網路。 - use_pretrained_backbone (
bool
, optional, 預設為True
) — 是否使用骨幹網路的預訓練權重。 - backbone_kwargs (
dict
, optional) — 從檢查點載入時要傳遞給 AutoBackbone 的關鍵字引數,例如{'out_indices': (0, 1, 2, 3)}
。如果設定了backbone_config
,則不能指定。 - num_queries (
int
, optional, 預設為 300) — 物件查詢的數量,即檢測槽位。這是 DabDetrModel 可以在單張影像中檢測到的最大物件數量。對於 COCO,我們建議使用 100 個查詢。 - encoder_layers (
int
, optional, 預設為 6) — 編碼器層數。 - encoder_ffn_dim (
int
, optional, 預設為 2048) — 編碼器中“中間”(通常稱為前饋)層的維度。 - encoder_attention_heads (
int
, optional, 預設為 8) — Transformer 編碼器中每個注意力層的注意力頭數量。 - decoder_layers (
int
, optional, 預設為 6) — 解碼器層數。 - decoder_ffn_dim (
int
, optional, 預設為 2048) — 解碼器中“中間”(通常稱為前饋)層的維度。 - decoder_attention_heads (
int
, optional, 預設為 8) — Transformer 解碼器中每個注意力層的注意力頭數量。 - is_encoder_decoder (
bool
, optional, 預設為True
) — 指示 Transformer 模型架構是否為編碼器-解碼器。 - activation_function (
str
或function
, optional, 預設為"prelu"
) — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果為字串,支援"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - hidden_size (
int
, optional, 預設為 256) — 此引數是通用維度引數,定義了編碼器層和解碼器層中的投影引數等元件的維度。 - dropout (
float
, optional, 預設為 0.1) — 嵌入、編碼器和池化器中所有全連線層的 dropout 機率。 - attention_dropout (
float
, optional, 預設為 0.0) — 注意力機率的 dropout 比率。 - activation_dropout (
float
, optional, 預設為 0.0) — 全連線層內部啟用的 dropout 比率。 - init_std (
float
, optional, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - init_xavier_std (
float
, optional, 預設為 1.0) — HM 注意力模組中用於 Xavier 初始化增益的比例因子。 - auxiliary_loss (
bool
, optional, 預設為False
) — 是否使用輔助解碼損失(每個解碼器層的損失)。 - dilation (
bool
, optional, 預設為False
) — 是否在最後一個卷積塊 (DC5) 中用空洞卷積代替步幅卷積。僅當use_timm_backbone
=True
時支援。 - class_cost (
float
, optional, 預設為 2) — 匈牙利匹配成本中分類誤差的相對權重。 - bbox_cost (
float
, optional, 預設為 5) — 匈牙利匹配成本中邊界框座標 L1 誤差的相對權重。 - giou_cost (
float
, optional, 預設為 2) — 匈牙利匹配成本中邊界框廣義 IoU 損失的相對權重。 - cls_loss_coefficient (
float
, optional, 預設為 2) — 物件檢測損失函式中分類損失的相對權重。 - bbox_loss_coefficient (
float
, optional, 預設為 5) — 物件檢測損失中 L1 邊界框損失的相對權重。 - giou_loss_coefficient (
float
, optional, 預設為 2) — 物件檢測損失中廣義 IoU 損失的相對權重。 - focal_alpha (
float
, optional, 預設為 0.25) — 焦點損失中的 Alpha 引數。 - temperature_height (
int
, optional, 預設為 20) — 調整位置注意力平坦度的溫度引數(高度)。 - temperature_width (
int
, optional, 預設為 20) — 調整位置注意力平坦度的溫度引數(寬度)。 - query_dim (
int
, optional, 預設為 4) — 查詢維度引數表示輸出向量的大小。 - random_refpoints_xy (
bool
, optional, 預設為False
) — 是否透過隨機初始化固定錨框的 x 和 y 座標。 - keep_query_pos (
bool
, optional, 預設為False
) — 是否在每個解碼器層將物件查詢的投影位置嵌入連線到原始查詢(鍵)中。 - num_patterns (
int
, optional, 預設為 0) — 模式嵌入的數量。 - normalize_before (
bool
, optional, 預設為False
) — 是否在編碼器中使用歸一化層。 - sine_position_embedding_scale (
float
, optional, 預設為“None”) — 應用於歸一化位置編碼的比例因子。 - initializer_bias_prior_prob (
float
, optional) — 偏置初始化器用於初始化enc_score_head
和class_embed
偏置的先驗機率。如果為None
,則在初始化模型權重時,prior_prob
計算為prior_prob = 1 / (num_labels + 1)
。
這是用於儲存 DabDetrModel 配置的配置類。它用於根據指定的引數例項化 DAB-DETR 模型,定義模型架構。使用預設值例項化配置將產生與 DAB-DETR IDEA-Research/dab_detr-base 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 文件。
示例
>>> from transformers import DabDetrConfig, DabDetrModel
>>> # Initializing a DAB-DETR IDEA-Research/dab_detr-base style configuration
>>> configuration = DabDetrConfig()
>>> # Initializing a model (with random weights) from the IDEA-Research/dab_detr-base style configuration
>>> model = DabDetrModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
DabDetrModel
class transformers.DabDetrModel
< source >( config: DabDetrConfig )
引數
- config (DabDetrConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
裸 DAB-DETR 模型(由骨幹網路和編解碼器 Transformer 組成),輸出原始隱藏狀態、中間隱藏狀態、參考點、輸出座標,沒有任何特定頭部。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( pixel_values: FloatTensor pixel_mask: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.LongTensor] = None encoder_outputs: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.dab_detr.modeling_dab_detr.DabDetrModelOutput
or tuple(torch.FloatTensor)
引數
- pixel_values (
torch.FloatTensor
,形狀為(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)
,可選) — 用於避免對填充畫素值執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示真實畫素(即未被掩蓋),
- 0 表示填充畫素(即被掩蓋)。
- decoder_attention_mask (
torch.FloatTensor
,形狀為(batch_size, num_queries)
,可選) — 預設不使用。可用於掩蓋物件查詢。 - encoder_outputs (
torch.FloatTensor
,可選) — 元組由(last_hidden_state
,可選:hidden_states
,可選:attentions
)組成。last_hidden_state
的形狀為(batch_size, sequence_length, hidden_size)
,可選)是編碼器最後一層輸出的隱藏狀態序列。用於解碼器的交叉注意力。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,除了傳遞扁平化的特徵圖(骨幹網路 + 投影層的輸出)之外,您也可以選擇直接傳遞影像的扁平化表示。 - decoder_inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, num_queries, hidden_size)
,可選) — 可選地,除了用全零張量初始化查詢之外,您也可以選擇直接傳遞嵌入表示。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.models.dab_detr.modeling_dab_detr.DabDetrModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.dab_detr.modeling_dab_detr.DabDetrModelOutput
或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(DabDetrConfig)和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
) — 模型解碼器最後一層輸出的隱藏狀態序列。 -
past_key_values (
~cache_utils.EncoderDecoderCache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 它是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv cache 指南。包含預先計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
,則可選地在交叉注意力塊中),可用於(參見past_key_values
輸入)加速順序解碼。 -
decoder_hidden_states (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,加上每個層輸出一個),形狀為(batch_size, sequence_length, hidden_size)
。解碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
decoder_attentions (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
cross_attentions (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 模型編碼器最後一層輸出的隱藏狀態序列。 -
encoder_hidden_states (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,加上每個層輸出一個),形狀為(batch_size, sequence_length, hidden_size)
。編碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
encoder_attentions (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
intermediate_hidden_states (
torch.FloatTensor
,形狀為(config.decoder_layers, batch_size, sequence_length, hidden_size)
,可選,當config.auxiliary_loss=True
時返回) — 中間解碼器啟用,即每個解碼器層的輸出,每個輸出都經過了層歸一化。 -
reference_points (
torch.FloatTensor
,形狀為(config.decoder_layers, batch_size, num_queries, 2 (anchor points))
) — 參考點(解碼器每一層的參考點)。
DabDetrModel 的 forward 方法,覆蓋了 __call__
特殊方法。
雖然前向傳播的配方需要在此函式中定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則悄悄地忽略它們。
示例
>>> from transformers import AutoImageProcessor, AutoModel
>>> from PIL import Image
>>> import requests
>>> 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-base")
>>> model = AutoModel.from_pretrained("IDEA-Research/dab_detr-base")
>>> # 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
class transformers.DabDetrForObjectDetection
< source >( config: DabDetrConfig )
引數
- config (DabDetrConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
DAB_DETR 模型(由骨幹網路和編解碼器 Transformer 組成),頂部帶有用於目標檢測任務(如 COCO 檢測)的檢測頭部。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( pixel_values: FloatTensor pixel_mask: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.LongTensor] = None encoder_outputs: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[list[dict]] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.dab_detr.modeling_dab_detr.DabDetrObjectDetectionOutput
or tuple(torch.FloatTensor)
引數
- pixel_values (
torch.FloatTensor
,形狀為(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)
,可選) — 用於避免對填充畫素值執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示真實畫素(即未被掩蓋),
- 0 表示填充畫素(即被掩蓋)。
- decoder_attention_mask (
torch.FloatTensor
,形狀為(batch_size, num_queries)
,可選) — 預設不使用。可用於掩蓋物件查詢。 - encoder_outputs (
torch.FloatTensor
,可選) — 元組由(last_hidden_state
,可選:hidden_states
,可選:attentions
)組成。last_hidden_state
的形狀為(batch_size, sequence_length, hidden_size)
,可選)是編碼器最後一層輸出的隱藏狀態序列。用於解碼器的交叉注意力。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,除了傳遞扁平化的特徵圖(骨幹網路 + 投影層的輸出)之外,您也可以選擇直接傳遞影像的扁平化表示。 - decoder_inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, num_queries, hidden_size)
,可選) — 可選地,除了用全零張量初始化查詢之外,您也可以選擇直接傳遞嵌入表示。 - labels (長度為
(batch_size,)
的list[Dict]
,可選) — 用於計算二分匹配損失的標籤。字典列表,每個字典至少包含以下兩個鍵:“class_labels”和“boxes”(分別表示批次中影像的類別標籤和邊界框)。類別標籤本身應該是長度為(影像中邊界框的數量,)
的torch.LongTensor
,而框則應該是形狀為(影像中邊界框的數量, 4)
的torch.FloatTensor
。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.models.dab_detr.modeling_dab_detr.DabDetrObjectDetectionOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.dab_detr.modeling_dab_detr.DabDetrObjectDetectionOutput
或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(DabDetrConfig)和輸入的不同元素。
-
loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供labels
時返回) — 總損失,是用於類別預測的負對數似然(交叉熵)和邊界框損失的線性組合。後者定義為 L1 損失和廣義尺度不變 IoU 損失的線性組合。 -
loss_dict (
Dict
, 可選) — 包含各個損失的字典。用於日誌記錄。 -
logits (形狀為
(batch_size, num_queries, num_classes + 1)
的torch.FloatTensor
) — 所有查詢的分類 logits(包括無物件)。 -
pred_boxes (
torch.FloatTensor
,形狀為(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 (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可選) — 模型解碼器最後一層輸出的隱藏狀態序列。 -
decoder_hidden_states (
tuple[torch.FloatTensor]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,加上每個層輸出一個),形狀為(batch_size, sequence_length, hidden_size)
。解碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
decoder_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
cross_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選,預設為None
) — 模型編碼器最後一層輸出的隱藏狀態序列。 -
encoder_hidden_states (
tuple[torch.FloatTensor]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,加上每個層輸出一個),形狀為(batch_size, sequence_length, hidden_size)
。編碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
encoder_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
DabDetrForObjectDetection 的 forward 方法,覆蓋了 __call__
特殊方法。
雖然前向傳播的配方需要在此函式中定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則悄悄地忽略它們。
示例
>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection
>>> from PIL import Image
>>> import requests
>>> 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")
>>> 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]