Transformers documentation

EoMT-DINOv3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2025-03-24 在 HF papers 上发布,并于 2026-02-02 贡献至 Hugging Face Transformers。

EoMT-DINOv3

SDPA

概述

EoMT-DINOv3 系列在 Encoder-only Mask Transformer 架构的基础上,引入了使用 DINOv3 进行预训练的 Vision Transformers。此次更新在 ADE20K 和 COCO 基准测试中实现了更强的分割质量,同时保留了使 EoMT 适用于实时应用的纯编码器设计。

与基于 DINOv2 的模型相比,DINOv3 变体采用了旋转位置嵌入、可选的门控 MLP 块以及 Meta AI 最新的预训练方案。这些改进在语义分割、实例分割和全景分割任务上带来了可衡量的性能提升,如 DINOv3 模型库 中所示。

原始的 EoMT 架构由 Tommie Kerssies、Niccolò Cavagnero、Alexander Hermans、Narges Norouzi、Giuseppe Averta、Bastian Leibe、Gijs Dubbelman 和 Daan de Geus 在 CVPR 2025 Highlight 论文 Your ViT is Secretly an Image Segmentation Model 中提出。DINOv3 升级版本保留了相同的轻量级分割头和基于查询的推理策略,同时将编码器替换为 DINOv3 ViT 检查点。

提示:

  • 该配置暴露了 DINOv3 特有的参数,例如 rope_theta 和 use_gated_mlp。大型 DINOv3 骨干网络,例如 dinov3-vitg14,要求设置 use_gated_mlp=True。
  • 得益于旋转位置嵌入,DINOv3 模型可以处理更广泛的分辨率范围。图像处理器仍然默认使用方形裁剪,但可以通过 AutoImageProcessor 提供自定义尺寸。
  • TU/e 移动感知系统实验室托管的预训练检查点提供的是增量权重,需要与上游的 DINOv3 主干网络进行合并。官方仓库中的转换工具详细描述了这一工作流程。

该模型由 nielsr 贡献。 原始代码可在此处找到。

使用示例

以下是一个最小示例,展示了如何使用基于 DINOv3 的 EoMT 模型运行全景分割。只需更换检查点,即可将同一图像处理器复用于语义分割或实例分割。

import requests
import torch
from PIL import Image

from transformers import AutoImageProcessor, AutoModelForUniversalSegmentation


model_id = "tue-mps/eomt-dinov3-coco-panoptic-base-640"
processor = AutoImageProcessor.from_pretrained(model_id)
model = AutoModelForUniversalSegmentation.from_pretrained(model_id, device_map="auto")

image = Image.open(requests.get("http://images.cocodataset.org/val2017/000000039769.jpg", stream=True).raw)

inputs = processor(images=image, return_tensors="pt").to(model.device)

with torch.inference_mode():
    outputs = model(**inputs)

segmentation = processor.post_process_panoptic_segmentation(outputs, target_sizes=[image.size[::-1]])[0]
list(segmentation.keys())
['segmentation', 'segments_info']

EomtDinov3Config

class transformers.EomtDinov3Config

< >

( 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 = 0is_encoder_decoder: bool = Falseid2label: 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 = Nonehidden_size: int = 1024num_hidden_layers: int = 24num_attention_heads: int = 16hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06image_size: int | list[int] | tuple[int, int] = 640patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3layerscale_value: float = 1.0drop_path_rate: float | int = 0.0num_upscale_blocks: int = 2attention_dropout: float | int = 0.0num_blocks: int = 4no_object_weight: float = 0.1class_weight: float = 2.0mask_weight: float = 5.0dice_weight: float = 5.0train_num_points: int = 12544oversample_ratio: float = 3.0importance_sample_ratio: float = 0.75num_queries: int = 200num_register_tokens: int = 4intermediate_size: int = 4096rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonequery_bias: bool = Truekey_bias: bool = Falsevalue_bias: bool = Trueproj_bias: bool = Truemlp_bias: bool = Trueuse_gated_mlp: bool = Falsepos_embed_shift: float | None = Nonepos_embed_jitter: float | None = Nonepos_embed_rescale: float | None = 2.0 )

参数

  • hidden_size (int,可选,默认为 1024) — 隐藏表示的维度。
  • num_hidden_layers (int,可选,默认为 24) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int,可选,默认为 16) — Transformer 解码器中每个注意力层的注意力头数量。
  • hidden_act (str,可选,默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • hidden_dropout_prob (Union[float, int],可选,默认为 0.0) — 嵌入层、编码器和池化层中所有全连接层的 dropout 概率。
  • initializer_range (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float,可选,默认为 1e-06) — 层归一化层所使用的 epsilon 值。
  • image_size (Union[int, list[int], tuple[int, int]],可选,默认为 640) — 每张图片的尺寸(分辨率)。
  • patch_size (Union[int, list[int], tuple[int, int]],可选,默认为 16) — 每个 patch 的大小(分辨率)。
  • num_channels (int,可选,默认为 3) — 输入通道的数量。
  • layerscale_value (float,可选,默认为 1.0) — LayerScale 参数的初始值。
  • drop_path_rate (Union[float, int],可选,默认为 0.0) — 用于 patch fusion 的 drop path 比率。
  • num_upscale_blocks (int,可选,默认为 2) — 解码器或分割头中使用的上采样块数量。
  • attention_dropout (Union[float, int],可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • num_blocks (int,可选,默认为 4) — 架构中特征块或阶段的数量。
  • no_object_weight (float,可选,默认值为 0.1) — 全景/实例分割中“无对象”类别的损失权重。
  • class_weight (float,可选,默认为 2.0) — 匈牙利匹配代价中分类错误的相对权重。
  • mask_weight (float,可选,默认为 5.0) — 全景分割损失中焦点损失的相对权重。
  • dice_weight (float,可选,默认为 5.0) — 全景分割损失中 dice 损失的相对权重。
  • train_num_points (int,可选,默认为 12544) — 训练期间用于计算掩码损失的采样点数。
  • oversample_ratio (float,可选,默认值为 3.0) — 用于掩码训练点采样的过采样率。
  • importance_sample_ratio (float,可选,默认值为 0.75) — 训练期间基于重要性采样的点比例。
  • num_queries (int,可选,默认为 200) — Transformer 中对象查询的数量。
  • num_register_tokens (int,可选,默认为 4) — 添加到 Transformer 输入中的可学习寄存器 token 数量。
  • intermediate_size (int,可选,默认为 4096) — MLP 表示的维度。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,并且如果希望使用 RoPE 处理更长的 max_position_embeddings,则可选地包含用于缩放的参数。
  • query_bias (bool,可选,默认为 True) — 是否在查询投影中使用偏置。
  • key_bias (bool,可选,默认为 False) — 是否在键投影中使用偏置。
  • value_bias (bool,可选,默认为 True) — 是否在 value 投影中使用偏置。
  • proj_bias (bool,可选,默认为 True) — 是否在输出投影中使用偏置。
  • mlp_bias (bool,可选,默认为 True) — 是否在 MLP 层的 up_proj、down_proj 和 gate_proj 层中使用偏置。
  • use_gated_mlp (bool,可选,默认为 False) — 是否使用门控 MLP 层。
  • pos_embed_shift (float, 可选) — 位置嵌入的偏移值。
  • pos_embed_jitter (float, 可选) — 位置嵌入的抖动值。
  • pos_embed_rescale (float,可选,默认值为 2.0) — 位置嵌入的重新缩放值。

这是用于存储 Eomt Dinov3Model 配置的类。它根据指定的参数实例化 Eomt Dinov3 模型,并定义模型架构。使用默认值实例化配置将得到与 tue-mps/coco_panoptic_eomt_large_640_dinov3 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

EomtDinov3PreTrainedModel

类 transformers.EomtDinov3PreTrainedModel

< >

( config: PreTrainedConfig*inputs**kwargs )

参数

  • config (PreTrainedConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

( *args**kwargs )

点分路径(例如 torch.float32)的模拟值:属性访问链和调用行为如同透传装饰器,repr 返回点分路径,将其用作基类时会替换为普通的 type 基类(PEP 560 __mro_entries__),因此真实的子类保留正常的元类,且 inspect.signature 读取的是它们真实的 __init__,而非模拟对象的。

EomtDinov3ForUniversalSegmentation

class transformers.EomtDinov3ForUniversalSegmentation

< >

( config: EomtDinov3Config )

参数

  • config (EomtDinov3Config) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

带有顶部头部的 EoMT-DINOv3 模型,用于实例/语义/全景分割。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( pixel_values: Tensormask_labels: list[torch.Tensor] | None = Noneclass_labels: list[torch.Tensor] | None = Nonepatch_offsets: list[torch.Tensor] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → EomtDinov3ForUniversalSegmentationOutput or tuple(torch.Tensor)

参数

  • pixel_values (torch.Tensor,形状为 (batch_size, num_channels, image_size, image_size)) — 对应输入图像的张量。可以使用 EomtImageProcessor 获取像素值。有关详细信息,请参阅 EomtImageProcessor.call()(processor_class 使用 EomtImageProcessor 处理图像)。
  • mask_labels (list[torch.Tensor],可选) — 形状为 (num_labels, height, width) 的掩码标签列表,用于输入模型
  • class_labels (list[torch.LongTensor], 可选) — 要输入模型的、形状为 (num_labels, height, width) 的目标类别标签列表。它们标识 mask_labels 的标签,例如,当 class_labels[i][j] 时,mask_labels[i][j] 的标签。
  • patch_offsets (list[torch.Tensor],可选) — 一个元组列表,指示用于语义分割的图像索引以及 patch 的起始和结束位置。

返回值

EomtDinov3ForUniversalSegmentationOutput 或 tuple(torch.Tensor)

EomtDinov3ForUniversalSegmentationOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(EomtDinov3Config)和输入。

EomtDinov3ForUniversalSegmentation 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • loss (torch.Tensor, 可选) — 计算得到的损失,在存在标签时返回。
  • class_queries_logits (torch.Tensor, 可选) — 形状为 (batch_size, num_queries, num_labels + 1) 的张量,表示每个查询所提议的类别。请注意,+ 1 是必需的,因为我们纳入了空类别。
  • masks_queries_logits (torch.Tensor, 可选) — 形状为 (batch_size, num_queries, height, width) 的张量,表示每个查询对应的预测掩码。
  • last_hidden_state(形状为 (batch_size, num_channels, height, width) 的 torch.Tensor)— 最后一层的最后隐藏状态(最终特征图)。
  • hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层输出以及每个阶段的输出),形状为 (batch_size, sequence_length, hidden_size)。模型所有层的隐藏状态。
  • attentions (tuple(tuple(torch.Tensor)),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 tuple(torch.Tensor) 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。来自 transformer 解码器的自注意力和交叉注意力权重。
  • patch_offsets (list[torch.Tensor],可选) — 一个元组列表,指示用于语义分割的图像索引以及 patch 的起始和结束位置。
Update on GitHub