Grounding DINO
概述
Grounding DINO 模型在 Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 一文中提出,作者为 Shilong Liu, Zhaoyang Zeng, Tianhe Ren, Feng Li, Hao Zhang, Jie Yang, Chunyuan Li, Jianwei Yang, Hang Su, Jun Zhu, Lei Zhang。Grounding DINO 通过文本编码器扩展了闭集对象检测模型,从而实现了开集对象检测。该模型取得了显著成果,例如在 COCO 零样本上达到了 52.5 AP。
该论文的摘要如下
在本文中,我们提出了一种开集对象检测器,名为 Grounding DINO,它将基于 Transformer 的检测器 DINO 与 grounded pre-training 相结合,可以检测任意对象,并接受人类输入,例如类别名称或指代表达式。开集对象检测的关键解决方案是将语言引入闭集检测器,以实现开集概念的泛化。为了有效地融合语言和视觉模态,我们将闭集检测器概念性地分为三个阶段,并提出了一种紧密融合的解决方案,其中包括特征增强器、语言引导的查询选择以及用于跨模态融合的跨模态解码器。虽然以前的工作主要评估新类别上的开集对象检测,但我们建议也对使用属性指定的对象的指代表达理解进行评估。Grounding DINO 在所有三种设置中都表现出色,包括 COCO、LVIS、ODinW 和 RefCOCO/+/g 的基准测试。Grounding DINO 在 COCO 检测零样本迁移基准测试中达到了 52.5 AP,即没有任何来自 COCO 的训练数据。它在 ODinW 零样本基准测试中创下了 26.1 AP 的新纪录。

此模型由 EduardoPacheco 和 nielsr 贡献。原始代码可以在这里找到。
使用技巧
- 可以使用 GroundingDinoProcessor 来为模型准备图像-文本对。
- 要在文本中分隔类别,请使用句点,例如 “a cat. a dog.”。
- 当使用多个类别时(例如
"a cat. a dog."
),请使用 GroundingDinoProcessor 中的post_process_grounded_object_detection
来后处理输出。因为从post_process_object_detection
返回的标签表示模型维度中 prob > threshold 的索引。
以下是如何将模型用于零样本对象检测的方法
>>> import requests
>>> import torch
>>> from PIL import Image
>>> from transformers import AutoProcessor, AutoModelForZeroShotObjectDetection
>>> model_id = "IDEA-Research/grounding-dino-tiny"
>>> device = "cuda"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = AutoModelForZeroShotObjectDetection.from_pretrained(model_id).to(device)
>>> image_url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(image_url, stream=True).raw)
>>> # Check for cats and remote controls
>>> text = "a cat. a remote control."
>>> inputs = processor(images=image, text=text, return_tensors="pt").to(device)
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> results = processor.post_process_grounded_object_detection(
... outputs,
... inputs.input_ids,
... box_threshold=0.4,
... text_threshold=0.3,
... target_sizes=[image.size[::-1]]
... )
>>> print(results)
[{'boxes': tensor([[344.6959, 23.1090, 637.1833, 374.2751],
[ 12.2666, 51.9145, 316.8582, 472.4392],
[ 38.5742, 70.0015, 176.7838, 118.1806]], device='cuda:0'),
'labels': ['a cat', 'a cat', 'a remote control'],
'scores': tensor([0.4785, 0.4381, 0.4776], device='cuda:0')}]
Grounded SAM
可以将 Grounding DINO 与 Segment Anything 模型结合使用,以进行基于文本的掩码生成,如 Grounded SAM: Assembling Open-World Models for Diverse Visual Tasks 中介绍的那样。您可以参考此演示 notebook 🌍 了解详细信息。

资源
官方 Hugging Face 和社区(标有 🌎)资源的列表,可帮助您开始使用 Grounding DINO。如果您有兴趣提交资源以包含在此处,请随时打开 Pull Request,我们将对其进行审核!该资源最好展示一些新的内容,而不是重复现有资源。
GroundingDinoImageProcessor
class transformers.GroundingDinoImageProcessor
< source >( format: Union = <AnnotationFormat.COCO_DETECTION: 'coco_detection'> do_resize: bool = True size: Dict = None resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: Union = 0.00392156862745098 do_normalize: bool = True image_mean: Union = None image_std: Union = None do_convert_annotations: Optional = None do_pad: bool = True pad_size: Optional = None **kwargs )
参数
- format (
str
, 可选,默认为AnnotationFormat.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
, 可选,默认为Resampling.BILINEAR
) — 如果调整图像大小,则使用的重采样过滤器。 - do_rescale (
bool
, 可选,默认为True
) — 控制是否按指定的比例rescale_factor
缩放图像。可以被preprocess
方法中的do_rescale
参数覆盖。 - rescale_factor (
int
或float
, 可选,默认为1/255
) — 如果缩放图像,则使用的缩放因子。可以被preprocess
方法中的rescale_factor
参数覆盖。控制是否标准化图像。可以被preprocess
方法中的do_normalize
参数覆盖。 - do_normalize (
bool
, 可选,默认为True
) — 是否标准化图像。可以被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
) — 控制是否填充图像。可以被preprocess
方法中的do_pad
参数覆盖。如果为True
,则将在图像的底部和右侧用零填充。如果提供了pad_size
,则图像将被填充到指定的尺寸。否则,图像将被填充到批次的最大高度和宽度。 - pad_size (
Dict[str, int]
, 可选) — 要将图像填充到的尺寸{"height": int, "width" int}
。必须大于为预处理提供的任何图像尺寸。如果未提供pad_size
,则图像将填充到批次中最大的高度和宽度。
构建 Grounding DINO 图像处理器。
preprocess
< source >( images: Union annotations: Union = None return_segmentation_masks: bool = None masks_path: Union = None do_resize: Optional = None size: Optional = None resample = None do_rescale: Optional = None rescale_factor: Union = None do_normalize: Optional = None do_convert_annotations: Optional = None image_mean: Union = None image_std: Union = None do_pad: Optional = None format: Union = None return_tensors: Union = None data_format: Union = <ChannelDimension.FIRST: 'channels_first'> input_data_format: Union = None pad_size: Optional = None **kwargs )
参数
- images (
ImageInput
) — 要预处理的图像或一批图像。期望是像素值范围从 0 到 255 的单个或一批图像。如果传入的图像像素值介于 0 和 1 之间,请设置do_rescale=False
。 - annotations (
AnnotationType
或List[AnnotationType]
, 可选) — 与图像或图像批次关联的注释列表。如果注释用于对象检测,则注释应为包含以下键的字典:- “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": 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) — 是否标准化图像。 - do_convert_annotations (
bool
, 可选, 默认为 self.do_convert_annotations) — 是否将注释转换为模型期望的格式。将边界框从(top_left_x, top_left_y, width, height)
格式转换为(center_x, center_y, width, height)
格式,并转换为相对坐标。 - image_mean (
float
或List[float]
, 可选, 默认为 self.image_mean) — 标准化图像时使用的均值。 - image_std (
float
或List[float]
, 可选, 默认为 self.image_std) — 标准化图像时使用的标准差。 - 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
,则图像将被填充到批次中最大的高度和宽度。
预处理单张图像或一批图像,使其可以被模型使用。
post_process_object_detection
< source >( outputs threshold: float = 0.1 target_sizes: Union = None ) → List[Dict]
将 GroundingDinoForObjectDetection 的原始输出转换为最终边界框,格式为 (top_left_x, top_left_y, bottom_right_x, bottom_right_y)。
GroundingDinoProcessor
class transformers.GroundingDinoProcessor
< source >( image_processor tokenizer )
参数
- image_processor (
GroundingDinoImageProcessor
) — GroundingDinoImageProcessor 的实例。图像处理器是必需的输入。 - tokenizer (
AutoTokenizer
) — [‘PreTrainedTokenizer’] 的实例。tokenizer 是必需的输入。
构建一个 Grounding DINO 处理器,它将 Deformable DETR 图像处理器和 BERT tokenizer 封装到单个处理器中。
GroundingDinoProcessor 提供 GroundingDinoImageProcessor 和 AutoTokenizer 的所有功能。 有关更多信息,请参阅 __call__()
和 decode()
的文档字符串。
post_process_grounded_object_detection
< source >( outputs input_ids box_threshold: float = 0.25 text_threshold: float = 0.25 target_sizes: Union = None ) → List[Dict]
参数
- outputs (
GroundingDinoObjectDetectionOutput
) — 模型的原始输出。 - input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 输入文本的 token ids。 - box_threshold (
float
, 可选,默认为 0.25) — 保留物体检测预测的分数阈值。 - text_threshold (
float
, 可选,默认为 0.25) — 保留文本检测预测的分数阈值。 - target_sizes (
torch.Tensor
或List[Tuple[int, int]]
, 可选) — 形状为(batch_size, 2)
的 Tensor 或元组列表 (Tuple[int, int]
),其中包含批次中每张图像的目标大小(height, width)
。如果未设置,则不会调整预测大小。
返回值
List[Dict]
字典列表,每个字典包含模型预测的批次中图像的分数、标签和框。
将 GroundingDinoForObjectDetection 的原始输出转换为 (top_left_x, top_left_y, bottom_right_x, bottom_right_y) 格式的最终边界框,并获取相关的文本标签。
GroundingDinoConfig
class transformers.GroundingDinoConfig
< source >( backbone_config = None backbone = None use_pretrained_backbone = False use_timm_backbone = False backbone_kwargs = None text_config = None num_queries = 900 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 = 'relu' d_model = 256 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 auxiliary_loss = False position_embedding_type = 'sine' num_feature_levels = 4 encoder_n_points = 4 decoder_n_points = 4 two_stage = True class_cost = 1.0 bbox_cost = 5.0 giou_cost = 2.0 bbox_loss_coefficient = 5.0 giou_loss_coefficient = 2.0 focal_alpha = 0.25 disable_custom_kernels = False max_text_len = 256 text_enhancer_dropout = 0.0 fusion_droppath = 0.1 fusion_dropout = 0.0 embedding_init_target = True query_dim = 4 decoder_bbox_embed_share = True two_stage_bbox_embed_share = False positional_embedding_temperature = 20 init_std = 0.02 layer_norm_eps = 1e-05 **kwargs )
参数
- backbone_config (
PretrainedConfig
或dict
, 可选,默认为ResNetConfig()
) — backbone 模型的配置。 - backbone (
str
, 可选) — 当backbone_config
为None
时,要使用的 backbone 名称。如果use_pretrained_backbone
为True
,这将从 timm 或 transformers 库加载相应的预训练权重。如果use_pretrained_backbone
为False
,则加载 backbone 的配置并使用它来初始化具有随机权重的 backbone。 - use_pretrained_backbone (
bool
, 可选,默认为False
) — 是否为 backbone 使用预训练权重。 - use_timm_backbone (
bool
, 可选,默认为False
) — 是否从 timm 库加载backbone
。如果为False
,则从 transformers 库加载 backbone。 - backbone_kwargs (
dict
, 可选) — 从检查点加载时要传递给 AutoBackbone 的关键字参数,例如{'out_indices': (0, 1, 2, 3)}
。如果设置了backbone_config
,则不能指定。 - text_config (
Union[AutoConfig, dict]
, 可选,默认为BertConfig
) — 文本 backbone 的配置对象或字典。 - num_queries (
int
, 可选,默认为 900) — 对象查询的数量,即检测槽。这是 GroundingDinoModel 在单张图像中可以检测到的最大对象数量。 - encoder_layers (
int
, 可选,默认为 6) — 编码器层数。 - encoder_ffn_dim (
int
, 可选,默认为 2048) — 编码器中“中间”(通常称为前馈)层的维度。 - encoder_attention_heads (
int
, 可选,默认为 8) — Transformer 编码器中每个注意力层的注意力头数。 - decoder_layers (
int
, 可选,默认为 6) — 解码器层数。 - decoder_ffn_dim (
int
, 可选,默认为 2048) — 解码器中“中间”(通常称为前馈)层的维度。 - decoder_attention_heads (
int
, 可选,默认为 8) — Transformer 解码器中每个注意力层的注意力头数。 - is_encoder_decoder (
bool
, 可选, 默认为True
) — 模型是否用作编码器/解码器。 - activation_function (
str
或function
, 可选, 默认为"relu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - d_model (
int
, 可选, 默认为 256) — 层的维度。 - dropout (
float
, 可选, 默认为 0.1) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。 - attention_dropout (
float
, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。 - activation_dropout (
float
, 可选, 默认为 0.0) — 全连接层内部激活的 dropout 比率。 - auxiliary_loss (
bool
, 可选, 默认为False
) — 是否使用辅助解码损失(每个解码器层的损失)。 - position_embedding_type (
str
, 可选, 默认为"sine"
) — 要在图像特征之上使用的位置嵌入类型。可以是"sine"
或"learned"
之一。 - num_feature_levels (
int
, 可选, 默认为 4) — 输入特征级别的数量。 - encoder_n_points (
int
, 可选, 默认为 4) — 编码器中每个注意力头的每个特征级别中采样的键的数量。 - decoder_n_points (
int
, 可选, 默认为 4) — 解码器中每个注意力头的每个特征级别中采样的键的数量。 - two_stage (
bool
, 可选, 默认为True
) — 是否应用两阶段可变形 DETR,其中区域提议也由 Grounding DINO 的变体生成,这些变体进一步馈送到解码器以进行迭代边界框细化。 - class_cost (
float
, 可选, 默认为 1.0) — 匈牙利匹配成本中分类错误的相对权重。 - bbox_cost (
float
, 可选, 默认为 5.0) — 匈牙利匹配成本中边界框坐标的 L1 误差的相对权重。 - giou_cost (
float
, 可选, 默认为 2.0) — 匈牙利匹配成本中边界框的广义 IoU 损失的相对权重。 - bbox_loss_coefficient (
float
, 可选, 默认为 5.0) — 对象检测损失中 L1 边界框损失的相对权重。 - giou_loss_coefficient (
float
, 可选, 默认为 2.0) — 对象检测损失中广义 IoU 损失的相对权重。 - focal_alpha (
float
, 可选, 默认为 0.25) — focal loss 中的 Alpha 参数。 - disable_custom_kernels (
bool
, 可选, 默认为False
) — 禁用自定义 CUDA 和 CPU 内核的使用。此选项对于 ONNX 导出是必要的,因为 PyTorch ONNX 导出不支持自定义内核。 - max_text_len (
int
, 可选, 默认为 256) — 文本输入的最大长度。 - text_enhancer_dropout (
float
, 可选, 默认为 0.0) — 文本增强器的 dropout 比率。 - fusion_droppath (
float
, 可选, 默认为 0.1) — 融合模块的 droppath 比率。 - fusion_dropout (
float
, 可选, 默认为 0.0) — 融合模块的 dropout 比率。 - embedding_init_target (
bool
, 可选, 默认为True
) — 是否使用 Embedding 权重初始化目标。 - query_dim (
int
, 可选, 默认为 4) — 查询向量的维度。 - decoder_bbox_embed_share (
bool
, 可选, 默认为True
) — 是否为所有解码器层共享 bbox 回归头。 - two_stage_bbox_embed_share (
bool
, 可选, 默认为False
) — 是否在两阶段 bbox 生成器和区域提议生成之间共享 bbox 嵌入。 - positional_embedding_temperature (
float
, 可选, 默认为 20) — 与视觉骨干网络一起使用的 Sine Positional Embedding 的温度。 - init_std (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float
, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon 值。
这是用于存储 GroundingDinoModel 配置的配置类。它用于根据指定的参数实例化 Grounding DINO 模型,定义模型架构。使用默认值实例化配置将产生与 Grounding DINO IDEA-Research/grounding-dino-tiny 架构类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。
示例
>>> from transformers import GroundingDinoConfig, GroundingDinoModel
>>> # Initializing a Grounding DINO IDEA-Research/grounding-dino-tiny style configuration
>>> configuration = GroundingDinoConfig()
>>> # Initializing a model (with random weights) from the IDEA-Research/grounding-dino-tiny style configuration
>>> model = GroundingDinoModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
GroundingDinoModel
class transformers.GroundingDinoModel
< source >( config: GroundingDinoConfig )
参数
- config (GroundingDinoConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
裸 Grounding DINO 模型(由骨干网络和编码器-解码器 Transformer 组成)输出原始隐藏状态,顶部没有任何特定的 head。
此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。像使用常规 PyTorch 模块一样使用它,并参考 PyTorch 文档以了解所有与通用用法和行为相关的事项。
forward
< source >( pixel_values: Tensor input_ids: Tensor token_type_ids: Optional = None attention_mask: Optional = None pixel_mask: Optional = None encoder_outputs = None output_attentions = None output_hidden_states = None return_dict = None ) → transformers.models.grounding_dino.modeling_grounding_dino.GroundingDinoModelOutput
or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。如果您提供填充,默认情况下将忽略填充。像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 GroundingDinoImageProcessor.call()。
- input_ids (
torch.LongTensor
,形状为(batch_size, text_sequence_length)
) — 词汇表中输入序列标记的索引。如果您提供填充,默认情况下将忽略填充。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 BertTokenizer.call()。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, text_sequence_length)
,可选) — 分段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]
中选择:0 对应于sentence A
标记,1 对应于sentence B
标记 - attention_mask (
torch.LongTensor
,形状为(batch_size, text_sequence_length)
,可选) — 掩码,以避免对填充标记索引执行注意力机制。掩码值在[0, 1]
中选择:- 1 代表真实标记(即未被掩码),
- 0 代表填充标记(即被掩码)。
- pixel_mask (
torch.LongTensor
,形状为(batch_size, height, width)
,可选) — 掩码,以避免对填充像素值执行注意力机制。掩码值在[0, 1]
中选择:- 1 代表真实像素(即未被掩码),
- 0 代表填充像素(即被掩码)。
- encoder_outputs (
tuple(tuple(torch.FloatTensor)
,可选) — 元组由 (last_hidden_state_vision
,可选:last_hidden_state_text
,可选:vision_hidden_states
,可选:text_hidden_states
,可选:attentions
) 组成。last_hidden_state_vision
的形状为(batch_size, sequence_length, hidden_size)
,可选) 是编码器最后一层输出的隐藏状态序列。在解码器的交叉注意力机制中使用。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.models.grounding_dino.modeling_grounding_dino.GroundingDinoModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.grounding_dino.modeling_grounding_dino.GroundingDinoModelOutput
或一个 torch.FloatTensor
元组(如果传递 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (GroundingDinoConfig) 和输入。
- last_hidden_state (
torch.FloatTensor
,形状为(batch_size, num_queries, hidden_size)
) — 模型解码器最后一层输出的隐藏状态序列。 - init_reference_points (
torch.FloatTensor
,形状为(batch_size, num_queries, 4)
) — 通过 Transformer 解码器发送的初始参考点。 - 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(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_vision (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 模型编码器最后一层输出的隐藏状态序列。 - encoder_last_hidden_state_text (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 模型编码器最后一层输出的隐藏状态序列。 - encoder_vision_hidden_states (
tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(视觉嵌入输出的输出一个,每一层输出一个),形状为(batch_size, sequence_length, hidden_size)
。视觉编码器在每一层输出以及初始嵌入输出处的隐藏状态。 - encoder_text_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(tuple(torch.FloatTensor))
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
元组的元组(每一层的注意力一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于计算文本-视觉注意力、视觉-文本注意力、文本增强器(自注意力)和多尺度可变形注意力头中的加权平均值。注意力 softmax,用于计算双向注意力头中的加权平均值。 - enc_outputs_class (
torch.FloatTensor
,形状为(batch_size, sequence_length, config.num_labels)
,可选,当config.two_stage=True
时返回) — 预测的边界框分数,其中前config.num_queries
个得分最高的边界框在第一阶段被选为区域提议。边界框二元分类(即前景和背景)的输出。 - enc_outputs_coord_logits (
torch.FloatTensor
,形状为(batch_size, sequence_length, 4)
,可选,当config.two_stage=True
时返回) — 第一阶段中预测的边界框坐标的 Logits。
GroundingDinoModel 的 forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的步骤需要在该函数中定义,但应该在之后调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from transformers import AutoProcessor, AutoModel
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> text = "a cat."
>>> processor = AutoProcessor.from_pretrained("IDEA-Research/grounding-dino-tiny")
>>> model = AutoModel.from_pretrained("IDEA-Research/grounding-dino-tiny")
>>> inputs = processor(images=image, text=text, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 900, 256]
GroundingDinoForObjectDetection
class transformers.GroundingDinoForObjectDetection
< source >( config: GroundingDinoConfig )
参数
- config (GroundingDinoConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
带有顶部对象检测头的 Grounding DINO 模型(由骨干网络和编码器-解码器 Transformer 组成),用于诸如 COCO 检测之类的任务。
此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。像使用常规 PyTorch 模块一样使用它,并参考 PyTorch 文档以了解所有与通用用法和行为相关的事项。
forward
< source >( pixel_values: FloatTensor input_ids: LongTensor token_type_ids: LongTensor = None attention_mask: LongTensor = None pixel_mask: Optional = None encoder_outputs: Union = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None labels: List = None ) → transformers.models.grounding_dino.modeling_grounding_dino.GroundingDinoObjectDetectionOutput
或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。如果您提供填充,默认情况下将忽略填充。像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 GroundingDinoImageProcessor.call()。
- input_ids (
torch.LongTensor
of shape(batch_size, text_sequence_length)
) — 词汇表中输入序列 tokens 的索引。如果您提供填充,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 BertTokenizer.call()。
- token_type_ids (
torch.LongTensor
of shape(batch_size, text_sequence_length)
, optional) — 段落 tokens 索引,用于指示输入的第一部分和第二部分。 索引在[0, 1]
中选择:0 对应于sentence A
token,1 对应于sentence B
token - attention_mask (
torch.LongTensor
of shape(batch_size, text_sequence_length)
, optional) — 用于避免在填充 token 索引上执行 attention 的 Mask。 Mask 值在[0, 1]
中选择:- 1 代表真实 tokens(即,未被 mask),
- 0 代表填充 tokens(即,被 mask)。
- pixel_mask (
torch.LongTensor
of shape(batch_size, height, width)
, optional) — 用于避免在填充像素值上执行 attention 的 Mask。 Mask 值在[0, 1]
中选择:- 1 代表真实像素(即,未被 mask),
- 0 代表填充像素(即,被 mask)。
- encoder_outputs (
tuple(tuple(torch.FloatTensor)
, optional) — 元组由 (last_hidden_state_vision
, optional:last_hidden_state_text
, optional:vision_hidden_states
, optional:text_hidden_states
, optional:attentions
) 组成。 形状为(batch_size, sequence_length, hidden_size)
的last_hidden_state_vision
(可选)是编码器最后一层的输出处的隐藏状态序列。 用于解码器的交叉注意力机制。 - output_attentions (
bool
, optional) — 是否返回所有 attention 层的 attentions 张量。 有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是纯元组。 - labels (
List[Dict]
of len(batch_size,)
, optional) — 用于计算二分图匹配损失的标签。 字典列表,每个字典至少包含以下 2 个键:“class_labels” 和 “boxes”(分别是批次中图像的类别标签和边界框)。 类别标签本身应为长度为(图像中边界框的数量,)
的torch.LongTensor
,而框应为形状为(图像中边界框的数量, 4)
的torch.FloatTensor
。
返回值
transformers.models.grounding_dino.modeling_grounding_dino.GroundingDinoObjectDetectionOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.grounding_dino.modeling_grounding_dino.GroundingDinoObjectDetectionOutput
或 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含取决于配置 (GroundingDinoConfig) 和输入的各种元素。
- loss (
torch.FloatTensor
of shape(1,)
, optional, 当提供labels
时返回) — 总损失,作为类别预测的负对数似然(交叉熵)和边界框损失的线性组合。 后者定义为 L1 损失和广义尺度不变 IoU 损失的线性组合。 - loss_dict (
Dict
, optional) — 包含各个损失的字典。 用于记录日志很有用。 - logits (
torch.FloatTensor
of shape(batch_size, num_queries, num_classes + 1)
) — 所有 queries 的分类 logits(包括无对象)。 - pred_boxes (
torch.FloatTensor
of shape(batch_size, num_queries, 4)
) — 所有 queries 的归一化框坐标,表示为 (center_x, center_y, width, height)。 这些值在 [0, 1] 中归一化,相对于批次中每个单独图像的大小(忽略可能的填充)。 您可以使用~GroundingDinoProcessor.post_process_object_detection
来检索未归一化的边界框。 - auxiliary_outputs (
List[Dict]
, optional) — 可选,仅当辅助损失被激活时返回(即,config.auxiliary_loss
设置为True
)并且提供了标签。 它是字典的列表,其中包含每个解码器层的上述两个键(logits
和pred_boxes
)。 - last_hidden_state (
torch.FloatTensor
of shape(batch_size, num_queries, hidden_size)
, optional) — 模型解码器最后一层输出处的隐藏状态序列。 - 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(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_vision (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 模型编码器最后一层输出的隐藏状态序列。 - encoder_last_hidden_state_text (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 模型编码器最后一层输出的隐藏状态序列。 - encoder_vision_hidden_states (
tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(视觉嵌入输出的输出一个,每一层输出一个),形状为(batch_size, sequence_length, hidden_size)
。视觉编码器在每一层输出以及初始嵌入输出处的隐藏状态。 - encoder_text_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(tuple(torch.FloatTensor))
, optional, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
元组的元组(每层 attention 一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。 attention softmax 之后的 Attention 权重,用于计算文本-视觉 attention、视觉-文本 attention、文本增强器(自注意力)和多尺度可变形 attention 头中的加权平均值。 - 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.two_stage=True
时返回) — 预测的边界框分数,其中前config.num_queries
个得分最高的边界框在第一阶段被选为区域提议。边界框二元分类(即前景和背景)的输出。 - enc_outputs_coord_logits (
torch.FloatTensor
,形状为(batch_size, sequence_length, 4)
,可选,当config.two_stage=True
时返回) — 第一阶段中预测的边界框坐标的 Logits。
GroundingDinoForObjectDetection 前向方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的步骤需要在该函数中定义,但应该在之后调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from transformers import AutoProcessor, GroundingDinoForObjectDetection
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> text = "a cat."
>>> processor = AutoProcessor.from_pretrained("IDEA-Research/grounding-dino-tiny")
>>> model = GroundingDinoForObjectDetection.from_pretrained("IDEA-Research/grounding-dino-tiny")
>>> inputs = processor(images=image, text=text, return_tensors="pt")
>>> outputs = model(**inputs)
>>> # convert outputs (bounding boxes and class logits) to COCO API
>>> target_sizes = torch.tensor([image.size[::-1]])
>>> results = processor.image_processor.post_process_object_detection(
... outputs, threshold=0.35, target_sizes=target_sizes
... )[0]
>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
... box = [round(i, 1) for i in box.tolist()]
... print(f"Detected {label.item()} with confidence " f"{round(score.item(), 2)} at location {box}")
Detected 1 with confidence 0.45 at location [344.8, 23.2, 637.4, 373.8]
Detected 1 with confidence 0.41 at location [11.9, 51.6, 316.6, 472.9]