Transformers 文件
DETA
並獲得增強的文件體驗
開始使用
DETA
此模型僅處於維護模式,我們不接受任何更改其程式碼的新 PR。如果您在使用此模型時遇到任何問題,請重新安裝支援此模型的最後一個版本:v4.40.2。您可以透過執行以下命令進行操作:pip install -U transformers==4.40.2
。
概述
DETA 模型由 Jeffrey Ouyang-Zhang、Jang Hyun Cho、Xingyi Zhou、Philipp Krähenbühl 在 NMS Strikes Back 中提出。DETA(Detection Transformers with Assignment 的縮寫)透過將一對一的匈牙利匹配損失替換為傳統檢測器中使用的帶非極大值抑制(NMS)的一對多標籤分配來改進 Deformable DETR。這帶來了高達 2.5 mAP 的顯著提升。
論文摘要如下:
檢測 Transformer (DETR) 在訓練過程中使用一對一的二分匹配直接將查詢轉換為唯一的物件,並實現端到端物件檢測。最近,這些模型以無可辯駁的優雅在 COCO 上超越了傳統檢測器。然而,它們在模型架構和訓練排程等多個設計上與傳統檢測器不同,因此一對一匹配的有效性尚未完全理解。在這項工作中,我們對 DETR 中一對一的匈牙利匹配與傳統檢測器中帶有非極大值抑制(NMS)的一對多標籤分配進行了嚴格比較。令人驚訝的是,我們觀察到在一對多分配中,帶有 NMS 的傳統檢測器在相同設定下始終優於標準的一對一匹配,顯著提升了高達 2.5 mAP。我們的檢測器使用傳統的基於 IoU 的標籤分配訓練 Deformable-DETR,在 12 個 epoch(1x 排程)內使用 ResNet50 主幹網路實現了 50.2 COCO mAP,超越了在此設定下所有現有的傳統或基於 Transformer 的檢測器。在多個數據集、排程和架構上,我們始終表明二分匹配對於高效能檢測 Transformer 來說並非必需。此外,我們將檢測 Transformer 的成功歸因於其富有表現力的 Transformer 架構。

此模型由 nielsr 貢獻。原始程式碼可以在 這裡 找到。
資源
以下是官方 Hugging Face 和社群(用 🌎 表示)資源列表,可幫助您開始使用 DETA。
- DETA 的演示筆記本可以在 這裡 找到。
- 使用 Trainer 或 Accelerate 對 DetaForObjectDetection 進行微調的指令碼可以在 這裡 找到。
- 另請參閱:目標檢測任務指南。
如果您有興趣在此處提交資源,請隨時開啟 Pull Request,我們將對其進行審查!該資源最好能展示一些新內容,而不是重複現有資源。
DetaConfig
class transformers.DetaConfig
< 來源 >( backbone_config = None backbone = None use_pretrained_backbone = False use_timm_backbone = False backbone_kwargs = None num_queries = 900 max_position_embeddings = 2048 encoder_layers = 6 encoder_ffn_dim = 2048 encoder_attention_heads = 8 decoder_layers = 6 decoder_ffn_dim = 1024 decoder_attention_heads = 8 encoder_layerdrop = 0.0 is_encoder_decoder = True activation_function = 'relu' d_model = 256 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 init_std = 0.02 init_xavier_std = 1.0 return_intermediate = True auxiliary_loss = False position_embedding_type = 'sine' num_feature_levels = 5 encoder_n_points = 4 decoder_n_points = 4 two_stage = True two_stage_num_proposals = 300 with_box_refine = True assign_first_stage = True assign_second_stage = True class_cost = 1 bbox_cost = 5 giou_cost = 2 mask_loss_coefficient = 1 dice_loss_coefficient = 1 bbox_loss_coefficient = 5 giou_loss_coefficient = 2 eos_coefficient = 0.1 focal_alpha = 0.25 disable_custom_kernels = True **kwargs )
引數
- backbone_config (
PretrainedConfig
或dict
, 可選, 預設為ResNetConfig()
) — 主幹模型的配置。 - backbone (
str
, 可選) — 當backbone_config
為None
時使用的主幹名稱。如果use_pretrained_backbone
為True
,這將從 timm 或 transformers 庫載入相應的預訓練權重。如果use_pretrained_backbone
為False
,這將載入主幹的配置並使用它來初始化具有隨機權重的後臺。 - use_pretrained_backbone (
bool
, 可選,False
) — 是否使用預訓練的主幹權重。 - use_timm_backbone (
bool
, 可選,False
) — 是否從 timm 庫載入backbone
。如果為False
,則從 transformers 庫載入主幹。 - backbone_kwargs (
dict
, 可選) — 載入檢查點時傳遞給 AutoBackbone 的關鍵字引數,例如{'out_indices': (0, 1, 2, 3)}
。如果設定了backbone_config
,則不能指定此引數。 - num_queries (
int
, 可選, 預設為 900) — 物件查詢的數量,即檢測槽的數量。這是 DetaModel 在單張影像中可以檢測到的最大物件數量。如果two_stage
設定為True
,則使用two_stage_num_proposals
。 - d_model (
int
, 可選, 預設為 256) — 層維度。 - encoder_layers (
int
, 可選, 預設為 6) — 編碼器層數。 - decoder_layers (
int
, 可選, 預設為 6) — 解碼器層數。 - encoder_attention_heads (
int
, 可選, 預設為 8) — Transformer 編碼器中每個注意力層的注意力頭數量。 - decoder_attention_heads (
int
, 可選, 預設為 8) — Transformer 解碼器中每個注意力層的注意力頭數量。 - decoder_ffn_dim (
int
, 可選, 預設為 2048) — 解碼器中“中間”(通常稱為前饋)層的維度。 - encoder_ffn_dim (
int
, 可選, 預設為 2048) — 解碼器中“中間”(通常稱為前饋)層的維度。 - activation_function (
str
或function
, 可選, 預設為"relu"
) — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果為字串,支援"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - dropout (
float
, 可選, 預設為 0.1) — 嵌入、編碼器和池化器中所有全連線層的 dropout 機率。 - attention_dropout (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。 - activation_dropout (
float
, 可選, 預設為 0.0) — 全連線層內部啟用的 dropout 比率。 - init_std (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - init_xavier_std (
float
, 可選, 預設為 1) — HM Attention 模組中 Xavier 初始化增益的縮放因子。 - encoder_layerdrop (
float
, 可選, 預設為 0.0) — 編碼器的 LayerDrop 機率。更多詳細資訊請參閱 [LayerDrop 論文](參見 https://huggingface.co/papers/1909.11556)。 - auxiliary_loss (
bool
, 可選, 預設為False
) — 是否使用輔助解碼損失(每個解碼器層的損失)。 - position_embedding_type (
str
, 可選, 預設為"sine"
) — 在影像特徵之上使用的位置嵌入型別。可選擇"sine"
或"learned"
。 - class_cost (
float
, 可選, 預設為 1) — 匈牙利匹配代價中分類誤差的相對權重。 - bbox_cost (
float
, 可選, 預設為 5) — 匈牙利匹配代價中邊界框座標 L1 誤差的相對權重。 - giou_cost (
float
, 可選, 預設為 2) — 匈牙利匹配代價中邊界框廣義 IoU 損失的相對權重。 - mask_loss_coefficient (
float
, 可選, 預設為 1) — 全景分割損失中 Focal loss 的相對權重。 - dice_loss_coefficient (
float
, 可選, 預設為 1) — 全景分割損失中 DICE/F-1 損失的相對權重。 - bbox_loss_coefficient (
float
, 可選, 預設為 5) — 物件檢測損失中 L1 邊界框損失的相對權重。 - giou_loss_coefficient (
float
, 可選, 預設為 2) — 物件檢測損失中廣義 IoU 損失的相對權重。 - eos_coefficient (
float
, 可選, 預設為 0.1) — 物件檢測損失中“無物件”類別的相對分類權重。 - num_feature_levels (
int
, 可選, 預設為 5) — 輸入特徵層數。 - encoder_n_points (
int
, 可選, 預設為 4) — 編碼器中每個特徵層、每個注意力頭中取樣的鍵點數。 - decoder_n_points (
int
, 可選, 預設為 4) — 解碼器中每個特徵層、每個注意力頭中取樣的鍵點數。 - two_stage (
bool
, 可選, 預設為True
) — 是否應用兩階段可變形DETR,其中區域提議也由DETA的變體生成,並進一步輸入解碼器以進行迭代邊界框細化。 - two_stage_num_proposals (
int
, 可選, 預設為 300) — 在two_stage
設定為True
的情況下,要生成的區域提議的數量。 - with_box_refine (
bool
, 可選, 預設為True
) — 是否應用迭代邊界框細化,其中每個解碼器層根據前一層的預測來細化邊界框。 - focal_alpha (
float
, 可選, 預設為 0.25) — 焦點損失中的 Alpha 引數。 - assign_first_stage (
bool
, 可選, 預設為True
) — 是否將每個預測 i 分配給重疊度高於閾值 0.7 的最高重疊真實物件。 - assign_second_stage (
bool
, 可選, 預設為True
) — 第二階段的第二個分配過程是否與第一階段的分配過程緊密相關。 - disable_custom_kernels (
bool
, 可選, 預設為True
) — 停用自定義CUDA和CPU核心的使用。此選項對於ONNX匯出是必需的,因為PyTorch ONNX匯出不支援自定義核心。
這是一個配置類,用於儲存 DetaModel 的配置。它用於根據指定的引數例項化 DETA 模型,定義模型架構。使用預設值例項化配置將生成與 DETA SenseTime/deformable-detr 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import DetaConfig, DetaModel
>>> # Initializing a DETA SenseTime/deformable-detr style configuration
>>> configuration = DetaConfig()
>>> # Initializing a model (with random weights) from the SenseTime/deformable-detr style configuration
>>> model = DetaModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
DetaImageProcessor
class transformers.DetaImageProcessor
< source >( format: typing.Union[str, transformers.image_utils.AnnotationFormat] = <AnnotationFormat.COCO_DETECTION: 'coco_detection'> do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: typing.Union[int, float] = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_convert_annotations: bool = True do_pad: bool = True pad_size: typing.Optional[dict[str, int]] = None **kwargs )
引數
- format (
str
, 可選, 預設為"coco_detection"
) — 註釋的資料格式。可以是 “coco_detection” 或 “coco_panoptic” 之一。 - do_resize (
bool
, 可選, 預設為True
) — 控制是否將影像的(高度,寬度)尺寸調整為指定的size
。可以透過preprocess
方法中的do_resize
引數覆蓋。 - size (
dict[str, int]
可選, 預設為{"shortest_edge" -- 800, "longest_edge": 1333}
):調整大小後圖像的(height, width)
尺寸。可以透過preprocess
方法中的size
引數覆蓋。可用選項包括:{"height": int, "width": int}
:影像將調整為確切的尺寸(height, width)
。不保持縱橫比。{"shortest_edge": int, "longest_edge": int}
:影像將調整為最大尺寸,保持縱橫比,並使最短邊小於或等於shortest_edge
,最長邊小於或等於longest_edge
。{"max_height": int, "max_width": int}
:影像將調整為最大尺寸,保持縱橫比,並使高度小於或等於max_height
,寬度小於或等於max_width
。
- resample (
PILImageResampling
, 可選, 預設為PILImageResampling.BILINEAR
) — 如果調整影像大小,則使用的重取樣濾波器。 - do_rescale (
bool
, 可選, 預設為True
) — 控制是否按指定的比例rescale_factor
重新縮放影像。可以透過preprocess
方法中的do_rescale
引數覆蓋。 - rescale_factor (
int
或float
, 可選, 預設為1/255
) — 如果重新縮放影像,則使用的比例因子。可以透過preprocess
方法中的rescale_factor
引數覆蓋。 - do_normalize — 控制是否標準化影像。可以透過
preprocess
方法中的do_normalize
引數覆蓋。 - image_mean (
float
或list[float]
, 可選, 預設為IMAGENET_DEFAULT_MEAN
) — 標準化影像時使用的均值。可以是單個值或值列表,每個通道一個。可以透過preprocess
方法中的image_mean
引數覆蓋。 - image_std (
float
或list[float]
, 可選, 預設為IMAGENET_DEFAULT_STD
) — 標準化影像時使用的標準差。可以是單個值或值列表,每個通道一個。可以透過preprocess
方法中的image_std
引數覆蓋。 - do_convert_annotations (
bool
, 可選, 預設為True
) — 控制是否將註釋轉換為 DETR 模型所需的格式。將邊界框轉換為(center_x, center_y, width, height)
格式並將其範圍調整為[0, 1]
。可以透過preprocess
方法中的do_convert_annotations
引數覆蓋。 - do_pad (
bool
, 可選, 預設為True
) — 控制是否填充影像。如果為True
,將用零填充影像的底部和右側。如果提供了pad_size
,影像將填充到指定尺寸。否則,影像將填充到批次的最大高度和寬度。 - pad_size (
dict[str, int]
, 可選) — 要填充影像的尺寸{"height": int, "width" int}
。必須大於任何為預處理提供的影像尺寸。如果未提供pad_size
,影像將填充到批次中的最大高度和寬度。
構造可變形 DETR 影像處理器。
預處理
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] annotations: typing.Union[list[dict], list[list[dict]], NoneType] = None return_segmentation_masks: typing.Optional[bool] = None masks_path: typing.Union[str, pathlib.Path, NoneType] = None do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None resample = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Union[int, float, NoneType] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_convert_annotations: typing.Optional[bool] = None do_pad: typing.Optional[bool] = None format: typing.Union[str, transformers.image_utils.AnnotationFormat, NoneType] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: typing.Union[str, transformers.image_utils.ChannelDimension] = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None pad_size: typing.Optional[dict[str, int]] = None **kwargs )
引數
- images (
ImageInput
) — 要預處理的影像或影像批次。期望單個或批次的影像,畫素值範圍從0到255。如果傳入的影像畫素值在0到1之間,請設定do_rescale=False
。 - annotations (
list[Dict]
或list[list[Dict]]
, 可選) — 與影像或影像批次關聯的註釋列表。如果註釋用於物件檢測,則註釋應為具有以下鍵的字典:- “image_id”(
int
):影像 ID。 - “annotations”(
list[Dict]
):影像的註釋列表。每個註釋都應為字典。影像可以沒有註釋,在這種情況下,列表應為空。如果註釋用於分割,則註釋應為具有以下鍵的字典: - “image_id”(
int
):影像 ID。 - “segments_info”(
list[Dict]
):影像的段列表。每個段都應為字典。影像可以沒有段,在這種情況下,列表應為空。 - “file_name”(
str
):影像的檔名。
- “image_id”(
- return_segmentation_masks (
bool
, 可選, 預設為 self.return_segmentation_masks) — 是否返回分割掩碼。 - masks_path (
str
或pathlib.Path
, 可選) — 包含分割掩碼的目錄路徑。 - do_resize (
bool
, 可選, 預設為 self.do_resize) — 是否調整影像大小。 - size (
dict[str, int]
, 可選, 預設為 self.size) — 調整大小後圖像的(height, width)
尺寸。可用選項包括:{"height": int, "width": int}
:影像將調整為確切的尺寸(height, width)
。不保持縱橫比。{"shortest_edge": int, "longest_edge": int}
:影像將調整為最大尺寸,保持縱橫比,並使最短邊小於或等於shortest_edge
,最長邊小於或等於longest_edge
。{"max_height": int, "max_width": int}
:影像將調整為最大尺寸,保持縱橫比,並使高度小於或等於max_height
,寬度小於或等於max_width
。
- resample (
PILImageResampling
, 可選, 預設為 self.resample) — 調整影像大小時使用的重取樣濾波器。 - do_rescale (
bool
, 可選, 預設為 self.do_rescale) — 是否重新縮放影像。 - rescale_factor (
float
, 可選, 預設為 self.rescale_factor) — 重新縮放影像時使用的縮放因子。 - do_normalize (
bool
, 可選, 預設為 self.do_normalize) — 是否標準化影像。 - image_mean (
float
或list[float]
, 可選, 預設為 self.image_mean) — 標準化影像時使用的均值。 - image_std (
float
或list[float]
, 可選, 預設為 self.image_std) — 標準化影像時使用的標準差。 - do_convert_annotations (
bool
, 可選, 預設為 self.do_convert_annotations) — 是否將註釋轉換為模型所需的格式。將邊界框從(top_left_x, top_left_y, width, height)
格式轉換為(center_x, center_y, width, height)
,並轉換為相對座標。 - do_pad (
bool
, 可選, 預設為 self.do_pad) — 是否填充影像。如果為True
,將用零填充影像的底部和右側。如果提供了pad_size
,影像將填充到指定尺寸。否則,影像將填充到批次的最大高度和寬度。 - format (
str
或AnnotationFormat
, 可選, 預設為 self.format) — 註釋的格式。 - return_tensors (
str
或TensorType
, 可選, 預設為 self.return_tensors) — 要返回的張量型別。如果為None
,將返回影像列表。 - data_format (
ChannelDimension
或str
, 可選, 預設為ChannelDimension.FIRST
) — 輸出影像的通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像為 (num_channels, height, width) 格式。"channels_last"
或ChannelDimension.LAST
:影像為 (height, width, num_channels) 格式。- 未設定:使用輸入影像的通道維度格式。
- input_data_format (
ChannelDimension
或str
, 可選) — 輸入影像的通道維度格式。如果未設定,則從輸入影像推斷通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像為 (num_channels, height, width) 格式。"channels_last"
或ChannelDimension.LAST
:影像為 (height, width, num_channels) 格式。"none"
或ChannelDimension.NONE
:影像為 (height, width) 格式。
- pad_size (
dict[str, int]
, 可選) — 要填充影像的尺寸{"height": int, "width" int}
。必須大於任何為預處理提供的影像尺寸。如果未提供pad_size
,影像將填充到批次中的最大高度和寬度。
預處理影像或影像批次,以便模型可以使用。
後處理物件檢測
< source >( outputs threshold: float = 0.5 target_sizes: typing.Union[transformers.utils.generic.TensorType, list[tuple]] = None nms_threshold: float = 0.7 ) → list[Dict]
引數
- outputs (
DetrObjectDetectionOutput
) — 模型的原始輸出。 - threshold (
float
, 可選, 預設為 0.5) — 保持物件檢測預測的分數閾值。 - target_sizes (
torch.Tensor
或list[tuple[int, int]]
, 可選) — 形狀為(batch_size, 2)
的張量或元組列表 (tuple[int, int]
),其中包含批次中每個影像的目標大小(高度,寬度)。如果留空,則預測不會調整大小。 - nms_threshold (
float
, 可選, 預設為 0.7) — NMS 閾值。
返回
list[Dict]
一個字典列表,每個字典包含模型預測的批處理中每張影像的分數、標籤和框。
將 DetaForObjectDetection 的輸出轉換為 (top_left_x, top_left_y, bottom_right_x, bottom_right_y) 格式的最終邊界框。僅支援 PyTorch。
DetaModel
class transformers.DetaModel
< source >( config: DetaConfig )
引數
- config (DetaConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型關聯的權重,僅載入配置。請檢視 from_pretrained() 方法以載入模型權重。
裸 DETA 模型(由骨幹網路和編碼器-解碼器 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.FloatTensor] = 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.deprecated.deta.modeling_deta.DetaModelOutput
或 tuple(torch.FloatTensor)
引數
- pixel_values (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 畫素值。如果提供,預設情況下將忽略填充。畫素值可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參閱
AutoImageProcessor.__call__()
。 - pixel_mask (
torch.LongTensor
, 形狀為(batch_size, height, width)
, 可選) — 用於避免對填充畫素值執行注意力的遮罩。遮罩值在[0, 1]
中選擇:- 1 表示真實畫素(即未遮罩),
- 0 表示填充畫素(即已遮罩)。
- decoder_attention_mask (
torch.FloatTensor
, 形狀為(batch_size, num_queries)
, 可選) — 預設不使用。可用於遮罩物件查詢。 - encoder_outputs (
tuple(tuple(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.deprecated.deta.modeling_deta.DetaModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.deprecated.deta.modeling_deta.DetaModelOutput
或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
時),包含根據配置(DetaConfig)和輸入的不同元素。
- init_reference_points (
torch.FloatTensor
, 形狀為(batch_size, num_queries, 4)
) — 透過 Transformer 解碼器傳送的初始參考點。 - last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_queries, hidden_size)
) — 模型解碼器最後一層輸出的隱藏狀態序列。 - intermediate_hidden_states (
torch.FloatTensor
, 形狀為(batch_size, config.decoder_layers, num_queries, hidden_size)
) — 堆疊的中間隱藏狀態(解碼器每層的輸出)。 - intermediate_reference_points (
torch.FloatTensor
, 形狀為(batch_size, config.decoder_layers, num_queries, 4)
) — 堆疊的中間參考點(解碼器每層的參考點)。 - decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入輸出 + 每個層的輸出一個),形狀為(batch_size, num_queries, hidden_size)
。解碼器在每層輸出處的隱藏狀態加上初始嵌入輸出。 - decoder_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_heads, num_queries, num_queries)
。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。 - cross_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_queries, num_heads, 4, 4)
。解碼器交叉注意力層的注意力權重,在注意力 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_queries, num_heads, 4, 4)
。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。 - enc_outputs_class (
torch.FloatTensor
, 形狀為(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.FloatTensor
, 形狀為(batch_size, sequence_length, 4)
, 可選, 當config.with_box_refine=True
和config.two_stage=True
時返回) — 第一階段預測的邊界框座標的 logits。 - output_proposals (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, 4)
, 可選, 當config.two_stage=True
時返回) — `gen_encoder_output_proposals` 中提案邊界框座標的 logits。
DetaModel 的 forward 方法,重寫了 __call__
特殊方法。
儘管前向傳遞的實現需要在該函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者會處理預處理和後處理步驟,而後者會默默忽略它們。
示例
>>> from transformers import AutoImageProcessor, DetaModel
>>> 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("jozhang97/deta-swin-large-o365")
>>> model = DetaModel.from_pretrained("jozhang97/deta-swin-large-o365", two_stage=False)
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 900, 256]
DetaForObjectDetection
class transformers.DetaForObjectDetection
< source >( config: DetaConfig )
引數
- config (DetaConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
DETA 模型(由骨幹網路和編碼器-解碼器 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.FloatTensor] = 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.deprecated.deta.modeling_deta.DetaObjectDetectionOutput
或 tuple(torch.FloatTensor)
引數
- pixel_values (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 畫素值。如果提供,預設情況下將忽略填充。畫素值可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參閱
AutoImageProcessor.__call__()
。 - pixel_mask (
torch.LongTensor
, 形狀為(batch_size, height, width)
, 可選) — 用於避免對填充畫素值執行注意力的遮罩。遮罩值在[0, 1]
中選擇:- 1 表示真實畫素(即未遮罩),
- 0 表示填充畫素(即已遮罩)。
- decoder_attention_mask (
torch.FloatTensor
, 形狀為(batch_size, num_queries)
, 可選) — 預設不使用。可用於遮罩物件查詢。 - encoder_outputs (
tuple(tuple(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 而不是普通元組。 - labels (
list[Dict]
, 長度為(batch_size,)
, 可選) — 用於計算二分匹配損失的標籤。字典列表,每個字典至少包含以下兩個鍵:“class_labels”和“boxes”(分別表示批處理中影像的類別標籤和邊界框)。類別標籤本身應該是長度為(影像中邊界框的數量,)
的torch.LongTensor
,而框應該是形狀為(影像中邊界框的數量, 4)
的torch.FloatTensor
。
返回
transformers.models.deprecated.deta.modeling_deta.DetaObjectDetectionOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.deprecated.deta.modeling_deta.DetaObjectDetectionOutput
或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
時),包含根據配置(DetaConfig)和輸入的不同元素。
- 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] 範圍,相對於批處理中每個單獨影像的大小(忽略可能的填充)。您可以使用~DetaProcessor.post_process_object_detection
來檢索未歸一化的邊界框。 - auxiliary_outputs (
list[Dict]
, 可選) — 可選,僅當輔助損失啟用(即config.auxiliary_loss
設定為True
)且提供標籤時返回。它是字典列表,每個字典包含上述兩個鍵(logits
和pred_boxes
),對應每個解碼器層。 - last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_queries, hidden_size)
, 可選) — 模型解碼器最後一層輸出的隱藏狀態序列。 - decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入輸出 + 每個層的輸出一個),形狀為(batch_size, num_queries, hidden_size)
。解碼器在每層輸出處的隱藏狀態加上初始嵌入輸出。 - decoder_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_heads, num_queries, num_queries)
。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。 - cross_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_queries, num_heads, 4, 4)
。解碼器交叉注意力層的注意力權重,在注意力 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, sequence_length, num_heads, 4, 4)
。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。 - intermediate_hidden_states (
torch.FloatTensor
, 形狀為(batch_size, config.decoder_layers, num_queries, hidden_size)
) — 堆疊的中間隱藏狀態(解碼器每層的輸出)。 - intermediate_reference_points (
torch.FloatTensor
, 形狀為(batch_size, config.decoder_layers, num_queries, 4)
) — 堆疊的中間參考點(解碼器每層的參考點)。 - init_reference_points (
torch.FloatTensor
, 形狀為(batch_size, num_queries, 4)
) — 透過 Transformer 解碼器傳送的初始參考點。 - enc_outputs_class (
torch.FloatTensor
, 形狀為(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.FloatTensor
, 形狀為(batch_size, sequence_length, 4)
, 可選, 當config.with_box_refine=True
和config.two_stage=True
時返回) — 第一階段預測的邊界框座標的 logits。 - output_proposals (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, 4)
, 可選, 當config.two_stage=True
時返回) — `gen_encoder_output_proposals` 中提案邊界框座標的 logits。
DetaForObjectDetection 的 forward 方法,重寫了 __call__
特殊方法。
儘管前向傳遞的實現需要在該函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者會處理預處理和後處理步驟,而後者會默默忽略它們。
示例
>>> from transformers import AutoImageProcessor, DetaForObjectDetection
>>> 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("jozhang97/deta-swin-large")
>>> model = DetaForObjectDetection.from_pretrained("jozhang97/deta-swin-large")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> # 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.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 cat with confidence 0.802 at location [9.87, 54.36, 316.93, 473.44]
Detected cat with confidence 0.795 at location [346.62, 24.35, 639.62, 373.2]
Detected remote with confidence 0.725 at location [40.41, 73.36, 175.77, 117.29]
Detected remote with confidence 0.638 at location [333.34, 76.81, 370.22, 187.94]
Detected couch with confidence 0.584 at location [0.03, 0.99, 640.02, 474.93]