Transformers documentation

UPerNet

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

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 26.07.2018 и добавлена в Hugging Face Transformers 16.01.2023.

UPerNet

Обзор

Модель UPerNet была предложена в работе Unified Perceptual Parsing for Scene Understanding авторами Tete Xiao, Yingcheng Liu, Bolei Zhou, Yuning Jiang, Jian Sun. UPerNet представляет собой универсальный фреймворк для эффективного сегментирования широкого круга концепций на изображениях с использованием любого визуального бэкбона, например ConvNeXt или Swin.

Аннотация из статьи следующая:

Человек воспринимает визуальный мир на нескольких уровнях: мы легко классифицируем сцены и обнаруживаем объекты внутри них, одновременно распознавая текстуры и поверхности объектов, а также их различные составные части. В данной статье мы рассматриваем новую задачу, называемую Unified Perceptual Parsing, которая требует от систем машинного зрения распознавать как можно больше визуальных концепций на основе заданного изображения. Разработаны многозадачная фреймворк UPerNet и стратегия обучения для работы с гетерогенными аннотациями изображений. Мы протестировали наш фреймворк на задаче Unified Perceptual Parsing и показали, что он способен эффективно сегментировать широкий спектр концепций на изображениях. Обученные нейросети дополнительно применяются для обнаружения визуальных знаний в естественных сценах.

drawing UPerNet framework. Taken from the original paper.

Эта модель была добавлена пользователем nielsr. Исходный код основан на mmsegmentation от OpenMMLab, см. здесь.

Примеры использования

UPerNet — это универсальный фреймворк для семантической сегментации. Его можно использовать с любым визуальным бэкбоном, например:

from transformers import SwinConfig, UperNetConfig, UperNetForSemanticSegmentation


backbone_config = SwinConfig(out_features=["stage1", "stage2", "stage3", "stage4"])

config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)

Чтобы использовать другой визуальный бэкбон, например ConvNeXt, просто создайте модель с соответствующим бэкбоном:

from transformers import ConvNextConfig, UperNetConfig, UperNetForSemanticSegmentation


backbone_config = ConvNextConfig(out_features=["stage1", "stage2", "stage3", "stage4"])

config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)

Обратите внимание, что это приведет к случайной инициализации всех весов модели.

Ресурсы

Список официальных ресурсов Hugging Face и сообщества (отмечены 🌎), которые помогут вам начать работу с UPerNet.

Если вы хотите предложить ресурс для включения в этот раздел, пожалуйста, создайте Pull Request, и мы его рассмотрим! В идеале ресурс должен демонстрировать что-то новое, а не дублировать уже имеющийся.

UperNetConfig

класс transformers.UperNetConfig

< >

( 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 = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonehidden_size: int = 512initializer_range: float = 0.02pool_scales: list[int] | tuple[int, ...] = (1, 2, 3, 6)use_auxiliary_head: bool = Trueauxiliary_loss_weight: float = 0.4auxiliary_in_channels: int | None = Noneauxiliary_channels: int = 256auxiliary_num_convs: int = 1auxiliary_concat_input: bool = Falseloss_ignore_index: int = 255 )

Параметры

  • backbone_config (Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Конфигурация модели-бэкбона.
  • hidden_size (int, необязательный, по умолчанию 512) — Размерность скрытых представлений.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • pool_scales (tuple[int], необязательный, по умолчанию [1, 2, 3, 6]) — Масштабы пулинга, используемые в модуле Pooling Pyramid Module, применяемом к последней картe признаков.
  • use_auxiliary_head (bool, необязательный, по умолчанию True) — Использовать ли вспомогательный слой (auxiliary head) во время обучения.
  • auxiliary_loss_weight (float, необязательный, по умолчанию 0.4) — Вес функции потерь кросс-энтропии для вспомогательного слоя.
  • auxiliary_in_channels (int, необязательный, по умолчанию 256) — Количество входных каналов в вспомогательной голове.
  • auxiliary_channels (int, необязательный, по умолчанию 256) — Количество каналов, используемых в вспомогательном слое.
  • auxiliary_num_convs (int, необязательный, по умолчанию 1) — Количество свёрточных слоёв, используемых в вспомогательной голове.
  • auxiliary_concat_input (bool, необязательный, по умолчанию False) — Определяет, следует ли конкатенировать выход вспомогательного слоя с входом перед слоем классификации.
  • loss_ignore_index (int, необязательный, по умолчанию 255) — Индекс, который игнорируется функцией потерь.

Это класс конфигурации для хранения настроек модели UpernetModel. Он используется для создания модели Upernet в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации openmmlab/upernet-convnext-tiny

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Примеры:

>>> from transformers import UperNetConfig, UperNetForSemanticSegmentation

>>> # Initializing a configuration
>>> configuration = UperNetConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = UperNetForSemanticSegmentation(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

UperNetForSemanticSegmentation

класс transformers.UperNetForSemanticSegmentation

< >

( config: UperNetConfig )

Параметры

  • config (UperNetConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().

Фреймворк UperNet, использующий любой визуальный бэкбон, например, для ADE20k, CityScapes.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None**kwargs ) → SemanticSegmenterOutput or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью SegformerImageProcessor. Подробности см. в SegformerImageProcessor.call() (processor_class использует SegformerImageProcessor для обработки изображений).
  • output_attentions (bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описании attentions в разделе возвращаемых тензоров.
  • output_hidden_states (bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описании hidden_states среди возвращаемых тензоров.
  • labels (torch.LongTensor формы (batch_size, height, width), необязательный) — Карты семантической сегментации для вычисления функции потерь. Индексы должны находиться в диапазоне [0, ..., config.num_labels - 1]. Если config.num_labels > 1, вычисляется функция потерь для классификации (Cross-Entropy).
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

SemanticSegmenterOutput или tuple(torch.Tensor)

Объект SemanticSegmenterOutput или кортеж из torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (UperNetConfig) и входных данных.

Метод forward класса UperNetForSemanticSegmentation переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • loss (torch.Tensor формы (1,), необязательный, возвращается, если задан labels) — Потери классификации (или регрессии, если config.num_labels==1).

  • logits (torch.Tensor формы (batch_size, config.num_labels, logits_height, logits_width)) — Оценки классификации для каждого пикселя.

    Возвращаемые logits не обязательно имеют тот же размер, что и переданные на вход pixel_values. Это сделано, чтобы избежать двойной интерполяции и потери качества, когда пользователю необходимо изменить размер logits до исходного размера изображения на этапе постобработки. Всегда проверяйте форму logits и изменяйте размер по мере необходимости.

  • hidden_states (tuple(torch.Tensor), необязательный, возвращается при передаче output_hidden_states=True или когда config.output_hidden_states=True) — Кортеж из torch.Tensor (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы (batch_size, patch_size, hidden_size).

    Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

  • attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, patch_size, sequence_length).

    Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Примеры:

>>> from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download

>>> image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> model = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-tiny")

>>> filepath = hf_hub_download(
...     repo_id="hf-internal-testing/fixtures_ade20k", filename="ADE_val_00000001.jpg", repo_type="dataset"
... )
>>> image = Image.open(filepath).convert("RGB")

>>> inputs = image_processor(images=image, return_tensors="pt")

>>> outputs = model(**inputs)

>>> logits = outputs.logits  # shape (batch_size, num_labels, height, width)
>>> list(logits.shape)
[1, 150, 512, 512]
Update on GitHub