Transformers documentation
UPerNet
Эта модель была опубликована в 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 и показали, что он способен эффективно сегментировать широкий спектр концепций на изображениях. Обученные нейросети дополнительно применяются для обнаружения визуальных знаний в естественных сценах.
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.
- Демо-ноутбуки для UPerNet можно найти здесь.
- UperNetForSemanticSegmentation поддерживается в этом ноутбуке.
- См. также: Руководство по задаче семантической сегментации
Если вы хотите предложить ресурс для включения в этот раздел, пожалуйста, создайте Pull Request, и мы его рассмотрим! В идеале ресурс должен демонстрировать что-то новое, а не дублировать уже имеющийся.
UperNetConfig
класс transformers.UperNetConfig
< source >( 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.configUperNetForSemanticSegmentation
класс transformers.UperNetForSemanticSegmentation
< source >( config: UperNetConfig )
Параметры
- config (UperNetConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Фреймворк UperNet, использующий любой визуальный бэкбон, например, для ADE20k, CityScapes.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( 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]