§
    ‚ŠtjËg  ã                   ó&  — d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZmZm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,  ed¬¦  «        e	 G d„ de¦  «        ¦   «         ¦   «         Z- ed¬¦  «        e	 G d„ de ¦  «        ¦   «         ¦   «         Z. ed¬¦  «        e	 G d„ de¦  «        ¦   «         ¦   «         Z/ G d„ de'¦  «        Z0ee G d„ de¦  «        ¦   «         ¦   «         Z1ee G d„ de¦  «        ¦   «         ¦   «         Z2 G d „ d!e+¦  «        Z3 G d"„ d#e)¦  «        Z4 G d$„ d%e#¦  «        Z5 G d&„ d'e"¦  «        Z6 G d(„ d)e%¦  «        Z7 G d*„ d+e%¦  «        Z8e G d,„ d-e(¦  «        ¦   «         Z9 G d.„ d/e$¦  «        Z: G d0„ d1e9¦  «        Z; G d2„ d3e*¦  «        Z< G d4„ d5e,¦  «        Z= G d6„ d7e&¦  «        Z> ed8¬9¦  «         G d:„ d;e9¦  «        ¦   «         Z?g d<¢Z@dS )=zPyTorch CLIPSeg model.é    N)Ú	dataclass)ÚAny)Ústrict)Únné   )Úinitialization)ÚBaseModelOutputWithPooling)ÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstring)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
CLIPConfigÚCLIPTextConfigÚCLIPVisionConfig)ÚCLIPMLPÚCLIPAttentionÚCLIPEncoderÚCLIPEncoderLayerÚ	CLIPModelÚ
CLIPOutputÚCLIPPreTrainedModelÚCLIPTextEmbeddingsÚCLIPTextModelÚCLIPVisionEmbeddingsÚCLIPVisionModelzCIDAS/clipseg-rd64)Ú
checkpointc                   ó&   — e Zd ZdZ e¦   «         ZdS )ÚCLIPSegTextConfigaà  
    Example:

    ```python
    >>> from transformers import CLIPSegTextConfig, CLIPSegTextModel

    >>> # Initializing a CLIPSegTextConfig with CIDAS/clipseg-rd64 style configuration
    >>> configuration = CLIPSegTextConfig()

    >>> # Initializing a CLIPSegTextModel (with random weights) from the CIDAS/clipseg-rd64 style configuration
    >>> model = CLIPSegTextModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚAttributeErrorÚprojection_dim© ó    úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/clipseg/modular_clipseg.pyr#   r#   0   ó'   € € € € € ðð ð  $�^Ñ%Ô%€N€N€Nr,   r#   c                   ó&   — e Zd ZdZ e¦   «         ZdS )ÚCLIPSegVisionConfigaì  
    Example:

    ```python
    >>> from transformers import CLIPSegVisionConfig, CLIPSegVisionModel

    >>> # Initializing a CLIPSegVisionConfig with CIDAS/clipseg-rd64 style configuration
    >>> configuration = CLIPSegVisionConfig()

    >>> # Initializing a CLIPSegVisionModel (with random weights) from the CIDAS/clipseg-rd64 style configuration
    >>> model = CLIPSegVisionModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Nr$   r+   r,   r-   r0   r0   F   r.   r,   r0   c                   ó¬   — e Zd ZU dZdZee         eedf         z  ed<   dZ	eed<   dZ
eed<   d	Zeez  ed
<   dZeed<   dZeed<   dZeed<   dZeed<   dS )ÚCLIPSegConfiga  
    extract_layers (`list[int]`, *optional*, defaults to `[3, 6, 9]`):
        Layers to extract when forwarding the query image through the frozen visual backbone of CLIP.
    reduce_dim (`int`, *optional*, defaults to 64):
        Dimensionality to reduce the CLIP vision embedding.
    conditional_layer (`int`, *optional*, defaults to 0):
        The layer to use of the Transformer encoder whose activations will be combined with the condition
        embeddings using FiLM (Feature-wise Linear Modulation). If 0, the last layer is used.
    use_complex_transposed_convolution (`bool`, *optional*, defaults to `False`):
        Whether to use a more complex transposed convolution in the decoder, enabling more fine-grained
        segmentation..

    Example:

    ```python
    >>> from transformers import CLIPSegConfig, CLIPSegModel

    >>> # Initializing a CLIPSegConfig with CIDAS/clipseg-rd64 style configuration
    >>> configuration = CLIPSegConfig()

    >>> # Initializing a CLIPSegModel (with random weights) from the CIDAS/clipseg-rd64 style configuration
    >>> model = CLIPSegModel(configuration)

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

    >>> # We can also initialize a CLIPSegConfig from a CLIPSegTextConfig and a CLIPSegVisionConfig

    >>> # Initializing a CLIPSegText and CLIPSegVision configuration
    >>> config_text = CLIPSegTextConfig()
    >>> config_vision = CLIPSegVisionConfig()

    >>> config = CLIPSegConfig(text_config=config_text, vision_config=config_vision)
    ```)r   é   é	   .Úextract_layersé@   Ú
reduce_dimé   Údecoder_num_attention_headsç        Údecoder_attention_dropoutÚ
quick_geluÚdecoder_hidden_acti   Údecoder_intermediate_sizer   Úconditional_layerFÚ"use_complex_transposed_convolutionN)r%   r&   r'   r(   r5   ÚlistÚintÚtupleÚ__annotations__r7   r9   r;   Úfloatr=   Ústrr>   r?   r@   Úboolr+   r,   r-   r2   r2   \   sº   € € € € € € ð!ð !ðF 3<€N�D˜”I  c¨3 h¤Ñ/Ð;Ð;Ñ;Ø€J�ÐÐÑØ'(Ð Ð(Ð(Ñ(Ø-0Ð˜u s™{Ð0Ð0Ñ0Ø*Ð˜Ð*Ð*Ñ*Ø%)Ð˜sÐ)Ð)Ñ)ØÐ�sÐÐÑØ/4Ð&¨Ð4Ð4Ñ4Ð4Ð4r,   r2   c                   ó   — e Zd ZdS )ÚCLIPSegOutputN©r%   r&   r'   r+   r,   r-   rI   rI   Œ   ó   € € € € € Ø€Dr,   rI   c                   óŽ   — e Zd ZU dZdZej        dz  ed<   dZe	ej        df         dz  ed<   dZ
e	ej        df         dz  ed<   dS )ÚCLIPSegDecoderOutputa¡  
    logits (`torch.FloatTensor` of shape `(batch_size, height, width)`):
        Classification scores for each pixel.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*,):
        Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        Rreturned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`
    attentions (`tuple(torch.FloatTensor)`, *optional*):
        Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
        heads. Returned when `output_attentions=True` is passed or when `config.output_attentions=True`
    NÚlogits.Úhidden_statesÚ
attentions)r%   r&   r'   r(   rN   ÚtorchÚFloatTensorrD   rO   rC   rP   r+   r,   r-   rM   rM   �   sz   € € € € € € ð	ð 	ð (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r,   rM   c                   óÀ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZeed<   dZeed<   d	ee         fd
„ZdS )ÚCLIPSegImageSegmentationOutputaæ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Binary cross entropy loss for segmentation.
    logits (`torch.FloatTensor` of shape `(batch_size, height, width)`):
        Classification scores for each pixel.
    conditional_embeddings (`torch.FloatTensor` of shape `(batch_size, projection_dim)`):
        Conditional embeddings used for segmentation.
    pooled_output (`torch.FloatTensor` of shape `(batch_size, embed_dim)`):
        Pooled output of the [`CLIPSegVisionModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`CLIPSegVisionModel`].
    decoder_output (`CLIPSegDecoderOutput`):
        The output of the [`CLIPSegDecoder`].
    NÚlossrN   Úconditional_embeddingsÚpooled_outputÚvision_model_outputÚdecoder_outputÚreturnc                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ól   K  — | ]/}t          |t          ¦  «        r|                     ¦   «         n|V — Œ0d S ©N)Ú
isinstancer   Úto_tuple)Ú.0Úvs     r-   ú	<genexpr>z:CLIPSegImageSegmentationOutput.to_tuple.<locals>.<genexpr>½   s=   è è € Ð^Ð^È1¥Z°µ;Ñ%?Ô%?ÐF�Q—Z’Z‘\”\�\ÀQÐ^Ð^Ð^Ð^Ð^Ð^r,   )rC   Úvalues)Úselfs    r-   r_   z'CLIPSegImageSegmentationOutput.to_tuple¼   s,   € ÝÐ^Ð^ÐPT×P[ÒP[ÑP]ÔP]Ð^Ñ^Ô^Ñ^Ô^Ð^r,   )r%   r&   r'   r(   rU   rQ   rR   rD   rN   rV   rW   rX   r	   rY   rM   rC   r   r_   r+   r,   r-   rT   rT   £   sÌ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø7;Ð˜EÔ-°Ñ4Ð;Ð;Ñ;Ø.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ø6:ÐÐ3Ð:Ð:Ñ:Ø+/€NÐ(Ð/Ð/Ñ/ð_˜% œ*ð _ð _ð _ð _ð _ð _r,   rT   c                   ó>   ‡ — e Zd Zddej        dej        fˆ fd„Zˆ xZS )ÚCLIPSegVisionEmbeddingsTÚpixel_valuesrZ   c                 óL   •— t          ¦   «                              ||¦  «         d S r]   ©ÚsuperÚforward)rd   rg   Úinterpolate_pos_encodingÚ	__class__s      €r-   rk   zCLIPSegVisionEmbeddings.forwardÂ   s"   ø€ Ý‰Œ�Š˜Ð&>Ñ?Ô?Ð?Ð?Ð?r,   ©T)r%   r&   r'   rQ   rR   ÚTensorrk   Ú__classcell__©rm   s   @r-   rf   rf   À   sd   ø€ € € € € ð@ð @ EÔ$5ð @ÐY^ÔYeð @ð @ð @ð @ð @ð @ð @ð @ð @ð @r,   rf   c                   ó   — e Zd ZdS )ÚCLIPSegTextEmbeddingsNrJ   r+   r,   r-   rs   rs   Æ   rK   r,   rs   c                   ó   — e Zd ZdS )ÚCLIPSegAttentionNrJ   r+   r,   r-   ru   ru   Ê   rK   r,   ru   c                   ó   — e Zd ZdS )Ú
CLIPSegMLPNrJ   r+   r,   r-   rw   rw   Î   rK   r,   rw   c                   ó   — e Zd ZdS )ÚCLIPSegEncoderLayerNrJ   r+   r,   r-   ry   ry   Ò   rK   r,   ry   c                   óP   — e Zd ZdZdej        dej        deej                 fd„ZdS )ÚCLIPSegDecoderLayerz¤
    CLIPSeg decoder layer, which is identical to `CLIPSegEncoderLayer`, except that normalization is applied after
    self-attention/MLP, rather than before.
    rO   Úattention_maskrZ   c                 óÆ   — |} | j         d||dœ|¤Ž\  }}||z   }|                      |¦  «        }|}|                      |¦  «        }||z   }|                      |¦  «        }|S )N)rO   r|   r+   )Ú	self_attnÚlayer_norm1ÚmlpÚlayer_norm2)rd   rO   r|   ÚkwargsÚresidualÚ_s         r-   rk   zCLIPSegDecoderLayer.forwardÜ   s“   € ð !ˆà)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð ! =Ñ0ˆØ×(Ò(¨Ñ7Ô7ˆà ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØ×(Ò(¨Ñ7Ô7ˆàÐr,   N)	r%   r&   r'   r(   rQ   ro   rC   rR   rk   r+   r,   r-   r{   r{   Ö   sZ   € € € € € ðð ð
à”|ðð œðð
 
ˆuÔ Ô	!ðð ð ð ð ð r,   r{   c                   óL   — e Zd ZeegedœZ ej        ¦   «         d„ ¦   «         Z	dS )ÚCLIPSegPreTrainedModel)rO   rP   c                 óà  — t          j        | |¦  «         | j        j        }t	          |t
          ¦  «        r™t          j        |j        j	        d|dz  ¬¦  «         t          j        |j
        j	        d|dz  ¬¦  «         t          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         d	S t	          |t"          ¦  «        rÇt          j        |j        d|j        dz  |z  ¬¦  «         t          j        |j        j	        |j        j        |z  ¬¦  «         t          j        |j
        j	        |j        j        |z  ¬¦  «         t          j        |j        t          j        |j        ¦  «                             d¦  «        ¦  «         d	S t	          |t.          ¦  «        r¯|j        dz  d|j        j        z  dz  z  |z  }|j        dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         d	S t	          |t:          ¦  «        r||j        j        dz  d|j        j        z  dz  z  |z  }d|j        j        z  dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j         j	        |¬¦  «         d	S t	          |tB          ¦  «        rXt          j        |j"        j	        |j#        dz  |z  ¬¦  «         t          j        |j$        j	        |j%        dz  |z  ¬¦  «         d	S d	S )
zInitialize the weightsr:   g{®Gáz”?)ÚmeanÚstdéÿÿÿÿ)é   rŠ   g      à¿)r‰   r   N)&r
   Ú_init_weightsÚconfigÚinitializer_factorr^   rs   ÚinitÚnormal_Útoken_embeddingÚweightÚposition_embeddingÚcopy_Úposition_idsrQ   ÚarangeÚshapeÚexpandrf   Úclass_embeddingÚ	embed_dimÚpatch_embeddingÚinitializer_rangeÚnum_positionsru   Únum_hidden_layersÚq_projÚk_projÚv_projÚout_projrw   Úhidden_sizeÚfc1Úfc2ÚCLIPSegModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dim)rd   ÚmoduleÚfactorÚin_proj_stdÚout_proj_stdÚfc_stds         r-   rŒ   z$CLIPSegPreTrainedModel._init_weightsü   sL  € õ 	Ô% d¨FÑ3Ô3Ð3Ø”Ô/ˆÝ�fÕ3Ñ4Ô4ð 	ÝŒL˜Ô/Ô6¸SÀfÈtÁmÐTÑTÔTÐTÝŒL˜Ô2Ô9ÀÈÐRVÉÐWÑWÔWÐWÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ 7Ñ8Ô8ð 	ÝŒL˜Ô/°c¸vÔ?OÐQUÑ?UÐX^Ñ?^Ð_Ñ_Ô_Ð_ÝŒL˜Ô/Ô6¸F¼MÔ<[Ð^dÑ<dÐeÑeÔeÐeÝŒL˜Ô2Ô9¸v¼}Ô?^ÐagÑ?gÐhÑhÔhÐhÝŒJ�vÔ*­E¬L¸Ô9MÑ,NÔ,N×,UÒ,UÐV]Ñ,^Ô,^Ñ_Ô_Ð_Ð_Ð_Ý˜Õ 0Ñ1Ô1ð 	Ø!Ô+¨TÑ1°q¸6¼=Ô;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"Ô,¨dÑ2°fÑ<ˆLÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ/°\ÐBÑBÔBÐBÐBÐBÝ˜¥
Ñ+Ô+ð 	Ø!œ=Ô4°dÑ:ÀÀFÄMÔDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&œ-Ô3Ñ3¸Ñ<¸vÑEˆFÝŒL˜œÔ*°Ð7Ñ7Ô7Ð7ÝŒL˜œÔ*°Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥Ñ-Ô-ð 	ÝŒLØÔ&Ô-ØÔ)¨4Ñ/°&Ñ8ðñ ô ð õ ŒLØÔ(Ô/ØÔ+¨TÑ1°FÑ:ðñ ô ð ð ð ð	ð 	r,   N)
r%   r&   r'   ry   r{   ru   Ú_can_record_outputsrQ   Úno_gradrŒ   r+   r,   r-   r†   r†   õ   sR   € € € € € ð .Ð/BÐCØ&ðð Ðð
 €U„]�_„_ð!ð !ñ „_ð!ð !ð !r,   r†   c                   ó   — e Zd ZdS )ÚCLIPSegEncoderNrJ   r+   r,   r-   r³   r³   !  rK   r,   r³   c                   ó˜   ‡ — e Zd Zdefˆ fd„Zeeedee	j
                 de	j
        dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCLIPSegDecoderr�   c                 óâ  •‡‡— t          ¦   «                              ‰¦  «         ‰j        | _        t          j        ‰j        ‰j        ¦  «        | _        t          j        ‰j        ‰j        ¦  «        | _        ‰j	        r×‰j
        j        dz  ‰j
        j        dz  f}t          j        t          j        ‰j        ‰j        dd¬¦  «        t          j        ¦   «         t          j        ‰j        ‰j        dz  |d         |d         ¬¦  «        t          j        ¦   «         t          j        ‰j        dz  d|d         |d         ¬¦  «        ¦  «        | _        n6t          j        ‰j        d‰j
        j        ‰j
        j        ¬¦  «        | _        t#          ‰j        ¦  «        }t          j        ˆfd	„t)          |¦  «        D ¦   «         ¦  «        | _        t-          j        ‰j
        ¦  «        Š‰j        ‰_        ‰j        ‰_        ‰j        ‰_        d
‰_        t          j        ˆfd„t)          t#          ‰j        ¦  «        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Nr8   r   r‹   )Úkernel_sizeÚpaddingr   r   )r·   Ústride)r¹   c                 óX   •— g | ]&}t          j        ‰j        j        ‰j        ¦  «        ‘Œ'S r+   )r   ÚLinearÚvision_configr£   r7   )r`   r„   r�   s     €r-   ú
<listcomp>z+CLIPSegDecoder.__init__.<locals>.<listcomp>F  s/   ø€ ÐbÐbÐbÐPQ�RŒY�vÔ+Ô7¸Ô9JÑKÔKÐbÐbÐbr,   Úreluc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r+   )r{   )r`   r„   Údecoder_configs     €r-   r½   z+CLIPSegDecoder.__init__.<locals>.<listcomp>N  s"   ø€ Ð$tÐ$tÐ$tÈQÕ%8¸Ñ%HÔ%HÐ$tÐ$tÐ$tr,   ) rj   Ú__init__r?   r   r»   r*   r7   Úfilm_mulÚfilm_addr@   r¼   Ú
patch_sizeÚ
SequentialÚConv2dÚReLUÚConvTranspose2dÚtransposed_convolutionÚlenr5   Ú
ModuleListÚrangeÚreducesÚcopyÚdeepcopyr£   r9   Únum_attention_headsr>   Úintermediate_sizeÚ
hidden_actÚlayersÚ	post_init)rd   r�   Útransposed_kernelsÚdepthrÀ   rm   s    `  @€r-   rÁ   zCLIPSegDecoder.__init__&  sA  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð à!'Ô!9ˆÔåœ	 &Ô"7¸Ô9JÑKÔKˆŒÝœ	 &Ô"7¸Ô9JÑKÔKˆŒàÔ4ð 	Ø"(Ô"6Ô"AÀQÑ"FÈÔH\ÔHgÐklÑHlÐ!mÐå*,¬-Ý”	˜&Ô+¨VÔ->ÈAÐWXÐYÑYÔYÝ”‘	”	ÝÔ"ØÔ%ØÔ%¨Ñ*Ø 2°1Ô 5Ø-¨aÔ0ð	ñ ô õ ”‘	”	ÝÔ"ØÔ%¨Ñ*¨AÐ;MÈaÔ;PÐYkÐlmÔYnðñ ô ñ+ô +ˆDÔ'Ð'õ +-Ô*<ØÔ! 1 fÔ&:Ô&EÈfÔNbÔNmð+ñ +ô +ˆDÔ'õ �FÔ)Ñ*Ô*ˆÝ”}ØbÐbÐbÐbÕUZÐ[`ÑUaÔUaÐbÑbÔbñ
ô 
ˆŒõ œ vÔ';Ñ<Ô<ˆØ%+Ô%6ˆÔ"Ø-3Ô-OˆÔ*Ø+1Ô+KˆÔ(Ø$*ˆÔ!Ý”mÐ$tÐ$tÐ$tÐ$tÕRWÕX[Ð\bÔ\qÑXrÔXrÑRsÔRsÐ$tÑ$tÔ$tÑuÔuˆŒà�ŠÑÔÐÐÐr,   rO   rV   r‚   rZ   c                 ó
  — |ddd…         }d}t          t          || j        | j        ¦  «        ¦  «        D ]•\  }\  }}}	|� |	|¦  «        |z   }n |	|¦  «        }|| j        k    rZ|                      |¦  «        |                     ddd¦  «        z  |                      |¦  «        z   }|                     ddd¦  «        } ||fddi|¤Ž}Œ–|dd…dd…dd…f                              dd¦  «        }t          t          j        |j        d         ¦  «        ¦  «        }
|j        d         }|                     ||j        d         |
|
¦  «        }|                      |¦  «                             d¦  «        }t!          |¬¦  «        S )a/  
        conditional_embeddings (`torch.FloatTensor` of shape `(batch_size, config.projection_dim)`, *optional*):
            The conditional embeddings for the query images. If provided, the model will use this instead of computing
            the embeddings from the conditional_pixel_values.
        NrŠ   r‹   r   r   r|   )rN   )Ú	enumerateÚziprÓ   rÍ   r?   rÂ   ÚpermuterÃ   Ú	transposerB   ÚmathÚsqrtr—   ÚviewrÉ   ÚsqueezerM   )rd   rO   rV   r‚   ÚactivationsÚoutputÚiÚ
activationÚlayerÚreduceÚsizeÚ
batch_sizerN   s                r-   rk   zCLIPSegDecoder.forwardR  sª  € ð $ D D b DÔ)ˆàˆÝ.7½¸KÈÌÐVZÔVbÑ8cÔ8cÑ.dÔ.dð 	Bð 	BÑ*ˆAÑ*�
˜E 6ØÐ!Ø˜ 
Ñ+Ô+¨fÑ4��à˜ 
Ñ+Ô+�à�DÔ*Ò*Ð*ØŸšÐ'=Ñ>Ô>ÀÇÂÐPQÐSTÐVWÑAXÔAXÑXÐ[_×[hÒ[hØ*ñ\ô \ñ �ð  Ÿš¨¨1¨aÑ0Ô0�à�U˜6ÐAÐA°$ÐA¸&ÐAÐAˆFˆFà˜˜˜˜1˜2˜2˜q˜q˜q˜Ô!×+Ò+¨A¨qÑ1Ô1ˆå•4”9˜Vœ\¨!œ_Ñ-Ô-Ñ.Ô.ˆà+Ô1°!Ô4ˆ
Ø—’˜Z¨¬°a¬¸$ÀÑEÔEˆà×,Ò,¨VÑ4Ô4×<Ò<¸QÑ?Ô?ˆå#¨6Ð2Ñ2Ô2Ð2r,   )r%   r&   r'   r2   rÁ   r   r   r   rC   rQ   ro   r   r   rM   rk   rp   rq   s   @r-   rµ   rµ   %  s¯   ø€ € € € € ð*˜}ð *ð *ð *ð *ð *ð *ðX  ØØð%3à˜Uœ\Ô*ð%3ð !&¤ð%3ð Ð+Ô,ð	%3ð
 
ð%3ð %3ð %3ñ „^ñ „_ñ  Ôð%3ð %3ð %3ð %3ð %3r,   rµ   c                   ó*   ‡ — e Zd Zdeez  fˆ fd„Zˆ xZS )ÚCLIPSegTextModelrZ   c                 ó6   •—  t          ¦   «         j        di |¤ŽS )a;  
        Examples:

        ```python
        >>> from transformers import AutoTokenizer, CLIPSegTextModel

        >>> tokenizer = AutoTokenizer.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegTextModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states
        ```r+   ri   ©rd   Úsuper_kwargsrm   s     €r-   rk   zCLIPSegTextModel.forward~  s!   ø€ ð  �u‰wŒwŒÐ.Ð. Ð.Ð.Ð.r,   )r%   r&   r'   rC   r	   rk   rp   rq   s   @r-   ré   ré   }  sJ   ø€ € € € € ð/¨Ð1KÑ)Kð /ð /ð /ð /ð /ð /ð /ð /ð /ð /r,   ré   c            
       ó\   ‡ — e Zd Z	 ddej        dz  dedz  dee         dee	z  fˆ fd„Z
ˆ xZS )	ÚCLIPSegVisionModelTrg   Nrl   r‚   rZ   c                 ó:   •—  t          ¦   «         j        ||fi |¤ŽS )a+  
        Examples:

        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> from transformers import AutoProcessor, CLIPSegVisionModel

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegVisionModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

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

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled CLS states
        ```ri   ©rd   rg   rl   r‚   rm   s       €r-   rk   zCLIPSegVisionModel.forward’  s&   ø€ ð8 �u‰wŒwŒ˜|Ð-EÐPÐPÈÐPÐPÐPr,   rn   )r%   r&   r'   rQ   rR   rG   r   r   rC   r	   rk   rp   rq   s   @r-   rî   rî   ‘  s”   ø€ € € € € ð 15ðQð QàÔ'¨$Ñ.ðQð #'¨¡+ðQð Ð+Ô,ð	Qð
 
Ð+Ñ	+ðQð Qð Qð Qð Qð Qð Qð Qð Qð Qr,   rî   c            
       ól   ‡ — e Zd Zˆ fd„Z	 d	dej        dedee         de	e
z  fˆ fd„Zd	defˆ fd„Zˆ xZS )
r¦   c                 ó6   •—  t          ¦   «         j        di |¤ŽS )a  
        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, CLIPSegModel

        >>> tokenizer = AutoTokenizer.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```r+   )rj   Úget_text_featuresrë   s     €r-   ró   zCLIPSegModel.get_text_features²  s"   ø€ ð )�u‰wŒwÔ(Ð8Ð8¨<Ð8Ð8Ð8r,   Trg   rl   r‚   rZ   c                 ó:   •—  t          ¦   «         j        ||fi |¤ŽS )aŒ  
        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, CLIPSegModel
        >>> from transformers.image_utils import load_image

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = load_image(url)

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

        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```)rj   Úget_image_featuresrð   s       €r-   rõ   zCLIPSegModel.get_image_featuresÃ  s(   ø€ ð2 *�u‰wŒwÔ)¨,Ð8PÐ[Ð[ÐTZÐ[Ð[Ð[r,   c                 ó>   •—  t          ¦   «         j        dd|i|¤Ž dS )a  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.

        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, CLIPSegModel
        >>> from transformers.image_utils import load_image

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = load_image(url)

        >>> inputs = processor(
        ...     text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True
        ... )

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```rl   Nr+   ri   )rd   rl   rì   rm   s      €r-   rk   zCLIPSegModel.forwardÞ  s-   ø€ ð6 	�‰ŒŒÐZÐZÐ1IÐZÈ\ÐZÐZÐZÐZÐZr,   rn   )r%   r&   r'   ró   rQ   rR   rG   r   r   rC   r	   rõ   rk   rp   rq   s   @r-   r¦   r¦   ±  sÖ   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð( *.ð\ð \àÔ'ð\ð #'ð\ð Ð+Ô,ð	\ð
 
Ð+Ñ	+ð\ð \ð \ð \ð \ð \ð6[ð [°ð [ð [ð [ð [ð [ð [ð [ð [ð [ð [r,   r¦   zn
    CLIPSeg model with a Transformer-based decoder on top for zero-shot and one-shot image segmentation.
    )Úcustom_introc                   ó�  ‡ — e Zd ZU eed<   defˆ fd„Z	 	 	 	 	 ddedz  dej        dz  dej        dz  dej        dz  dej        dz  d	ej	        fd
„Z
ee	 	 	 	 	 	 	 	 ddej	        dz  dej	        dz  dej	        dz  dej	        dz  dej        dz  dej        dz  dej        dz  dedee         d	eez  fd„¦   «         ¦   «         Zˆ xZS )ÚCLIPSegForImageSegmentationr�   c                 óÚ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          |¦  «        | _        |                      ¦   «          d S r]   )rj   rÁ   r¦   Úclipr5   rµ   ÚdecoderrÔ   )rd   r�   rm   s     €r-   rÁ   z$CLIPSegForImageSegmentation.__init__  sZ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ	Ø$Ô3ˆÔÝ% fÑ-Ô-ˆŒà�ŠÑÔÐÐÐr,   Nrç   Ú	input_idsr|   r•   Úconditional_pixel_valuesrZ   c                 óæ  — |�pt          |¦  «        |k    rt          d¦  «        ‚t          j        ¦   «         5  | j                             |||¬¦  «        j        }d d d ¦  «         n# 1 swxY w Y   n~|�mt          |¦  «        |k    rt          d¦  «        ‚t          j        ¦   «         5  | j                             |¦  «        j        }d d d ¦  «         n# 1 swxY w Y   nt          d¦  «        ‚|S )Nz@Make sure to pass as many prompt texts as there are query images)r|   r•   zAMake sure to pass as many prompt images as there are query imagesz[Invalid conditional, should be either provided as `input_ids` or `conditional_pixel_values`)rÊ   Ú
ValueErrorrQ   r±   rû   ró   Úpooler_outputrõ   )rd   rç   rý   r|   r•   rþ   rV   s          r-   Úget_conditional_embeddingsz6CLIPSegForImageSegmentation.get_conditional_embeddings  s�  € ð Ð å�9‰~Œ~ Ò+Ð+Ý Ð!cÑdÔdÐdÝ”‘”ð  ð  Ø)-¬×)DÒ)DØ¨nÈ<ð *Eñ *ô *äð 'ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  øð &Ð1åÐ+Ñ,Ô,°
Ò:Ð:Ý Ð!dÑeÔeÐeÝ”‘”ð nð nØ)-¬×)EÒ)EÐF^Ñ)_Ô)_Ô)mÐ&ðnð nð nñ nô nð nð nð nð nð nð nøøøð nð nð nð nøõ Ømñô ð ð &Ð%s#   ¸#A'Á'A+Á.A+Â* CÃCÃCTrg   rV   Úlabelsrl   r‚   c	                 óè  ‡— t          j        ¦   «         5  d|	d<    | j        j        d||dœ|	¤Ž}
|
j        }|
j        Šˆfd„| j        D ¦   «         }t          |
j        |
j        |
j        |
j	        ¬¦  «        }
ddd¦  «         n# 1 swxY w Y   |€&|  
                    |j        d         ||||¬¦  «        }nU|j        d         |j        d         k    rt          d	¦  «        ‚|j        d
         | j        j        k    rt          d¦  «        ‚ | j        ||fi |	¤Ž}|j        }d}|�9|                     |j        ¦  «        }t'          j        ¦   «         } |||¦  «        }t+          |||||
|¬¦  «        S )a~  
        conditional_pixel_values (`torch.FloatTensor`, *optional*):
            The pixel values of the conditional images.
        conditional_embeddings (`torch.FloatTensor` of shape `(batch_size, config.projection_dim)`, *optional*):
            The conditional embeddings for the query images. If provided, the model will use this instead of computing
            the embeddings from the conditional_pixel_values.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, CLIPSegForImageSegmentation
        >>> from transformers.image_utils import load_image

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = load_image(url)

        >>> texts = ["a cat", "a remote", "a blanket"]
        >>> inputs = processor(text=texts, images=[image] * len(texts), padding=True, return_tensors="pt")

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> print(logits.shape)
        torch.Size([3, 352, 352])
        ```TÚoutput_hidden_states)rg   rl   c                 ó&   •— g | ]}‰|d z            ‘ŒS )r‹   r+   )r`   râ   rO   s     €r-   r½   z7CLIPSegForImageSegmentation.forward.<locals>.<listcomp>e  s"   ø€ ÐMÐMÐM°A˜=¨¨Q©Ô/ÐMÐMÐMr,   )Úlast_hidden_stater  rO   rP   Nr   )rç   rý   r|   r•   rþ   zWMake sure to pass as many conditional embeddings as there are query images in the batchr‹   zcMake sure that the feature dimension of the conditional embeddings matches `config.projection_dim`.)rU   rN   rV   rW   rX   rY   r+   )rQ   r±   rû   rõ   r  rO   r5   r	   r  rP   r  r—   r   r�   r*   rü   rN   ÚtoÚdevicer   ÚBCEWithLogitsLossrT   )rd   rý   rg   rþ   rV   r|   r•   r  rl   r‚   Úvision_outputsrW   rà   Údecoder_outputsrN   rU   Úloss_fnrO   s                    @r-   rk   z#CLIPSegForImageSegmentation.forward)  s9  ø€ õb Œ]‰_Œ_ð 	ð 	Ø-1ˆFÐ)Ñ*Ø9˜TœYÔ9ð Ø)Ø)Aðð ð ðð ˆNð
 +Ô8ˆMà*Ô8ˆMàMÐMÐMÐM¸Ô9LÐMÑMÔMˆKõ 8Ø"0Ô"BØ,Ô:Ø,Ô:Ø)Ô4ð	ñ ô ˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð, "Ð)Ø%)×%DÒ%DØ'Ô-¨aÔ0Ø#Ø-Ø)Ø)Að &Eñ &ô &Ð"Ð"ð &Ô+¨AÔ.°,Ô2DÀQÔ2GÒGÐGÝ Ømñô ð ð &Ô+¨AÔ.°$´+Ô2LÒLÐLÝ ð0ñô ð ð '˜$œ,ØØ"ð
ð 
ð ð
ð 
ˆð
 !Ô'ˆàˆØÐà—Y’Y˜vœ}Ñ-Ô-ˆFÝÔ*Ñ,Ô,ˆGØ�7˜6 6Ñ*Ô*ˆDå-ØØØ#9Ø'Ø .Ø*ð
ñ 
ô 
ð 	
s   •A#BÂBÂB)NNNNN)NNNNNNNT)r%   r&   r'   r2   rD   rÁ   rB   rQ   ro   rR   r  r   r   Ú
LongTensorrG   r   r   rC   rI   rk   rp   rq   s   @r-   rù   rù   ü  sÜ  ø€ € € € € € ð ÐÐÑð˜}ð ð ð ð ð ð ð "&Ø)-Ø.2Ø,0Ø8<ð&ð &à˜$‘Jð&ð ”< $Ñ&ð&ð œ tÑ+ð	&ð
 ”l TÑ)ð&ð #(¤,°Ñ"5ð&ð 
Ô	ð&ð &ð &ð &ð: Øð /3Ø15Ø=AØ;?Ø.2Ø04Ø*.Ø)-ðn
ð n
àÔ$ tÑ+ðn
ð Ô'¨$Ñ.ðn
ð #(Ô"3°dÑ":ð	n
ð
 !&Ô 1°DÑ 8ðn
ð œ tÑ+ðn
ð Ô&¨Ñ-ðn
ð Ô  4Ñ'ðn
ð #'ðn
ð Ð+Ô,ðn
ð 
�Ñ	ðn
ð n
ð n
ñ „^ñ Ôðn
ð n
ð n
ð n
ð n
r,   rù   )r2   r#   r0   r¦   r†   ré   rî   rù   )Ar(   rÎ   rÜ   Údataclassesr   Útypingr   rQ   Úhuggingface_hub.dataclassesr   r   Ú r   r�   Úmodeling_outputsr	   Úmodeling_utilsr
   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úclip.configuration_clipr   r   r   Úclip.modeling_clipr   r   r   r   r   r   r   r   r   r   r    r#   r0   r2   rI   rM   rT   rf   rs   ru   rw   ry   r{   r†   r³   rµ   ré   rî   r¦   rù   Ú__all__r+   r,   r-   ú<module>r     så  ðð Ð à €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø :Ð :Ð :Ð :Ð :Ð :Ø -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €Ð/Ð0Ñ0Ô0Øð&ð &ð &ð &ð &˜ñ &ô &ñ „ñ 1Ô0ð&ð( €Ð/Ð0Ñ0Ô0Øð&ð &ð &ð &ð &Ð*ñ &ô &ñ „ñ 1Ô0ð&ð( €Ð/Ð0Ñ0Ô0Øð+5ð +5ð +5ð +5ð +5�Jñ +5ô +5ñ „ñ 1Ô0ð+5ð\	ð 	ð 	ð 	ð 	�Jñ 	ô 	ð 	ð Ø
ð<ð <ð <ð <ð <˜;ñ <ô <ñ „ñ „ð<ð" Ø
ð_ð _ð _ð _ð _ [ñ _ô _ñ „ñ „ð_ð6@ð @ð @ð @ð @Ð2ñ @ô @ð @ð	ð 	ð 	ð 	ð 	Ð.ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�}ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð*ñ 	ô 	ð 	ðð ð ð ð Ð*ñ ô ð ð> ð(ð (ð (ð (ð (Ð0ñ (ô (ñ „ð(ðV	ð 	ð 	ð 	ð 	�[ñ 	ô 	ð 	ðU3ð U3ð U3ð U3ð U3Ð+ñ U3ô U3ð U3ðp/ð /ð /ð /ð /�}ñ /ô /ð /ð(Qð Qð Qð Qð Q˜ñ Qô Qð Qð@H[ð H[ð H[ð H[ð H[�9ñ H[ô H[ð H[ðV €ððñ ô ð
X
ð X
ð X
ð X
ð X
Ð"8ñ X
ô X
ñô ð
X
ðv	ð 	ð 	€€€r,   