§
    ‚Štj[W  ã                   óp  — d Z ddlZddlmZ ddlZddlmc mZ ddl	m
Z
 ddlmZ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 ddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*  ej+        e,¦  «        Z- ed¬¦  «        e
 G d„ de*¦  «        ¦   «         ¦   «         Z. ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z/ G d„ de&¦  «        Z0 G d„ de#¦  «        Z1 G d „ d!e ¦  «        Z2 G d"„ d#e(¦  «        Z3 G d$„ d%e"¦  «        Z4 G d&„ d'e!¦  «        Z5 G d(„ d)ej6        ¦  «        Z7 G d*„ d+ej8        ¦  «        Z9 G d,„ d-ej8        ¦  «        Z: G d.„ d/ej8        ¦  «        Z;e G d0„ d1e¦  «        ¦   «         Z< ed2¬¦  «         G d3„ d4e%¦  «        ¦   «         Z=g d5¢Z>dS )6zPyTorch EoMT model.é    N)Ú	dataclass)Ústrict)ÚTensorÚnné   )Úinitialization)ÚACT2FN)ÚModelOutput)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚDinov2EmbeddingsÚDinov2LayerÚDinov2LayerScaleÚDinov2PatchEmbeddings)Ú#Mask2FormerForUniversalSegmentationÚMask2FormerLoss)ÚSiglipAttention)Ú	ViTConfigz$tue-mps/coco_panoptic_eomt_large_640)Ú
checkpointc                   ód  — e Zd ZU dZdZdZeed<   dZeed<   dZ	e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e         z  eeef         z  ed<   dZeee         z  eee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z  ed<   dZeed<   d	Zeed <   d!Zeed"<   d#Zeed$<   d%Zeed&<   d%Z eed'<   d(Z!eed)<   d*Z"eed+<   d,Z#eed-<   d.Z$eed/<   d	Z%eed0<    e&¦   «         Z' e&¦   «         Z( e&¦   «         Z) e&¦   «         Z* e&¦   «         Z+ e&¦   «         Z,d1„ Z-d2S )3Ú
EomtConfiga  
    layerscale_value (`float`, *optional*, defaults to 1.0):
        Initial value for the LayerScale parameter.
    num_upscale_blocks (`int`, *optional*, defaults to 2):
        Number of upsampling blocks used in the decoder or segmentation head.
    use_swiglu_ffn (`bool`, *optional*, defaults to `False`):
        Whether to use the SwiGLU feedforward neural network.
    num_blocks (`int`, *optional*, defaults to 4):
        Number of feature blocks or stages in the architecture.
    no_object_weight (`float`, *optional*, defaults to 0.1):
        Loss weight for the 'no object' class in panoptic/instance segmentation.
    class_weight (`float`, *optional*, defaults to 2.0):
        Loss weight for classification targets.
    mask_weight (`float`, *optional*, defaults to 5.0):
        Loss weight for mask prediction.
    train_num_points (`int`, *optional*, defaults to 12544):
        Number of points to sample for mask loss computation during training.
    oversample_ratio (`float`, *optional*, defaults to 3.0):
        Oversampling ratio used in point sampling for mask training.
    importance_sample_ratio (`float`, *optional*, defaults to 0.75):
        Ratio of points to sample based on importance during training.
    num_queries (`int`, *optional*, defaults to 200):
        Number of object queries in the Transformer.
    num_register_tokens (`int`, *optional*, defaults to 4):
        Number of learnable register tokens added to the transformer input.

    Example:

    ```python
    >>> from transformers import EomtConfig, EomtForUniversalSegmentation

    >>> # Initialize configuration
    >>> config = EomtConfig()

    >>> # Initialize model
    >>> model = EomtForUniversalSegmentation(config)

    >>> # Access config
    >>> config = model.config
    ```Úeomti   Úhidden_sizeé   Únum_hidden_layersé   Únum_attention_headsé   Ú	mlp_ratioÚgeluÚ
hidden_actç        Úhidden_dropout_probg{®Gáz”?Úinitializer_rangeç�íµ ÷Æ°>Úlayer_norm_epsi€  Ú
image_sizeÚ
patch_sizer   Únum_channelsg      ð?Úlayerscale_valueÚdrop_path_rater   Únum_upscale_blocksÚattention_dropoutFÚuse_swiglu_ffnÚ
num_blocksgš™™™™™¹?Úno_object_weightg       @Úclass_weightg      @Úmask_weightÚdice_weighti 1  Útrain_num_pointsg      @Úoversample_ratiog      è?Úimportance_sample_ratioéÈ   Únum_queriesÚnum_register_tokensc                 ó    — t          d¦  «        ‚)NzNot needed for Eomt©ÚAttributeError)ÚselfÚkwargss     úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/eomt/modular_eomt.pyÚ__post_init__zEomtConfig.__post_init__„   s   € ÝÐ2Ñ3Ô3Ð3ó    N).Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer   ÚintÚ__annotations__r!   r#   r%   r'   Ústrr)   Úfloatr*   r,   r-   ÚlistÚtupler.   r/   r0   r1   r2   r3   r4   Úboolr5   r6   r7   r8   r9   r:   r;   r<   r>   r?   rB   Úintermediate_sizeÚqkv_biasÚ
pooler_actÚpooler_output_sizeÚencoder_strideÚattention_probs_dropout_probrF   © rG   rE   r   r   4   sj  € € € € € € ð'ð 'ðR €Jà€K�ÐÐÑØÐ�sÐÐÑØ!Ð˜Ð!Ð!Ñ!Ø€IˆsÐÐÑØ€J�ÐÐÑØ'*Ð˜ ™Ð*Ð*Ñ*Ø#Ð�uÐ#Ð#Ñ#Ø €N�EÐ Ð Ñ Ø47€J��d˜3”i‘ %¨¨S¨¤/Ñ1Ð7Ð7Ñ7Ø46€J��d˜3”i‘ %¨¨S¨¤/Ñ1Ð6Ð6Ñ6Ø€L�#ÐÐÑØ!Ð�eÐ!Ð!Ñ!Ø"%€N�E˜C‘KÐ%Ð%Ñ%ØÐ˜ÐÐÑØ%(Ð�u˜s‘{Ð(Ð(Ñ(Ø €N�DÐ Ð Ñ Ø€J�ÐÐÑØ!Ð�eÐ!Ð!Ñ!Ø€L�%ÐÐÑØ€K�ÐÐÑØ€K�ÐÐÑØ!Ð�cÐ!Ð!Ñ!Ø!Ð�eÐ!Ð!Ñ!Ø%)Ð˜UÐ)Ð)Ñ)Ø€K�ÐÐÑØ Ð˜Ð Ð Ñ à&˜Ñ(Ô(ÐØˆ~ÑÔ€HØ�Ñ!Ô!€JØ'˜Ñ)Ô)ÐØ#�^Ñ%Ô%€NØ#1 >Ñ#3Ô#3Ð ð4ð 4ð 4ð 4ð 4rG   r   a˜  
    Class for outputs of [`EomtForUniversalSegmentationOutput`].

    This output can be directly passed to [`~EomtImageProcessor.post_process_semantic_segmentation`] or
    [`~EomtImageProcessor.post_process_instance_segmentation`] or
    [`~EomtImageProcessor.post_process_panoptic_segmentation`] to compute final segmentation maps. Please, see
    [`~EomtImageProcessor] for details regarding usage.
    )Úcustom_introc                   ó
  — 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j                 dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed	<   dS )
Ú"EomtForUniversalSegmentationOutputa*  
    loss (`torch.Tensor`, *optional*):
        The computed loss, returned when labels are present.
    class_queries_logits (`torch.FloatTensor`):
        A tensor of shape `(batch_size, num_queries, num_labels + 1)` representing the proposed classes for each
        query. Note the `+ 1` is needed because we incorporate the null class.
    masks_queries_logits (`torch.FloatTensor`):
        A tensor of shape `(batch_size, num_queries, height, width)` representing the proposed masks for each
        query.
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
        Last hidden states (final feature map) of the last layer.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
        shape `(batch_size, sequence_length, hidden_size)`. Hidden-states all layers of the model.
    attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `tuple(torch.FloatTensor)` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Self and Cross Attentions weights from transformer decoder.
    patch_offsets (`list[torch.Tensor]`, *optional*):
        list of tuples indicating the image index and start and end positions of patches for semantic segmentation.
    NÚlossÚclass_queries_logitsÚmasks_queries_logitsÚlast_hidden_stateÚhidden_statesÚ
attentionsÚpatch_offsets)rH   rI   rJ   rK   r^   ÚtorchÚFloatTensorrN   r_   r`   ra   rb   rR   rc   rd   rQ   r   rZ   rG   rE   r]   r]   ˆ   s×   € € € € € € ðð ð* &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø59Ð˜%Ô+¨dÑ2Ð9Ð9Ñ9Ø59Ð˜%Ô+¨dÑ2Ð9Ð9Ñ9Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø/3€M�4˜œÔ%¨Ñ,Ð3Ð3Ñ3Ð3Ð3rG   r]   c                   ó   — e Zd ZdS )ÚEomtLossN©rH   rI   rJ   rZ   rG   rE   rh   rh   ²   ó   € € € € € Ø€DrG   rh   c                   ó   — e Zd ZdS )ÚEomtPatchEmbeddingsNri   rZ   rG   rE   rl   rl   ¶   rj   rG   rl   c                   óH   — e Zd Zdeddfd„Zd„ Zdej        dej        fd„ZdS )ÚEomtEmbeddingsÚconfigÚreturnNc                 óŽ  — t           j                             | ¦  «         || _        |j        | _        t          j        t          j        dd|j        ¦  «        ¦  «        | _	        t          j        t          j
        d|j        |j        ¦  «        ¦  «        | _        t          |¦  «        | _        | j        j        }t          j        |j        ¦  «        | _        d|j        z   | _        t          j        ||j        ¦  «        | _        |                      dt          j        |¦  «                             d¦  «        d¬¦  «         d S )Né   Úposition_ids©rr   éÿÿÿÿF)Ú
persistent)r   ÚModuleÚ__init__ro   r.   Ú	Parameterre   Úrandnr   Ú	cls_tokenÚzerosr?   Úregister_tokensrl   Úpatch_embeddingsÚnum_patchesÚDropoutr)   ÚdropoutÚnum_prefix_tokensÚ	EmbeddingÚposition_embeddingsÚregister_bufferÚarangeÚexpand)rC   ro   r   s      rE   rx   zEomtEmbeddings.__init__»   s  € Ý
Œ	×Ò˜4Ñ Ô Ð àˆŒØ Ô+ˆŒåœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒÝ!œ|­E¬K¸¸6Ô;UÐW]ÔWiÑ,jÔ,jÑkÔkˆÔå 3°FÑ ;Ô ;ˆÔØÔ+Ô7ˆÝ”z &Ô"<Ñ=Ô=ˆŒØ!" VÔ%?Ñ!?ˆÔÝ#%¤<°¸VÔ=OÑ#PÔ#PˆÔ Ø×Ò˜^­U¬\¸+Ñ-FÔ-F×-MÒ-MÈgÑ-VÔ-VÐchÐÑiÔiÐiÐiÐirG   c                 ó    — t          d¦  «        ‚)NzNot needed for Eomt ModelrA   ©rC   s    rE   Úinterpolate_pos_encodingz'EomtEmbeddings.interpolate_pos_encodingË   s   € ÝÐ8Ñ9Ô9Ð9rG   Úpixel_valuesc                 ó¢  — |j         \  }}}}| j        j        j        j        }|                      |                     |¬¦  «        ¦  «        }| j                             |dd¦  «        }| j                             |dd¦  «        }||  	                    | j
        ¦  «        z   }t          j        |||gd¬¦  «        }|                      |¦  «        }|S )N)Údtyperu   rr   ©Údim)Úshaper~   Ú
projectionÚweightr�   Útor{   r‡   r}   r„   rs   re   Úcatr�   )rC   r‹   Ú
batch_sizeÚ_Útarget_dtypeÚ
embeddingsÚ
cls_tokensr}   s           rE   ÚforwardzEomtEmbeddings.forwardÎ   sÅ   € Ø*Ô0Ñˆ
�A�q˜!ØÔ,Ô7Ô>ÔDˆØ×*Ò*¨<¯?ª?À¨?Ñ+NÔ+NÑOÔOˆ
à”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
ØÔ.×5Ò5°jÀ"ÀbÑIÔIˆà $×":Ò":¸4Ô;LÑ"MÔ"MÑMˆ
Ý”Y 
¨O¸ZÐHÈaÐPÑPÔPˆ
à—\’\ *Ñ-Ô-ˆ
àÐrG   )	rH   rI   rJ   r   rx   rŠ   re   r   rš   rZ   rG   rE   rn   rn   º   sq   € € € € € ðj˜zð j¨dð jð jð jð jð :ð :ð :ð E¤Lð °U´\ð ð ð ð ð ð rG   rn   c                   ó   — e Zd ZdS )ÚEomtAttentionNri   rZ   rG   rE   rœ   rœ   Þ   rj   rG   rœ   c                   ó   — e Zd ZdS )ÚEomtLayerScaleNri   rZ   rG   rE   rž   rž   â   rj   rG   rž   c                   óJ   — e Zd Z	 ddej        dej        dz  dej        fd„ZdS )Ú	EomtLayerNrb   Úattention_maskrp   c                 ój  — |                       |¦  «        }|                      ||¦  «        \  }}|                      |¦  «        }|                      |¦  «        |z   }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        |z   }|S ©N)Únorm1Ú	attentionÚlayer_scale1Ú	drop_pathÚnorm2ÚmlpÚlayer_scale2)rC   rb   r¡   Úhidden_states_normÚself_attention_outputr–   Úlayer_outputs          rE   rš   zEomtLayer.forwardç   s³   € ð
 "ŸZšZ¨Ñ6Ô6ÐØ#'§>¢>Ð2DÀnÑ#UÔ#UÑ Ð˜qØ $× 1Ò 1Ð2GÑ HÔ HÐð ŸšÐ'<Ñ=Ô=ÀÑMˆð —z’z -Ñ0Ô0ˆØ—x’x Ñ-Ô-ˆØ×(Ò(¨Ñ6Ô6ˆð —~’~ lÑ3Ô3°mÑCˆàÐrG   r£   )rH   rI   rJ   re   r   rš   rZ   rG   rE   r    r    æ   sY   € € € € € ð /3ðð à”|ðð œ tÑ+ðð 
Œð	ð ð ð ð ð rG   r    c                   óD   ‡ — e Zd Zdˆ fd„	Zdej        dej        fd„Zˆ xZS )ÚEomtLayerNorm2dr+   Tc                 óP   •— t          ¦   «                              |||¬¦  «         d S )N)ÚepsÚelementwise_affine)Úsuperrx   )rC   r/   r±   ÚaffineÚ	__class__s       €rE   rx   zEomtLayerNorm2d.__init__ÿ   s(   ø€ Ý‰Œ×Ò˜¨3À6ÐÑJÔJÐJÐJÐJrG   Úhidden_staterp   c                 ó¾   — |                      dddd¦  «        }t          j        || j        | j        | j        | j        ¦  «        }|                      dddd¦  «        }|S )Nr   r   r   rr   )ÚpermuteÚFÚ
layer_normÚnormalized_shaper’   Úbiasr±   )rC   r¶   s     rE   rš   zEomtLayerNorm2d.forward  s^   € Ø#×+Ò+¨A¨q°!°QÑ7Ô7ˆÝ”| L°$Ô2GÈÌÐVZÔV_ÐaeÔaiÑjÔjˆØ#×+Ò+¨A¨q°!°QÑ7Ô7ˆØÐrG   )r+   T)rH   rI   rJ   rx   re   r   rš   Ú__classcell__©rµ   s   @rE   r¯   r¯   þ   si   ø€ € € € € ðKð Kð Kð Kð Kð Kð E¤Lð °U´\ð ð ð ð ð ð ð ð rG   r¯   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚEomtScaleLayerro   c                 ó$  •— t          ¦   «                              ¦   «          |j        }t          j        ||dd¬¦  «        | _        t          |j                 | _        t          j	        ||dd|d¬¦  «        | _
        t          |¦  «        | _        d S )Nr   )Úkernel_sizeÚstrider   rr   F)rÂ   ÚpaddingÚgroupsr¼   )r³   rx   r   r   ÚConvTranspose2dÚconv1r	   r'   Ú
activationÚConv2dÚconv2r¯   Úlayernorm2d©rC   ro   r   rµ   s      €rE   rx   zEomtScaleLayer.__init__
  sŽ   ø€ Ý‰Œ×ÒÑÔÐØÔ(ˆÝÔ'¨°[ÈaÐXYÐZÑZÔZˆŒ
Ý  Ô!2Ô3ˆŒÝ”YØØØØØØð
ñ 
ô 
ˆŒ
õ +¨;Ñ7Ô7ˆÔÐÐrG   rb   rp   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r£   )rÇ   rÈ   rÊ   rË   ©rC   rb   s     rE   rš   zEomtScaleLayer.forward  sN   € ØŸ
š
 =Ñ1Ô1ˆØŸš¨Ñ6Ô6ˆØŸ
š
 =Ñ1Ô1ˆØ×(Ò(¨Ñ7Ô7ˆØÐrG   ©	rH   rI   rJ   r   rx   re   r   rš   r½   r¾   s   @rE   rÀ   rÀ   	  sj   ø€ € € € € ð8˜zð 8ð 8ð 8ð 8ð 8ð 8ð  U¤\ð °e´lð ð ð ð ð ð ð ð rG   rÀ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚEomtScaleBlockro   c                 óÐ   •‡— t          ¦   «                              ¦   «          ‰j        | _        t	          j        ˆfd„t          | j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rZ   )rÀ   ©Ú.0r–   ro   s     €rE   ú
<listcomp>z+EomtScaleBlock.__init__.<locals>.<listcomp>&  s!   ø€ Ð#[Ð#[Ð#[¸q¥N°6Ñ$:Ô$:Ð#[Ð#[Ð#[rG   )r³   rx   r2   r5   r   Ú
ModuleListÚrangeÚblock)rC   ro   rµ   s    `€rE   rx   zEomtScaleBlock.__init__#  sX   øø€ Ý‰Œ×ÒÑÔÐØ Ô3ˆŒÝ”]Ð#[Ð#[Ð#[Ð#[ÅEÈ$Ì/ÑDZÔDZÐ#[Ñ#[Ô#[Ñ\Ô\ˆŒ
ˆ
ˆ
rG   rb   rp   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r£   )rÙ   )rC   rb   rÙ   s      rE   rš   zEomtScaleBlock.forward(  s*   € Ø”Zð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÐrG   rÏ   r¾   s   @rE   rÑ   rÑ   "  sq   ø€ € € € € ð]˜zð ]ð ]ð ]ð ]ð ]ð ]ð
 U¤\ð °e´lð ð ð ð ð ð ð ð rG   rÑ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚEomtMaskHeadro   c                 ó   •— t          ¦   «                              ¦   «          |j        }t          j        ||¦  «        | _        t          j        ||¦  «        | _        t          j        ||¦  «        | _        t          |j	                 | _
        d S r£   )r³   rx   r   r   ÚLinearÚfc1Úfc2Úfc3r	   r'   rÈ   rÌ   s      €rE   rx   zEomtMaskHead.__init__/  sm   ø€ Ý‰Œ×ÒÑÔÐàÔ(ˆÝ”9˜[¨+Ñ6Ô6ˆŒÝ”9˜[¨+Ñ6Ô6ˆŒÝ”9˜[¨+Ñ6Ô6ˆŒÝ  Ô!2Ô3ˆŒˆˆrG   rb   rp   c                 óÐ   — |                       |                      |¦  «        ¦  «        }|                       |                      |¦  «        ¦  «        }|                      |¦  «        }|S r£   )rÈ   rß   rà   rá   rÎ   s     rE   rš   zEomtMaskHead.forward8  sS   € ØŸš¨¯ª°Ñ(?Ô(?Ñ@Ô@ˆØŸš¨¯ª°Ñ(?Ô(?Ñ@Ô@ˆØŸš Ñ/Ô/ˆØÐrG   rÏ   r¾   s   @rE   rÜ   rÜ   .  sj   ø€ € € € € ð4˜zð 4ð 4ð 4ð 4ð 4ð 4ð U¤\ð °e´lð ð ð ð ð ð ð ð rG   rÜ   c                   ó�   ‡ — e Zd ZU dZeed<   dZdZdZdZ	dgZ
dZeed	œZ ej        ¦   «         d
ej        ddfˆ fd„¦   «         Zˆ xZS )ÚEomtPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ro   r   r‹   )ÚimageFr    T)rb   rc   Úmodulerp   Nc                 óÚ  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          j        t
          j        t
          j        f¦  «        rŸt          j
        |j        t          j        d¦  «        ¬¦  «         |j        �it          j        j	                             |j        ¦  «        \  }}|dk    rdt          j        |¦  «        z  nd}t          j        |j        | |¦  «         d S d S t	          |t
          j        ¦  «        rct          j        |j        dd¬¦  «         |j        �<t+          |j        dd¦  «        s(t          j        |j        |j                 ¦  «         d S d S d S t	          |t.          ¦  «        r8t1          |d	¦  «        r&t          j        |j        | j        j        ¦  «         d S d S t	          |t8          ¦  «        r†t          j        |j        d|¬¦  «         t          j        |j        ¦  «         t          j         |j!        t          j"        |j!        j#        d
         ¦  «         $                    d¦  «        ¦  «         d S t	          |tJ          ¦  «        rBt          j&        |j'        dz   ¦  «        }|j(        |d
<   t          j         |j)        |¦  «         d S t	          |tT          ¦  «        rt          j+        |j,        ¦  «         d S d S )Né   )Úar   rr   r(   )ÚmeanÚstdÚ_is_hf_initializedFÚlambda1ru   rt   )-r³   Ú_init_weightsro   r*   Ú
isinstancer   rÞ   rÉ   rÆ   ÚinitÚkaiming_uniform_r’   ÚmathÚsqrtr¼   re   Ú_calculate_fan_in_and_fan_outÚuniform_rƒ   Únormal_Úpadding_idxÚgetattrÚzeros_rž   ÚhasattrÚ	constant_rí   r0   rn   Útrunc_normal_r{   r}   Úcopy_rs   r†   r�   r‡   rh   ÚonesÚ
num_labelsÚeos_coefÚempty_weightÚEomtForUniversalSegmentationÚones_Úattn_mask_probs)rC   ræ   rë   Úfan_inr–   Úboundr  rµ   s          €rE   rî   z!EomtPreTrainedModel._init_weightsR  s¢  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%ØŒkÔ+ˆÝ�f�rœy­"¬)µRÔ5GÐHÑIÔIð 	/ÝÔ! &¤-µ4´9¸Q±<´<Ð@Ñ@Ô@Ð@ØŒ{Ð&Ý!œHœM×GÒGÈÌÑVÔV‘	�˜Ø17¸!²°˜�DœI fÑ-Ô-Ñ-Ð-À�Ý”˜fœk¨E¨6°5Ñ9Ô9Ð9Ð9Ð9ð 'Ð&õ ˜¥¤Ñ-Ô-ð 	/ÝŒL˜œ¨S°aÐ8Ñ8Ô8Ð8àÔ!Ð-µg¸f¼mÐMaÐchÑ6iÔ6iÐ-Ý”˜FœM¨&Ô*<Ô=Ñ>Ô>Ð>Ð>Ð>ð .Ð-Ð-Ð-å˜¥Ñ/Ô/ð 	/Ý�v˜yÑ)Ô)ð MÝ”˜vœ~¨t¬{Ô/KÑLÔLÐLÐLÐLðMð Må˜¥Ñ/Ô/ð 		/ÝÔ˜vÔ/°c¸sÐCÑCÔCÐCÝŒK˜Ô.Ñ/Ô/Ð/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜¥Ñ)Ô)ð 	/Ý œ: fÔ&7¸!Ñ&;Ñ<Ô<ˆLØ%œˆL˜ÑÝŒJ�vÔ*¨LÑ9Ô9Ð9Ð9Ð9Ý˜Õ <Ñ=Ô=ð 	/ÝŒJ�vÔ-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/rG   )rH   rI   rJ   rK   r   rN   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpar    rœ   Ú_can_record_outputsre   Úno_gradr   rw   rî   r½   r¾   s   @rE   rä   rä   ?  s²   ø€ € € € € € ðð ð
 ÐÐÑØÐØ$€OØ!ÐØ&+Ð#Ø$˜ÐØ€Nà"Ø#ðð Ðð
 €U„]�_„_ð/ B¤Ið /°$ð /ð /ð /ð /ð /ñ „_ð/ð /ð /ð /ð /rG   rä   zV
    The EoMT Model with head on top for instance/semantic/panoptic segmentation.
    c                   óì   — e Zd Zdefd„Zd„ Zd„ Zdej        fd„Z	e
d„ ¦   «         Zeee	 	 	 dd	ed
ee         dz  dee         dz  dee         dz  dee         defd„¦   «         ¦   «         ¦   «         ZdS )r  ro   c                 óP  ‡— t          j        | ‰¦  «         ‰| _        ‰j        | _        t	          ‰¦  «        | _        t          j        ‰j        ‰j	        ¬¦  «        | _
        t          j        ‰j        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t#          ‰¦  «        | _        t'          ‰¦  «        | _        t          j        ‰j        ‰j        dz   ¦  «        | _        ‰j        ‰j        z  ‰j        ‰j        z  f| _        ‰j        ‰j        ‰j        dœ| _        t?          ‰| j        ¬¦  «        | _         |  !                    dtE          j#        ‰j$        ¦  «        ¦  «         |  %                    ¦   «          d S )N)r±   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rZ   )r    rÔ   s     €rE   rÖ   z9EomtForUniversalSegmentation.__init__.<locals>.<listcomp>~  s!   ø€ Ð$`Ð$`Ð$`¸1¥Y¨vÑ%6Ô%6Ð$`Ð$`Ð$`rG   rr   )Úloss_cross_entropyÚ	loss_maskÚ	loss_dice)ro   Úweight_dictr  )&r   rx   ro   r!   rn   r˜   r   Ú	LayerNormr   r,   Ú	layernormrƒ   r>   Úqueryr×   rØ   ÚlayersrÑ   Úupscale_blockrÜ   Ú	mask_headrÞ   rÿ   Úclass_predictorr-   r.   Ú	grid_sizer7   r8   r9   r  rh   Ú	criterionr…   re   rþ   r5   Ú	post_init)rC   ro   s    `rE   rx   z%EomtForUniversalSegmentation.__init__v  ss  ø€ ÝÔ   vÑ.Ô.Ð.ØˆŒØ!'Ô!9ˆÔÝ(¨Ñ0Ô0ˆŒÝœ fÔ&8¸fÔ>SÐTÑTÔTˆŒå”\ &Ô"4°fÔ6HÑIÔIˆŒ
Ý”mÐ$`Ð$`Ð$`Ð$`ÅÀfÔF^Ñ@_Ô@_Ð$`Ñ$`Ô$`ÑaÔaˆŒå+¨FÑ3Ô3ˆÔÝ% fÑ-Ô-ˆŒå!œy¨Ô);¸VÔ=NÐQRÑ=RÑSÔSˆÔà Ô+¨vÔ/@Ñ@À&ÔBSÐW]ÔWhÑBhÐiˆŒà"(Ô"5ØÔ+ØÔ+ð.
ð .
ˆÔõ "¨¸TÔ=MÐNÑNÔNˆŒà×ÒÐ.µ´
¸6Ô;LÑ0MÔ0MÑNÔNÐNà�ŠÑÔÐÐÐrG   c                 ó   — | j         j        S r£   )r˜   r~   r‰   s    rE   Úget_input_embeddingsz1EomtForUniversalSegmentation.get_input_embeddings’  s   € ØŒÔ/Ð/rG   c                 ó    — t          d¦  «        ‚)NzNote needed for Eomt Model.rA   r‰   s    rE   Úget_auxiliary_logitsz1EomtForUniversalSegmentation.get_auxiliary_logits•  s   € ÝÐ:Ñ;Ô;Ð;rG   Úlogitsc                 ó¤  — |d d …d | j         j        …d d …f         }|                      |¦  «        }|d d …| j         j        | j        j        z   d …d d …f         }|                     dd¦  «        } |j        |j        d         dg| j        ¢R Ž }|  	                    |¦  «        }|  
                    |¦  «        }t          j        d||¦  «        }||fS )Nrr   r   r   ru   zbqc, bchw -> bqhw)ro   r>   r  r˜   r‚   Ú	transposeÚreshaper�   r  r  r  re   Úeinsum)rC   r$  Úquery_tokensÚclass_logitsÚprefix_tokensÚmask_logitss         rE   Úpredictz$EomtForUniversalSegmentation.predict˜  sè   € Ø˜a˜a˜aÐ!: 4¤;Ô#:Ð!:¸A¸A¸AÐ=Ô>ˆØ×+Ò+¨LÑ9Ô9ˆà˜q˜q˜q $¤+Ô"9¸D¼OÔ<]Ñ"]Ð"_Ð"_ÐabÐabÐabÐbÔcˆØ%×/Ò/°°1Ñ5Ô5ˆà-˜Ô-¨mÔ.AÀ!Ô.DÀbÐZÈ4Ì>ÐZÐZÐZˆà—~’~ lÑ3Ô3ˆØ×*Ò*¨=Ñ9Ô9ˆå”lÐ#6¸ÀmÑTÔTˆà˜LÐ(Ð(rG   c                 ó†   — |dk     r:t          j        | j        d         ||¬¦  «        |k    }d| d d …d |…|d …f         |<   | S )Nrr   r   )Údevice)re   Úrandr�   )Ú	attn_maskÚprobÚnum_query_tokensÚencoder_start_tokensr/  Úrandom_queriess         rE   Ú_disable_attention_maskz4EomtForUniversalSegmentation._disable_attention_mask¨  sb   € à�!Š8ˆ8å"œZ¨	¬¸Ô(:Ð<LÐU[Ð\Ñ\Ô\Ð_cÒcˆNð VWˆI�a�a�aÐ*Ð*Ð*Ð,@Ð,AÐ,AÐAÔBÀ>ÑRàÐrG   Nr‹   Úmask_labelsÚclass_labelsrd   rD   rp   c                 ó°  — d\  }}d}|€t          d¦  «        ‚|                      |¦  «        }	t          | j        ¦  «        D �]w\  }
}|
| j        | j        j        z
  k    ri| j        j        ddd…dd…f          	                    |	j
        d         dd¦  «                             |	j        ¦  «        }t          j        ||	fd¬¦  «        }	|
| j        | j        j        z
  k    �rË| j        s'| j        |
| j        z
  | j        j        z            dk    �r�|                      |	¦  «        }|                      |¦  «        \  }}||fz  }||fz  }t          j        |	j
        d         |	j
        d         |	j
        d         |	j        t          j        ¬¦  «        }t+          j        || j        d	¬
¦  «        }|                     |                     d¦  «        |                     d¦  «        d¦  «        }| j        j        }|| j        j        z   }|dk    |dd…d|…|d…f<   |                      || j        |
| j        z
  | j        j        z            |||j        ¬¦  «        }|dd…ddf          	                    d| j        j        dd¦  «        }|                     ¦   «                              | d¦  «        } ||	|¦  «        }	�Œy|                      |	¦  «        }|                      |¦  «        \  }}||fz  }||fz  }d}|�L|�Jd}tA          ||¦  «        D ]7\  }}|  !                    ||||d¬¦  «        }||  "                    |¦  «        z  }Œ8tG          |||||¬¦  «        S )ag  
        mask_labels (`list[torch.Tensor]`, *optional*):
            list of mask labels of shape `(num_labels, height, width)` to be fed to a model
        class_labels (`list[torch.LongTensor]`, *optional*):
            list of target class labels of shape `(num_labels, height, width)` to be fed to a model. They identify the
            labels of `mask_labels`, e.g. the label of `mask_labels[i][j]` if `class_labels[i][j]`.
        patch_offsets (`list[torch.Tensor]`, *optional*):
            list of tuples indicating the image index and start and end positions of patches for semantic segmentation.
        )rZ   rZ   Nz You have to specify pixel_valuesr   ru   rr   rŽ   )r/  r�   Úbilinear)ÚsizeÚmode)r2  r3  r4  r/  .g    eÍÍÁr(   )r`   r_   r7  r8  Úauxiliary_predictions)r^   r`   r_   ra   rd   )$Ú
ValueErrorr˜   Ú	enumerater  r!   ro   r5   r  r’   r‡   r�   r“   r/  re   r”   Útrainingr  r  r-  rþ   rS   r¹   Úinterpolater  Úviewr;  r>   r‚   r6  r#   rP   Úmasked_fillÚzipÚget_loss_dictÚget_lossr]   )rC   r‹   r7  r8  rd   rD   Úmasks_queries_logits_per_layerÚclass_queries_logits_per_layerr¡   rb   ÚidxÚlayer_moduler  Únorm_hidden_statesr`   r_   Úinterpolated_logitsr3  r4  Úsequence_outputr^   Ú	loss_dicts                         rE   rš   z$EomtForUniversalSegmentation.forward³  sî  € ð* JPÑFÐ&Ð(FØˆàÐÝÐ?Ñ@Ô@Ð@àŸš¨Ñ5Ô5ˆå!*¨4¬;Ñ!7Ô!7ð .	Hñ .	HÑˆC�Ø�dÔ,¨t¬{Ô/EÑEÒEÐEØœ
Ô)¨$°°°°1°1°1¨*Ô5×<Ò<¸]Ô=PÐQRÔ=SÐUWÐY[Ñ\Ô\×_Ò_Ð`mÔ`tÑuÔu�Ý %¤	¨5°-Ð*@ÀaÐ HÑ HÔ H�à�dÔ,¨t¬{Ô/EÑEÒEÑEØ”ð FØ!%Ô!5°c¸DÔ<RÑ6RÐUYÔU`ÔUkÑ6kÔ!lÐopÒ!pÑ!pà%)§^¢^°MÑ%BÔ%BÐ"Ø=A¿\º\ÐJ\Ñ=]Ô=]Ñ:Ð$Ð&:à.Ð3GÐ2IÑIÐ.Ø.Ð3GÐ2IÑIÐ.å!&¤Ø!Ô'¨Ô*Ø!Ô'¨Ô*Ø!Ô'¨Ô*Ø(Ô/Ýœ*ð"ñ "ô "�õ '(¤mÐ4HÈtÌ~ÐdnÐ&oÑ&oÔ&oÐ#Ø&9×&>Ò&>Ø'×,Ò,¨QÑ/Ô/Ð1D×1IÒ1IÈ!Ñ1LÔ1LÈbñ'ô 'Ð#ð $(¤;Ô#:Ð Ø'7¸$¼/Ô:[Ñ'[Ð$ð ObÐdeÒNe�˜q˜q˜qÐ"3Ð#3Ð"3Ð5IÐ5JÐ5JÐJÑKð "&×!=Ò!=Ø"ØÔ-¨c°DÔ4JÑ.JÈTÌ[ÔMcÑ.cÔdØ%5Ø)=Ø)Ô0ð ">ñ "ô "�ð "0°°°°4¸°Ô!=×!DÒ!DÀRÈÌÔIhÐjlÐnpÑ!qÔ!q�Ø!/×!5Ò!5Ñ!7Ô!7×!CÒ!CÀ^ÀOÐUYÑ!ZÔ!Z�à(˜L¨¸ÑGÔGˆM‰MàŸ.š.¨Ñ7Ô7ˆà59·\²\À/Ñ5RÔ5RÑ2ÐÐ2Ø&Ð+?Ð*AÑAÐ&Ø&Ð+?Ð*AÑAÐ&àˆØÐ" |Ð'?ØˆDÝ>AØ.Ð0Nñ?ô ?ð 
1ð 
1Ñ:Ð$Ð&:ð !×.Ò.Ø)=Ø)=Ø +Ø!-Ø*.ð /ñ ô �	ð ˜Ÿš iÑ0Ô0Ñ0��å1ØØ!5Ø!5Ø-Ø'ð
ñ 
ô 
ð 	
rG   )NNN)rH   rI   rJ   r   rx   r!  r#  re   r   r-  Ústaticmethodr6  r   r   r   rQ   r   r   r]   rš   rZ   rG   rE   r  r  p  s2  € € € € € ð˜zð ð ð ð ð80ð 0ð 0ð<ð <ð <ð)˜eœlð )ð )ð )ð )ð  ðð ñ „\ðð  ØØð ,0Ø,0Ø-1ðe
ð e
àðe
ð ˜&”\ DÑ(ðe
ð ˜6”l TÑ)ð	e
ð
 ˜F”| dÑ*ðe
ð Ð+Ô,ðe
ð 
,ðe
ð e
ð e
ñ „^ñ „_ñ  Ôðe
ð e
ð e
rG   r  )r   rä   r  )?rK   rò   Údataclassesr   re   Útorch.nn.functionalr   Ú
functionalr¹   Úhuggingface_hub.dataclassesr   r   Ú r   rð   Úactivationsr	   Ú
file_utilsr
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Údinov2.modeling_dinov2r   r   r   r   Ú mask2former.modeling_mask2formerr   r   Úsiglip.modeling_siglipr   Úvit.configuration_vitr   Ú
get_loggerrH   Úloggerr   r]   rh   rl   rn   rœ   rž   r    r  r¯   rw   rÀ   rÑ   rÜ   rä   r  Ú__all__rZ   rG   rE   ú<module>rc     sË  ðð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð
 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð dÐ cÐ cÐ cÐ cÐ cÐ cÐ cØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø -Ð -Ð -Ð -Ð -Ð -ð 
ˆÔ	˜HÑ	%Ô	%€ð €ÐAÐBÑBÔBØðO4ð O4ð O4ð O4ð O4�ñ O4ô O4ñ „ñ CÔBðO4ðd €ðð	ñ 	ô 	ð ð4ð 4ð 4ð 4ð 4¨ñ 4ô 4ñ „ñ	ô 	ð4ð>	ð 	ð 	ð 	ð 	ˆñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð/ñ 	ô 	ð 	ð!ð !ð !ð !ð !Ð%ñ !ô !ð !ðH	ð 	ð 	ð 	ð 	�Oñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð%ñ 	ô 	ð 	ðð ð ð ð �ñ ô ð ð0ð ð ð ð �b”lñ ô ð ðð ð ð ð �R”Yñ ô ð ð2	ð 	ð 	ð 	ð 	�R”Yñ 	ô 	ð 	ðð ð ð ð �2”9ñ ô ð ð" ð-/ð -/ð -/ð -/ð -/˜/ñ -/ô -/ñ „ð-/ð` €ððñ ô ð
f
ð f
ð f
ð f
ð f
Ð#Fñ f
ô f
ñô ð
f
ðR PÐ
OÐ
O€€€rG   