ó
    ‡Ž¡jMW  ã                   óþ  • S r SSKrSSKJr  SSKrSSKJs  Jr  SSK	J
r
  SSKJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJrJr  SSKJr  SSKJr  SSKJ r J!r!J"r"J#r#  SSK$J%r%J&r&  SSK'J(r(  SSK)J*r*  \RV                  " \,5      r-\" SS9\
 " S S\*5      5       5       r.\" SS9\ " S S\5      5       5       r/ " S S\&5      r0 " S S\#5      r1 " S  S!\ 5      r2 " S" S#\(5      r3 " S$ S%\"5      r4 " S& S'\!5      r5 " S( S)\Rl                  5      r7 " S* S+\Rp                  5      r9 " S, S-\Rp                  5      r: " S. S/\Rp                  5      r;\ " S0 S1\5      5       r<\" S2S9 " S3 S4\%5      5       r=/ S5Qr>g)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                   ó.  • \ rS rSr% SrSrSr\\S'   Sr	\\S'   Sr
\\S	'   S
r\\S'   Sr\\S'   Sr\\-  \S'   Sr\\S'   Sr\\S'   Sr\\\   -  \\\4   -  \S'   Sr\\\   -  \\\4   -  \S'   Sr\\S'   Sr\\S'   Sr\\-  \S'   Sr\\S'   Sr\\-  \S'   Sr\\S '   S
r\\S!'   S"r\\S#'   S$r\\S%'   S&r \\S''   S&r!\\S('   S)r"\\S*'   S+r#\\S,'   S-r$\\S.'   S/r%\\S0'   S
r&\\S1'   \'" 5       r(\'" 5       r)\'" 5       r*\'" 5       r+\'" 5       r,\'" 5       r-S2 r.S3r/g4)5Ú
EomtConfigé4   a~  
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                 ó   • [        S5      e)NzNot needed for Eomt©ÚAttributeError)ÚselfÚkwargss     Ú³C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/eomt/modular_eomt.pyÚ__post_init__ÚEomtConfig.__post_init__„   s   € ÜÐ2Ó3Ð3ó    © N)0Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú
model_typer    ÚintÚ__annotations__r"   r$   r&   r(   Ústrr*   Úfloatr+   r-   r.   ÚlistÚtupler/   r0   r1   r2   r3   r4   r5   Úboolr6   r7   r8   r9   r:   r;   r<   r=   r?   r@   rC   Úintermediate_sizeÚqkv_biasÚ
pooler_actÚpooler_output_sizeÚencoder_strideÚattention_probs_dropout_probrG   Ú__static_attributes__rJ   rI   rF   r   r   4   s�  ‡ ñ'ðR €Jà€K�ÓØÐ�sÓØ!Ð˜Ó!Ø€IˆsÓØ€J�ÓØ'*Ð˜ ™Ó*Ø#Ð�uÓ#Ø €N�EÓ Ø47€J��d˜3‘i‘ %¨¨S¨¡/Ñ1Ó7Ø46€J��d˜3‘i‘ %¨¨S¨¡/Ñ1Ó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Ð õ4rI   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                   óD  • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\R                  S-  \S'   Sr\R                  S-  \S'   Sr\\R                     S-  \S'   Sr\\R                     S-  \S	'   Sr\\R"                     S-  \S
'   Srg)Ú"EomtForUniversalSegmentationOutputéˆ   aÞ  
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_offsetsrJ   )rK   rL   rM   rN   rO   rc   ÚtorchÚFloatTensorrR   rd   re   rf   rg   rV   rh   ri   rU   r   r^   rJ   rI   rF   ra   ra   ˆ   s¬   ‡ ñð* &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø59Ð˜%×+Ñ+¨dÑ2Ó9Ø59Ð˜%×+Ñ+¨dÑ2Ó9Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø/3€M�4˜Ÿ™Ñ%¨Ñ,Ö3rI   ra   c                   ó   • \ rS rSrSrg)ÚEomtLossé²   rJ   N©rK   rL   rM   rN   r^   rJ   rI   rF   rm   rm   ²   ó   † ÚrI   rm   c                   ó   • \ rS rSrSrg)ÚEomtPatchEmbeddingsé¶   rJ   Nro   rJ   rI   rF   rr   rr   ¶   rp   rI   rr   c                   óf   • \ rS rSrS\SS4S jrS rS\R                  S\R                  4S jr	S	r
g)
ÚEomtEmbeddingséº   ÚconfigÚreturnNc                 óò  • [         R                  R                  U 5        Xl        UR                  U l        [         R
                  " [        R                  " SSUR                  5      5      U l	        [         R
                  " [        R                  " SUR                  UR                  5      5      U l        [        U5      U l        U R                  R                  n[         R                   " UR"                  5      U l        SUR                  -   U l        [         R(                  " X!R                  5      U l        [         R,                  " [        R.                  " U5      R1                  S5      SS9U l        g )Né   ©rz   éÿÿÿÿF)Ú
persistent)r   ÚModuleÚ__init__rw   r/   Ú	Parameterrj   Úrandnr    Ú	cls_tokenÚzerosr@   Úregister_tokensrr   Úpatch_embeddingsÚnum_patchesÚDropoutr*   ÚdropoutÚnum_prefix_tokensÚ	EmbeddingÚposition_embeddingsÚBufferÚarangeÚexpandÚposition_ids)rD   rw   r†   s      rF   r   ÚEomtEmbeddings.__init__»   sú   € Ü
�	‰	×Ñ˜4Ô àŒØ ×+Ñ+ˆŒäŸš¤e§k¢k°!°Q¸×8JÑ8JÓ&KÓLˆŒÜ!Ÿ|š|¬E¯KªK¸¸6×;UÑ;UÐW]×WiÑWiÓ,jÓkˆÔä 3°FÓ ;ˆÔØ×+Ñ+×7Ñ7ˆÜ—z’z &×"<Ñ"<Ó=ˆŒØ!" V×%?Ñ%?Ñ!?ˆÔÜ#%§<¢<°×=OÑ=OÓ#PˆÔ ÜŸIšI¤e§l¢l°;Ó&?×&FÑ&FÀwÓ&OÐ\aÑbˆÕrI   c                 ó   • [        S5      e)NzNot needed for Eomt ModelrB   ©rD   s    rF   Úinterpolate_pos_encodingÚ'EomtEmbeddings.interpolate_pos_encodingË   s   € ÜÐ8Ó9Ð9rI   Úpixel_valuesc                 ó¶  • UR                   u  n    nU R                  R                  R                  R                  nU R                  UR                  US95      nU R                  R                  USS5      nU R                  R                  USS5      nXPR                  U R                  5      -   n[        R                  " XgU/SS9nU R                  U5      nU$ )N)Údtyper|   rz   ©Údim)Úshaper…   Ú
projectionÚweightr—   Útor‚   rŽ   r„   r‹   r�   rj   Úcatrˆ   )rD   r•   Ú
batch_sizeÚ_Útarget_dtypeÚ
embeddingsÚ
cls_tokensr„   s           rF   ÚforwardÚEomtEmbeddings.forwardÎ   sÂ   € Ø*×0Ñ0Ñˆ
�A�q˜!Ø×,Ñ,×7Ñ7×>Ñ>×DÑDˆØ×*Ñ*¨<¯?©?À¨?Ð+NÓOˆ
à—^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ø×.Ñ.×5Ñ5°jÀ"ÀbÓIˆà×":Ñ":¸4×;LÑ;LÓ"MÑMˆ
Ü—Y’Y 
¸ZÐHÈaÑPˆ
à—\‘\ *Ó-ˆ
àÐrI   )	r‚   rw   rˆ   r‰   r…   r/   r‹   r�   r„   )rK   rL   rM   rN   r   r   r“   rj   r   r¤   r^   rJ   rI   rF   ru   ru   º   s8   † ðc˜zð c¨dô cò :ð E§L¡Lð °U·\±\÷ rI   ru   c                   ó   • \ rS rSrSrg)ÚEomtAttentionéÞ   rJ   Nro   rJ   rI   rF   r§   r§   Þ   rp   rI   r§   c                   ó   • \ rS rSrSrg)ÚEomtLayerScaleéâ   rJ   Nro   rJ   rI   rF   rª   rª   â   rp   rI   rª   c                   ór   • \ rS rSr SS\R
                  S\R
                  S-  S\R
                  4S jjrSrg)	Ú	EomtLayeréæ   Nrg   Úattention_maskrx   c                 ó&  • U R                  U5      nU R                  X25      u  pEU R                  U5      nU R                  U5      U-   nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      U-   nU$ ©N)Únorm1Ú	attentionÚlayer_scale1Ú	drop_pathÚnorm2ÚmlpÚlayer_scale2)rD   rg   r¯   Úhidden_states_normÚself_attention_outputr    Úlayer_outputs          rF   r¤   ÚEomtLayer.forwardç   s—   € ð
 "ŸZ™Z¨Ó6ÐØ#'§>¡>Ð2DÓ#UÑ ÐØ $× 1Ñ 1Ð2GÓ HÐð Ÿ™Ð'<Ó=ÀÑMˆð —z‘z -Ó0ˆØ—x‘x Ó-ˆØ×(Ñ(¨Ó6ˆð —~‘~ lÓ3°mÑCˆàÐrI   rJ   r±   )rK   rL   rM   rN   rj   r   r¤   r^   rJ   rI   rF   r­   r­   æ   s>   † ð /3ñà—|‘|ðð Ÿ™ tÑ+ðð 
�‰÷	ð rI   r­   c                   óf   ^ • \ rS rSrSU 4S jjrS\R                  S\R                  4S jrSrU =r	$ )ÚEomtLayerNorm2déþ   c                 ó"   >• [         TU ]  XUS9  g )N)ÚepsÚelementwise_affine)Úsuperr   )rD   r0   rÁ   ÚaffineÚ	__class__s       €rF   r   ÚEomtLayerNorm2d.__init__ÿ   s   ø€ Ü‰Ñ˜À6ÐÒJrI   Úhidden_staterx   c                 óØ   • UR                  SSSS5      n[        R                  " XR                  U R                  U R
                  U R                  5      nUR                  SSSS5      nU$ )Nr   r   r   rz   )ÚpermuteÚFÚ
layer_normÚnormalized_shaperœ   ÚbiasrÁ   )rD   rÇ   s     rF   r¤   ÚEomtLayerNorm2d.forward  s`   € Ø#×+Ñ+¨A¨q°!°QÓ7ˆÜ—|’| L×2GÑ2GÈÏÉÐVZ×V_ÑV_Ðae×aiÑaiÓjˆØ#×+Ñ+¨A¨q°!°QÓ7ˆØÐrI   rJ   )r,   T)
rK   rL   rM   rN   r   rj   r   r¤   r^   Ú__classcell__©rÅ   s   @rF   r¾   r¾   þ   s)   ø† ÷Kð E§L¡Lð °U·\±\÷ ò rI   r¾   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚEomtScaleLayeri	  rw   c           	      óü   >• [         TU ]  5         UR                  n[        R                  " X"SSS9U l        [        UR                     U l        [        R                  " UUSSUSS9U l
        [        U5      U l        g )Nr   )Úkernel_sizeÚstrider   rz   F)rÔ   ÚpaddingÚgroupsrÍ   )rÃ   r   r    r   ÚConvTranspose2dÚconv1r	   r(   Ú
activationÚConv2dÚconv2r¾   Úlayernorm2d©rD   rw   r    rÅ   s      €rF   r   ÚEomtScaleLayer.__init__
  ss   ø€ Ü‰ÑÔØ×(Ñ(ˆÜ×'Ò'¨ÈaÐXYÑZˆŒ
Ü  ×!2Ñ!2Ñ3ˆŒÜ—Y’YØØØØØØñ
ˆŒ
ô +¨;Ó7ˆÕrI   rg   rx   c                 óŽ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ r±   )rÙ   rÚ   rÜ   rÝ   ©rD   rg   s     rF   r¤   ÚEomtScaleLayer.forward  sB   € ØŸ
™
 =Ó1ˆØŸ™¨Ó6ˆØŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆØÐrI   )rÚ   rÙ   rÜ   rÝ   ©rK   rL   rM   rN   r   r   rj   r   r¤   r^   rÏ   rÐ   s   @rF   rÒ   rÒ   	  s/   ø† ð8˜z÷ 8ð  U§\¡\ð °e·l±l÷ ò rI   rÒ   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚEomtScaleBlocki"  rw   c                 óÞ   >• [         TU ]  5         UR                  U l        [        R
                  " [        U R                  5       Vs/ s H  n[        U5      PM     sn5      U l        g s  snf r±   )	rÃ   r   r3   r6   r   Ú
ModuleListÚrangerÒ   Úblock)rD   rw   r    rÅ   s      €rF   r   ÚEomtScaleBlock.__init__#  sM   ø€ Ü‰ÑÔØ ×3Ñ3ˆŒÜ—]’]ÄEÈ$Ï/É/ÔDZÓ#[ÒDZ¸q¤N°6Ö$:ÑDZÑ#[Ó\ˆ�
ùÒ#[s   ÁA*rg   rx   c                 ó<   • U R                    H  nU" U5      nM     U$ r±   )ré   )rD   rg   ré   s      rF   r¤   ÚEomtScaleBlock.forward(  s    € Ø—Z”ZˆEÙ! -Ó0ŠMñ  àÐrI   )ré   r6   rã   rÐ   s   @rF   rå   rå   "  s1   ø† ð]˜z÷ ]ð
 U§\¡\ð °e·l±l÷ ò rI   rå   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚEomtMaskHeadi.  rw   c                 ó  >• [         TU ]  5         UR                  n[        R                  " X"5      U l        [        R                  " X"5      U l        [        R                  " X"5      U l        [        UR                     U l
        g r±   )rÃ   r   r    r   ÚLinearÚfc1Úfc2Úfc3r	   r(   rÚ   rÞ   s      €rF   r   ÚEomtMaskHead.__init__/  s[   ø€ Ü‰ÑÔà×(Ñ(ˆÜ—9’9˜[Ó6ˆŒÜ—9’9˜[Ó6ˆŒÜ—9’9˜[Ó6ˆŒÜ  ×!2Ñ!2Ñ3ˆ�rI   rg   rx   c                 ó¨   • U R                  U R                  U5      5      nU R                  U R                  U5      5      nU R                  U5      nU$ r±   ©rÚ   rñ   rò   ró   rá   s     rF   r¤   ÚEomtMaskHead.forward8  sD   € ØŸ™¨¯©°Ó(?Ó@ˆØŸ™¨¯©°Ó(?Ó@ˆØŸ™ Ó/ˆØÐrI   rö   rã   rÐ   s   @rF   rî   rî   .  s/   ø† ð4˜z÷ 4ð U§\¡\ð °e·l±l÷ ò rI   rî   c                   ó¤   ^ • \ rS rSr% Sr\\S'   SrSrSr	Sr
S/rS	r\\S
.r\R"                  " 5       S\R&                  SS4U 4S jj5       rSrU =r$ )ÚEomtPreTrainedModeli?  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
rw   r   r•   )ÚimageFr­   T)rg   rh   Úmodulerx   Nc                 óÌ  >• [         TU ]  U5        U R                  R                  n[	        U[
        R                  [
        R                  [
        R                  45      (       a»  [        R                  " UR                  [        R                  " S5      S9  UR                  bz  [        R
                  R                  R!                  UR                  5      u  p4US:”  a  S[        R                  " U5      -  OSn[        R"                  " UR                  U* U5        g g [	        U[
        R$                  5      (       ay  [        R&                  " UR                  SSS9  UR(                  bK  [+        UR                  SS5      (       d.  [        R,                  " UR                  UR(                     5        g g g [	        U[.        5      (       aH  [1        US	5      (       a6  [        R2                  " UR4                  U R                  R6                  5        g g [	        U[8        5      (       aœ  [        R:                  " UR<                  SUS9  [        R,                  " UR>                  5        [        R@                  " URB                  [        RD                  " URB                  RF                  S
   5      RI                  S5      5        g [	        U[J        5      (       aT  [        RL                  " URN                  S-   5      nURP                  US
'   [        R@                  " URR                  U5        g [	        U[T        5      (       a!  [        RV                  " URX                  5        g g )Né   )Úar   rz   r)   )ÚmeanÚstdÚ_is_hf_initializedFÚlambda1r|   r{   )-rÃ   Ú_init_weightsrw   r+   Ú
isinstancer   rð   rÛ   rØ   ÚinitÚkaiming_uniform_rœ   ÚmathÚsqrtrÍ   rj   Ú_calculate_fan_in_and_fan_outÚuniform_rŠ   Únormal_Úpadding_idxÚgetattrÚzeros_rª   ÚhasattrÚ	constant_r  r1   ru   Útrunc_normal_r‚   r„   Úcopy_r�   r�   rš   rŽ   rm   ÚonesÚ
num_labelsÚeos_coefÚempty_weightÚEomtForUniversalSegmentationÚones_Úattn_mask_probs)rD   rû   r   Úfan_inr    Úboundr  rÅ   s          €rF   r  Ú!EomtPreTrainedModel._init_weightsR  s@  ø€ ä‰Ñ˜fÔ%Ø�k‰k×+Ñ+ˆÜ�fœrŸy™y¬"¯)©)´R×5GÑ5GÐH×IÑIÜ×!Ò! &§-¡-´4·9²9¸Q³<Ò@Ø�{‰{Ñ&Ü!ŸH™HŸM™M×GÑGÈÏÉÓV‘	�Ø17¸!³˜œDŸIšI fÓ-Ò-À�Ü—’˜fŸk™k¨E¨6°5Õ9ð 'ô ˜¤§¡×-Ñ-Ü�LŠL˜Ÿ™¨S°aÒ8à×!Ñ!Ñ-´g¸f¿m¹mÐMaÐch×6iÑ6iÜ—’˜FŸM™M¨&×*<Ñ*<Ñ=Õ>ð 7jÐ-ä˜¤×/Ñ/Ü�v˜y×)Ñ)Ü—’˜vŸ~™~¨t¯{©{×/KÑ/KÕLð *ä˜¤×/Ñ/Ü×Ò˜v×/Ñ/°c¸sÒCÜ�KŠK˜×.Ñ.Ô/Ü�JŠJ�v×*Ñ*¬E¯LªL¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhÜ˜¤×)Ñ)Ü Ÿ:š: f×&7Ñ&7¸!Ñ&;Ó<ˆLØ%Ÿ™ˆL˜ÑÜ�JŠJ�v×*Ñ*¨LÕ9Ü˜Ô <×=Ñ=Ü�JŠJ�v×-Ñ-Õ.ð >rI   rJ   )rK   rL   rM   rN   rO   r   rR   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpar­   r§   Ú_can_record_outputsrj   Úno_gradr   r~   r  r^   rÏ   rÐ   s   @rF   rù   rù   ?  sn   ø‡ ñð
 ÓØÐØ$€OØ!ÐØ&+Ð#Ø$˜ÐØ€Nà"Ø#ñÐð
 ‡]‚]ƒ_ð/ B§I¡Ið /°$ö /ó ö/rI   rù   zV
    The EoMT Model with head on top for instance/semantic/panoptic segmentation.
    c                   óÔ   • \ rS rSrS\4S jrS rS rS\R                  4S jr
\S 5       r\\\   SS
\	S\\	   S	-  S\\	   S	-  S\\	   S	-  S\\   S\4S jj5       5       5       rSrg	)r  ip  rw   c                 óü  • [         R                  " X5        Xl        UR                  U l        [	        U5      U l        [        R                  " UR                  UR                  S9U l
        [        R                  " UR                  UR                  5      U l        [        R                  " [        UR                  5       Vs/ s H  n[!        U5      PM     sn5      U l        [%        U5      U l        [)        U5      U l        [        R,                  " UR                  UR.                  S-   5      U l        UR2                  UR4                  -  UR2                  UR4                  -  4U l        UR8                  UR:                  UR<                  S.U l        [A        XR>                  S9U l!        [        RD                  " [F        RH                  " URJ                  5      5      U l&        U RO                  5         g s  snf )N)rÁ   rz   )Úloss_cross_entropyÚ	loss_maskÚ	loss_dice)rw   Úweight_dict)(r   r   rw   r"   ru   r¢   r   Ú	LayerNormr    r-   Ú	layernormrŠ   r?   Úqueryrç   rè   r­   Úlayersrå   Úupscale_blockrî   Ú	mask_headrð   r  Úclass_predictorr.   r/   Ú	grid_sizer8   r9   r:   r*  rm   Ú	criterionrŒ   rj   r  r6   r  Ú	post_init)rD   rw   r    s      rF   r   Ú%EomtForUniversalSegmentation.__init__v  sr  € Ü× Ò  Ô.ØŒØ!'×!9Ñ!9ˆÔÜ(¨Ó0ˆŒÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒä—\’\ &×"4Ñ"4°f×6HÑ6HÓIˆŒ
Ü—m’mÄÀf×F^ÑF^Ô@_Ó$`Ò@_¸1¤Y¨vÖ%6Ñ@_Ñ$`ÓaˆŒä+¨FÓ3ˆÔÜ% fÓ-ˆŒä!Ÿyšy¨×);Ñ);¸V×=NÑ=NÐQRÑ=RÓSˆÔà ×+Ñ+¨v×/@Ñ/@Ñ@À&×BSÑBSÐW]×WhÑWhÑBhÐiˆŒà"(×"5Ñ"5Ø×+Ñ+Ø×+Ñ+ñ.
ˆÔô "¨×=MÑ=MÑNˆŒä!Ÿyšy¬¯ª°F×4EÑ4EÓ)FÓGˆÔà�‰Õùò% %as   ÃG9c                 ó.   • U R                   R                  $ r±   )r¢   r…   r’   s    rF   Úget_input_embeddingsÚ1EomtForUniversalSegmentation.get_input_embeddings’  s   € Ø�‰×/Ñ/Ð/rI   c                 ó   • [        S5      e)NzNote needed for Eomt Model.rB   r’   s    rF   Úget_auxiliary_logitsÚ1EomtForUniversalSegmentation.get_auxiliary_logits•  s   € ÜÐ:Ó;Ð;rI   Úlogitsc                 óÌ  • US S 2S U R                   R                  2S S 24   nU R                  U5      nUS S 2U R                   R                  U R                  R                  -   S 2S S 24   nUR                  SS5      nUR                  " UR                  S   S/U R                  Q76 nU R                  U5      nU R                  U5      n[        R                  " SX$5      nXS4$ )Nrz   r   r   r|   zbqc, bchw -> bqhw)rw   r?   r1  r¢   r‰   Ú	transposeÚreshaperš   r2  r0  r/  rj   Úeinsum)rD   r<  Úquery_tokensÚclass_logitsÚprefix_tokensÚmask_logitss         rF   ÚpredictÚ$EomtForUniversalSegmentation.predict˜  sÑ   € ØšaÐ!: 4§;¡;×#:Ñ#:Ð!:ºAÐ=Ñ>ˆØ×+Ñ+¨LÓ9ˆàšq $§+¡+×"9Ñ"9¸D¿O¹O×<]Ñ<]Ñ"]Ñ"_ÒabÐbÑcˆØ%×/Ñ/°°1Ó5ˆà%×-Ò-¨m×.AÑ.AÀ!Ñ.DÀbÐZÈ4Ï>É>ÒZˆà—~‘~ lÓ3ˆØ×*Ñ*¨=Ó9ˆä—l’lÐ#6¸ÓTˆàÐ(Ð(rI   c                 ó~   • US:  a6  [         R                  " U R                  S   X$S9U:„  nSU S S 2S U2US 24   U'   U $ )Nrz   r   )Údevice)rj   Úrandrš   )Ú	attn_maskÚprobÚnum_query_tokensÚencoder_start_tokensrH  Úrandom_queriess         rF   Ú_disable_attention_maskÚ4EomtForUniversalSegmentation._disable_attention_mask¨  sT   € à�!‹8ä"ŸZšZ¨	¯©¸Ñ(:Ð<LÑ\Ð_cÑcˆNð VWˆI’aÐ*Ð*Ð*Ð,@Ñ,AÐAÑBÀ>ÑRàÐrI   Nr•   Úmask_labelsÚclass_labelsri   rE   rx   c           	      ó  • Su  pgSnUc  [        S5      eU R                  U5      n	[        U R                  5       GHÃ  u  p«X R                  U R
                  R                  -
  :X  am  U R                  R                  SSS2SS24   R                  U	R                  S   SS5      R                  U	R                  5      n[        R                  " XÉ4SS9n	X R                  U R
                  R                  -
  :¼  Gaû  U R                  (       d7  U R                   X R                  -
  U R
                  R                  -      S:”  Ga³  U R#                  U	5      nU R%                  U5      u  pïXn4-  nX4-  n[        R&                  " U	R                  S   U	R                  S   U	R                  S   U	R                  [        R(                  S9n[*        R,                  " XàR.                  S	S
9nUR1                  UR3                  S5      UR3                  S5      S5      nU R
                  R4                  nUU R                  R6                  -   nUS:„  USS2SU2US24'   U R9                  UU R                   X R                  -
  U R
                  R                  -      UUUR                  S9nUSS2SS4   R                  SU R
                  R:                  SS5      nUR=                  5       R?                  U) S5      nU" X˜5      n	GMÆ     U R#                  U	5      nU R%                  U5      u  pïXn4-  nX4-  nSnUb@  Ub=  Sn[A        Xg5       H,  u  pïU RC                  UUUUSS9nUU RE                  U5      -  nM.     [G        UUUUUS9$ )a'  
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.
)rJ   rJ   Nz You have to specify pixel_valuesr   r|   rz   r˜   )rH  r—   Úbilinear)ÚsizeÚmode)rK  rL  rM  rH  .g    eÍÍÁr)   )re   rd   rQ  rR  Úauxiliary_predictions)rc   re   rd   rf   ri   )$Ú
ValueErrorr¢   Ú	enumerater.  r"   rw   r6   r-  rœ   rŽ   rš   r�   rH  rj   rž   Útrainingr  r,  rE  r  rW   rÊ   Úinterpolater2  ÚviewrU  r?   r‰   rO  r$   rT   Úmasked_fillÚzipÚget_loss_dictÚget_lossra   )rD   r•   rQ  rR  ri   rE   Úmasks_queries_logits_per_layerÚclass_queries_logits_per_layerr¯   rg   ÚidxÚlayer_moduler-  Únorm_hidden_statesre   rd   Úinterpolated_logitsrL  rM  Úsequence_outputrc   Ú	loss_dicts                         rF   r¤   Ú$EomtForUniversalSegmentation.forward³  sŽ  € ð* JPÑFÐ&ØˆàÑÜÐ?Ó@Ð@àŸ™¨Ó5ˆä!*¨4¯;©;×!7ÑˆCØ×,Ñ,¨t¯{©{×/EÑ/EÑEÓEØŸ
™
×)Ñ)¨$²²1¨*Ñ5×<Ñ<¸]×=PÑ=PÐQRÑ=SÐUWÐY[Ó\×_Ñ_Ð`m×`tÑ`tÓu�Ü %§	¢	¨5Ð*@ÀaÑ H�à×,Ñ,¨t¯{©{×/EÑ/EÑEÔEØ—— ×!5Ñ!5°c×<RÑ<RÑ6RÐUY×U`ÑU`×UkÑUkÑ6kÑ!lÐopÔ!pà%)§^¡^°MÓ%BÐ"Ø=A¿\¹\ÐJ\Ó=]Ñ:Ð$à.Ð2IÑIÐ.Ø.Ð2IÑIÐ.ä!&§¢Ø!×'Ñ'¨Ñ*Ø!×'Ñ'¨Ñ*Ø!×'Ñ'¨Ñ*Ø(×/Ñ/ÜŸ*™*ñ"�ô '(§m¢mÐ4HÏ~É~ÐdnÑ&oÐ#Ø&9×&>Ñ&>Ø'×,Ñ,¨QÓ/Ð1D×1IÑ1IÈ!Ó1LÈbó'Ð#ð $(§;¡;×#:Ñ#:Ð Ø'7¸$¿/¹/×:[Ñ:[Ñ'[Ð$ð ObÐdeÑNe�šqÐ"3Ð#3Ð"3Ð5IÑ5JÐJÑKð "&×!=Ñ!=Ø"Ø×-Ñ-¨c×4JÑ4JÑ.JÈTÏ[É[×McÑMcÑ.cÑdØ%5Ø)=Ø)×0Ñ0ð ">ð "�ð "0²°4¸°Ñ!=×!DÑ!DÀRÈÏÉ×IhÑIhÐjlÐnpÓ!q�Ø!/×!5Ñ!5Ó!7×!CÑ!CÀ^ÀOÐUYÓ!Z�á(¨ÓG‹Mñ] "8ð` Ÿ.™.¨Ó7ˆà59·\±\À/Ó5RÑ2ÐØ&Ð*AÑAÐ&Ø&Ð*AÑAÐ&àˆØÑ" |Ñ'?ØˆDÜ>AØ.ö?Ñ:Ð$ð !×.Ñ.Ø)=Ø)=Ø +Ø!-Ø*.ð /ð �	ð ˜Ÿ™ iÓ0Ñ0’ñ?ô 2ØØ!5Ø!5Ø-Ø'ñ
ð 	
rI   )r  r1  rw   r3  r¢   r2  r,  r.  r0  r"   r-  r/  r*  )NNN)rK   rL   rM   rN   r   r   r7  r:  rj   r   rE  ÚstaticmethodrO  r   r   r   rU   r   r   ra   r¤   r^   rJ   rI   rF   r  r  p  sÎ   † ð˜zô ò80ò<ð)˜eŸl™lô )ð  ñó ðð  ØØð ,0Ø,0Ø-1ñe
àðe
ð ˜&‘\ DÑ(ðe
ð ˜6‘l TÑ)ð	e
ð
 ˜F‘| dÑ*ðe
ð Ð+Ñ,ðe
ð 
,ôe
ó ó ó  óe
rI   r  )r   rù   r  )?rO   r  Údataclassesr   rj   Ú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_loggerrK   Úloggerr   ra   rm   rr   ru   r§   rª   r­   r+  r¾   r~   rÒ   rå   rî   rù   r  Ú__all__rJ   rI   rF   Ú<module>r~     s£  ðñ ã Ý !ã ß Ð Ý .ß å &Ý !õõ .Ý &÷ñ õ
 8Ý 5÷ó ÷ dÝ 4Ý -ð 
×	Ò	˜HÓ	%€ñ ÐAÑBØôO4�ó O4ó ó CðO4ñd ðñ	ð ô4¨ó 4ó ó	ð4ô>	ˆô 	ô	Ð/ô 	ô!Ð%ô !ôH	�Oô 	ô	Ð%ô 	ô�ô ô0�b—l‘lô ô�R—Y‘Yô ô2	�R—Y‘Yô 	ô�2—9‘9ô ð" ô-/˜/ó -/ó ð-/ñ` ðñô
f
Ð#Fó f
óð
f
òR P�rI   