CoolFace
Apppublic

Aluode/PerceptionLabPortable

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
modular_metaclip_2.py816 linesDownload Raw Back to metaclip_2
1from typing import Optional2 3import torch4from torch import nn5 6from ...modeling_attn_mask_utils import _create_4d_causal_attention_mask, _prepare_4d_attention_mask7from ...modeling_outputs import BaseModelOutput, BaseModelOutputWithPooling8from ...modeling_utils import PreTrainedModel9from ...processing_utils import Unpack10from ...utils import TransformersKwargs, auto_docstring, logging11from ...utils.generic import check_model_inputs12from ..clip.configuration_clip import CLIPConfig, CLIPTextConfig, CLIPVisionConfig13from ..clip.modeling_clip import (14    CLIPMLP,15    CLIPAttention,16    CLIPForImageClassification,17    CLIPModel,18    CLIPTextEmbeddings,19    CLIPTextModel,20    CLIPTextModelWithProjection,21    CLIPTextTransformer,22    CLIPVisionEmbeddings,23    CLIPVisionModel,24    CLIPVisionModelWithProjection,25)26 27 28logger = logging.get_logger(__name__)29 30 31_CHECKPOINT_FOR_DOC = "facebook/metaclip-2-worldwide-huge-quickgelu"32_CONFIG_FOR_DOC = "MetaClip2Config"33 34 35class MetaClip2TextConfig(CLIPTextConfig):36    r"""37    This is the configuration class to store the configuration of a [`MetaClip2TextModel`]. It is used to instantiate38    a MetaClip2 text encoder according to the specified arguments, defining the model architecture. Instantiating a39    configuration with the defaults will yield a similar configuration to that of the MetaClip240    [facebook/metaclip-2-worldwide-huge-quickgelu](https://huggingface.co/facebook/metaclip-2-worldwide-huge-quickgelu) architecture.41 42    Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the43    documentation from [`PretrainedConfig`] for more information.44 45    Args:46        vocab_size (`int`, *optional*, defaults to 49408):47            Vocabulary size of the MetaClip2 text model. Defines the number of different tokens that can be represented by48            the `inputs_ids` passed when calling [`MetaClip2TextModel`].49        hidden_size (`int`, *optional*, defaults to 512):50            Dimensionality of the encoder layers and the pooler layer.51        intermediate_size (`int`, *optional*, defaults to 2048):52            Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder.53        projection_dim (`int`, *optional*, defaults to 512):54            Dimensionality of text and vision projection layers.55        num_hidden_layers (`int`, *optional*, defaults to 12):56            Number of hidden layers in the Transformer encoder.57        num_attention_heads (`int`, *optional*, defaults to 8):58            Number of attention heads for each attention layer in the Transformer encoder.59        max_position_embeddings (`int`, *optional*, defaults to 77):60            The maximum sequence length that this model might ever be used with. Typically set this to something large61            just in case (e.g., 512 or 1024 or 2048).62        hidden_act (`str` or `function`, *optional*, defaults to `"quick_gelu"`):63            The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`,64            `"relu"`, `"selu"` and `"gelu_new"` `"quick_gelu"` are supported.65        layer_norm_eps (`float`, *optional*, defaults to 1e-05):66            The epsilon used by the layer normalization layers.67        attention_dropout (`float`, *optional*, defaults to 0.0):68            The dropout ratio for the attention probabilities.69        initializer_range (`float`, *optional*, defaults to 0.02):70            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.71        initializer_factor (`float`, *optional*, defaults to 1.0):72            A factor for initializing all weight matrices (should be kept to 1, used internally for initialization73            testing).74        pad_token_id (`int`, *optional*, defaults to 1):75            Padding token id.76        bos_token_id (`int`, *optional*, defaults to 49406):77            Beginning of stream token id.78        eos_token_id (`int`, *optional*, defaults to 49407):79            End of stream token id.80 81    Example:82 83    ```python84    >>> from transformers import MetaClip2TextConfig, MetaClip2TextModel85 86    >>> # Initializing a MetaClip2TextConfig with facebook/metaclip-2-worldwide-huge-quickgelu style configuration87    >>> configuration = MetaClip2TextConfig()88 89    >>> # Initializing a MetaClip2TextModel (with random weights) from the facebook/metaclip-2-worldwide-huge-quickgelu style configuration90    >>> model = MetaClip2TextModel(configuration)91 92    >>> # Accessing the model configuration93    >>> configuration = model.config94    ```"""95 96    pass97 98 99class MetaClip2VisionConfig(CLIPVisionConfig):100    r"""101    This is the configuration class to store the configuration of a [`MetaClip2VisionModel`]. It is used to instantiate a MetaClip2102    vision encoder according to the specified arguments, defining the model architecture. Instantiating a configuration103    with the defaults will yield a similar configuration to that of the vision encoder of the MetaClip2104    [facebook/metaclip-2-worldwide-huge-quickgelu](https://huggingface.co/facebook/metaclip-2-worldwide-huge-quickgelu) architecture.105 106    Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the107    documentation from [`PretrainedConfig`] for more information.108 109    Args:110        hidden_size (`int`, *optional*, defaults to 768):111            Dimensionality of the encoder layers and the pooler layer.112        intermediate_size (`int`, *optional*, defaults to 3072):113            Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder.114        projection_dim (`int`, *optional*, defaults to 512):115            Dimensionality of text and vision projection layers.116        num_hidden_layers (`int`, *optional*, defaults to 12):117            Number of hidden layers in the Transformer encoder.118        num_attention_heads (`int`, *optional*, defaults to 12):119            Number of attention heads for each attention layer in the Transformer encoder.120        num_channels (`int`, *optional*, defaults to 3):121            The number of input channels.122        image_size (`int`, *optional*, defaults to 224):123            The size (resolution) of each image.124        patch_size (`int`, *optional*, defaults to 32):125            The size (resolution) of each patch.126        hidden_act (`str` or `function`, *optional*, defaults to `"quick_gelu"`):127            The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`,128            `"relu"`, `"selu"` and `"gelu_new"` `"quick_gelu"` are supported.129        layer_norm_eps (`float`, *optional*, defaults to 1e-05):130            The epsilon used by the layer normalization layers.131        attention_dropout (`float`, *optional*, defaults to 0.0):132            The dropout ratio for the attention probabilities.133        initializer_range (`float`, *optional*, defaults to 0.02):134            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.135        initializer_factor (`float`, *optional*, defaults to 1.0):136            A factor for initializing all weight matrices (should be kept to 1, used internally for initialization137            testing).138 139    Example:140 141    ```python142    >>> from transformers import MetaClip2VisionConfig, MetaClip2VisionModel143 144    >>> # Initializing a MetaClip2VisionConfig with facebook/metaclip-2-worldwide-huge-quickgelu style configuration145    >>> configuration = MetaClip2VisionConfig()146 147    >>> # Initializing a MetaClip2VisionModel (with random weights) from the facebook/metaclip-2-worldwide-huge-quickgelu style configuration148    >>> model = MetaClip2VisionModel(configuration)149 150    >>> # Accessing the model configuration151    >>> configuration = model.config152    ```"""153 154    pass155 156 157class MetaClip2Config(CLIPConfig):158    r"""159    [`MetaClip2Config`] is the configuration class to store the configuration of a [`MetaClip2Model`]. It is used to160    instantiate a MetaClip2 model according to the specified arguments, defining the text model and vision model configs.161    Instantiating a configuration with the defaults will yield a similar configuration to that of the MetaClip2162    [facebook/metaclip-2-worldwide-huge-quickgelu](https://huggingface.co/facebook/metaclip-2-worldwide-huge-quickgelu) architecture.163 164    Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the165    documentation from [`PretrainedConfig`] for more information.166 167    Args:168        text_config (`dict`, *optional*):169            Dictionary of configuration options used to initialize [`MetaClip2TextConfig`].170        vision_config (`dict`, *optional*):171            Dictionary of configuration options used to initialize [`MetaClip2VisionConfig`].172        projection_dim (`int`, *optional*, defaults to 512):173            Dimensionality of text and vision projection layers.174        logit_scale_init_value (`float`, *optional*, defaults to 2.6592):175            The initial value of the *logit_scale* parameter. Default is used as per the original MetaClip2 implementation.176        kwargs (*optional*):177            Dictionary of keyword arguments.178 179    Example:180 181    ```python182    >>> from transformers import MetaClip2Config, MetaClip2Model183 184    >>> # Initializing a MetaClip2Config with facebook/metaclip-2-worldwide-huge-quickgelu style configuration185    >>> configuration = MetaClip2Config()186 187    >>> # Initializing a MetaClip2Model (with random weights) from the facebook/metaclip-2-worldwide-huge-quickgelu style configuration188    >>> model = MetaClip2Model(configuration)189 190    >>> # Accessing the model configuration191    >>> configuration = model.config192 193    >>> # We can also initialize a MetaClip2Config from a MetaClip2TextConfig and a MetaClip2VisionConfig194    >>> from transformers import MetaClip2TextConfig, MetaClip2VisionConfig195 196    >>> # Initializing a MetaClip2Text and MetaClip2Vision configuration197    >>> config_text = MetaClip2TextConfig()198    >>> config_vision = MetaClip2VisionConfig()199 200    >>> config = MetaClip2Config.from_text_vision_configs(config_text, config_vision)201    ```"""202 203    pass204 205 206class MetaClip2TextEmbeddings(CLIPTextEmbeddings):207    pass208 209 210class MetaClip2VisionEmbeddings(CLIPVisionEmbeddings):211    pass212 213 214class MetaClip2Attention(CLIPAttention):215    pass216 217 218class MetaClip2MLP(CLIPMLP):219    pass220 221 222@auto_docstring223class MetaClip2PreTrainedModel(PreTrainedModel):224    config: MetaClip2Config225    base_model_prefix = "metaclip_2"226    supports_gradient_checkpointing = True227    _supports_sdpa = True228    _supports_flash_attn = True229    _supports_flex_attn = True230    _supports_attention_backend = True231 232    def _init_weights(self, module):233        """Initialize the weights"""234        factor = self.config.initializer_factor235        if isinstance(module, MetaClip2TextEmbeddings):236            module.token_embedding.weight.data.normal_(mean=0.0, std=factor * 0.02)237            module.position_embedding.weight.data.normal_(mean=0.0, std=factor * 0.02)238        elif isinstance(module, MetaClip2VisionEmbeddings):239            factor = self.config.initializer_factor240            nn.init.normal_(module.class_embedding, mean=0.0, std=module.embed_dim**-0.5 * factor)241            nn.init.normal_(module.patch_embedding.weight, std=module.config.initializer_range * factor)242            nn.init.normal_(module.position_embedding.weight, std=module.config.initializer_range * factor)243        elif isinstance(module, MetaClip2Attention):244            factor = self.config.initializer_factor245            in_proj_std = (module.embed_dim**-0.5) * ((2 * module.config.num_hidden_layers) ** -0.5) * factor246            out_proj_std = (module.embed_dim**-0.5) * factor247            nn.init.normal_(module.q_proj.weight, std=in_proj_std)248            nn.init.normal_(module.k_proj.weight, std=in_proj_std)249            nn.init.normal_(module.v_proj.weight, std=in_proj_std)250            nn.init.normal_(module.out_proj.weight, std=out_proj_std)251        elif isinstance(module, MetaClip2MLP):252            factor = self.config.initializer_factor253            in_proj_std = (module.config.hidden_size**-0.5) * ((2 * module.config.num_hidden_layers) ** -0.5) * factor254            fc_std = (2 * module.config.hidden_size) ** -0.5 * factor255            nn.init.normal_(module.fc1.weight, std=fc_std)256            nn.init.normal_(module.fc2.weight, std=in_proj_std)257        elif isinstance(module, MetaClip2Model):258            nn.init.normal_(259                module.text_projection.weight,260                std=module.text_embed_dim**-0.5 * self.config.initializer_factor,261            )262            nn.init.normal_(263                module.visual_projection.weight,264                std=module.vision_embed_dim**-0.5 * self.config.initializer_factor,265            )266        elif isinstance(module, MetaClip2VisionModelWithProjection):267            nn.init.normal_(268                module.visual_projection.weight,269                std=self.config.hidden_size**-0.5 * self.config.initializer_factor,270            )271        elif isinstance(module, MetaClip2TextModelWithProjection):272            nn.init.normal_(273                module.text_projection.weight,274                std=self.config.hidden_size**-0.5 * self.config.initializer_factor,275            )276        elif isinstance(module, MetaClip2ForImageClassification):277            nn.init.normal_(278                module.classifier.weight,279                std=self.config.vision_config.hidden_size**-0.5 * self.config.initializer_factor,280            )281 282        if isinstance(module, nn.LayerNorm):283            module.bias.data.zero_()284            module.weight.data.fill_(1.0)285        if isinstance(module, nn.Linear) and module.bias is not None:286            module.bias.data.zero_()287 288 289class MetaClip2TextTransformer(CLIPTextTransformer):290    @check_model_inputs(tie_last_hidden_states=False)291    @auto_docstring292    def forward(293        self,294        input_ids,295        attention_mask: Optional[torch.Tensor] = None,296        position_ids: Optional[torch.Tensor] = None,297        use_cache: Optional[bool] = None,298        **kwargs: Unpack[TransformersKwargs],299    ) -> BaseModelOutputWithPooling:300        input_shape = input_ids.size()301        input_ids = input_ids.view(-1, input_shape[-1])302 303        hidden_states = self.embeddings(input_ids=input_ids, position_ids=position_ids)304 305        # CLIP's text model uses causal mask, prepare it here.306        # https://github.com/openai/CLIP/blob/cfcffb90e69f37bf2ff1e988237a0fbe41f33c04/clip/model.py#L324307        causal_attention_mask = _create_4d_causal_attention_mask(308            input_shape, hidden_states.dtype, device=hidden_states.device309        )310 311        # expand attention_mask312        if attention_mask is not None and self.config._attn_implementation != "flash_attention_2":313            # [batch_size, seq_len] -> [batch_size, 1, tgt_seq_len, src_seq_len]314            attention_mask = _prepare_4d_attention_mask(attention_mask, hidden_states.dtype)315 316        encoder_outputs: BaseModelOutput = self.encoder(317            inputs_embeds=hidden_states,318            attention_mask=attention_mask,319            causal_attention_mask=causal_attention_mask,320            **kwargs,321        )322 323        last_hidden_state = encoder_outputs.last_hidden_state324        last_hidden_state = self.final_layer_norm(last_hidden_state)325 326        # Use robust pooling like CLIP - finds the first EOS token position per sequence327        pooled_output = last_hidden_state[328            torch.arange(last_hidden_state.shape[0], device=last_hidden_state.device),329            (input_ids.to(dtype=torch.int, device=last_hidden_state.device) == self.eos_token_id).int().argmax(dim=-1),330        ]331 332        return BaseModelOutputWithPooling(333            last_hidden_state=last_hidden_state,334            pooler_output=pooled_output,335            hidden_states=encoder_outputs.hidden_states,336            attentions=encoder_outputs.attentions,337        )338 339 340class MetaClip2TextModel(CLIPTextModel):341    """342    The text model from MetaClip2 without any head or projection on top.343    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the344    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads345    etc.)346 347    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.348    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage349    and behavior.350 351    Args:352        config ([`MetaClip2TextConfig`]): Model configuration class with all the parameters of the model.353            Initializing with a config file does not load the weights associated with the model, only the354            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.355 356    Examples:357 358    ```python359    >>> from transformers import AutoTokenizer, MetaClip2TextModel360 361    >>> model = MetaClip2TextModel.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")362    >>> tokenizer = AutoTokenizer.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")363 364    >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")365 366    >>> outputs = model(**inputs)367    >>> last_hidden_state = outputs.last_hidden_state368    >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states369    ```"""370 371    def __init__(self, config: MetaClip2TextConfig):372        super().__init__(config)373        self.text_model = MetaClip2TextTransformer(config)374        # Initialize weights and apply final processing375        self.post_init()376 377    def forward(378        self,379        input_ids: Optional[torch.Tensor] = None,380        attention_mask: Optional[torch.Tensor] = None,381        position_ids: Optional[torch.Tensor] = None,382        output_attentions: Optional[bool] = None,383        output_hidden_states: Optional[bool] = None,384    ):385        r"""386        Examples:387 388        ```python389        >>> from transformers import AutoTokenizer, MetaClip2TextModel390 391        >>> model = MetaClip2TextModel.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")392        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")393 394        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")395 396        >>> outputs = model(**inputs)397        >>> last_hidden_state = outputs.last_hidden_state398        >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states399        ```"""400        return super().forward(401            input_ids=input_ids,402            attention_mask=attention_mask,403            position_ids=position_ids,404            output_attentions=output_attentions,405            output_hidden_states=output_hidden_states,406        )407 408 409class MetaClip2TextModelWithProjection(CLIPTextModelWithProjection):410    """411    MetaClip2 text model with a projection layer on top (a linear layer on top of the pooled output).412 413    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the414    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads415    etc.)416 417    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.418    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage419    and behavior.420 421    Args:422        config ([`MetaClip2TextConfig`]): Model configuration class with all the parameters of the model.423            Initializing with a config file does not load the weights associated with the model, only the424            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.425 426    Examples:427 428    ```python429    >>> from transformers import AutoTokenizer, MetaClip2TextModelWithProjection430 431    >>> model = MetaClip2TextModelWithProjection.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")432    >>> tokenizer = AutoTokenizer.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")433 434    >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")435 436    >>> outputs = model(**inputs)437    >>> text_embeds = outputs.text_embeds438    ```"""439 440    def __init__(self, config: MetaClip2TextConfig):441        super().__init__(config)442 443        text_model = MetaClip2TextModel._from_config(config)444        self.text_model = text_model.text_model445 446        self.text_projection = nn.Linear(config.hidden_size, config.projection_dim, bias=False)447 448        # Initialize weights and apply final processing449        self.post_init()450 451    def forward(452        self,453        input_ids: Optional[torch.Tensor] = None,454        attention_mask: Optional[torch.Tensor] = None,455        position_ids: Optional[torch.Tensor] = None,456        output_attentions: Optional[bool] = None,457        output_hidden_states: Optional[bool] = None,458    ):459        r"""460        Examples:461 462        ```python463        >>> from transformers import AutoTokenizer, MetaClip2TextModelWithProjection464 465        >>> model = MetaClip2TextModelWithProjection.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")466        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")467 468        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")469 470        >>> outputs = model(**inputs)471        >>> text_embeds = outputs.text_embeds472        ```"""473        return super().forward(474            input_ids=input_ids,475            attention_mask=attention_mask,476            position_ids=position_ids,477            output_attentions=output_attentions,478            output_hidden_states=output_hidden_states,479        )480 481 482class MetaClip2Model(CLIPModel):483    """484    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the485    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads486    etc.)487 488    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.489    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage490    and behavior.491 492    Args:493        config ([`MetaClip2Config`]): Model configuration class with all the parameters of the model.494            Initializing with a config file does not load the weights associated with the model, only the495            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.496 497    Examples:498 499    ```python500    >>> from PIL import Image501    >>> import requests502    >>> from transformers import AutoProcessor, MetaClip2Model503 504    >>> model = MetaClip2Model.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")505    >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")506 507    >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"508    >>> image = Image.open(requests.get(url, stream=True).raw)509 510    >>> inputs = processor(511    ...     text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True512    ... )513 514    >>> outputs = model(**inputs)515    >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score516    >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities517    ```"""518 519    def __init__(self, config: MetaClip2Config):520        super().__init__(config)521 522        text_config = config.text_config523        vision_config = config.vision_config524 525        self.projection_dim = config.projection_dim526        self.text_embed_dim = text_config.hidden_size527        self.vision_embed_dim = vision_config.hidden_size528 529        text_model = MetaClip2TextModel._from_config(text_config)530        self.text_model = text_model.text_model531 532        vision_model = MetaClip2VisionModel._from_config(vision_config)533        self.vision_model = vision_model.vision_model534 535        self.visual_projection = nn.Linear(self.vision_embed_dim, self.projection_dim, bias=False)536        self.text_projection = nn.Linear(self.text_embed_dim, self.projection_dim, bias=False)537        self.logit_scale = nn.Parameter(torch.tensor(self.config.logit_scale_init_value))538 539        # Initialize weights and apply final processing540        self.post_init()541 542    def forward(543        self,544        input_ids: Optional[torch.LongTensor] = None,545        pixel_values: Optional[torch.FloatTensor] = None,546        attention_mask: Optional[torch.Tensor] = None,547        position_ids: Optional[torch.LongTensor] = None,548        return_loss: Optional[bool] = None,549        output_attentions: Optional[bool] = None,550        output_hidden_states: Optional[bool] = None,551        interpolate_pos_encoding: bool = False,552    ):553        r"""554        return_loss (`bool`, *optional*):555            Whether or not to return the contrastive loss.556 557        Examples:558 559        ```python560        >>> from PIL import Image561        >>> import requests562        >>> from transformers import AutoProcessor, MetaClip2Model563 564        >>> model = MetaClip2Model.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")565        >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")566 567        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"568        >>> image = Image.open(requests.get(url, stream=True).raw)569 570        >>> inputs = processor(571        ...     text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True572        ... )573 574        >>> outputs = model(**inputs)575        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score576        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities577        ```"""578        return super().forward(579            input_ids=input_ids,580            pixel_values=pixel_values,581            attention_mask=attention_mask,582            position_ids=position_ids,583            return_loss=return_loss,584            output_attentions=output_attentions,585            output_hidden_states=output_hidden_states,586            interpolate_pos_encoding=interpolate_pos_encoding,587        )588 589    def get_text_features(590        self,591        input_ids: Optional[torch.Tensor] = None,592        attention_mask: Optional[torch.Tensor] = None,593        position_ids: Optional[torch.Tensor] = None,594        output_attentions: Optional[bool] = None,595        output_hidden_states: Optional[bool] = None,596    ):597        r"""598        Returns:599            text_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The text embeddings obtained by600            applying the projection layer to the pooled output of [`MetaClip2TextModel`].601 602        Examples:603 604        ```python605        >>> from transformers import AutoTokenizer, MetaClip2Model606 607        >>> model = MetaClip2Model.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")608        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")609 610        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")611        >>> text_features = model.get_text_features(**inputs)612        ```"""613        return super().get_text_features(614            input_ids=input_ids,615            attention_mask=attention_mask,616            position_ids=position_ids,617            output_attentions=output_attentions,618            output_hidden_states=output_hidden_states,619        )620 621    def get_image_features(622        self,623        pixel_values: Optional[torch.FloatTensor] = None,624        output_attentions: Optional[bool] = None,625        output_hidden_states: Optional[bool] = None,626        interpolate_pos_encoding: bool = False,627    ):628        r"""629        Returns:630            image_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The image embeddings obtained by631            applying the projection layer to the pooled output of [`MetaClip2VisionModel`].632 633        Examples:634 635        ```python636        >>> from PIL import Image637        >>> import requests638        >>> from transformers import AutoProcessor, MetaClip2Model639 640        >>> model = MetaClip2Model.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")641        >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")642 643        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"644        >>> image = Image.open(requests.get(url, stream=True).raw)645 646        >>> inputs = processor(images=image, return_tensors="pt")647 648        >>> image_features = model.get_image_features(**inputs)649        ```"""650        return super().get_image_features(651            pixel_values=pixel_values,652            output_attentions=output_attentions,653            output_hidden_states=output_hidden_states,654            interpolate_pos_encoding=interpolate_pos_encoding,655        )656 657 658class MetaClip2VisionModel(CLIPVisionModel):659    """660    The vision model from MetaClip2 without any head or projection on top.661 662    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the663    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads664    etc.)665 666    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.667    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage668    and behavior.669 670    Args:671        config ([`MetaClip2VisionConfig`]): Model configuration class with all the parameters of the model.672            Initializing with a config file does not load the weights associated with the model, only the673            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.674 675    Examples:676 677    ```python678    >>> from PIL import Image679    >>> import requests680    >>> from transformers import AutoProcessor, MetaClip2VisionModel681 682    >>> model = MetaClip2VisionModel.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")683    >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")684 685    >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"686    >>> image = Image.open(requests.get(url, stream=True).raw)687 688    >>> inputs = processor(images=image, return_tensors="pt")689 690    >>> outputs = model(**inputs)691    >>> last_hidden_state = outputs.last_hidden_state692    >>> pooled_output = outputs.pooler_output  # pooled CLS states693    ```"""694 695    def forward(696        self,697        pixel_values: Optional[torch.FloatTensor] = None,698        output_attentions: Optional[bool] = None,699        output_hidden_states: Optional[bool] = None,700        interpolate_pos_encoding: bool = False,701    ):702        r"""703        Examples:704 705        ```python706        >>> from PIL import Image707        >>> import requests708        >>> from transformers import AutoProcessor, MetaClip2VisionModel709 710        >>> model = MetaClip2VisionModel.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")711        >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")712 713        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"714        >>> image = Image.open(requests.get(url, stream=True).raw)715 716        >>> inputs = processor(images=image, return_tensors="pt")717 718        >>> outputs = model(**inputs)719        >>> last_hidden_state = outputs.last_hidden_state720        >>> pooled_output = outputs.pooler_output  # pooled CLS states721        ```"""722        return super().forward(723            pixel_values=pixel_values,724            output_attentions=output_attentions,725            output_hidden_states=output_hidden_states,726            interpolate_pos_encoding=interpolate_pos_encoding,727        )728 729 730class MetaClip2VisionModelWithProjection(CLIPVisionModelWithProjection):731    """732    MetaClip2 vision model with a projection layer on top (a linear layer on top of the pooled output).733 734    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the735    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads736    etc.)737 738    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.739    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage740    and behavior.741 742    Args:743        config ([`MetaClip2VisionConfig`]): Model configuration class with all the parameters of the model.744            Initializing with a config file does not load the weights associated with the model, only the745            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.746 747    Examples:748 749    ```python750    >>> from PIL import Image751    >>> import requests752    >>> from transformers import AutoProcessor, MetaClip2VisionModelWithProjection753 754    >>> model = MetaClip2VisionModelWithProjection.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")755    >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")756 757    >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"758    >>> image = Image.open(requests.get(url, stream=True).raw)759 760    >>> inputs = processor(images=image, return_tensors="pt")761 762    >>> outputs = model(**inputs)763    >>> image_embeds = outputs.image_embeds764    ```"""765 766    def forward(767        self,768        pixel_values: Optional[torch.FloatTensor] = None,769        output_attentions: Optional[bool] = None,770        output_hidden_states: Optional[bool] = None,771        interpolate_pos_encoding: bool = False,772    ):773        r"""774        Examples:775 776        ```python777        >>> from PIL import Image778        >>> import requests779        >>> from transformers import AutoProcessor, MetaClip2VisionModelWithProjection780 781        >>> model = MetaClip2VisionModelWithProjection.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")782        >>> processor = AutoProcessor.from_pretrained("facebook/metaclip-2-worldwide-huge-quickgelu")783 784        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"785        >>> image = Image.open(requests.get(url, stream=True).raw)786 787        >>> inputs = processor(images=image, return_tensors="pt")788 789        >>> outputs = model(**inputs)790        >>> image_embeds = outputs.image_embeds791        ```"""792        return super().forward(793            pixel_values=pixel_values,794            output_attentions=output_attentions,795            output_hidden_states=output_hidden_states,796            interpolate_pos_encoding=interpolate_pos_encoding,797        )798 799 800class MetaClip2ForImageClassification(CLIPForImageClassification):801    pass802 803 804__all__ = [805    "MetaClip2Config",806    "MetaClip2TextConfig",807    "MetaClip2VisionConfig",808    "MetaClip2Model",809    "MetaClip2PreTrainedModel",810    "MetaClip2TextModel",811    "MetaClip2TextModelWithProjection",812    "MetaClip2VisionModel",813    "MetaClip2VisionModelWithProjection",814    "MetaClip2ForImageClassification",815]816 
Aluode/PerceptionLabPortable · CoolFace