Transformers documentation
SegGPT
Эта модель была опубликована в HF papers 06.04.2023 и добавлена в Hugging Face Transformers 26.02.2024.
SegGPT
Обзор
Модель SegGPT была предложена в работе SegGPT: Segmenting Everything In Context авторами Xinlong Wang, Xiaosong Zhang, Yue Cao, Wen Wang, Chunhua Shen, Tiejun Huang. SegGPT использует Transformer с только декодером, который способен генерировать маску сегментации по входному изображению, образцу-подсказке и соответствующей ему маске-подсказке. Модель демонстрирует выдающиеся результаты в режиме one-shot: 56.1 mIoU на COCO-20 и 85.6 mIoU на FSS-1000.
Аннотация из статьи следующая:
Мы представляем SegGPT — универсальную модель для сегментации любых объектов в контексте. Мы объединяем различные задачи сегментации в единый фреймворк обучения в контексте, который поддерживает разные типы данных для сегментации, преобразуя их в единый формат изображений. Обучение SegGPT формулируется как задача раскраски в контексте со случайным сопоставлением цветов для каждого примера данных. Цель состоит в том, чтобы выполнять разнообразные задачи на основе контекста, а не полагаться на конкретные цвета. После обучения SegGPT способен выполнять произвольные задачи сегментации на изображениях или в видео с помощью инференса в контексте, например, сегментацию экземпляров объектов, «stuff», частей, контуров и текста. SegGPT оценивается на широком спектре задач, включая few-shot семантическую сегментацию, сегментацию объектов в видео, семантическую сегментацию и паноптическую сегментацию. Наши результаты демонстрируют высокие возможности в сегментации как внутри, так и вне
Советы:
- Для подготовки входных данных изображения, подсказки и маски для модели можно использовать SegGptImageProcessor.
- В качестве маски-подсказки можно использовать карты сегментации или RGB-изображения. При использовании RGB-изображений убедитесь, что в методе
preprocessустановлено значениеdo_convert_rgb=False. - При использовании
segmentation_maps(без учёта фона) в этапах предобработки и постобработки с помощью SegGptImageProcessor настоятельно рекомендуется передавать параметрnum_labels. - При выполнении инференса с SegGptForImageSegmentation, если ваше
batch_sizeбольше 1, вы можете использовать ансамбль признаков для ваших изображений, передавfeature_ensemble=Trueв метод forward.
Вот как использовать модель для семантической сегментации в режиме one-shot:
import torch
from datasets import load_dataset
from transformers import SegGptForImageSegmentation, SegGptImageProcessor
checkpoint = "BAAI/seggpt-vit-large"
image_processor = SegGptImageProcessor.from_pretrained(checkpoint)
model = SegGptForImageSegmentation.from_pretrained(checkpoint, device_map="auto")
dataset_id = "EduardoPacheco/FoodSeg103"
ds = load_dataset(dataset_id, split="train")
# Number of labels in FoodSeg103 (not including background)
num_labels = 103
image_input = ds[4]["image"]
ground_truth = ds[4]["label"]
image_prompt = ds[29]["image"]
mask_prompt = ds[29]["label"]
inputs = image_processor(
images=image_input,
prompt_images=image_prompt,
segmentation_maps=mask_prompt,
num_labels=num_labels,
return_tensors="pt"
)
with torch.no_grad():
outputs = model(**inputs)
target_sizes = [image_input.size[::-1]]
mask = image_processor.post_process_semantic_segmentation(outputs, target_sizes, num_labels=num_labels)[0]Эта модель была предоставлена EduardoPacheco. Исходный код можно найти здесь.
SegGptConfig
класс transformers.SegGptConfig
< 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 = 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, ...] = (896, 448)patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3qkv_bias: bool = Truemlp_dim: int | None = Nonedrop_path_rate: float | int = 0.1pretrain_image_size: int | list[int] | tuple[int, int] = 224decoder_hidden_size: int = 64use_relative_position_embeddings: bool = Truemerge_index: int = 2intermediate_hidden_state_indices: list[int] | tuple[int, ...] = (5, 11, 17, 23)beta: float = 0.01 )
Параметры
- 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, ...]], необязательный, по умолчанию(896, 448)) — Размер (разрешение) каждого изображения. - patch_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию16) — Размер (разрешение) каждого патча. - num_channels (
int, необязательный, по умолчанию3) — Количество входных каналов. - qkv_bias (
bool, необязательный, по умолчаниюTrue) — Добавлять ли смещение к запросам, ключам и значениям. - mlp_dim (
int, необязательный) — Размерность слоя MLP в кодере Transformer. Если не задано, по умолчанию равноhidden_size* 4. - drop_path_rate (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент drop path для слияния патчей. - pretrain_image_size (
int, необязательный, по умолчанию 224) — Размер, на котором были обучены абсолютные позиционные эмбеддинги. - decoder_hidden_size (
int, необязательный, по умолчанию64) — Размерность скрытых представлений. - use_relative_position_embeddings (
bool, необязательный, по умолчаниюTrue) — Использовать ли относительные векторы позиций в слоях внимания. - merge_index (
int, необязательный, по умолчанию 2) — Индекс слоя кодировщика, в котором объединяются эмбеддинги. - intermediate_hidden_state_indices (
list[int], необязательный, по умолчанию[5, 11, 17, 23]) — Индексы слоёв кодировщика, которые сохраняются в качестве признаков для декодера. - beta (
float, необязательный, по умолчанию 0.01) — Коэффициент регуляризации для SegGptLoss (потери smooth-l1).
Это класс конфигурации для хранения конфигурации модели SegGptModel. Он используется для создания модели Seggpt в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации BAAI/seggpt-vit-large
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import SegGptConfig, SegGptModel
>>> # Initializing a SegGPT seggpt-vit-large style configuration
>>> configuration = SegGptConfig()
>>> # Initializing a model (with random weights) from the seggpt-vit-large style configuration
>>> model = SegGptModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configSegGptImageProcessor
класс transformers.SegGptImageProcessor
< source >( **kwargs: *<class 'transformers.models.seggpt.image_processing_seggpt.SegGptImageProcessorKwargs'> )
Параметры
- do_convert_rgb (
bool, kwargs, optional, по умолчаниюTrue) — Следует ли преобразовать изображение в RGB. - do_resize (
bool, kwargs, optional, по умолчаниюTrue) — Указывает, нужно ли изменять размер изображения. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, по умолчанию{'height' -- 448, 'width': 448}): Определяет максимальные размеры входных данных для модели. - default_to_square (
bool, kwargs, optional, по умолчаниюTrue) — Определяет, следует ли по умолчанию использовать квадратное изображение при изменении размера, если size задано как int. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер выходного изображения после примененияcenter_crop. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs, по умолчанию3) — Фильтр ресемплинга, используемый при изменении размера изображения. Может быть одним из значений перечисленияPILImageResampling. Влияет только в том случае, еслиdo_resizeустановлено вTrue. - do_rescale (
bool, kwargs, optional, по умолчаниюTrue) — Указывает, следует ли выполнять рескейлинг изображения. - rescale_factor (
float, kwargs, optional, по умолчанию0.00392156862745098) — Коэффициент масштабирования, применяемый к изображению, еслиdo_rescaleустановлен вTrue. - do_normalize (
bool, kwargs, optional, по умолчаниюTrue) — Указывает, следует ли нормализовать изображение. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, optional, по умолчанию[0.485, 0.456, 0.406]) — Среднее значение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional, по умолчанию[0.229, 0.224, 0.225]) — Стандартное отклонение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - do_pad (
bool, kwargs, optional) — Определяет, нужно ли выравнивать изображение. Выравнивание выполняется либо до максимального размера в батче, либо до фиксированного квадратного размера для каждого изображения. Точная стратегия выравнивания зависит от модели. - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер в формате{"height": int, "width" int}, до которого следует дополнить изображения. Должен быть больше любого размера изображения, предоставленного для предобработки. Еслиpad_sizeне указан, изображения будут дополнены до наибольшей высоты и ширины в батче. Применяется только приdo_pad=True. - do_center_crop (
bool, kwargs, optional) — Выполнять ли центрированную обрезку изображения. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Поддерживается толькоChannelDimension.FIRST. Добавлено для совместимости с медленными процессорами. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, необязательный) — Формат размерности каналов для входного изображения. Если не задан, формат размерности каналов выводится из входного изображения. Может быть одним из:"channels_first"илиChannelDimension.FIRST: изображение в формате (num_channels, height, width)."channels_last"илиChannelDimension.LAST: изображение в формате (высота, ширина, число каналов)."none"илиChannelDimension.NONE: изображение в формате (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Устройство, на котором будут обрабатываться видео. Если не задано, устройство определяется на основе входных видео. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Возвращает стопку тензоров, если установлено значение'pt', иначе возвращает список тензоров. - disable_grouping (
bool, kwargs, optional) — Определяет, следует ли отключить группировку изображений по размеру для их индивидуальной обработки, а не пачками. Если значение равно None, оно будет установлено в True, если изображения находятся на CPU, и в False в противном случае. Этот выбор основан на эмпирических наблюдениях, описанных здесь: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int, kwargs, optional) — Количество токенов изображения, используемых для каждого изображения во входных данных. Добавлено для обратной совместимости, но в будущих моделях это значение следует задавать как атрибут процессора. - num_labels (
int, kwargs, optional) — Количество классов в задаче сегментации (без учёта фона). Если указано, будет построена палитра, предполагающая, что class_idx 0 — это фон, для преобразования маски подсказки из обычной карты сегментации в трёхканальное RGB-изображение. Если этот параметр не указан, маска подсказки будет продублирована вдоль размерности каналов, когдаdo_convert_rgbравноTrue.
Создаёт процессор изображений SegGptImageProcessor.
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_masks: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.models.seggpt.image_processing_seggpt.SegGptImageProcessorKwargs'> ) → ~image_processing_base.BatchFeature
Параметры
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], необязательный) — Изображение для предобработки. Ожидается одно изображение или батч изображений со значениями пикселей в диапазоне от 0 до 255. Если передаются изображения со значениями пикселей в диапазоне от 0 до 1, установитеdo_rescale=False. - prompt_images (
ImageInput, необязательный) — Изображения для промпта, подлежащие предобработке. Ожидается одно изображение или батч изображений со значениями пикселей в диапазоне от 0 до 255. - prompt_masks (
ImageInput, необязательный) — Маски промптов для предобработки. Могут быть в формате карт сегментации (без каналов) или RGB-изображений. Если формат — RGB-изображения, параметрdo_convert_rgbследует установить вFalse. Если формат — карты сегментации, рекомендуется указатьnum_labels, чтобы построить палитру для отображения маски промпта из одного канала в трёхканальное RGB. Еслиnum_labelsне указан, маска промпта будет продублирована вдоль размерности каналов. - do_convert_rgb (
bool, kwargs, optional) — Следует ли преобразовать изображение в RGB. - do_resize (
bool, kwargs, optional) — Указывает, нужно ли изменить размер изображения. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Описывает максимальные размеры входных данных для модели. - default_to_square (
bool, kwargs, optional) — Определяет, следует ли по умолчанию использовать квадратное изображение при изменении размера, если size является целым числом. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер выходного изображения после примененияcenter_crop. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — Фильтр ресемплинга, используемый при изменении размера изображения. Может быть одним из значений перечисленияPILImageResampling. Влияет только в том случае, еслиdo_resizeустановлено вTrue. - do_rescale (
bool, kwargs, optional) — Нужно ли перемасштабировать изображение. - rescale_factor (
float, kwargs, optional) — Коэффициент масштабирования, применяемый к изображению, еслиdo_rescaleустановлен вTrue. - do_normalize (
bool, kwargs, optional) — Нужно ли нормализовать изображение. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — Среднее значение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — Стандартное отклонение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - do_pad (
bool, kwargs, optional) — Определяет, нужно ли выравнивать изображение. Выравнивание выполняется либо до максимального размера в батче, либо до фиксированного квадратного размера для каждого изображения. Точная стратегия выравнивания зависит от модели. - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер в формате{"height": int, "width" int}, до которого следует дополнить изображения. Должен быть больше любого размера изображения, предоставленного для предобработки. Еслиpad_sizeне указан, изображения будут дополнены до наибольшей высоты и ширины в батче. Применяется только приdo_pad=True. - do_center_crop (
bool, kwargs, optional) — Выполнять ли центрированную обрезку изображения. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Поддерживается толькоChannelDimension.FIRST. Добавлено для совместимости с медленными процессорами. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, необязательный) — Формат размерности каналов для входного изображения. Если не задан, формат размерности каналов выводится из входного изображения. Может быть одним из:"channels_first"илиChannelDimension.FIRST: изображение в формате (num_channels, height, width)."channels_last"илиChannelDimension.LAST: изображение в формате (высота, ширина, число каналов)."none"илиChannelDimension.NONE: изображение в формате (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Устройство, на котором будут обрабатываться видео. Если не задано, устройство определяется на основе входных видео. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Возвращает стопку тензоров, если установлено значение'pt', иначе возвращает список тензоров. - disable_grouping (
bool, kwargs, optional) — Определяет, следует ли отключить группировку изображений по размеру для их индивидуальной обработки, а не пачками. Если значение равно None, оно будет установлено в True, если изображения находятся на CPU, и в False в противном случае. Этот выбор основан на эмпирических наблюдениях, описанных здесь: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int, kwargs, optional) — Количество токенов изображения, используемых для каждого изображения во входных данных. Добавлено для обратной совместимости, но в будущих моделях это значение следует задавать как атрибут процессора. - num_labels (
int, kwargs, optional) — Количество классов в задаче сегментации (без учёта фона). Если указано, будет построена палитра, предполагающая, что class_idx 0 — это фон, для преобразования маски подсказки из обычной карты сегментации в трёхканальное RGB-изображение. Если этот параметр не указан, маска подсказки будет продублирована вдоль размерности каналов, когдаdo_convert_rgbравноTrue.
Возвращает
~image_processing_base.BatchFeature
- data (
dict) — Словарь списков/массивов/тензоров, возвращаемый методом call (‘pixel_values’ и т. д.). - tensor_type (
Union[None, str, TensorType], необязательный) — Здесь можно указать tensor_type, чтобы при инициализации преобразовать списки целых чисел в тензоры PyTorch/Numpy.
post_process_semantic_segmentation
< source >( outputstarget_sizes: list[tuple[int, int]] | None = Nonenum_labels: int | None = Nonereturn_segmentation_scores: bool = False ) → list[torch.Tensor] or list[SemanticSegmentationPostProcessorOutput]
Параметры
- outputs (
SegGptImageSegmentationOutput) — Сырые выходные данные модели. - target_sizes (
list[tuple[int, int]], необязательный) — Список длиныbatch_size, где каждый элемент соответствует запрашиваемому итоговому размеру(height, width)для каждого предсказания. Если значение не задано (None), предсказания не будут изменены в размере. - num_labels (
int, необязательный) — Количество классов в задаче сегментации (без учета фона). Если указано, будет создана палитра для отображения предсказанных масок из значений RGB обратно в индексы классов. Должно совпадать со значением, использованным на этапе предобработки. - return_segmentation_scores (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли возвращать оценки сегментации вместе с картой сегментации. Если установлено значениеTrue, каждый элемент возвращаемого списка представляет собой объектSemanticSegmentationPostProcessorOutputс полямиsegmentation(идентификаторы классов, форма(height, width)) иsegmentation_scores(форма(num_labels+1, height, width)отрицательных квадратов расстояний L2 до каждого цвета палитры, либоNone, еслиnum_labelsне задано).
Возвращает
list[torch.Tensor] или list[SemanticSegmentationPostProcessorOutput]
Если return_segmentation_scores=False (по умолчанию), возвращается список длины batch_size, где каждый элемент представляет собой карту сегментации формы (height, width) с идентификаторами классов. Если return_segmentation_scores=True, возвращается список объектов SemanticSegmentationPostProcessorOutput с полями segmentation (идентификаторы классов, форма (height, width)) и segmentation_scores (форма (num_labels+1, height, width)). В обоих случаях (height, width) соответствует целевому размеру (если указан target_sizes).
Преобразует вывод SegGptImageSegmentationOutput в карты сегментации. Поддерживается только PyTorch.
SegGptImageProcessorPil
класс transformers.SegGptImageProcessorPil
< source >( **kwargs: *<class 'transformers.models.seggpt.image_processing_pil_seggpt.SegGptImageProcessorKwargs'> )
Параметры
- do_convert_rgb (
bool, kwargs, optional, по умолчаниюTrue) — Следует ли преобразовать изображение в RGB. - do_resize (
bool, kwargs, optional, по умолчаниюTrue) — Указывает, нужно ли изменять размер изображения. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, по умолчанию{'height' -- 448, 'width': 448}): Определяет максимальные размеры входных данных для модели. - default_to_square (
bool, kwargs, optional, по умолчаниюTrue) — Определяет, следует ли по умолчанию использовать квадратное изображение при изменении размера, если size задано как int. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер выходного изображения после примененияcenter_crop. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs, по умолчанию3) — Фильтр ресемплинга, используемый при изменении размера изображения. Может быть одним из значений перечисленияPILImageResampling. Влияет только в том случае, еслиdo_resizeустановлено вTrue. - do_rescale (
bool, kwargs, optional, по умолчаниюTrue) — Указывает, следует ли выполнять рескейлинг изображения. - rescale_factor (
float, kwargs, optional, по умолчанию0.00392156862745098) — Коэффициент масштабирования, применяемый к изображению, еслиdo_rescaleустановлен вTrue. - do_normalize (
bool, kwargs, optional, по умолчаниюTrue) — Указывает, следует ли нормализовать изображение. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, optional, по умолчанию[0.485, 0.456, 0.406]) — Среднее значение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional, по умолчанию[0.229, 0.224, 0.225]) — Стандартное отклонение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - do_pad (
bool, kwargs, optional) — Определяет, нужно ли выравнивать изображение. Выравнивание выполняется либо до максимального размера в батче, либо до фиксированного квадратного размера для каждого изображения. Точная стратегия выравнивания зависит от модели. - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер в формате{"height": int, "width" int}, до которого следует дополнить изображения. Должен быть больше любого размера изображения, предоставленного для предобработки. Еслиpad_sizeне указан, изображения будут дополнены до наибольшей высоты и ширины в батче. Применяется только приdo_pad=True. - do_center_crop (
bool, kwargs, optional) — Выполнять ли центрированную обрезку изображения. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Поддерживается толькоChannelDimension.FIRST. Добавлено для совместимости с медленными процессорами. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, необязательный) — Формат размерности каналов для входного изображения. Если не задан, формат размерности каналов выводится из входного изображения. Может быть одним из:"channels_first"илиChannelDimension.FIRST: изображение в формате (num_channels, height, width)."channels_last"илиChannelDimension.LAST: изображение в формате (высота, ширина, число каналов)."none"илиChannelDimension.NONE: изображение в формате (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Устройство, на котором будут обрабатываться видео. Если не задано, устройство определяется на основе входных видео. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Возвращает стопку тензоров, если установлено значение'pt', иначе возвращает список тензоров. - disable_grouping (
bool, kwargs, optional) — Определяет, следует ли отключить группировку изображений по размеру для их индивидуальной обработки, а не пачками. Если значение равно None, оно будет установлено в True, если изображения находятся на CPU, и в False в противном случае. Этот выбор основан на эмпирических наблюдениях, описанных здесь: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int, kwargs, optional) — Количество токенов изображения, используемых для каждого изображения во входных данных. Добавлено для обратной совместимости, но в будущих моделях это значение следует задавать как атрибут процессора. - num_labels (
int, kwargs, optional) — Количество классов в задаче сегментации (без учёта фона). Если указано, будет построена палитра, предполагающая, что class_idx 0 — это фон, для преобразования маски подсказки из обычной карты сегментации в трёхканальное RGB-изображение. Если этот параметр не указан, маска подсказки будет продублирована вдоль размерности каналов, когдаdo_convert_rgbравноTrue.
Создаёт процессор изображений SegGptImageProcessor.
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_masks: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.models.seggpt.image_processing_pil_seggpt.SegGptImageProcessorKwargs'> ) → ~image_processing_base.BatchFeature
Параметры
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], необязательный) — Изображение для предобработки. Ожидается одно изображение или батч изображений со значениями пикселей в диапазоне от 0 до 255. Если передаются изображения со значениями пикселей в диапазоне от 0 до 1, установитеdo_rescale=False. - prompt_images (
ImageInput, необязательный) — Изображения для промпта, подлежащие предобработке. Ожидается одно изображение или батч изображений со значениями пикселей в диапазоне от 0 до 255. - prompt_masks (
ImageInput, необязательный) — Маски промптов для предобработки. Могут быть в формате карт сегментации (без каналов) или RGB-изображений. Если формат — RGB-изображения, параметрdo_convert_rgbследует установить вFalse. Если формат — карты сегментации, рекомендуется указатьnum_labels, чтобы построить палитру для отображения маски промпта из одного канала в трёхканальное RGB. Еслиnum_labelsне указан, маска промпта будет продублирована вдоль размерности каналов. - do_convert_rgb (
bool, kwargs, optional) — Следует ли преобразовать изображение в RGB. - do_resize (
bool, kwargs, optional) — Указывает, нужно ли изменить размер изображения. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Описывает максимальные размеры входных данных для модели. - default_to_square (
bool, kwargs, optional) — Определяет, следует ли по умолчанию использовать квадратное изображение при изменении размера, если size является целым числом. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер выходного изображения после примененияcenter_crop. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — Фильтр ресемплинга, используемый при изменении размера изображения. Может быть одним из значений перечисленияPILImageResampling. Влияет только в том случае, еслиdo_resizeустановлено вTrue. - do_rescale (
bool, kwargs, optional) — Нужно ли перемасштабировать изображение. - rescale_factor (
float, kwargs, optional) — Коэффициент масштабирования, применяемый к изображению, еслиdo_rescaleустановлен вTrue. - do_normalize (
bool, kwargs, optional) — Нужно ли нормализовать изображение. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — Среднее значение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — Стандартное отклонение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - do_pad (
bool, kwargs, optional) — Определяет, нужно ли выравнивать изображение. Выравнивание выполняется либо до максимального размера в батче, либо до фиксированного квадратного размера для каждого изображения. Точная стратегия выравнивания зависит от модели. - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер в формате{"height": int, "width" int}, до которого следует дополнить изображения. Должен быть больше любого размера изображения, предоставленного для предобработки. Еслиpad_sizeне указан, изображения будут дополнены до наибольшей высоты и ширины в батче. Применяется только приdo_pad=True. - do_center_crop (
bool, kwargs, optional) — Выполнять ли центрированную обрезку изображения. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Поддерживается толькоChannelDimension.FIRST. Добавлено для совместимости с медленными процессорами. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, необязательный) — Формат размерности каналов для входного изображения. Если не задан, формат размерности каналов выводится из входного изображения. Может быть одним из:"channels_first"илиChannelDimension.FIRST: изображение в формате (num_channels, height, width)."channels_last"илиChannelDimension.LAST: изображение в формате (высота, ширина, число каналов)."none"илиChannelDimension.NONE: изображение в формате (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Устройство, на котором будут обрабатываться видео. Если не задано, устройство определяется на основе входных видео. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Возвращает стопку тензоров, если установлено значение'pt', иначе возвращает список тензоров. - disable_grouping (
bool, kwargs, optional) — Определяет, следует ли отключить группировку изображений по размеру для их индивидуальной обработки, а не пачками. Если значение равно None, оно будет установлено в True, если изображения находятся на CPU, и в False в противном случае. Этот выбор основан на эмпирических наблюдениях, описанных здесь: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int, kwargs, optional) — Количество токенов изображения, используемых для каждого изображения во входных данных. Добавлено для обратной совместимости, но в будущих моделях это значение следует задавать как атрибут процессора. - num_labels (
int, kwargs, optional) — Количество классов в задаче сегментации (без учёта фона). Если указано, будет построена палитра, предполагающая, что class_idx 0 — это фон, для преобразования маски подсказки из обычной карты сегментации в трёхканальное RGB-изображение. Если этот параметр не указан, маска подсказки будет продублирована вдоль размерности каналов, когдаdo_convert_rgbравноTrue.
Возвращает
~image_processing_base.BatchFeature
- data (
dict) — Словарь списков/массивов/тензоров, возвращаемый методом call (‘pixel_values’ и т. д.). - tensor_type (
Union[None, str, TensorType], необязательный) — Здесь можно указать tensor_type, чтобы при инициализации преобразовать списки целых чисел в тензоры PyTorch/Numpy.
post_process_semantic_segmentation
< source >( outputstarget_sizes: list[tuple[int, int]] | None = Nonenum_labels: int | None = Nonereturn_segmentation_scores: bool = False ) → list[torch.Tensor] or list[SemanticSegmentationPostProcessorOutput]
Параметры
- outputs (
SegGptImageSegmentationOutput) — Сырые выходные данные модели. - target_sizes (
list[tuple[int, int]], необязательный) — Список длиныbatch_size, где каждый элемент соответствует запрашиваемому итоговому размеру(height, width)для каждого предсказания. Если значение не задано (None), предсказания не будут изменены в размере. - num_labels (
int, необязательный) — Количество классов в задаче сегментации (без учета фона). Если указано, будет создана палитра для отображения предсказанных масок из значений RGB обратно в индексы классов. Должно совпадать со значением, использованным на этапе предобработки. - return_segmentation_scores (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли возвращать оценки сегментации вместе с картой сегментации. Если установлено значениеTrue, каждый элемент возвращаемого списка представляет собой объектSemanticSegmentationPostProcessorOutputс полямиsegmentation(идентификаторы классов, форма(height, width)) иsegmentation_scores(форма(num_labels+1, height, width)отрицательных квадратов расстояний L2 до каждого цвета палитры, либоNone, еслиnum_labelsне задано).
Возвращает
list[torch.Tensor] или list[SemanticSegmentationPostProcessorOutput]
Если return_segmentation_scores=False (по умолчанию), возвращается список длины batch_size, где каждый элемент представляет собой карту сегментации формы (height, width) с идентификаторами классов. Если return_segmentation_scores=True, возвращается список объектов SemanticSegmentationPostProcessorOutput с полями segmentation (идентификаторы классов, форма (height, width)) и segmentation_scores (форма (num_labels+1, height, width)). В обоих случаях (height, width) соответствует целевому размеру (если указан target_sizes).
Преобразует вывод SegGptImageSegmentationOutput в карты сегментации. Поддерживается только PyTorch.
SegGptModel
класс transformers.SegGptModel
< source >( config: SegGptConfig )
Параметры
- config (SegGptConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель Seggpt без дополнительных слоёв, выводящая необработанные скрытые состояния.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: Tensorprompt_pixel_values: Tensorprompt_masks: Tensorbool_masked_pos: typing.Optional[torch.BoolTensor] = Nonefeature_ensemble: bool | None = Noneembedding_type: str | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SegGptEncoderOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью SegGptImageProcessor. Подробности см. в SegGptImageProcessor.call() (processor_classиспользует SegGptImageProcessor для обработки изображений). - prompt_pixel_values (
torch.Tensorформы(batch_size, num_channels, height, width)) — Значения пикселей подсказки. Значения пикселей подсказки можно получить с помощью AutoImageProcessor. Подробности см. в SegGptImageProcessor.call(). - prompt_masks (
torch.Tensorформы(batch_size, num_channels, height, width)) — Маска промпта. Маску промпта можно получить с помощью AutoImageProcessor. Подробности см. в SegGptImageProcessor.call(). - bool_masked_pos (
torch.BoolTensorформы(batch_size, num_patches), необязательный) — Логические позиции маски. Указывает, какие патчи замаскированы (1), а какие нет (0). - feature_ensemble (
bool, необязательный) — Логическое значение, указывающее, следует ли использовать ансамбль признаков. ЕслиTrue, модель будет использовать ансамбль признаков, если имеется как минимум два промпта. ЕслиFalse, модель не будет использовать ансамбль признаков. Этот аргумент следует учитывать при выполнении few-shot-инференса на входном изображении, то есть когда для одного изображения задано более одного промпта. - embedding_type (
str, необязательный) — Тип эмбеддинга. Указывает, является ли промпт семантическим или инстанс-эмбеддингом. Может принимать значения instance или semantic. - labels (
torch.Tensorформы(batch_size, num_channels, height, width),optional) — Маска истинных значений для входных изображений. - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
SegGptEncoderOutput или tuple(torch.Tensor)
SegGptEncoderOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (SegGptConfig) и входных данных.
Метод forward модели SegGptModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
- last_hidden_state (
torch.Tensorформы(batch_size, patch_height, patch_width, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели. - hidden_states (
tuple[torch.Tensor],optional, возвращается, еслиconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода эмбеддингов + один для вывода каждого слоя) с формой(batch_size, patch_height, patch_width, hidden_size). - attentions (
tuple[torch.Tensor],optional, возвращается, еслиconfig.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы(batch_size, num_heads, seq_len, seq_len). - intermediate_hidden_states (
tuple[torch.Tensor], необязательный, возвращается, если заданconfig.intermediate_hidden_state_indices) — Кортеж изtorch.Tensorформы(batch_size, patch_height, patch_width, hidden_size). Каждый элемент кортежа соответствует выходу слоя, указанного вconfig.intermediate_hidden_state_indices. Кроме того, каждый признак проходит через LayerNorm.
Примеры:
>>> from transformers import SegGptImageProcessor, SegGptModel
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> image_input_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_2.jpg"
>>> image_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1.jpg"
>>> mask_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1_target.png"
>>> with httpx.stream("GET", image_input_url) as response:
... image_input = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", image_prompt_url) as response:
... image_prompt = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", mask_prompt_url) as response:
... mask_prompt = Image.open(BytesIO(response.read())).convert("L")
>>> checkpoint = "BAAI/seggpt-vit-large"
>>> model = SegGptModel.from_pretrained(checkpoint)
>>> image_processor = SegGptImageProcessor.from_pretrained(checkpoint)
>>> inputs = image_processor(images=image_input, prompt_images=image_prompt, prompt_masks=mask_prompt, return_tensors="pt")
>>> outputs = model(**inputs)
>>> list(outputs.last_hidden_state.shape)
[1, 56, 28, 1024]SegGptForImageSegmentation
класс transformers.SegGptForImageSegmentation
< source >( config: SegGptConfig )
Параметры
- config (SegGptConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель SegGpt с декодером сверху для одношаговой сегментации изображений.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: Tensorprompt_pixel_values: Tensorprompt_masks: Tensorbool_masked_pos: typing.Optional[torch.BoolTensor] = Nonefeature_ensemble: bool | None = Noneembedding_type: str | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SegGptImageSegmentationOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью SegGptImageProcessor. Подробности см. в SegGptImageProcessor.call() (processor_classиспользует SegGptImageProcessor для обработки изображений). - prompt_pixel_values (
torch.Tensorформы(batch_size, num_channels, height, width)) — Значения пикселей подсказки. Значения пикселей подсказки можно получить с помощью AutoImageProcessor. Подробности см. в SegGptImageProcessor.call(). - prompt_masks (
torch.Tensorформы(batch_size, num_channels, height, width)) — Маска промпта. Маску промпта можно получить с помощью AutoImageProcessor. Подробности см. в SegGptImageProcessor.call(). - bool_masked_pos (
torch.BoolTensorформы(batch_size, num_patches), необязательный) — Логические позиции маски. Указывает, какие патчи замаскированы (1), а какие нет (0). - feature_ensemble (
bool, необязательный) — Логическое значение, указывающее, следует ли использовать ансамбль признаков. ЕслиTrue, модель будет использовать ансамбль признаков, если имеется как минимум два промпта. ЕслиFalse, модель не будет использовать ансамбль признаков. Этот аргумент следует учитывать при выполнении few-shot-инференса на входном изображении, то есть когда для одного изображения задано более одного промпта. - embedding_type (
str, необязательный) — Тип эмбеддинга. Указывает, является ли промпт семантическим или инстанс-эмбеддингом. Может принимать значения instance или semantic. - labels (
torch.Tensorформы(batch_size, num_channels, height, width),optional) — Маска истинных значений для входных изображений. - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
SegGptImageSegmentationOutput или tuple(torch.Tensor)
SegGptImageSegmentationOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (SegGptConfig) и входных данных.
Метод forward класса SegGptForImageSegmentation переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
- loss (
torch.Tensor, необязательный, возвращается, если заданlabels) — значение функции потерь. - pred_masks (
torch.Tensorформы(batch_size, num_channels, height, width)) — Предсказанные маски. - hidden_states (
tuple[torch.Tensor],optional, возвращается, еслиconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода эмбеддингов + один для вывода каждого слоя) с формой(batch_size, patch_height, patch_width, hidden_size). - attentions (
tuple[torch.Tensor],optional, возвращается, еслиconfig.output_attentions=True) — Кортежtorch.Tensor(по одному для каждого слоя) формы(batch_size, num_heads, seq_len, seq_len).
Примеры:
>>> from transformers import SegGptImageProcessor, SegGptForImageSegmentation
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> image_input_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_2.jpg"
>>> image_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1.jpg"
>>> mask_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1_target.png"
>>> with httpx.stream("GET", image_input_url) as response:
... image_input = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", image_prompt_url) as response:
... image_prompt = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", mask_prompt_url) as response:
... mask_prompt = Image.open(BytesIO(response.read())).convert("L")
>>> checkpoint = "BAAI/seggpt-vit-large"
>>> model = SegGptForImageSegmentation.from_pretrained(checkpoint)
>>> image_processor = SegGptImageProcessor.from_pretrained(checkpoint)
>>> inputs = image_processor(images=image_input, prompt_images=image_prompt, prompt_masks=mask_prompt, return_tensors="pt")
>>> outputs = model(**inputs)
>>> result = image_processor.post_process_semantic_segmentation(outputs, target_sizes=[(image_input.height, image_input.width)])[0]
>>> print(list(result.shape))
[170, 297]