Transformers documentation

EoMT-DINOv3

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