Transformers 文档

EoMT-DINOv3

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2025 年 3 月 24 日在 HF papers 上发布,并于 2026 年 2 月 2 日贡献给 Hugging Face Transformers。

EoMT-DINOv3

SDPA

概述

EoMT-DINOv3 系列扩展了 仅编码器掩码 Transformer (Encoder-only Mask Transformer) 架构,采用了使用 DINOv3 进行预训练的视觉 Transformer。此次更新在 ADE20K 和 COCO 基准测试上提供了更强的分割质量,同时保留了使 EoMT 在实时应用中备受青睐的仅编码器设计。

与基于 DINOv2 的模型相比,DINOv3 变体利用了旋转位置嵌入 (rotary position embeddings)、可选的门控 MLP 块以及来自 Meta AI 的最新预训练方法。正如 DINOv3 模型库 (model zoo) 中所述,这些更改在语义、实例和全景分割任务中带来了可衡量的性能提升。

最初的 EoMT 架构是在 CVPR 2025 重点论文 你的 ViT 实际上是一个图像分割模型 (Your ViT is Secretly an Image Segmentation Model) 中提出的,作者为 Tommie Kerssies、Niccolò Cavagnero、Alexander Hermans、Narges Norouzi、Giuseppe Averta、Bastian Leibe、Gijs Dubbelman 和 Daan de Geus。DINOv3 升级版保留了相同的轻量级分割头和基于查询的推理策略,同时将编码器更换为 DINOv3 ViT 检查点。

技巧

  • 该配置公开了 DINOv3 特有的调节参数,例如 rope_thetause_gated_mlp。大型 DINOv3 主干网络(如 dinov3-vitg14)需要将 use_gated_mlp 设置为 True
  • 得益于旋转位置嵌入,DINOv3 模型可以在更广泛的分辨率范围内运行。图像处理器仍然默认使用正方形裁剪,但可以通过 AutoImageProcessor 提供自定义尺寸。
  • 由 TU/e 移动感知系统实验室 (Mobile Perception Systems Lab) 托管的预训练检查点提供了 delta 权重,应将其与上游的 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).to("cuda" if torch.cuda.is_available() else "cpu", 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 = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None hidden_size: int = 1024 num_hidden_layers: int = 24 num_attention_heads: int = 16 hidden_act: str = 'gelu' hidden_dropout_prob: float | int = 0.0 initializer_range: float = 0.02 layer_norm_eps: float = 1e-06 image_size: int | list[int] | tuple[int, int] = 640 patch_size: int | list[int] | tuple[int, int] = 16 num_channels: int = 3 layerscale_value: float = 1.0 drop_path_rate: float | int = 0.0 num_upscale_blocks: int = 2 attention_dropout: float | int = 0.0 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 train_num_points: int = 12544 oversample_ratio: float = 3.0 importance_sample_ratio: float = 0.75 num_queries: int = 200 num_register_tokens: int = 4 intermediate_size: int = 4096 rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None query_bias: bool = True key_bias: bool = False value_bias: bool = True proj_bias: bool = True mlp_bias: bool = True use_gated_mlp: bool = False pos_embed_shift: float | None = None pos_embed_jitter: float | None = None pos_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 probability)。
  • 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 rate)。
  • num_upscale_blocks (int, 可选, 默认为 2) — 解码器或分割头中使用的上采样块数量。
  • attention_dropout (Union[float, int], 可选, 默认为 0.0) — 注意力概率的丢弃率。
  • num_blocks (int, 可选, 默认为 4) — 架构中的特征块或阶段的数量。
  • no_object_weight (float, 可选, 默认为 0.1) — 全景/实例分割中“无对象”类别的损失权重。
  • class_weight (float, 可选, 默认为 2.0) — 匈牙利匹配代价中分类误差的相对权重。
  • mask_weight (float, 可选, 默认为 5.0) — 全景分割损失中焦点损失 (focal loss) 的相对权重。
  • 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 输入中的可学习寄存器标记 (learnable register tokens) 数量。
  • intermediate_size (int, 可选, 默认为 4096) — MLP 表示的维度。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,以及在希望将 RoPE 与更长的 max_position_embeddings 一起使用时用于缩放的可选参数。
  • query_bias (bool, 可选, 默认为 True) — 是否在查询投影 (query projection) 中使用偏置 (bias)。
  • key_bias (bool, 可选, 默认为 False) — 是否在键投影 (key projection) 中使用偏置。
  • value_bias (bool, 可选, 默认为 True) — 是否在值投影 (value projection) 中使用偏置。
  • proj_bias (bool, 可选, 默认为 True) — 是否在输出投影 (output projection) 中使用偏置。
  • 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

class transformers.EomtDinov3PreTrainedModel

< >

( config: PreTrainedConfig *inputs **kwargs )

参数

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

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

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

_forward_unimplemented

< >

( *input: typing.Any )

定义每次调用时执行的计算。

应由所有子类覆盖。

尽管前向传播的配方需要在该函数中定义,但之后应该调用 Module 实例而不是它,因为前者负责运行注册的钩子,而后者则默默地忽略它们。

EomtDinov3ForUniversalSegmentation

class transformers.EomtDinov3ForUniversalSegmentation

< >

( config: EomtDinov3Config )

参数

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

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

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

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( pixel_values: Tensor mask_labels: list[torch.Tensor] | None = None class_labels: list[torch.Tensor] | None = None patch_offsets: list[torch.Tensor] | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) EomtDinov3ForUniversalSegmentationOutputtuple(torch.FloatTensor)

参数

  • 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)的图像索引以及起始和结束位置。

返回

EomtDinov3ForUniversalSegmentationOutputtuple(torch.FloatTensor)

一个 EomtDinov3ForUniversalSegmentationOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(EomtDinov3Config)和输入包含不同的元素。

EomtDinov3ForUniversalSegmentation 的前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • loss (torch.Tensor, 可选) — 计算出的损失,当存在标签时返回。
  • class_queries_logits (torch.FloatTensor可选,默认为 None) — 形状为 (batch_size, num_queries, num_labels + 1) 的张量,表示每个查询(query)的候选类别。注意,之所以需要 + 1,是因为我们合并了空类别(null class)。
  • masks_queries_logits (torch.FloatTensor, 可选, 默认为 None) — 形状为 (batch_size, num_queries, height, width) 的张量,表示每个查询的建议掩码。
  • last_hidden_state (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 最后一层的隐藏状态(最终特征图)。
  • hidden_states (tuple(torch.FloatTensor), 可选, 当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于嵌入层的输出 + 每个阶段的输出)。模型每一层的隐藏状态。
  • attentions (tuple(tuple(torch.FloatTensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — tuple(torch.FloatTensor) 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。来自 transformer 解码器的自注意力和交叉注意力权重。
  • patch_offsets (list[torch.Tensor]可选) — 元组列表,指示语义分割中补丁(patch)的图像索引以及起始和结束位置。
在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.