Transformers documentation

InstructBLIP

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 11 мая 2023 года и добавлена в Hugging Face Transformers 26 июня 2023 года.

FlashAttention SDPA

InstructBLIP

Обзор

Модель InstructBLIP была предложена в работе InstructBLIP: Towards General-purpose Vision-Language Models with Instruction Tuning авторами Wenliang Dai, Junnan Li, Dongxu Li, Anthony Meng Huat Tiong, Junqi Zhao, Weisheng Wang, Boyang Li, Pascale Fung, Steven Hoi. InstructBLIP использует архитектуру BLIP-2 для визуального инструктивного тюнинга.

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

Универсальные языковые модели, способные решать различные задачи в области обработки естественного языка, появились благодаря конвейеру предварительного обучения и обучения по инструкциям. Однако создание универсальных моделей «зрение-язык» представляет собой сложную задачу из-за повышенной рассогласованности задач, вносимой дополнительным визуальным входом. Хотя предварительное обучение моделей «зрение-язык» широко изучалось, обучение по инструкциям для таких моделей остаётся относительно малоизученной областью. В данной работе мы проводим систематическое и комплексное исследование обучения по инструкциям для моделей «зрение-язык» на основе предварительно обученных моделей BLIP-2. Мы собрали широкий набор из 26 общедоступных наборов данных, преобразовали их в формат обучения по инструкциям и разбили на две группы: для обучения по инструкциям (held-in) и для zero-shot оценки (held-out). Кроме того, мы предлагаем метод извлечения визуальных признаков с учётом инструкций (instruction-aware visual feature extraction), который является ключевым для возможности модели извлекать информативные признаки, адаптированные к заданной инструкции. Полученные модели InstructBLIP демонстрируют наилучшие zero-shot результаты на всех 13 наборах данных из группы held-out, значительно превосходя BLIP-2 и более крупную модель Flamingo. Наши модели также обеспечивают наилучшие результаты при дообучении на отдельных задачах нижнего уровня (например, точность 90,7% на ScienceQA IMG). Наконец, мы качественно демонстрируем преимущества InstructBLIP перед современными мультимодальными моделями.

drawing InstructBLIP architecture. Taken from the original paper.

Эта модель была предоставлена пользователем nielsr. Исходный код можно найти здесь.

Советы по использованию

InstructBLIP использует ту же архитектуру, что и BLIP-2, с небольшой, но важной особенностью: текстовый промпт (инструкция) также подаётся на вход Q-Former.

Модели BLIP, выпущенные после версии v4.46, будут выдавать предупреждения о необходимости добавить processor.num_query_tokens = {{num_query_tokens}} и расширить слой эмбеддингов модели для добавления специального токена <image>. Если вы являетесь владельцем контрольной точки модели, настоятельно рекомендуется добавить эти атрибуты в процессор; если же модель вам не принадлежит, создайте PR. Добавление этих атрибутов означает, что BLIP будет добавлять количество токенов запроса, необходимых на каждое изображение, и расширять текст, добавляя столько плейсхолдеров <image>, сколько будет токенов запроса. Обычно это около 500 токенов на изображение, поэтому убедитесь, что текст не обрезается, иначе при слиянии эмбеддингов произойдет сбой. Атрибуты можно получить из конфигурации модели как model.config.num_query_tokens, а расширение эмбеддингов модели выполняется по этой ссылке.

InstructBlipConfig

класс transformers.InstructBlipConfig

< >

( 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 = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneqformer_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonenum_query_tokens: int = 32image_token_index: int | None = Noneinitializer_factor: float = 1.0initializer_range: float = 0.02 )

Параметры

  • vision_config (Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Объект конфигурации или словарь конфигурации визуального бэкбона.
  • qformer_config (dict, необязательный) — Словарь параметров конфигурации, используемых для инициализации InstructBlipQFormerConfig.
  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Объект конфигурации или словарь конфигурации текстового бэкбона.
  • num_query_tokens (int, необязательный, по умолчанию 32) — Количество токенов запроса, передаваемых через Transformer.
  • image_token_index (int, необязательный) — Индекс токена изображения, используемый как плейсхолдер для входных изображений.
  • initializer_factor (float, необязательный, по умолчанию 1.0) — Коэффициент для инициализации всех матриц весов (должен оставаться равным 1, используется внутренне для тестирования инициализации).
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.

Это класс конфигурации для хранения настроек модели InstructBlipModel. Он используется для создания модели Instructblip в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации Salesforce/instructblip-flan-t5-xl

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

Пример:

>>> from transformers import (
...     InstructBlipVisionConfig,
...     InstructBlipQFormerConfig,
...     OPTConfig,
...     InstructBlipConfig,
...     InstructBlipForConditionalGeneration,
... )

>>> # Initializing a InstructBlipConfig with Salesforce/instructblip-flan-t5-xl style configuration
>>> configuration = InstructBlipConfig()

>>> # Initializing a InstructBlipForConditionalGeneration (with random weights) from the Salesforce/instructblip-flan-t5-xl style configuration
>>> model = InstructBlipForConditionalGeneration(configuration)

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

>>> # We can also initialize a InstructBlipConfig from a InstructBlipVisionConfig, InstructBlipQFormerConfig and any PreTrainedConfig

>>> # Initializing InstructBLIP vision, InstructBLIP Q-Former and language model configurations
>>> vision_config = InstructBlipVisionConfig()
>>> qformer_config = InstructBlipQFormerConfig()
>>> text_config = OPTConfig()

>>> config = InstructBlipConfig(vision_config=vision_config, qformer_config=qformer_config, text_config=text_config)

InstructBlipVisionConfig

класс transformers.InstructBlipVisionConfig

< >

( 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 = 1408intermediate_size: int = 6144num_hidden_layers: int = 39num_attention_heads: int = 16image_size: int | list[int] | tuple[int, int] = 224patch_size: int | list[int] | tuple[int, int] = 14hidden_act: str = 'gelu'layer_norm_eps: float = 1e-06attention_dropout: float | int = 0.0initializer_range: float = 1e-10qkv_bias: bool = True )

Параметры

  • hidden_size (int, необязательный, по умолчанию 1408) — Размерность скрытых представлений.
  • intermediate_size (int, необязательный, по умолчанию 6144) — Размерность представлений MLP.
  • num_hidden_layers (int, необязательный, по умолчанию 39) — Количество скрытых слоев в декодере Transformer.
  • num_attention_heads (int, необязательный, по умолчанию 16) — Количество головок внимания в каждом слое внимания декодера Transformer.
  • image_size (Union[int, list[int], tuple[int, int]], необязательный, по умолчанию 224) — Размер (разрешение) каждого изображения.
  • patch_size (Union[int, list[int], tuple[int, int]], необязательный, по умолчанию 14) — Размер (разрешение) каждого патча.
  • hidden_act (str, необязательный, по умолчанию gelu) — Нелинейная функция активации (функция или строка) в декодере. Например, "gelu", "relu", "silu" и т. д.
  • layer_norm_eps (float, необязательный, по умолчанию 1e-06) — Значение epsilon, используемое слоями нормализации.
  • attention_dropout (Union[float, int], необязательный, по умолчанию 0.0) — Коэффициент dropout для вероятностей внимания.
  • initializer_range (float, необязательный, по умолчанию 1e-10) — Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.
  • qkv_bias (bool, необязательный, по умолчанию True) — Добавлять ли смещение к запросам, ключам и значениям.

Это класс конфигурации для хранения настроек модели InstructBlipModel. Он используется для создания модели Instructblip в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации Salesforce/instructblip-flan-t5-xl

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

Пример:

>>> from transformers import InstructBlipVisionConfig, InstructBlipVisionModel

>>> # Initializing a InstructBlipVisionConfig with Salesforce/instructblip-flan-t5-xl style configuration
>>> configuration = InstructBlipVisionConfig()

>>> # Initializing a InstructBlipVisionModel (with random weights) from the Salesforce/instructblip-flan-t5-xl style configuration
>>> model = InstructBlipVisionModel(configuration)

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

InstructBlipQFormerConfig

класс transformers.InstructBlipQFormerConfig

< >

( 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 = Nonevocab_size: int = 30522hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.1attention_probs_dropout_prob: float | int = 0.1max_position_embeddings: int = 512initializer_range: float = 0.02layer_norm_eps: float = 1e-12pad_token_id: int | None = 0cross_attention_frequency: int = 2encoder_hidden_size: int = 1408 )

Параметры

  • vocab_size (int, необязательный, по умолчанию 30522) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в input_ids.
  • hidden_size (int, необязательный, по умолчанию 768) — Размерность скрытых представлений.
  • num_hidden_layers (int, необязательный, по умолчанию 12) — Количество скрытых слоев в декодере Transformer.
  • num_attention_heads (int, необязательный, по умолчанию 12) — Количество головок внимания в каждом слое внимания декодера Transformer.
  • intermediate_size (int, необязательный, по умолчанию 3072) — Размерность представлений MLP.
  • hidden_act (str, необязательный, по умолчанию gelu) — Нелинейная функция активации (функция или строка) в декодере. Например, "gelu", "relu", "silu" и т. д.
  • hidden_dropout_prob (Union[float, int], необязательный, по умолчанию 0.1) — Вероятность dropout для всех полносвязных слоёв в блоках эмбеддингов, энкодера и пулера.
  • attention_probs_dropout_prob (Union[float, int], необязательный, по умолчанию 0.1) — Коэффициент dropout для вероятностей внимания.
  • max_position_embeddings (int, необязательный, по умолчанию 512) — Максимальная длина последовательности, с которой может использоваться эта модель.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • layer_norm_eps (float, необязательный, по умолчанию 1e-12) — Значение epsilon, используемое слоями нормализации.
  • pad_token_id (int, необязательный, по умолчанию 0) — Идентификатор токена, используемого для дополнения (padding) в словаре.
  • cross_attention_frequency (int, необязательный, по умолчанию 2) — Частота добавления кросс-внимания в слои Transformer.
  • encoder_hidden_size (int, необязательный, по умолчанию 1408) — Размер скрытых состояний для кросс-внимания.

Это класс конфигурации для хранения настроек модели InstructBlipModel. Он используется для создания модели Instructblip в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации Salesforce/instructblip-flan-t5-xl

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

Примеры:

>>> from transformers import InstructBlipQFormerConfig, InstructBlipQFormerModel

>>> # Initializing a InstructBLIP Salesforce/instructblip-flan-t5-xl style configuration
>>> configuration = InstructBlipQFormerConfig()

>>> # Initializing a model (with random weights) from the Salesforce/instructblip-flan-t5-xl style configuration
>>> model = InstructBlipQFormerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config

InstructBlipProcessor

класс transformers.InstructBlipProcessor

< >

( image_processortokenizerqformer_tokenizernum_query_tokens = None**kwargs )

Параметры

  • image_processor (BlipImageProcessor) — Обработчик изображений является обязательным входным параметром.
  • tokenizer (GPT2Tokenizer) — Токенизатор является обязательным входным параметром.
  • qformer_tokenizer (AutoTokenizer) — Экземпляр [‘PreTrainedTokenizer`]. Токенизатор Q-Former является обязательным входным параметром.
  • num_query_tokens (int, необязательный) — ” Количество токенов, используемых Qformer в качестве запросов; должно совпадать со значением в конфигурации модели.

Создаёт InstructBlipProcessor, который объединяет процессор изображений, токенизатор и токенизатор qformer в единый процессор.

InstructBlipProcessor предоставляет все возможности BlipImageProcessor, GPT2Tokenizer и {qformer_tokenizer_class}. Подробнее см. в ~BlipImageProcessor, ~GPT2Tokenizer и ~{qformer_tokenizer_class}.

__call__

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext: str | list[str] | list[list[str]] = None**kwargs: *<class 'transformers.models.instructblip.processing_instructblip.InstructBlipProcessorKwargs'> ) → ~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.
  • text (Union[str, list[str], list[list[str]]], необязательный) — Последовательность или батч последовательностей для кодирования. Каждая последовательность может быть строкой или списком строк (предварительно токенизированная строка). Если вы передаёте предварительно токенизированный вход, установите is_split_into_words=True, чтобы избежать неоднозначности с батчированными входами.
  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры конкретного фреймворка. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты NumPy np.ndarray.
  • **kwargs (ProcessingKwargs, optional) — Дополнительные параметры обработки для каждой модальности (текст, изображения, видео, аудио). Специфичные для модели параметры перечислены выше; полный список поддерживаемых аргументов см. в классе TypedDict.

Возвращает

~image_processing_base.BatchFeature

  • data (dict) — Словарь списков/массивов/тензоров, возвращаемый методом call (‘pixel_values’ и т. д.).
  • tensor_type (Union[None, str, TensorType], необязательный) — Здесь можно указать tensor_type, чтобы при инициализации преобразовать списки целых чисел в тензоры PyTorch/Numpy.

InstructBlipVisionModel

класс transformers.InstructBlipVisionModel

< >

( config: InstructBlipVisionConfig )

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью BlipImageProcessor. Подробности см. в BlipImageProcessor.call() (InstructBlipProcessor использует BlipImageProcessor для обработки изображений).
  • interpolate_pos_encoding (bool, необязательный, по умолчанию False) — Указывает, следует ли интерполировать предобученные позиционные кодировки.

Возвращает

BaseModelOutputWithPooling или tuple(torch.Tensor)

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

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

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

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.

  • pooler_output (torch.Tensor формы (batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки слоями, используемыми для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки линейным слоем и функцией активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.

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

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

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

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

InstructBlipQFormerModel

класс transformers.InstructBlipQFormerModel

< >

( config: InstructBlipQFormerConfig )

Querying Transformer (Q-Former), используемый в InstructBLIP. Небольшая модификация BLIP-2, так как он также принимает инструкцию в качестве входных данных.

forward

< >

( input_ids: LongTensorattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonequery_embeds: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPoolingAndCrossAttentions or tuple(torch.Tensor)

Параметры

  • input_ids (torch.LongTensor формы (batch_size, sequence_length)) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.

    Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().

    Что такое входные идентификаторы?

  • attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • position_ids (torch.LongTensor формы (batch_size, sequence_length), , необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона [0, config.n_positions - 1].

    Что такое идентификаторы позиций?

  • query_embeds (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Скрытые состояния, используемые в вычислениях внимания. При кросс-внимании используются для запроса (т. е. для ключа и значения будут использоваться encoder_hidden_states).
  • encoder_hidden_states (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании, если модель настроена как декодер.
  • encoder_attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения внимания к индексам токенов отступов во входных данных энкодера. Эта маска используется в кросс-внимании, если модель настроена как декодер. Значения маски из [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

Возвращает

BaseModelOutputWithPoolingAndCrossAttentions или tuple(torch.Tensor)

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

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

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

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.

  • pooler_output (torch.Tensor формы (batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки слоями, используемыми для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки линейным слоем и функцией активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.

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

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

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

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

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

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

  • past_key_values (Cache, необязательный, возвращается при передаче use_cache=True или когда config.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.

    Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если config.is_encoder_decoder=True, в блоках кросс-внимания), которые можно использовать (см. входной параметр past_key_values) для ускорения последовательного декодирования.

InstructBlipModel

класс transformers.InstructBlipModel

< >

( config: InstructBlipConfig )

Параметры

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

Базовая модель InstructBLIP, состоящая из языковой модели, qformer и визуального энкодера.

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

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

forward

< >

( pixel_values: Tensorqformer_input_ids: Tensorqformer_attention_mask: typing.Optional[torch.LongTensor] = Noneinput_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.modeling_flash_attention_utils.FlashAttentionKwargs'> ) → InstructBlipForConditionalGenerationModelOutput or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью BlipImageProcessor. Подробности см. в BlipImageProcessor.call() (InstructBlipProcessor использует BlipImageProcessor для обработки изображений).
  • qformer_input_ids (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Индексы токенов входной последовательности в словаре Q-Former. Входные токены могут быть переданы необязательно в качестве текстового промпта, который модель Q-Former закодирует.

    Индексы можно получить с помощью InstructBlipProcessor. Подробности см. в InstructBlipProcessor.call().

    Что такое входные идентификаторы?

  • qformer_attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • input_ids (torch.Tensor формы (batch_size, sequence_length), необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию padding игнорируется.

    Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().

    Что такое входные идентификаторы?

  • attention_mask (torch.LongTensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • decoder_input_ids (torch.LongTensor формы (batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?

    Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().

    Что такое входные идентификаторы декодера?

  • decoder_attention_mask (torch.BoolTensor формы (batch_size, target_sequence_length), необязательный) — Поведение по умолчанию: генерировать тензор, игнорирующий токены pad в decoder_input_ids. Маска причинности также будет использоваться по умолчанию.

    Актуально только в том случае, если используется языковая модель с архитектурой «кодировщик-декодировщик» (например, T5).

  • inputs_embeds (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачи input_ids можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы input_ids преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.
  • interpolate_pos_encoding (bool, необязательный, по умолчанию False) — Указывает, следует ли интерполировать предобученные позиционные кодировки.

Возвращает

InstructBlipForConditionalGenerationModelOutput или tuple(torch.Tensor)

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

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

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

  • loss (torch.Tensor, optional, возвращается, если задан labels, torch.Tensor формы (1,)) — Потери языковой модели, полученные от языковой модели.
  • logits (torch.Tensor формы (batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели.
  • vision_outputs (~modeling_outputs.BaseModelOutputWithPooling, необязательный) — Выходы визуального кодировщика.
  • qformer_outputs (~modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions, необязательный) — Выходные данные Q-Former (Querying Transformer).
  • language_model_outputs (CausalLMOutputWithPast или Seq2SeqLMOutput) — Выходные данные языковой модели.

get_placeholder_mask

< >

( input_ids: LongTensorinputs_embeds: Tensor )

Получает маску мультимодальных плейсхолдеров из input_ids или inputs_embeds.

InstructBlipForConditionalGeneration

класс transformers.InstructBlipForConditionalGeneration

< >

( config: InstructBlipConfig )

Параметры

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

Модель InstructBLIP для генерации текста по изображению и необязательному текстовому запросу. Модель состоит из визуального энкодера, Querying Transformer (Q-Former) и языковой модели.

Необязательно можно передать в модель input_ids, которые служат текстовым промптом, чтобы языковая модель продолжила этот промпт. В противном случае языковая модель начинает генерировать текст с токена [BOS] (начало последовательности).

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

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

forward

< >

( pixel_values: Tensorqformer_input_ids: Tensorqformer_attention_mask: typing.Optional[torch.LongTensor] = Noneinput_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinterpolate_pos_encoding: bool = Falsemm_encoder_outputs: dict[str, transformers.modeling_outputs.BaseModelOutputWithPooling] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → InstructBlipForConditionalGenerationModelOutput or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью BlipImageProcessor. Подробности см. в BlipImageProcessor.call() (InstructBlipProcessor использует BlipImageProcessor для обработки изображений).
  • qformer_input_ids (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Индексы токенов входной последовательности в словаре Q-Former. Входные токены могут быть переданы необязательно в качестве текстового промпта, который модель Q-Former закодирует.

    Индексы можно получить с помощью InstructBlipProcessor. Подробности см. в InstructBlipProcessor.call().

    Что такое входные идентификаторы?

  • qformer_attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • input_ids (torch.Tensor формы (batch_size, sequence_length), необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию padding игнорируется.

    Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().

    Что такое входные идентификаторы?

  • attention_mask (torch.LongTensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • decoder_input_ids (torch.LongTensor формы (batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?

    Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().

    Что такое входные идентификаторы декодера?

  • decoder_attention_mask (torch.BoolTensor формы (batch_size, target_sequence_length), необязательный) — Поведение по умолчанию: генерировать тензор, игнорирующий токены pad в decoder_input_ids. Маска причинности также будет использоваться по умолчанию.

    Актуально только в том случае, если используется языковая модель с архитектурой «кодировщик-декодировщик» (например, T5).

  • inputs_embeds (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачи input_ids можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы input_ids преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.
  • labels (torch.LongTensor формы (batch_size,), необязательный) — Метки для вычисления потерь языковой модели. Индексы должны находиться в диапазоне [-100, 0, ..., config.vocab_size - 1]. Все метки, установленные в -100, игнорируются (маскируются); потери вычисляются только для меток в диапазоне [0, ..., config.vocab_size]
  • interpolate_pos_encoding (bool, необязательный, по умолчанию False) — Указывает, следует ли интерполировать предобученные позиционные кодировки.
  • mm_encoder_outputs (dict[str, ~modeling_outputs.BaseModelOutputWithPooling], необязательный) — Словарь, где ключами являются поддерживаемые модальности, а значениями — закодированные результаты для соответствующей модальности. Каждый закодированный результат представляет собой кортеж вида (pooler_output, необязательный: last_hidden_states, необязательный: hidden_states, необязательный: attentions) pooler_output формы (batch_size, sequence_length, hidden_size), необязательный) — последовательность мультимодальных признаков энкодера, объединённых с текстовыми эмбеддингами.

Возвращает

InstructBlipForConditionalGenerationModelOutput или tuple(torch.Tensor)

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

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

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

  • loss (torch.Tensor, optional, возвращается, если задан labels, torch.Tensor формы (1,)) — Потери языковой модели, полученные от языковой модели.
  • logits (torch.Tensor формы (batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели.
  • vision_outputs (~modeling_outputs.BaseModelOutputWithPooling, необязательный) — Выходы визуального кодировщика.
  • qformer_outputs (~modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions, необязательный) — Выходные данные Q-Former (Querying Transformer).
  • language_model_outputs (CausalLMOutputWithPast или Seq2SeqLMOutput) — Выходные данные языковой модели.

Примеры:

>>> from transformers import InstructBlipProcessor, InstructBlipForConditionalGeneration
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO

>>> model = InstructBlipForConditionalGeneration.from_pretrained("Salesforce/instructblip-vicuna-7b")
>>> processor = InstructBlipProcessor.from_pretrained("Salesforce/instructblip-vicuna-7b")

>>> device = "cuda" if torch.cuda.is_available() else "cpu"
>>> model.to(device)
>>> url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/lavis_confusing_pictures.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read())).convert("RGB")
>>> prompt = "What is unusual about this image?"
>>> inputs = processor(images=image, text=prompt, return_tensors="pt").to(device)

>>> outputs = model.generate(
...     **inputs,
...     do_sample=False,
...     num_beams=5,
...     max_length=256,
...     min_length=1,
...     top_p=0.9,
...     repetition_penalty=1.5,
...     length_penalty=1.0,
...     temperature=1,
... )
>>> generated_text = processor.batch_decode(outputs, skip_special_tokens=True)[0].strip()
>>> print(generated_text)
The unusual aspect of this image is that a man is ironing clothes on the back of a yellow SUV, which is parked in the middle of a busy city street. This is an unconventional approach to ironing clothes, as it requires the man to balance himself and his ironing equipment on top of the vehicle while navigating through traffic. Additionally, the presence of taxis and other vehicles in the scene further emphasizes the unusual nature of this situation.

generate

< >

( pixel_values: Tensorqformer_input_ids: typing.Optional[torch.LongTensor] = Noneqformer_attention_mask: typing.Optional[torch.LongTensor] = Noneinput_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinterpolate_pos_encoding: bool = False**generate_kwargs ) → captions (list)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, height, width)) — Входные изображения для обработки.
  • qformer_input_ids (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Последовательность, используемая в качестве промпта для модуля Q-Former.
  • qformer_attention_mask (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Маска для исключения внимания к индексам токенов-заполнителей.
  • input_ids (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Последовательность, используемая в качестве промпта для генерации.
  • attention_mask (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Маска для исключения внимания к индексам токенов-заполнителей.
  • inputs_embeds (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Встроенное представление входных данных. Должно быть float, а не int-токены.
  • interpolate_pos_encoding (bool, необязательный, по умолчанию False) — Указывает, следует ли интерполировать позиционное кодирование эмбеддингов изображения.

Возвращает

captions (список)

Список строк длины batch_size * num_captions.

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

get_image_features

< >

( pixel_values: Tensorqformer_input_ids: LongTensorqformer_attention_mask: typing.Optional[torch.LongTensor] = Noneinterpolate_pos_encoding: bool | None = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithVisionQformerOutputs or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям.
  • qformer_input_ids (torch.LongTensor формы (batch_size, sequence_length), необязательный) — Индексы токенов входной последовательности в словаре Q-Former. Входные токены могут быть переданы необязательно в качестве текстового промпта, который модель Q-Former закодирует.

    Индексы можно получить с помощью InstructBlipProcessor. Подробности см. в InstructBlipProcessor.call().

    Что такое входные идентификаторы?

  • qformer_attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • interpolate_pos_encoding (bool, необязательный, по умолчанию False) — Указывает, следует ли интерполировать предобученные позиционные кодировки.

Возвращает

BaseModelOutputWithVisionQformerOutputs или tuple(torch.Tensor)

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

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.

  • pooler_output (torch.Tensor формы (batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки слоями, используемыми для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки линейным слоем и функцией активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.

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

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

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

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

  • vision_outputs (~modeling_outputs.BaseModelOutputWithPooling, необязательный) — Выходы визуального кодировщика.

  • qformer_outputs (~modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions, необязательный) — Выходные данные Q-Former (Querying Transformer).

Пример:

>>> from PIL import Image
>>> from transformers import AutoProcessor, InstructBlipForConditionalGeneration

>>> model = InstructBlipForConditionalGeneration.from_pretrained("Salesforce/instructblip-flan-t5-xl")
>>> processor = AutoProcessor.from_pretrained("Salesforce/instructblip-flan-t5-xl")

>>> messages = [
...     {
...         "role": "user", "content": [
...             {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"},
...             {"type": "text", "text": "Where is the cat standing?"},
...         ]
...     },
... ]

>>> inputs = processor.apply_chat_template(
...     messages,
...     tokenize=True,
...     return_dict=True,
...     return_tensors="pt",
...     add_generation_prompt=True
... )
>>> # Generate
>>> generate_ids = model.generate(**inputs)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True)[0]
Update on GitHub