§
    ‚Štjk� ã                   ó6  — 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c 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 dd
l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"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,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¦  «        ¦   «         ¦   «         Z0 ed¦  «         G d„ d ej1        ¦  «        ¦   «         Z2 G d!„ d"ej1        ¦  «        Z3 G d#„ d$ej1        ¦  «        Z4 G d%„ d&ej1        ¦  «        Z5	 d‰d(ed)ed*ed+ed,e6e7         d-efd.„Z8 G d/„ d0ej1        ¦  «        Z9 G d1„ d2ej1        ¦  «        Z: G d3„ d4ej1        ¦  «        Z; G d5„ d6ej1        ¦  «        Z< G d7„ d8ej1        ¦  «        Z= G d9„ d:ej1        ¦  «        Z>	 	 dŠd<ej1        d=ej        d>ej        d(ej        d?ej        dz  d@e?dz  dAe?dBee"         fdC„Z@ G dD„ dEej1        ¦  «        ZA G dF„ dGej1        ¦  «        ZBdHdIdJdejC        fdKe7dLe7dMe7dNe?dOeDdPejE        dz  dQejF        d-ej        fdR„ZG G dS„ dTej1        ¦  «        ZH G dU„ dVej1        ¦  «        ZI G dW„ dXej1        ¦  «        ZJ G dY„ dZej1        ¦  «        ZK G d[„ d\ej1        ¦  «        ZL G d]„ d^ej1        ¦  «        ZMe# G d_„ d`e¦  «        ¦   «         ZN G da„ dbej1        ¦  «        ZOdc„ ZP G dd„ deeN¦  «        ZQ G df„ dgeN¦  «        ZR G dh„ dieN¦  «        ZSd‹dkej        dlej        dmeTd-ej        fdn„ZU G do„ dpeN¦  «        ZVdŒdr„ZWdse7dtej        due7d-ej        fdv„ZXdwej        due?d-ej        fdx„ZY G dy„ dzeN¦  «        ZZ	 	 	 d�d~„Z[ e#d¬¦  «         G d€„ d�eN¦  «        ¦   «         Z\ e#d‚¬¦  «        e G dƒ„ d„e¦  «        ¦   «         ¦   «         Z] e#d…¬¦  «         G d†„ d‡eN¦  «        ¦   «         Z^g dˆ¢Z_dS )Žé    N)ÚCallable)Ú	dataclass)ÚTensoré   )Úinitialization)ÚACT2CLS)Úload_backbone)Úcenter_to_corners_formatÚcorners_to_center_format)Úuse_kernel_forward_from_hub)ÚModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Ú#compile_compatible_method_lru_cache)ÚTransformersKwargsÚauto_docstringÚtorch_compilable_checkÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚDeimv2Configa&  
    Base class for outputs of the Deimv2Decoder. This class adds two attributes to
    BaseModelOutputWithCrossAttentions, namely:
    - a stacked tensor of intermediate decoder hidden states (i.e. the output of each decoder layer)
    - a stacked tensor of intermediate reference points.
    )Úcustom_introc                   óF  — 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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 )ÚDeimv2DecoderOutputa!  
    intermediate_hidden_states (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, hidden_size)`):
        Stacked intermediate hidden states (output of each layer of the decoder).
    intermediate_logits (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, sequence_length, config.num_labels)`):
        Stacked intermediate logits (logits of each layer of the decoder).
    intermediate_reference_points (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, sequence_length, hidden_size)`):
        Stacked intermediate reference points (reference points of each layer of the decoder).
    intermediate_predicted_corners (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked intermediate predicted corners (predicted corners of each layer of the decoder).
    initial_reference_points (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked initial reference points (initial reference points of each layer of the decoder).
    cross_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` and `config.add_cross_attention=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights of the decoder's cross-attention layer, after the attention softmax,
        used to compute the weighted average in the cross-attention heads.
    NÚlast_hidden_stateÚintermediate_hidden_statesÚintermediate_logitsÚintermediate_reference_pointsÚintermediate_predicted_cornersÚinitial_reference_pointsÚhidden_statesÚ
attentionsÚcross_attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r    r!   r"   r#   r$   r%   Útupler&   r'   © ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/deimv2/modeling_deimv2.pyr   r   -   s  € € € € € € ðð ð" 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø;?Ð Ô 1°DÑ 8Ð?Ð?Ñ?Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ø>BÐ! 5Ô#4°tÑ#;ÐBÐBÑBØ?CÐ" EÔ$5¸Ñ$<ÐCÐCÑCØ9=Ð˜eÔ/°$Ñ6Ð=Ð=Ñ=Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø8<Ð�e˜EÔ-Ô.°Ñ5Ð<Ð<Ñ<Ð<Ð<r1   r   zF
    Base class for outputs of the RT-DETR encoder-decoder model.
    c                   ób  — 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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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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j        dz  ed<   dZedz  ed<   dS )ÚDeimv2ModelOutputa{
  
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`):
        Sequence of hidden-states at the output of the last layer of the decoder of the model.
    intermediate_hidden_states (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, hidden_size)`):
        Stacked intermediate hidden states (output of each layer of the decoder).
    intermediate_logits (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, sequence_length, config.num_labels)`):
        Stacked intermediate logits (logits of each layer of the decoder).
    intermediate_reference_points (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked intermediate reference points (reference points of each layer of the decoder).
    intermediate_predicted_corners (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked intermediate predicted corners (predicted corners of each layer of the decoder).
    initial_reference_points (`torch.FloatTensor` of shape `(batch_size, num_queries, 4)`):
        Initial reference points used for the first decoder layer.
    init_reference_points (`torch.FloatTensor` of shape `(batch_size, num_queries, 4)`):
        Initial reference points sent through the Transformer decoder.
    enc_topk_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_labels)`):
        Predicted bounding boxes scores where the top `config.two_stage_num_proposals` scoring bounding boxes are
        picked as region proposals in the encoder stage. Output of bounding box binary classification (i.e.
        foreground and background).
    enc_topk_bboxes (`torch.FloatTensor` of shape `(batch_size, sequence_length, 4)`):
        Logits of predicted bounding boxes coordinates in the encoder stage.
    enc_outputs_class (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_labels)`, *optional*, returned when `config.with_box_refine=True` and `config.two_stage=True`):
        Predicted bounding boxes scores where the top `config.two_stage_num_proposals` scoring bounding boxes are
        picked as region proposals in the first stage. Output of bounding box binary classification (i.e.
        foreground and background).
    enc_outputs_coord_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, 4)`, *optional*, returned when `config.with_box_refine=True` and `config.two_stage=True`):
        Logits of predicted bounding boxes coordinates in the first stage.
    denoising_meta_values (`dict`):
        Extra dictionary for the denoising related values.
    Nr   r    r!   r"   r#   r$   Údecoder_hidden_statesÚdecoder_attentionsr'   Úencoder_last_hidden_stateÚencoder_hidden_statesÚencoder_attentionsÚinit_reference_pointsÚenc_topk_logitsÚenc_topk_bboxesÚenc_outputs_classÚenc_outputs_coord_logitsÚdenoising_meta_values)r(   r)   r*   r+   r   r,   r-   r.   r    r!   r"   r#   r$   r5   r/   r6   r'   r7   r8   r9   r:   r;   r<   r=   r>   r?   Údictr0   r1   r2   r4   r4   S   só  € € € € € € ðð ð> 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø;?Ð Ô 1°DÑ 8Ð?Ð?Ñ?Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ø>BÐ! 5Ô#4°tÑ#;ÐBÐBÑBØ?CÐ" EÔ$5¸Ñ$<ÐCÐCÑCØ9=Ð˜eÔ/°$Ñ6Ð=Ð=Ñ=Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ø8<Ð�e˜EÔ-Ô.°Ñ5Ð<Ð<Ñ<Ø:>Ð˜uÔ0°4Ñ7Ð>Ð>Ñ>Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ø6:Ð˜5Ô,¨tÑ3Ð:Ð:Ñ:Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø9=Ð˜eÔ/°$Ñ6Ð=Ð=Ñ=Ø)-Ð˜4 $™;Ð-Ð-Ñ-Ð-Ð-r1   r4   z 
    Output type for DEIMv2 encoder modules (HybridEncoder and LiteEncoder).
    Attentions are only available for HybridEncoder variants with AIFI layers.
    c                   ó”   — e Zd ZU dZdZeej                 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 )ÚDeimv2EncoderOutputz…
    feature_maps (`list[torch.FloatTensor]`):
        List of multi-scale feature maps from the encoder, one per feature level.
    NÚfeature_maps.r%   r&   )r(   r)   r*   r+   rC   Úlistr,   r-   r.   r%   r/   r&   r0   r1   r2   rB   rB   �   sz   € € € € € € ðð ð
 -1€L�$�uÔ(Ô)Ð0Ð0Ñ0Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r1   rB   ÚRMSNormc                   óT   ‡ — e Zd Zd	deddfˆ fd„Zdej        dej        fd„Zd„ Zˆ xZ	S )
ÚDeimv2RMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z<
        Deimv2RMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__ÚnnÚ	Parameterr,   ÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizerI   Ú	__class__s      €r2   rM   zDeimv2RMSNorm.__init__¡   sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr1   r%   c                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        |                     |¦  «        z  S )Né   éÿÿÿÿT©Úkeepdim)	ÚdtypeÚtor,   Úfloat32ÚpowÚmeanÚrsqrtrR   rQ   )rS   r%   Úinput_dtypeÚvariances       r2   ÚforwardzDeimv2RMSNorm.forward©   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r1   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)r/   rQ   ÚshaperR   )rS   s    r2   Ú
extra_reprzDeimv2RMSNorm.extra_repr°   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr1   )rH   )
r(   r)   r*   ÚfloatrM   r,   r   rc   rf   Ú__classcell__©rU   s   @r2   rG   rG   Ÿ   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr1   rG   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚDeimv2SwiGLUFFNÚconfigc                 óR  •— t          ¦   «                              ¦   «          |j        dz  }t          j        |j        |d¬¦  «        | _        t          j        |j        |d¬¦  «        | _        t          j        ||j        d¬¦  «        | _        t          j	        ¦   «         | _
        d S )NrW   T©Úbias)rL   rM   Údecoder_ffn_dimrN   ÚLinearÚd_modelÚ	gate_projÚup_projÚ	down_projÚSiLUÚact_fn)rS   rl   Úhidden_featuresrU   s      €r2   rM   zDeimv2SwiGLUFFN.__init__µ   s…   ø€ Ý‰Œ×ÒÑÔÐØ Ô0°AÑ5ˆÝœ 6¤>°?ÈÐNÑNÔNˆŒÝ”y ¤°ÀtÐLÑLÔLˆŒÝœ ?°F´NÈÐNÑNÔNˆŒÝ”g‘i”iˆŒˆˆr1   c                 ó¨   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }|S ©N)ru   rw   rs   rt   )rS   Úxru   s      r2   rc   zDeimv2SwiGLUFFN.forward½   sA   € Ø—N’N 4§;¢;¨t¯~ª~¸aÑ/@Ô/@Ñ#AÔ#AÀDÇLÂLÐQRÁOÄOÑ#SÑTÔTˆ	ØÐr1   )r(   r)   r*   r   rM   rc   rh   ri   s   @r2   rk   rk   ´   sS   ø€ € € € € ð ˜|ð  ð  ð  ð  ð  ð  ðð ð ð ð ð ð r1   rk   c                   óV   ‡ — e Zd Zdefˆ fd„Zdej        dej        dej        fd„Zˆ xZS )Ú
Deimv2Gaterr   c                 ó°   •— t          ¦   «                              ¦   «          t          j        d|z  d|z  ¦  «        | _        t          |¦  «        | _        d S )NrW   )rL   rM   rN   rq   ÚgaterG   Únorm)rS   rr   rU   s     €r2   rM   zDeimv2Gate.__init__Ã   sG   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜a '™k¨1¨w©;Ñ7Ô7ˆŒ	Ý! 'Ñ*Ô*ˆŒ	ˆ	ˆ	r1   Úsecond_residualr%   rJ   c                 óô   — t          j        ||gd¬¦  «        }t          j        |                      |¦  «        ¦  «        }|                     dd¬¦  «        \  }}|                      ||z  ||z  z   ¦  «        }|S )NrX   ©ÚdimrW   )r,   ÚcatÚsigmoidr   Úchunkr€   )rS   r�   r%   Ú
gate_inputÚgatesÚgate1Úgate2s          r2   rc   zDeimv2Gate.forwardÈ   su   € Ý”Y °Ð?ÀRÐHÑHÔHˆ
Ý”˜dŸiši¨
Ñ3Ô3Ñ4Ô4ˆØ—{’{ 1¨"�{Ñ-Ô-‰ˆˆuØŸ	š	 %¨/Ñ"9¸EÀMÑ<QÑ"QÑRÔRˆØÐr1   )	r(   r)   r*   ÚintrM   r,   r   rc   rh   ri   s   @r2   r}   r}   Â   su   ø€ € € € € ð+ ð +ð +ð +ð +ð +ð +ð
 u¤|ð ÀEÄLð ÐUZÔUað ð ð ð ð ð ð ð r1   r}   c                   óZ   ‡ — e Zd Zddededededef
ˆ fd„Zdej        d	ej        fd
„Zˆ xZ	S )Ú	Deimv2MLPÚreluÚ	input_dimÚ
hidden_dimÚ
output_dimÚ
num_layersÚactc                 ó  •— t          ¦   «                              ¦   «          || _        |g|dz
  z  }|g|z   }||gz   }t          j        d„ t          ||¦  «        D ¦   «         ¦  «        | _        t          |         ¦   «         | _        d S )Nr   c              3   óF   K  — | ]\  }}t          j        ||¦  «        V — Œd S rz   )rN   rq   )Ú.0Úin_dimÚout_dims      r2   ú	<genexpr>z%Deimv2MLP.__init__.<locals>.<genexpr>×   s2   è è € Ð#sÐ#sÁ?À6È7¥B¤I¨f°gÑ$>Ô$>Ð#sÐ#sÐ#sÐ#sÐ#sÐ#sr1   )	rL   rM   r“   rN   Ú
ModuleListÚzipÚlayersr   r”   )
rS   r�   r‘   r’   r“   r”   Úhidden_dimsÚ
input_dimsÚoutput_dimsrU   s
            €r2   rM   zDeimv2MLP.__init__Ñ   sˆ   ø€ Ý‰Œ×ÒÑÔÐØ$ˆŒØ!�l j°1¡nÑ5ˆØ�[ ;Ñ.ˆ
Ø! Z LÑ0ˆÝ”mÐ#sÐ#sÕVYÐZdÐfqÑVrÔVrÐ#sÑ#sÔ#sÑsÔsˆŒÝ˜3”<‘>”>ˆŒˆˆr1   Ústat_featuresrJ   c                 ó¨   — t          | j        ¦  «        D ]<\  }}|| j        dz
  k     r|                       ||¦  «        ¦  «        n
 ||¦  «        }Œ=|S ©Nr   )Ú	enumerater�   r“   r”   )rS   r¡   ÚiÚlayers       r2   rc   zDeimv2MLP.forwardÚ   sh   € Ý! $¤+Ñ.Ô.ð 	pð 	p‰HˆAˆuØ>?À$Ä/ÐTUÑBUÒ>UÐ>U˜DŸHšH U U¨=Ñ%9Ô%9Ñ:Ô:Ð:Ð[`Ð[`ÐanÑ[oÔ[oˆMˆMØÐr1   )r�   )
r(   r)   r*   rŒ   ÚstrrM   r,   r   rc   rh   ri   s   @r2   rŽ   rŽ   Ð   s�   ø€ € € € € ð"ð " #ð "°3ð "ÀCð "ÐUXð "Ð_bð "ð "ð "ð "ð "ð "ð U¤\ð °e´lð ð ð ð ð ð ð ð r1   rŽ   ÚdefaultÚvalueÚvalue_spatial_shapesÚsampling_locationsÚattention_weightsÚnum_points_listrJ   c                 ó°  — | j         \  }}}}	|j         \  }}
}}}|                      dddd¦  «                             dd¦  «                             d„ |D ¦   «         d¬¦  «        }|dk    r	d|z  dz
  }n|d	k    r|}|                     ddddd
¦  «                             dd¦  «        }|                     |d¬¦  «        }g }t	          |¦  «        D �]Û\  }\  }}||                              ||z  |	||¦  «        }||         }|dk    r&t          j                             ||ddd¬¦  «        }�nh|d	k    �ra|t          j
        ||gg| j        ¬¦  «        z  dz                        t          j        ¦  «        }|d                              d|dz
  ¦  «        }|d                              d|dz
  ¦  «        }t          j        ||gd¬¦  «        }|                     ||z  |
||         z  d¦  «        }t          j        |j         d         | j        ¬¦  «                             d¦  «                             d|j         d         ¦  «        }||d d …|d         |d         f         }|                     dd¦  «                             ||z  |	|
||         ¦  «        }|                     |¦  «         �ŒÝ|                     dddd¦  «                             ||z  d|
t+          |¦  «        ¦  «        }t          j        |d¬¦  «        |z                       d¦  «                             |||	z  |
¦  «        }|                     dd¦  «                             ¦   «         S )Nr   rW   r   r   c                 ó   — g | ]
\  }}||z  ‘ŒS r0   r0   )r—   ÚheightÚwidths      r2   ú
<listcomp>z7multi_scale_deformable_attention_v2.<locals>.<listcomp>í   s    € ÐIÐIÐI¡= 6¨5�˜‘ÐIÐIÐIr1   rX   rƒ   r¨   Údiscreteé   éþÿÿÿÚbilinearÚzerosF)ÚmodeÚpadding_modeÚalign_corners©Údeviceç      à?©.r   ©.r   )re   ÚpermuteÚflattenÚsplitr¤   ÚreshaperN   Ú
functionalÚgrid_sampler,   Útensorr¼   r\   Úint64ÚclampÚstackÚarangeÚ	unsqueezeÚrepeatÚ	transposeÚappendÚsumÚconcatÚviewÚ
contiguous)r©   rª   r«   r¬   r­   ÚmethodÚ
batch_sizeÚ_Ú	num_headsr‘   Únum_queriesÚ
num_levelsÚ
num_pointsÚ
value_listÚsampling_gridsÚsampling_value_listÚlevel_idr°   r±   Úvalue_l_Úsampling_grid_l_Úsampling_value_l_Úsampling_coordÚsampling_coord_xÚsampling_coord_yÚsampling_idxÚoutputs                              r2   Ú#multi_scale_deformable_attention_v2ræ   à   s«  € ð ,1¬;Ñ(€J��9˜jØ8JÔ8PÑ5€A€{�I˜z¨:à�Š�a˜˜A˜qÑ!Ô!ß	Š��A‰Œß	ŠÐIÐIÐ4HÐIÑIÔIÈrˆÑ	RÔ	Rð ð �ÒÐØÐ/Ñ/°!Ñ3ˆˆØ	�:Ò	Ð	Ø+ˆØ#×+Ò+¨A¨q°!°Q¸Ñ:Ô:×BÒBÀ1ÀaÑHÔH€NØ#×)Ò)¨/¸rÐ)ÑBÔB€NØÐÝ%.Ð/CÑ%DÔ%Dð $6ñ $6Ñ!ˆ‘/�6˜5ð
 ˜hÔ'×/Ò/°
¸YÑ0FÈ
ÐTZÐ\aÑbÔbˆð *¨(Ô3Ðà�YÒÐÝ "¤× 9Ò 9ØÐ*°È'Ðafð !:ñ !ô !ÐÑð �zÒ!Ñ!Ø.µ´ÀÀv¸Ð>OÐX]ÔXdÐ1eÑ1eÔ1eÑeÐhkÑk×oÒoÝ”ñô ˆNð
  .¨fÔ5×;Ò;¸A¸uÀq¹yÑIÔIÐØ-¨fÔ5×;Ò;¸A¸vÈ¹zÑJÔJÐõ #œ[Ð*:Ð<LÐ)MÐSUÐVÑVÔVˆNØ+×3Ò3°JÀÑ4JÈKÐZiÐjrÔZsÑLsÐuvÑwÔwˆNå”˜^Ô1°!Ô4¸U¼\ÐJÑJÔJß’˜2‘”ß’˜˜>Ô/°Ô2Ñ3Ô3ð ð
 !)¨°q°q°q¸.ÈÔ:PÐR`ÐagÔRhÐ)hÔ iÐØ 1× ;Ò ;¸A¸qÑ AÔ A× IÒ IØ˜YÑ&¨
°KÀÐQYÔAZñ!ô !Ðð 	×"Ò"Ð#4Ñ5Ô5Ð5Ñ5ð *×1Ò1°!°Q¸¸1Ñ=Ô=×EÒEØ�YÑ  ;µ°OÑ0DÔ0Dñô Ðõ 
ŒÐ)¨rÐ	2Ñ	2Ô	2Ð5FÑ	Fß	ŠˆR‰Œß	Šˆj˜) jÑ0°+Ñ	>Ô	>ð ð
 ×Ò˜A˜qÑ!Ô!×,Ò,Ñ.Ô.Ð.r1   c                   ó’   ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 d	dej        dej        dz  dee         de	ej        ej        f         fd„Z
ˆ xZS )
Ú#Deimv2MultiscaleDeformableAttentionrl   c                 óæ  •‡ — t          ¦   «                              ¦   «          |j        ‰ _        |j        ‰ _        |j        ‰ _        |j        ‰ _        |j	        ‰ _	        |j
        ‰ _        t          ‰ j        t          ¦  «        r‰ j        }n ˆ fd„t          ‰ j        ¦  «        D ¦   «         }|‰ _        d„ ‰ j        D ¦   «         }‰                      dt#          j        |t"          j        ¬¦  «        ¦  «         ‰ j        t)          ‰ j        ¦  «        z  ‰ _        t-          j        ‰ j        ‰ j        dz  ¦  «        ‰ _        t-          j        ‰ j        ‰ j        ¦  «        ‰ _        t4          ‰ _        dS )zC
        D-Fine version of multiscale deformable attention
        c                 ó   •— g | ]	}‰j         ‘Œ
S r0   )Ún_points©r—   rÕ   rS   s     €r2   r²   z@Deimv2MultiscaleDeformableAttention.__init__.<locals>.<listcomp>:  s   ø€ ÐKÐKÐK°˜tœ}ÐKÐKÐKr1   c                 ó<   — g | ]}t          |¦  «        D ]}d |z  ‘ŒŒS ©r   ©Úrange©r—   ÚnrÕ   s      r2   r²   z@Deimv2MultiscaleDeformableAttention.__init__.<locals>.<listcomp>=  s/   € ÐRÐRÐR aÍÈqÉÌÐRÐRÀA˜A ™EÐRÐRÐRÐRr1   Únum_points_scale©r[   rW   N)rL   rM   rr   Údecoder_attention_headsÚn_headsÚnum_feature_levelsÚn_levelsÚdecoder_offset_scaleÚoffset_scaleÚdecoder_methodÚdecoder_n_pointsrë   Ú
isinstancerD   rð   r­   Úregister_bufferr,   rÆ   r]   rÏ   Útotal_pointsrN   rq   Úsampling_offsetsr¬   ræ   Úms_deformable_attn_core)rS   rl   r­   ró   rU   s   `   €r2   rM   z,Deimv2MultiscaleDeformableAttention.__init__+  sC  øø€ õ 	‰Œ×ÒÑÔÐØ”~ˆŒØÔ5ˆŒØÔ1ˆŒØ"Ô7ˆÔØ$Ô3ˆÔØÔ/ˆŒå�d”m¥TÑ*Ô*ð 	LØ"œmˆOˆOàKÐKÐKÐKµe¸D¼MÑ6JÔ6JÐKÑKÔKˆOà.ˆÔØRÐR¨4Ô+?ÐRÑRÔRÐØ×ÒÐ/µ´Ð>NÕV[ÔVcÐ1dÑ1dÔ1dÑeÔeÐeà œL­3¨tÔ/CÑ+DÔ+DÑDˆÔå "¤	¨$¬,¸Ô8IÈAÑ8MÑ NÔ NˆÔÝ!#¤¨4¬<¸Ô9JÑ!KÔ!KˆÔå'JˆÔ$Ð$Ð$r1   Nr%   Úattention_maskÚkwargsrJ   c                 ó  — |j         \  }}	}
|j         \  }}}
t          |d d …df         |d d …df         z                       ¦   «         |k    d¦  «         |                     ||| j        | j        | j        z  ¦  «        }|�*|                     |d          t          d¦  «        ¦  «        }|                      |¦  «        }|                     ||	| j        t          | j	        ¦  «        d¦  «        }|  
                    |¦  «                             ||	| j        t          | j	        ¦  «        ¦  «        }t          j        |d¬¦  «        }|j         d         dk    rmt          j        |¦  «        }|                     dg¦  «                             ddd| j        dd¦  «        }|                     ||d| j        dd¦  «        ||z  z   }nž|j         d         dk    ro| j                             |j        ¬	¦  «                             d¦  «        }||z  |d d …d d …d d d …dd …f         z  | j        z  }|d d …d d …d d d …d d…f         |z   }nt-          d
|j         d         › d�¦  «        ‚|                      ||||| j	        | j        ¦  «        }||fS )Nr   r   z[Make sure to align the spatial shapes with the sequence length of the encoder hidden states).NrW   rX   rƒ   r´   rô   z5Last dim of reference_points must be 2 or 4, but get z	 instead.)re   r   rÏ   rÃ   rö   rr   Úmasked_fillrg   r   r­   r¬   ÚFÚsoftmaxr,   rÆ   Úfliprø   ró   r\   r[   rË   rú   Ú
ValueErrorr  rû   )rS   r%   r  Úreference_pointsr8   Úspatial_shapesÚspatial_shapes_listr  rÔ   r×   rÕ   Úsequence_lengthr©   r   r¬   Úoffset_normalizerr«   ró   Úoffsetrå   s                       r2   rc   z+Deimv2MultiscaleDeformableAttention.forwardG  sö  € ð &3Ô%8Ñ"ˆ
�K Ø)>Ô)DÑ&ˆ
�O QåØ˜A˜A˜A˜q˜DÔ! N°1°1°1°a°4Ô$8Ñ8×=Ò=Ñ?Ô?À?ÒRØiñ	
ô 	
ð 	
ð &×-Ò-¨j¸/È4Ì<ÐY]ÔYeÐimÔiuÑYuÑvÔvˆØÐ%Ø×%Ò% ~°iÔ'@Ð&@Å%ÈÁ(Ä(ÑKÔKˆEà)-×)>Ò)>¸}Ñ)MÔ)MÐØ+×3Ò3Ø˜ T¤\µ3°tÔ7KÑ3LÔ3LÈañ
ô 
Ðð !×2Ò2°=ÑAÔA×IÒIØ˜ T¤\µ3°tÔ7KÑ3LÔ3Lñ
ô 
Ðõ œIÐ&7¸RÐ@Ñ@Ô@ÐàÔ! "Ô%¨Ò*Ð*Ý %¤¨^Ñ <Ô <ÐØ 1× 6Ò 6¸°sÑ ;Ô ;× CÒ CÀAÀqÈ!ÈTÌ]Ð\]Ð_`Ñ aÔ aÐà ×(Ò(¨°_ÀaÈÌÐXYÐ[\Ñ]Ô]Ø"Ð%6Ñ6ñ7ð Ðð Ô# BÔ'¨1Ò,Ð,ð  $Ô4×7Ò7¸mÔ>QÐ7ÑRÔR×\Ò\Ð]_Ñ`Ô`ÐØ%Ð(8Ñ8Ð;KÈAÈAÈAÈqÈqÈqÐRVÐXYÐXYÐXYÐ[\Ð[]Ð[]ÐL]Ô;^Ñ^ÐaeÔarÑrˆFØ!1°!°!°!°Q°Q°Q¸¸a¸a¸aÀÀ!ÀÐ2CÔ!DÀvÑ!MÐÐåØmÐHXÔH^Ð_aÔHbÐmÐmÐmñô ð ð ×-Ò-ØØØØØÔ ØÔñ
ô 
ˆð Ð(Ð(Ð(r1   ©NNNNN)r(   r)   r*   r   rM   r,   r   r   r   r/   rc   rh   ri   s   @r2   rè   rè   *  s¸   ø€ € € € € ðK˜|ð Kð Kð Kð Kð Kð Kð> /3ØØ"ØØ ð<)ð <)à”|ð<)ð œ tÑ+ð<)ð Ð+Ô,ð<)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð<)ð <)ð <)ð <)ð <)ð <)ð <)ð <)r1   rè   c                   óZ   ‡ — e Zd Z	 	 	 ddedededededed	edz  d
edz  fˆ fd„Zd„ Zˆ xZS )ÚDeimv2ConvNormLayerr   Nrl   Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚgroupsÚpaddingÚ
activationc	           	      ó6  •— t          ¦   «                              ¦   «          t          j        ||||||€|dz
  dz  n|d¬¦  «        | _        t          j        ||j        ¦  «        | _        |€t          j        ¦   «         nt          |         ¦   «         | _
        d S )Nr   rW   F)r  r  ro   )rL   rM   rN   ÚConv2dÚconvÚBatchNorm2dÚbatch_norm_epsr€   ÚIdentityr   r  )
rS   rl   r  r  r  r  r  r  r  rU   s
            €r2   rM   zDeimv2ConvNormLayer.__init__‡  s—   ø€ õ 	‰Œ×ÒÑÔÐÝ”IØØØØØØ.5¨o�[ 1‘_¨Ñ*Ð*À7Øð
ñ 
ô 
ˆŒ	õ ”N <°Ô1FÑGÔGˆŒ	Ø+5Ð+=�"œ+™-œ-˜-Å7È:ÔCVÑCXÔCXˆŒˆˆr1   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rz   )r  r€   r  )rS   Úhidden_states     r2   rc   zDeimv2ConvNormLayer.forwardŸ  s;   € Ø—y’y Ñ.Ô.ˆØ—y’y Ñ.Ô.ˆØ—’ |Ñ4Ô4ˆØÐr1   )r   NN)	r(   r)   r*   r   rŒ   r§   rM   rc   rh   ri   s   @r2   r  r  †  sÁ   ø€ € € € € ð Ø"Ø!%ðYð YàðYð ðYð ð	Yð
 ðYð ðYð ðYð �t‘ðYð ˜$‘JðYð Yð Yð Yð Yð Yð0ð ð ð ð ð ð r1   r  c                   ó6   ‡ — e Zd ZdZdededefˆ fd„Zd„ Zˆ xZS )ÚDeimv2RepVggBlockzk
    RepVGG architecture block introduced by the work "RepVGG: Making VGG-style ConvNets Great Again".
    rl   r  r  c                 ó  •— t          ¦   «                              ¦   «          |j        }|}t          |||ddd¬¦  «        | _        t          |||ddd¬¦  «        | _        |€t          j        ¦   «         nt          |         ¦   «         | _	        d S )Nr   r   )r  r   )
rL   rM   Úactivation_functionr  Úconv1Úconv2rN   r  r   r  )rS   rl   r  r  r  Úhidden_channelsrU   s         €r2   rM   zDeimv2RepVggBlock.__init__«  s‰   ø€ Ý‰Œ×ÒÑÔÐàÔ/ˆ
Ø%ˆÝ(¨°À,ÐPQÐSTÐ^_Ð`Ñ`Ô`ˆŒ
Ý(¨°À,ÐPQÐSTÐ^_Ð`Ñ`Ô`ˆŒ
Ø+5Ð+=�"œ+™-œ-˜-Å7È:ÔCVÑCXÔCXˆŒˆˆr1   c                 ó‚   — |                       |¦  «        |                      |¦  «        z   }|                      |¦  «        S rz   )r&  r'  r  )rS   r{   Úys      r2   rc   zDeimv2RepVggBlock.forward´  s2   € Ø�JŠJ�q‰MŒM˜DŸJšJ q™MœMÑ)ˆØ�Š˜qÑ!Ô!Ð!r1   )	r(   r)   r*   r+   r   rŒ   rM   rc   rh   ri   s   @r2   r#  r#  ¦  st   ø€ € € € € ðð ðY˜|ð Y¸#ð YÈSð Yð Yð Yð Yð Yð Yð"ð "ð "ð "ð "ð "ð "r1   r#  c                   ó`   ‡ — e Zd ZdZ	 ddededededef
ˆ fd„Zd	ej	        d
ej	        fd„Z
ˆ xZS )ÚDeimv2CSPRepLayera  
    Cross Stage Partial (CSP) network layer with RepVGG blocks.
    Differs from DFineCSPRepLayer: uses a single conv that splits into residual + processing path
    (instead of two separate convs), and has an optional trailing conv controlled by `encoder_has_trailing_conv`.
    ç      ð?rl   r  r  Ú
num_blocksÚ	expansionc                 ó†  •‡‡— t          ¦   «                              ¦   «          ‰j        }t          ||z  ¦  «        Št	          ‰|‰dz  dd|¬¦  «        | _        t          j        ˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _	        ‰j
        rt	          ‰‰|dd|¬¦  «        nt          j        ¦   «         | _        d S )NrW   r   ©r  c                 ó2   •— g | ]}t          ‰‰‰¦  «        ‘ŒS r0   )r#  )r—   rÕ   rl   r(  s     €€r2   r²   z.Deimv2CSPRepLayer.__init__.<locals>.<listcomp>È  s&   ø€ ÐdÐdÐdÈQÕ˜v ¸ÑHÔHÐdÐdÐdr1   r   )rL   rM   r%  rŒ   r  r&  rN   r›   rð   ÚbottlenecksÚencoder_has_trailing_convr  r'  )	rS   rl   r  r  r.  r/  r  r(  rU   s	    `     @€r2   rM   zDeimv2CSPRepLayer.__init__À  sÑ   øøø€ õ 	‰Œ×ÒÑÔÐØÔ/ˆ
Ý˜l¨YÑ6Ñ7Ô7ˆÝ(¨°¸oÐPQÑ>QÐSTÐVWÐdnÐoÑoÔoˆŒ
Ýœ=ØdÐdÐdÐdÐdÕRWÐXbÑRcÔRcÐdÑdÔdñ
ô 
ˆÔð
 Ô/ðÕ ¨¸ÀqÈ!ÐXbÐcÑcÔcÐcå”‘”ð 	Œ
ˆ
ˆ
r1   r%   rJ   c                 ó¶   — |                       |¦  «                             dd¬¦  «        \  }}| j        D ]} ||¦  «        }Œ|                      ||z   ¦  «        S ©NrW   r   rƒ   )r&  r‡   r3  r'  )rS   r%   ÚresidualÚ
bottlenecks       r2   rc   zDeimv2CSPRepLayer.forwardÐ  se   € Ø"&§*¢*¨]Ñ";Ô";×"AÒ"AÀ!ÈÐ"AÑ"KÔ"KÑˆ�-ØÔ*ð 	6ð 	6ˆJØ&˜J }Ñ5Ô5ˆMˆMØ�zŠz˜( ]Ñ2Ñ3Ô3Ð3r1   )r-  )r(   r)   r*   r+   r   rŒ   rg   rM   r,   r   rc   rh   ri   s   @r2   r,  r,  ¹  s¡   ø€ € € € € ðð ð nqð
ð 
Ø"ð
Ø14ð
ØDGð
ØUXð
Øejð
ð 
ð 
ð 
ð 
ð 
ð 4 U¤\ð 4°e´lð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r1   r,  c                   óR   ‡ — e Zd ZdZd	dedefˆ fd„Zdej        dej        fd„Z	ˆ xZ
S )
ÚDeimv2RepNCSPELAN5a]  
    Rep(VGG) N(etwork) CSP (Cross Stage Partial) ELAN (Efficient Layer Aggregation Network) block.
    Similar to DFineRepNCSPELAN4 but without intermediate convolutions between CSP branches,
    resulting in a simpler 4-way concatenation (2 split halves + 2 CSP branches) instead of D-FINE's
    4-branch design with interleaved convolutions.
    r   rl   Únumb_blocksc                 óž  •— t          ¦   «                              ¦   «          |j        }|j        }|j        }|j        dz  }t	          |j        |j        z  dz  ¦  «        }t          |||dd|¬¦  «        | _        t          ||dz  ||¬¦  «        | _	        t          ||||¬¦  «        | _
        t          ||d|z  z   |dd|¬¦  «        | _        d S )NrW   r   r1  )r.  )rL   rM   r%  Úencoder_hidden_dimÚroundÚhidden_expansionr  r&  r,  Úcsp_rep1Úcsp_rep2r'  )	rS   rl   r;  r  r  r  Úsplit_channelsÚcsp_channelsrU   s	           €r2   rM   zDeimv2RepNCSPELAN5.__init__ß  sã   ø€ Ý‰Œ×ÒÑÔÐØÔ/ˆ
ØÔ/ˆØÔ0ˆØÔ2°QÑ6ˆÝ˜VÔ4°vÔ7PÑPÐTUÑUÑVÔVˆÝ(¨°¸nÈaÐQRÐ_iÐjÑjÔjˆŒ
Ý)¨&°.ÀAÑ2EÀ|Ð`kÐlÑlÔlˆŒÝ)¨&°,ÀÐYdÐeÑeÔeˆŒÝ(Ø�N a¨,Ñ&6Ñ7¸ÀqÈ!ÐXbð
ñ 
ô 
ˆŒ
ˆ
ˆ
r1   r%   rJ   c                 ó  — |                       |¦  «                             dd¬¦  «        \  }}|                      |¦  «        }|                      |¦  «        }t	          j        ||||gd¬¦  «        }|                      |¦  «        S r6  )r&  r‡   r@  rA  r,   r…   r'  )rS   r%   Úhidden_states_1Úhidden_states_2Úhidden_states_3Úhidden_states_4Úmerged_hidden_statess          r2   rc   zDeimv2RepNCSPELAN5.forwardí  s�   € Ø+/¯:ª:°mÑ+DÔ+D×+JÒ+JÈ1ÐRSÐ+JÑ+TÔ+TÑ(ˆ˜ØŸ-š-¨Ñ8Ô8ˆØŸ-š-¨Ñ8Ô8ˆÝ$œy¨/¸?ÈOÐ]lÐ)mÐstÐuÑuÔuÐØ�zŠzÐ.Ñ/Ô/Ð/r1   )r   )r(   r)   r*   r+   r   rŒ   rM   r,   r   rc   rh   ri   s   @r2   r:  r:  ×  s€   ø€ € € € € ðð ð
ð 
˜|ð 
¸#ð 
ð 
ð 
ð 
ð 
ð 
ð0 U¤\ð 0°e´lð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r1   r:  c                   óP   ‡ — e Zd Zdededefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚDeimv2SCDownrl   r  r  c                 óÜ   •— t          ¦   «                              ¦   «          t          ||j        |j        dd¦  «        | _        t          ||j        |j        |||j        ¦  «        | _        d S r£   )rL   rM   r  r=  r&  r'  )rS   rl   r  r  rU   s       €r2   rM   zDeimv2SCDown.__init__ö  sh   ø€ Ý‰Œ×ÒÑÔÐÝ(¨°Ô1JÈFÔLeÐghÐjkÑlÔlˆŒ
Ý(ØØÔ%ØÔ%ØØØÔ%ñ
ô 
ˆŒ
ˆ
ˆ
r1   Úinput_featuresrJ   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rz   )r&  r'  )rS   rM  s     r2   rc   zDeimv2SCDown.forward  s*   € ØŸš NÑ3Ô3ˆØŸš NÑ3Ô3ˆØÐr1   )
r(   r)   r*   r   rŒ   rM   r,   r   rc   rh   ri   s   @r2   rK  rK  õ  sx   ø€ € € € € ð

˜|ð 

¸#ð 

Àsð 

ð 

ð 

ð 

ð 

ð 

ð e¤lð °u´|ð ð ð ð ð ð ð ð r1   rK  ç        ÚmoduleÚqueryÚkeyr  ÚscalingÚdropoutr  c                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )NrX   ç      à¿rW   r   rƒ   ©ÚpÚtrainingr   )
Úsizer,   ÚmatmulrÍ   rN   rÄ   r  rT  rY  rÒ   )
rP  rQ  rR  r©   r  rS  rT  r  Úattn_weightsÚattn_outputs
             r2   Úeager_attention_forwardr^    sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r1   c                   óº   ‡ — e Zd ZdZ	 	 ddededededef
ˆ fd	„Z	 	 dde	j
        de	j
        d
z  de	j
        d
z  dee         dee	j
        e	j
        f         f
d„Zˆ xZS )ÚDeimv2SelfAttentionz¸
    Multi-headed self-attention from 'Attention Is All You Need' paper.

    In DEIMV2, position embeddings are added to both queries and keys (but not values) in self-attention.
    rO  Trl   rT   Únum_attention_headsrT  ro   c                 ó„  •— t          ¦   «                              ¦   «          || _        ||z  | _        | j        dz  | _        || _        d| _        t          j        |||¬¦  «        | _	        t          j        |||¬¦  «        | _
        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S )NrV  Frn   )rL   rM   rl   Úhead_dimrS  Úattention_dropoutÚ	is_causalrN   rq   Úk_projÚv_projÚq_projÚo_proj)rS   rl   rT   ra  rT  ro   rU   s         €r2   rM   zDeimv2SelfAttention.__init__+  s°   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ#Ð':Ñ:ˆŒØ”} dÑ*ˆŒØ!(ˆÔØˆŒå”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒˆˆr1   Nr%   r  Úposition_embeddingsr  rJ   c                 ó¾  — |j         dd…         }g |¢d‘| j        ‘R }|�||z   n|}|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
t          j        | j	        j
        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )zZ
        Position embeddings are added to both queries and keys (but not values).
        NrX   r   rW   rO  )rT  rS  )re   rc  rh  rÑ   rÍ   rf  rg  r   Úget_interfacerl   Ú_attn_implementationr^  rY  rd  rS  rÃ   rÒ   ri  )rS   r%   r  rj  r  Úinput_shapeÚhidden_shapeÚquery_key_inputÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer]  r\  s                 r2   rc   zDeimv2SelfAttention.forward?  sŽ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆàATÐA`˜-Ð*=Ñ=Ð=Ðfsˆà—{’{ ?Ñ3Ô3×8Ò8¸ÑFÔF×PÒPÐQRÐTUÑVÔVˆØ—[’[ Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r1   )rO  T)NN)r(   r)   r*   r+   r   rŒ   rg   ÚboolrM   r,   r   r   r   r/   rc   rh   ri   s   @r2   r`  r`  $  s  ø€ € € € € ðð ð ØðEð EàðEð ðEð !ð	Eð
 ðEð ðEð Eð Eð Eð Eð Eð. /3Ø37ð	$)ð $)à”|ð$)ð œ tÑ+ð$)ð #œ\¨DÑ0ð	$)ð
 Ð+Ô,ð$)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð$)ð $)ð $)ð $)ð $)ð $)ð $)ð $)r1   r`  c                   ó~   ‡ — e Zd Zdefˆ fd„Z	 d
dej        dej        dej        dz  dee         dej        f
d	„Z	ˆ xZ
S )ÚDeimv2EncoderLayerrl   c                 óÊ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          || j        |j        |j        ¬¦  «        | _        t          j
        | j        |j        ¬¦  «        | _        |j        | _        t          | j        |j        | j        d|j        ¦  «        | _        t          j
        | j        |j        ¬¦  «        | _        d S )N©rl   rT   ra  rT  ©rI   rW   )rL   rM   Únormalize_beforer=  rT   r`  ra  rT  Ú	self_attnrN   Ú	LayerNormÚlayer_norm_epsÚself_attn_layer_normrŽ   Úencoder_ffn_dimÚencoder_activation_functionÚmlpÚfinal_layer_norm©rS   rl   rU   s     €r2   rM   zDeimv2EncoderLayer.__init__g  sÐ   ø€ Ý‰Œ×ÒÑÔÐØ &Ô 7ˆÔØ!Ô4ˆÔõ -ØØÔ(Ø &Ô :Ø”Nð	
ñ 
ô 
ˆŒõ %'¤L°Ô1AÀvÔG\Ð$]Ñ$]Ô$]ˆÔ!Ø”~ˆŒÝØÔ˜fÔ4°dÔ6FÈÈ6ÔKmñ
ô 
ˆŒõ !#¤¨TÔ-=À6ÔCXÐ YÑ YÔ YˆÔÐÐr1   Nr%   r  Úspatial_position_embeddingsr  rJ   c                 óx  — |}| j         r|                      |¦  «        } | j        d|||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }| j         s|                      |¦  «        }| j         r|                      |¦  «        }|}|                      |¦  «        }||z   }| j         s|                      |¦  «        }| j        r_t          j
        |¦  «                             ¦   «         s9t          j        |j        ¦  «        j        dz
  }t          j        || |¬¦  «        }|S )a[  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, hidden_size)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, target_len, source_len)` where padding elements are indicated by very large negative
                values.
            spatial_position_embeddings (`torch.FloatTensor`, *optional*):
                Spatial position embeddings (2D positional encodings of image locations), to be added to both
                the queries and keys in self-attention (but not to values).
        ©r%   r  rj  rW  iè  ©ÚminÚmaxr0   )r{  r  r|  rN   rÄ   rT  rY  rƒ  r‚  r,   ÚisfiniteÚallÚfinfor[   rŠ  rÈ   )rS   r%   r  r…  r  r7  rÕ   Úclamp_values           r2   rc   zDeimv2EncoderLayer.forwardz  sk  € ð" !ˆØÔ ð 	EØ ×5Ò5°mÑDÔDˆMà)˜4œ>ð 
Ø'Ø)Ø ;ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØÔ$ð 	EØ ×5Ò5°mÑDÔDˆMàÔ ð 	AØ ×1Ò1°-Ñ@Ô@ˆMØ ˆàŸš Ñ/Ô/ˆà  =Ñ0ˆØÔ$ð 	AØ ×1Ò1°-Ñ@Ô@ˆMàŒ=ð 	^Ý”> -Ñ0Ô0×4Ò4Ñ6Ô6ð ^Ý#œk¨-Ô*=Ñ>Ô>ÔBÀTÑI�Ý %¤¨MÀ¸|ÐQ\Ð ]Ñ ]Ô ]�àÐr1   rz   )r(   r)   r*   r   rM   r,   r   r   r   rc   rh   ri   s   @r2   rw  rw  f  s­   ø€ € € € € ðZ˜|ð Zð Zð Zð Zð Zð Zð. <@ð	0ð 0à”|ð0ð œð0ð &+¤\°DÑ%8ð	0ð
 Ð+Ô,ð0ð 
Œð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r1   rw  é   g     ˆÃ@Fr°   r±   Ú	embed_dimÚtemperatureÚ	cls_tokenr¼   r[   c                 óP  — |dz  dk    rt          d|› �¦  «        ‚|dz  }t          j        |t          j        |¬¦  «        |z  }d||z  z  }t          j        | t          j        |¬¦  «        }	t          j        |t          j        |¬¦  «        }
t          j        |	|
d¬¦  «        \  }	}
|	                     ¦   «                              |¦  «        }|
                     ¦   «                              |¦  «        }t          j        |                     ¦   «         | 	                    ¦   «         |                     ¦   «         | 	                    ¦   «         gd¬	¦  «        }|r8t          j        t          j
        d|t          j        |¬¦  «        |gd¬	¦  «        }|                     |¦  «        S )
a»  2D sinusoidal position embeddings for an image patch grid.

    Each (h, w) position gets an ``embed_dim``-dimensional vector laid out as
    ``[sin_h | cos_h | sin_w | cos_w]``, with row-major (H-outer) patch ordering.

    Args:
        height: Grid height in patches.
        width: Grid width in patches.
        embed_dim: Total embedding dimension; must be divisible by 4.
        temperature: Base for the frequency decay.
        cls_token: If `True`, prepend a zero row for a CLS token.
        device: Target device; defaults to CPU.
        dtype: Output dtype; frequency arithmetic uses float64 internally.

    Returns:
        Tensor of shape ``(height * width [+1], embed_dim)``.
    r´   r   z(`embed_dim` must be divisible by 4, got ©r[   r¼   r-  Úij©Úindexingr   rƒ   )r	  r,   rÊ   Úfloat64ÚmeshgridrÁ   Úouterr…   ÚsinÚcosr·   r\   )r°   r±   r�  r‘  r’  r¼   r[   Úpos_dimÚomegaÚgrid_hÚgrid_wÚemb_hÚemb_wÚ	pos_embeds                 r2   Ú&build_2d_sinusoidal_position_embeddingr¤  ­  sm  € ð4 �1�}˜ÒÐÝÐOÀIÐOÐOÑPÔPÐPà˜1‰n€GÝŒL˜­¬¸fÐEÑEÔEÈÑO€EØ�+˜uÑ$Ñ$€EåŒ\˜&­¬¸fÐEÑEÔE€FÝŒ\˜%¥u¤}¸VÐDÑDÔD€FÝ”^ F¨F¸TÐBÑBÔB�N€FˆFà�NŠNÑÔ×"Ò" 5Ñ)Ô)€EØ�NŠNÑÔ×"Ò" 5Ñ)Ô)€Eå”	˜5Ÿ9š9™;œ;¨¯	ª	©¬°U·Y²Y±[´[À%Ç)Â)Á+Ä+ÐNÐTUÐVÑVÔV€Iàð qÝ”I�uœ{¨1¨i½u¼}ÐU[Ð\Ñ\Ô\Ð^gÐhÐnoÐpÑpÔpˆ	à�<Š<˜ÑÔÐr1   c            
       ó¸   ‡ — e Zd ZdZddedefˆ fd„Ze ed¬¦  «        d	ej	        fd
„¦   «         ¦   «         Z
dededej        ez  dej        d	ej	        f
d„Zˆ xZS )ÚDeimv2SinePositionEmbeddingzJ
    2D sinusoidal position embedding used in RT-DETR hybrid encoder.
    r�  é'  r�  r‘  c                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S rz   )rL   rM   r�  r‘  )rS   r�  r‘  rU   s      €r2   rM   z$Deimv2SinePositionEmbedding.__init__â  s.   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒØ&ˆÔÐÐr1   é    ©ÚmaxsizerJ   c                  ó   — t          | i |¤ŽS rz   )r¤  )Úargsr  s     r2   Ú._cached_build_2d_sinusoidal_position_embeddingzJDeimv2SinePositionEmbedding._cached_build_2d_sinusoidal_position_embeddingç  s   € õ 6°tÐF¸vÐFÐFÐFr1   r±   r°   r¼   r[   c                 ó¦   — |                       t          |¦  «        t          |¦  «        | j        | j        ||¬¦  «                             d¦  «        S )z•
        Generate 2D sinusoidal position embeddings.

        Returns:
            Position embeddings of shape (1, height*width, embed_dim)
        )r°   r±   r�  r‘  r¼   r[   r   )r®  r   r�  r‘  rË   )rS   r±   r°   r¼   r[   s        r2   rc   z#Deimv2SinePositionEmbedding.forwardì  sV   € ð ×BÒBÝ˜VÑ$Ô$Ý˜EÑ"Ô"Ø”nØÔ(ØØð Cñ 
ô 
÷ Š)�A‰,Œ,ð	r1   )r�  r§  )r(   r)   r*   r+   rŒ   rM   Ústaticmethodr   r,   r   r®  r¼   r§   r[   rc   rh   ri   s   @r2   r¦  r¦  Ý  sð   ø€ € € € € ðð ð'ð ' #ð '¸#ð 'ð 'ð 'ð 'ð 'ð 'ð
 Ø(Ð(°Ð4Ñ4Ô4ðGÈ5Ì<ð Gð Gð Gñ 5Ô4ñ „\ðGðàðð ðð ”˜sÑ"ð	ð
 Œ{ðð 
Œðð ð ð ð ð ð ð r1   r¦  c                   ó\   ‡ — e Zd ZdZdefˆ fd„Zdej        dee	         dej        fd„Z
ˆ xZS )ÚDeimv2AIFILayerzf
    AIFI (Attention-based Intra-scale Feature Interaction) layer used in RT-DETR hybrid encoder.
    rl   c                 ó6  •‡— t          ¦   «                              ¦   «          ‰| _        ‰j        | _        ‰j        | _        t          | j        ‰j        ¬¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )N)r�  r‘  c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r0   )rw  ©r—   rÕ   rl   s     €r2   r²   z,Deimv2AIFILayer.__init__.<locals>.<listcomp>  s"   ø€ Ð$fÐ$fÐ$fÀAÕ%7¸Ñ%?Ô%?Ð$fÐ$fÐ$fr1   )rL   rM   rl   r=  Ú	eval_sizer¦  Úpositional_encoding_temperatureÚposition_embeddingrN   r›   rð   Úencoder_layersr�   r„  s    `€r2   rM   zDeimv2AIFILayer.__init__  s�   øø€ Ý‰Œ×ÒÑÔÐØˆŒØ"(Ô";ˆÔØÔ)ˆŒå"=ØÔ-ØÔ>ð#
ñ #
ô #
ˆÔõ ”mÐ$fÐ$fÐ$fÐ$fÍÈvÔOdÑIeÔIeÐ$fÑ$fÔ$fÑgÔgˆŒˆˆr1   r%   r  rJ   c                 ó°  — |j         d         }|j         dd…         \  }}|                     d¦  «                             dd¦  «        }| j        s| j        €$|                      |||j        |j        ¬¦  «        }nd}| j        D ]} ||fd|dœ|¤Ž}Œ|                     dd¦  «         	                    || j
        ||¦  «                             ¦   «         }|S )z¡
        Args:
            hidden_states (`torch.FloatTensor` of shape `(batch_size, channels, height, width)`):
                Feature map to process.
        r   rW   Nr   )r±   r°   r¼   r[   )r  r…  )re   rÁ   rÍ   rY  r¶  r¸  r¼   r[   r�   rÃ   r=  rÒ   )rS   r%   r  rÔ   r°   r±   r£  r¦   s           r2   rc   zDeimv2AIFILayer.forward  s  € ð #Ô(¨Ô+ˆ
Ø%Ô+¨A¨B¨BÔ/‰ˆ�à%×-Ò-¨aÑ0Ô0×:Ò:¸1¸aÑ@Ô@ˆàŒ=ð 	˜DœNÐ2Ø×/Ò/ØØØ$Ô+Ø#Ô)ð	 0ñ ô ˆIˆIð ˆIà”[ð 	ð 	ˆEØ!˜EØðà#Ø,5ðð ð ð	ð ˆMˆMð ×#Ò# A qÑ)Ô)×1Ò1°*¸dÔ>UÐW]Ð_dÑeÔe×pÒpÑrÔrð 	ð Ðr1   )r(   r)   r*   r+   r   rM   r,   r   r   r   rc   rh   ri   s   @r2   r²  r²    s�   ø€ € € € € ðð ð
h˜|ð 
hð 
hð 
hð 
hð 
hð 
hð%à”|ð%ð Ð+Ô,ð%ð 
Œð	%ð %ð %ð %ð %ð %ð %ð %r1   r²  c                   ón   ‡ — e Zd Zdefˆ fd„Zdej        deej        ej        ej        f         fd„Zˆ xZ	S )ÚDeimv2SpatialTuningAdapterrl   c                 ó   •— t          ¦   «                              ¦   «          |j        }t          |d|ddd¬¦  «        | _        t          j        ddd¬¦  «        | _        t          ||d|z  dd¦  «        | _        t          |d|z  d|z  dd¦  «        | _	        t          |d|z  d|z  dd¦  «        | _
        t          j        ¦   «         | _        d S )Nr   rW   Úgelur1  r   ©r  r  r  r´   )rL   rM   Úspatial_tuning_adapter_inplanesr  Ú	stem_convrN   Ú	MaxPool2dÚ	stem_poolr'  Úconv3Úconv4ÚGELUrw   )rS   rl   ÚinplanesrU   s      €r2   rM   z#Deimv2SpatialTuningAdapter.__init__=  sÂ   ø€ Ý‰Œ×ÒÑÔÐØÔ9ˆÝ,¨V°Q¸À!ÀQÐSYÐZÑZÔZˆŒÝœ°!¸AÀqÐIÑIÔIˆŒÝ(¨°¸1¸x¹<ÈÈAÑNÔNˆŒ
Ý(¨°°X±¸qÀ8¹|ÈQÐPQÑRÔRˆŒ
Ý(¨°°X±¸qÀ8¹|ÈQÐPQÑRÔRˆŒ
Ý”g‘i”iˆŒˆˆr1   Úpixel_valuesrJ   c                 ó&  — |                       |                      |¦  «        ¦  «        }|                      |¦  «        }|                      |                      |¦  «        ¦  «        }|                      |                      |¦  «        ¦  «        }|||fS rz   )rÃ  rÁ  r'  rÄ  rw   rÅ  )rS   rÈ  rE  rF  rG  rH  s         r2   rc   z"Deimv2SpatialTuningAdapter.forwardG  sw   € ØŸ.š.¨¯ª¸Ñ)EÔ)EÑFÔFˆØŸ*š* _Ñ5Ô5ˆØŸ*š* T§[¢[°Ñ%AÔ%AÑBÔBˆØŸ*š* T§[¢[°Ñ%AÔ%AÑBÔBˆØ °Ð@Ð@r1   )
r(   r)   r*   r   rM   r,   r   r/   rc   rh   ri   s   @r2   r¼  r¼  <  s†   ø€ € € € € ð ˜|ð  ð  ð  ð  ð  ð  ðA E¤Lð A°U¸5¼<ÈÌÐW\ÔWcÐ;cÔ5dð Að Að Að Að Að Að Að Ar1   r¼  c                   óZ   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        dej        fd„Zˆ xZ	S )ÚDeimv2IntegralaÝ  
    A static layer that calculates integral results from a distribution.

    This layer computes the target location using the formula: `sum{Pr(n) * W(n)}`,
    where Pr(n) is the softmax probability vector representing the discrete
    distribution, and W(n) is the non-uniform Weighting Function.

    Args:
        max_num_bins (int): Max number of the discrete bins. Default is 32.
                       It can be adjusted based on the dataset or task requirements.
    rl   c                 ó`   •— t          ¦   «                              ¦   «          |j        | _        d S rz   )rL   rM   Úmax_num_binsr„  s     €r2   rM   zDeimv2Integral.__init__\  s*   ø€ Ý‰Œ×ÒÑÔÐØ"Ô/ˆÔÐÐr1   Úpred_cornersÚprojectrJ   c                 ó0  — |j         \  }}}t          j        |                     d| j        dz   ¦  «        d¬¦  «        }t          j        ||                     |j        ¦  «        ¦  «                             dd¦  «        }|                     ||d¦  «        }|S )NrX   r   rƒ   r´   )re   r  r  rÃ   rÍ  Úlinearr\   r¼   )rS   rÎ  rÏ  rÔ   r×   rÕ   s         r2   rc   zDeimv2Integral.forward`  s�   € Ø%1Ô%7Ñ"ˆ
�K Ý”y ×!5Ò!5°b¸$Ô:KÈaÑ:OÑ!PÔ!PÐVWÐXÑXÔXˆÝ”x ¨g¯jªj¸Ô9LÑ.MÔ.MÑNÔN×VÒVÐWYÐ[\Ñ]Ô]ˆØ#×+Ò+¨J¸ÀRÑHÔHˆØÐr1   )
r(   r)   r*   r+   r   rM   r,   r   rc   rh   ri   s   @r2   rË  rË  O  s}   ø€ € € € € ð
ð 
ð0˜|ð 0ð 0ð 0ð 0ð 0ð 0ð E¤Lð ¸5¼<ð ÈEÌLð ð ð ð ð ð ð ð r1   rË  c                   óV   ‡ — e Zd Zdefˆ fd„Zdej        dej        dej        fd„Zˆ xZS )Ú	Deimv2LQErl   c                 óÐ   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t	          d| j        dz   z  |j        d|j        ¦  «        | _        d S )Nr´   r   )rL   rM   Útop_prob_valuesrÍ  rŽ   Úlqe_hidden_dimÚ
lqe_layersÚreg_confr„  s     €r2   rM   zDeimv2LQE.__init__i  s]   ø€ Ý‰Œ×ÒÑÔÐØ%Ô5ˆÔØ"Ô/ˆÔÝ! ! tÔ';¸aÑ'?Ñ"@À&ÔBWÐYZÐ\bÔ\mÑnÔnˆŒˆˆr1   ÚscoresrÎ  rJ   c           	      ó”  — |                      ¦   «         \  }}}t          j        |                     ||d| j        dz   ¦  «        d¬¦  «        }|                     | j        d¬¦  «        \  }}t          j        || 	                    dd¬¦  «        gd¬¦  «        }|  
                    |                     ||d¦  «        ¦  «        }	||	z   }|S )Nr´   r   rX   rƒ   T)r„   rZ   )rZ  r  r  rÃ   rÍ  ÚtopkrÕ  r,   r…   r_   rØ  )
rS   rÙ  rÎ  rÔ   ÚlengthrÕ   ÚprobÚ	prob_topkÚstatÚquality_scores
             r2   rc   zDeimv2LQE.forwardo  sÂ   € Ø ,× 1Ò 1Ñ 3Ô 3Ñˆ
�F˜AÝŒy˜×-Ò-¨j¸&À!ÀTÔEVÐYZÑEZÑ[Ô[ÐacÐdÑdÔdˆØ—y’y Ô!5¸2�yÑ>Ô>‰ˆ	�1ÝŒy˜) Y§^¢^¸ÀD ^Ñ%IÔ%IÐJÐPRÐSÑSÔSˆØŸš d§l¢l°:¸vÀrÑ&JÔ&JÑKÔKˆØ˜-Ñ'ˆØˆr1   )	r(   r)   r*   r   rM   r,   r   rc   rh   ri   s   @r2   rÓ  rÓ  h  sz   ø€ € € € € ðo˜|ð oð oð oð oð oð oð˜eœlð ¸%¼,ð È5Ì<ð ð ð ð ð ð ð ð r1   rÓ  c                   óð   ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 	 ddej        dej        dz  dej        dz  dej        dz  deee	e	f                  dz  d	ej        dz  d
ej        dz  de
e         dej        fd„Zˆ xZS )ÚDeimv2DecoderLayerrl   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        t	          || j        |j        |j        ¬¦  «        | _        |j        | _        t          |j        ¦  «        | _
        t          |¬¦  «        | _        t          |¦  «        | _        t          |j        ¦  «        | _        |j        rt#          |j        ¦  «        nd | _        |j        | _        |j        rd nt          |j        ¦  «        | _        d S )Nry  ©rl   )rL   rM   rr   rT   r`  rõ   rd  r|  rT  rG   r  rè   Úencoder_attnrk   r‚  rƒ  Úuse_gatewayr}   ÚgatewayÚencoder_attn_layer_normr„  s     €r2   rM   zDeimv2DecoderLayer.__init__z  sð   ø€ Ý‰Œ×ÒÑÔÐØ!œ>ˆÔõ -ØØÔ(Ø &Ô >ØÔ,ð	
ñ 
ô 
ˆŒð ”~ˆŒÝ$1°&´.Ñ$AÔ$AˆÔ!Ý?ÀvÐNÑNÔNˆÔÝ" 6Ñ*Ô*ˆŒÝ -¨f¬nÑ =Ô =ˆÔØ5;Ô5GÐQ•z &¤.Ñ1Ô1Ð1ÈTˆŒØ!Ô-ˆÔØ/5Ô/AÐ'd t tÅ}ÐU[ÔUcÑGdÔGdˆÔ$Ð$Ð$r1   Nr%   rj  r
  r  r  r8   Úencoder_attention_maskr  rJ   c                 ó8  — |}	 | j         d|||dœ|¤Ž\  }}
t          j                             || j        | j        ¬¦  «        }|	|z   }|                      |¦  «        }|}	|€|n||z   }|                      |||||¬¦  «        \  }}
t          j                             || j        | j        ¬¦  «        }| j        �|                      |	|¦  «        }n|	|z   }|                      |¦  «        }|}	|  	                    |¦  «        }|	|z   }|  
                    |¦  «        }|S )a#  
        Args:
            hidden_states (`torch.FloatTensor`):
                Input to the layer of shape `(batch, seq_len, hidden_size)`.
            object_queries_position_embeddings (`torch.FloatTensor`, *optional*):
                Position embeddings for the object query slots. These are added to both queries and keys
                in the self-attention layer (not values).
            reference_points (`torch.FloatTensor`, *optional*):
                Reference points.
            spatial_shapes (`torch.LongTensor`, *optional*):
                Spatial shapes.
            level_start_index (`torch.LongTensor`, *optional*):
                Level start index.
            encoder_hidden_states (`torch.FloatTensor`):
                cross attention input to the layer of shape `(batch, seq_len, hidden_size)`
            encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
                `(batch, 1, target_len, source_len)` where padding elements are indicated by very large negative
                values.
        r‡  rW  N)r%   r8   r
  r  r  r0   )r|  rN   rÄ   rT  rY  r  rå  rç  rè  r‚  rƒ  )rS   r%   rj  r
  r  r  r8   ré  r  r7  rÕ   s              r2   rc   zDeimv2DecoderLayer.forwardŽ  sc  € ð< !ˆð *˜4œ>ð 
Ø'Ø1Ø 3ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆà ˆð *=Ð)D˜˜È-ÐZmÑJmˆØ×,Ò,Ø'Ø"7Ø-Ø)Ø 3ð -ñ 
ô 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆàŒ<Ð#Ø ŸLšL¨°=ÑAÔAˆMˆMà$ }Ñ4ˆMØ ×8Ò8¸ÑGÔGˆMð !ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàÐr1   )NNNNNN)r(   r)   r*   r   rM   r,   r   rD   r/   rŒ   r   r   rc   rh   ri   s   @r2   râ  râ  y  s!  ø€ € € € € ðe˜|ð eð eð eð eð eð eð. 48Ø04Ø.2Ø<@Ø59Ø6:ðEð Eà”|ðEð #œ\¨DÑ0ðEð  œ,¨Ñ-ð	Eð
 œ tÑ+ðEð " %¨¨S¨¤/Ô2°TÑ9ðEð  %œ|¨dÑ2ðEð !&¤¨tÑ 3ðEð Ð+Ô,ðEð 
ŒðEð Eð Eð Eð Eð Eð Eð Er1   râ  c                   óx   ‡ — e Zd ZU eed<   dZdZdZg d¢ZdZ	dZ
dZdZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚDeimv2PreTrainedModelrl   Údeimv2rÈ  )Úimage)ÚDeimv2HybridEncoderÚDeimv2LiteEncoderrâ  Tc                 ó  •— t          ¦   «                              |¦  «         t          |t          t          f¦  «        �rM|j        �ƒ|j        D ]{}| j        j        pd| j        j        dz   z  }t          t          j        d|z
  |z  ¦  «         ¦  «        }t          j        |j        ¦  «         t          j        |j        |¦  «         Œ||j        �T|j        D ]L}t          j        |j        d         j        d¦  «         t          j        |j        d         j        d¦  «         ŒMt'          |d¦  «        r$t          j        |j        | j        j        ¦  «         t'          |d¦  «        r$t          j        |j        | j        j        ¦  «         t          |t,          ¦  «        �r't          j        |j        j        d¦  «         t1          j        ¦   «         }t1          j        |j        t0          j        ¬¦  «                             |¦  «        d	t          j        z  |j        z  z  }t1          j        |                      ¦   «         | !                    ¦   «         gd¦  «        }|| "                    ¦   «          #                    dd
¬¦  «        j$        z  }| %                    |j        dd¦  «         &                    dtO          |j(        ¦  «        dg¦  «        }t1          j)        d„ |j(        D ¦   «         ¦  «         %                    ddd¦  «        }||z  }t          j*        |j        j        | +                    ¦   «         ¦  «         t          j        |j,        j        d¦  «         t          j        |j,        j        d¦  «         d„ |j(        D ¦   «         }	t          j*        |j-        t1          j.        |	t0          j/        ¬¦  «        ¦  «         t          |t`          ¦  «        rƒ| j        j        pd| j        j        dz   z  }t          t          j        d|z
  |z  ¦  «         ¦  «        }t          j        |j1        j        ¦  «         t          j        |j1        j        |¦  «         t          |td          ¦  «        r`t          t          j        d¦  «         ¦  «        }t          j        |j3        j        |¦  «         t          j        |j3        j        d¦  «         t          |th          ¦  «        rTt          j        |j5        j        d         j        d¦  «         t          j        |j5        j        d         j        d¦  «         t'          |d¦  «        r*| j        j6        rt          j        |j7        j        ¦  «         t'          |d¦  «        r.| j        j8        dk    rt          j        |j9        j        ¦  «         t          |tt          ¦  «        r¹t          j        |j;        j        ¦  «         t          j        |j;        j        d¦  «         t          j        |j<        j        ¦  «         t          j        |j<        j        d¦  «         t          j        |j=        j        ¦  «         t          j        |j=        j        d¦  «         dS dS )zInitialize the weightsNr   rX   r   Ú	reg_scaleÚuprO  rô   ç       @TrY   rW   c                 ó>   — g | ]}t          j        d |d z   ¦  «        ‘ŒS rî   )r,   rÊ   )r—   rò   s     r2   r²   z7Deimv2PreTrainedModel._init_weights.<locals>.<listcomp>  s(   € Ð#[Ð#[Ð#[¸q¥E¤L°°A¸±EÑ$:Ô$:Ð#[Ð#[Ð#[r1   c                 ó<   — g | ]}t          |¦  «        D ]}d |z  ‘ŒŒS rî   rï   rñ   s      r2   r²   z7Deimv2PreTrainedModel._init_weights.<locals>.<listcomp>
  s0   € ÐXÐXÐX¨!ÍuÐUVÉxÌxÐXÐXÈ!  A¡ÐXÐXÐXÐXr1   r-  Úweight_embeddingÚdenoising_class_embed)>rL   Ú_init_weightsrý   ÚDeimv2ForObjectDetectionÚDeimv2DecoderÚclass_embedrl   Úinitializer_bias_prior_probÚ
num_labelsrg   ÚmathÚlogÚinitÚxavier_uniform_rQ   Ú	constant_ro   Ú
bbox_embedr�   Úhasattrrò  ró  rè   r   r,   Úget_default_dtyperÊ   rö   rÇ   r\   ÚpirÉ   rœ  r›  ÚabsrŠ  ÚvaluesrÃ   ÚtilerÏ   r­   rÐ   Úcopy_rÁ   r¬   ró   rÆ   r]   ÚDeimv2ModelÚenc_score_headr}   r   rÓ  rØ  Úlearn_initial_queryr÷  Únum_denoisingrø  rk   rs   rt   ru   )rS   rP  r¦   Ú
prior_probro   Údefault_dtypeÚthetasÚ	grid_initrS  ró   rU   s             €r2   rù  z#Deimv2PreTrainedModel._init_weightsâ  sŒ  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%å�fÕ7½ÐGÑHÔHñ 	:ØÔ!Ð-Ø#Ô/ð 5ð 5�EØ!%¤Ô!HÐ!lÈAÐQUÔQ\ÔQgÐjkÑQkÑLl�JÝ ¥$¤(¨A°
©N¸jÑ+HÑ"IÔ"IÐ!IÑJÔJ�DÝÔ(¨¬Ñ6Ô6Ð6Ý”N 5¤:¨tÑ4Ô4Ð4Ð4àÔ Ð,Ø#Ô.ð =ð =�EÝ”N 5¤<°Ô#3Ô#:¸AÑ>Ô>Ð>Ý”N 5¤<°Ô#3Ô#8¸!Ñ<Ô<Ð<Ð<å�v˜{Ñ+Ô+ð HÝ”˜vÔ/°´Ô1FÑGÔGÐGå�v˜tÑ$Ô$ð :Ý”˜vœy¨$¬+¬.Ñ9Ô9Ð9å�fÕAÑBÔBñ 	eÝŒN˜6Ô2Ô9¸3Ñ?Ô?Ð?Ý!Ô3Ñ5Ô5ˆMÝ”\ &¤.½¼ÐDÑDÔD×GÒGÈÑVÔVØ•d”g‘ ¤Ñ.ñˆFõ œ V§Z¢Z¡\¤\°6·:²:±<´<Ð$@À"ÑEÔEˆIØ! I§M¢M¡O¤O×$7Ò$7¸ÀDÐ$7Ñ$IÔ$IÔ$PÑPˆIØ!×)Ò)¨&¬.¸!¸QÑ?Ô?×DÒDÀaÍÈVÔMcÑIdÔIdÐfgÐEhÑiÔiˆIÝ”lÐ#[Ð#[ÀFÔDZÐ#[Ñ#[Ô#[Ñ\Ô\×dÒdÐefÐhjÐlmÑnÔnˆGØ˜Ñ ˆIÝŒJ�vÔ.Ô3°Y×5FÒ5FÑ5HÔ5HÑIÔIÐIåŒN˜6Ô3Ô:¸CÑ@Ô@Ð@ÝŒN˜6Ô3Ô8¸#Ñ>Ô>Ð>àXÐX¨vÔ/EÐXÑXÔXÐÝŒJ�vÔ.µ´Ð=MÕUZÔUbÐ0cÑ0cÔ0cÑdÔdÐdå�f�kÑ*Ô*ð 	=ØœÔ@ÐdÀAÈÌÔI_ÐbcÑIcÑDdˆJÝ�$œ( A¨
¡N°jÑ#@ÑAÔAÐAÑBÔBˆDÝÔ  Ô!6Ô!=Ñ>Ô>Ð>ÝŒN˜6Ô0Ô5°tÑ<Ô<Ð<å�f�jÑ)Ô)ð 	2Ý�$œ( ?Ñ3Ô3Ð3Ñ4Ô4ˆDÝŒN˜6œ;Ô+¨TÑ2Ô2Ð2ÝŒN˜6œ;Ô-¨qÑ1Ô1Ð1å�f�iÑ(Ô(ð 	AÝŒN˜6œ?Ô1°"Ô5Ô:¸AÑ>Ô>Ð>ÝŒN˜6œ?Ô1°"Ô5Ô<¸aÑ@Ô@Ð@å�6Ð-Ñ.Ô.ð 	A°4´;Ô3Rð 	AÝÔ  Ô!8Ô!?Ñ@Ô@Ð@Ý�6Ð2Ñ3Ô3ð 	F¸¼Ô8QÐTUÒ8UÐ8UÝÔ  Ô!=Ô!DÑEÔEÐEå�f�oÑ.Ô.ð 	5ÝÔ  Ô!1Ô!8Ñ9Ô9Ð9ÝŒN˜6Ô+Ô0°!Ñ4Ô4Ð4ÝÔ  ¤Ô!6Ñ7Ô7Ð7ÝŒN˜6œ>Ô.°Ñ2Ô2Ð2ÝÔ  Ô!1Ô!8Ñ9Ô9Ð9ÝŒN˜6Ô+Ô0°!Ñ4Ô4Ð4Ð4Ð4ð	5ð 	5r1   )r(   r)   r*   r   r.   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_attention_backendÚ_supports_flex_attnr,   Úno_gradrù  rh   ri   s   @r2   rì  rì  Ö  s•   ø€ € € € € € àÐÐÑØ ÐØ$€OØ!ÐØ]Ð]Ð]ÐØ€NØÐØ"&ÐØÐà€U„]�_„_ðD5ð D5ð D5ð D5ñ „_ðD5ð D5ð D5ð D5ð D5r1   rì  c                   ó2   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚDeimv2FrozenBatchNorm2dzú
    BatchNorm2d where the batch statistics and the affine parameters are fixed.

    Copy-paste from torchvision.misc.ops with added eps before rqsrt, without which any other models than
    torchvision.models.resnet[18,34,50,101] produce nans.
    c                 óˆ  •— t          ¦   «                              ¦   «          |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         d S )NrQ   ro   Úrunning_meanÚrunning_var)rL   rM   rþ   r,   rP   r·   )rS   rò   rU   s     €r2   rM   z Deimv2FrozenBatchNorm2d.__init__2  s—   ø€ Ý‰Œ×ÒÑÔÐØ×Ò˜X¥u¤z°!¡}¤}Ñ5Ô5Ð5Ø×Ò˜V¥U¤[°¡^¤^Ñ4Ô4Ð4Ø×Ò˜^­U¬[¸©^¬^Ñ<Ô<Ð<Ø×Ò˜]­E¬J°q©M¬MÑ:Ô:Ð:Ð:Ð:r1   c           	      ón   •— |dz   }||v r||= t          ¦   «                              |||||||¦  «         d S )NÚnum_batches_tracked)rL   Ú_load_from_state_dict)
rS   Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsÚnum_batches_tracked_keyrU   s
            €r2   r$  z-Deimv2FrozenBatchNorm2d._load_from_state_dict9  s[   ø€ ð #)Ð+@Ñ"@ÐØ" jÐ0Ð0ØÐ2Ð3å‰Œ×%Ò%Ø˜ °¸ÀoÐWañ	
ô 	
ð 	
ð 	
ð 	
r1   c                 óB  — | j                              dddd¦  «        }| j                             dddd¦  «        }| j                             dddd¦  «        }| j                             dddd¦  «        }d}|||z                        ¦   «         z  }|||z  z
  }||z  |z   S )Nr   rX   çñhãˆµøä>)rQ   rÃ   ro   r!  r   r`   )rS   r{   rQ   ro   r!  r   ÚepsilonÚscales           r2   rc   zDeimv2FrozenBatchNorm2d.forwardD  s°   € ð ”×$Ò$ Q¨¨A¨qÑ1Ô1ˆØŒy× Ò   B¨¨1Ñ-Ô-ˆØÔ&×.Ò.¨q°"°a¸Ñ;Ô;ˆØÔ(×0Ò0°°B¸¸1Ñ=Ô=ˆØˆØ˜+¨Ñ/×6Ò6Ñ8Ô8Ñ8ˆØ�l UÑ*Ñ*ˆØ�5‰y˜4ÑÐr1   )r(   r)   r*   r+   rM   r$  rc   rh   ri   s   @r2   r  r  *  sj   ø€ € € € € ðð ð;ð ;ð ;ð ;ð ;ð	
ð 	
ð 	
ð 	
ð 	
ð
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 r1   r  c                 ól  — |                       ¦   «         D �]\  }}t          |t          j        ¦  «        r¼t	          |j        ¦  «        }|j        j        t          j        d¦  «        k    r||j         	                    |j        ¦  «         |j
         	                    |j
        ¦  «         |j         	                    |j        ¦  «         |j         	                    |j        ¦  «         || j        |<   t          t          |                     ¦   «         ¦  «        ¦  «        dk    rt#          |¦  «         �ŒdS )zœ
    Recursively replace all `torch.nn.BatchNorm2d` with `Deimv2FrozenBatchNorm2d`.

    Args:
        model (torch.nn.Module):
            input model
    Úmetar   N)Únamed_childrenrý   rN   r  r  Únum_featuresrQ   r¼   r,   r  ro   r   r!  Ú_modulesÚlenrD   ÚchildrenÚreplace_batch_norm)ÚmodelÚnamerP  Ú
new_modules       r2   r8  r8  Q  s  € ð ×,Ò,Ñ.Ô.ð 'ñ '‰ˆˆfÝ�f�bœnÑ-Ô-ð 		.Ý0°Ô1DÑEÔEˆJàŒ}Ô#¥u¤|°FÑ';Ô';Ò;Ð;ØÔ!×'Ò'¨¬Ñ6Ô6Ð6Ø”×%Ò% f¤kÑ2Ô2Ð2ØÔ'×-Ò-¨fÔ.AÑBÔBÐBØÔ&×,Ò,¨VÔ-?Ñ@Ô@Ð@à#-ˆEŒN˜4Ñ å�t�F—O’OÑ%Ô%Ñ&Ô&Ñ'Ô'¨!Ò+Ð+Ý˜vÑ&Ô&Ð&ùð'ð 'r1   c                   ó^   ‡ — e Zd Zˆ fd„Zdej        dee         deej                 fd„Z	ˆ xZ
S )ÚDeimv2ConvEncoderc                 ó˜  •‡— t          ¦   «                              ‰¦  «         t          ‰¦  «        }‰j        r:t	          j        ¦   «         5  t          |¦  «         d d d ¦  «         n# 1 swxY w Y   || _        | j        j        | _	        t          j        ˆfd„| j	        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Nc           	      ó|   •— g | ]8}‰j         d k    rt          ‰|‰j        dd¦  «        nt          j        ¦   «         ‘Œ9S )Úliter   )Úencoder_typer  r=  rN   r  )r—   Ú
in_channelrl   s     €r2   r²   z.Deimv2ConvEncoder.__init__.<locals>.<listcomp>w  s\   ø€ ð ð ð ð ð Ô&¨&Ò0Ð0õ $ F¨J¸Ô8QÐSTÐVWÑXÔXÐXå”[‘]”]ðð ð r1   )rL   rM   r	   Úfreeze_backbone_batch_normsr,   r  r8  r9  ÚchannelsÚintermediate_channel_sizesrN   r›   Úencoder_input_projÚ	post_init)rS   rl   ÚbackbonerU   s    ` €r2   rM   zDeimv2ConvEncoder.__init__k  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð å  Ñ(Ô(ˆàÔ-ð 	-å”‘”ð -ð -Ý" 8Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -àˆŒ
Ø*.¬*Ô*=ˆÔ'Ý"$¤-ðð ð ð ð #'Ô"Að	ñ ô ñ#
ô #
ˆÔð 	�ŠÑÔÐÐÐs   ÁA)Á)A-Á0A-rÈ  r  rJ   c                 óf   —  | j         |fi |¤Žj        }d„ t          | j        |¦  «        D ¦   «         S )Nc                 ó*   — g | ]\  }} ||¦  «        ‘ŒS r0   r0   )r—   ÚprojÚfeats      r2   r²   z-Deimv2ConvEncoder.forward.<locals>.<listcomp>ƒ  s$   € ÐTÐTÐT™z˜t T���T‘
”
ÐTÐTÐTr1   )r9  rC   rœ   rF  )rS   rÈ  r  Úfeaturess       r2   rc   zDeimv2ConvEncoder.forward�  s?   € Ø�4”:˜lÐ5Ð5¨fÐ5Ð5ÔBˆØTÐT­S°Ô1HÈ(Ñ-SÔ-SÐTÑTÔTÐTr1   )r(   r)   r*   rM   r,   r   r   r   rD   rc   rh   ri   s   @r2   r=  r=  j  s~   ø€ € € € € ðð ð ð ð ð,U E¤Lð U¸FÐCUÔ<Vð UÐ[_Ð`eÔ`lÔ[mð Uð Uð Uð Uð Uð Uð Uð Ur1   r=  c                   ód   ‡ — e Zd Zdefˆ fd„Zdej        dee         de	ej                 fd„Z
ˆ xZS )ÚDeimv2DINOv3ConvEncoderrl   c                 ó¸  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |j        j        }|j        }|j	        }t          j        t          |||dz  z   |dd¦  «        t          |||dz  z   |dd¦  «        t          |||dz  z   |dd¦  «        g¦  «        | _        |                      ¦   «          d S )NrW   r   r´   )rL   rM   r	   rH  r¼  Úspatial_tuning_adapterÚbackbone_configrT   r=  rÀ  rN   r›   r  Úfusion_projrG  )rS   rl   r�  r‘   Úspatial_tuning_adapter_channelsrU   s        €r2   rM   z Deimv2DINOv3ConvEncoder.__init__‡  sí   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý% fÑ-Ô-ˆŒå&@ÀÑ&HÔ&HˆÔ#àÔ*Ô6ˆ	ØÔ.ˆ
Ø*0Ô*PÐ'Ýœ=å# F¨IÐ8WÐZ[Ñ8[Ñ,[Ð]gÐijÐlmÑnÔnÝ# F¨IÐ8WÐZ[Ñ8[Ñ,[Ð]gÐijÐlmÑnÔnÝ# F¨IÐ8WÐZ[Ñ8[Ñ,[Ð]gÐijÐlmÑnÔnðñ
ô 
ˆÔð 	�ŠÑÔÐÐÐr1   rÈ  r  rJ   c                 óÔ  —  | j         |fi |¤Ž}|j        }| j         j        j        }|j        d         |z  }|j        d         |z  }g }t          |¦  «        }	t          |¦  «        D ]j\  }
}t          |d|	dz
  |
z
  z  z  ¦  «        }t          |d|	dz
  |
z
  z  z  ¦  «        }t          j	        |||gdd¬¦  «        }| 
                    |¦  «         Œk|                      |¦  «        }g }t          t          ||¦  «        ¦  «        D ]a\  }
\  }}t          j        |                     |j        ¦  «        |gd¬¦  «        }| 
                     | j        |
         |¦  «        ¦  «         Œb|S )NrW   r   r¶   F)rZ  r¸   rº   r   rƒ   )rH  rC   rl   Ú
patch_sizere   r6  r¤   rŒ   r  ÚinterpolaterÎ   rQ  rœ   r,   r…   r\   r¼   rS  )rS   rÈ  r  Úbackbone_outputrC   rV  Úheight_patchesÚwidth_patchesÚsemantic_featuresÚ
num_scalesr¥   rL  Úresize_heightÚresize_widthÚspatialÚdetail_featuresÚoutputsÚsemantic_featureÚdetail_featureÚfuseds                       r2   rc   zDeimv2DINOv3ConvEncoder.forwardš  s—  € Ø'˜$œ-¨Ð?Ð?¸Ð?Ð?ˆØ&Ô3ˆà”]Ô)Ô4ˆ
Ø%Ô+¨AÔ.°*Ñ<ˆØ$Ô*¨1Ô-°Ñ;ˆàÐÝ˜Ñ&Ô&ˆ
Ý  Ñ.Ô.ð 	.ð 	.‰GˆAˆtÝ °°zÀA±~ÈÑ7IÑ1JÑ JÑKÔKˆMÝ˜}¨q°ZÀ!±^ÀaÑ5GÑ/HÑHÑIÔIˆLÝ”m D°¸|Ð/LÐS]ÐmrÐsÑsÔsˆGØ×$Ò$ WÑ-Ô-Ð-Ð-à×5Ò5°lÑCÔCˆàˆÝ5>½sÐCTÐVeÑ?fÔ?fÑ5gÔ5gð 	7ð 	7Ñ1ˆAÑ1Ð  .Ý”IÐ/×2Ò2°>Ô3HÑIÔIÈ>ÐZÐ`aÐbÑbÔbˆEØ�NŠNÐ.˜4Ô+¨AÔ.¨uÑ5Ô5Ñ6Ô6Ð6Ð6àˆr1   )r(   r)   r*   r   rM   r,   r   r   r   rD   rc   rh   ri   s   @r2   rO  rO  †  s   ø€ € € € € ð˜|ð ð ð ð ð ð ð& E¤Lð ¸FÐCUÔ<Vð Ð[_Ð`eÔ`lÔ[mð ð ð ð ð ð ð ð r1   rO  c                   ó²   ‡ — e Zd Zd eed¬¦  «         eed¬¦  «        giZdefˆ fd„Zee	de
ej                 dee         d	efd
„¦   «         ¦   «         Zˆ xZS )rð  r%   Ú
input_proj)Ú
layer_nameÚbi_fusion_convrl   c                 óz  •‡‡— t          ¦   «                              ‰¦  «         ‰j        Š‰j        }t	          j        ˆˆfd„‰j        D ¦   «         ¦  «        | _        t	          j        ddd¬¦  «        | _	        t          ‰‰‰dd|¬¦  «        | _        t	          j        ddd¬¦  «        | _        t          ‰‰‰dd|¬¦  «        | _        t          ‰‰‰dd|¬¦  «        | _        t          d‰j        z  ¦  «        }t#          ‰|¬¦  «        | _        t#          ‰|¬¦  «        | _        |                      ¦   «          d S )Nc           	      ó6   •— g | ]}t          ‰|‰d d ¦  «        ‘ŒS rî   )r  )r—   rB  rl   r‘   s     €€r2   r²   z.Deimv2LiteEncoder.__init__.<locals>.<listcomp>Ã  s*   ø€ ÐtÐtÐtÈ:Õ  ¨°ZÀÀAÑFÔFÐtÐtÐtr1   r   rW   r   r¿  r1  ©r;  )rL   rM   r=  r%  rN   r›   Úencoder_in_channelsrf  Ú	AvgPool2dÚ
down_pool1r  Ú
down_conv1Ú
down_pool2Ú
down_conv2rh  r>  Ú
depth_multr:  Ú	fpn_blockÚ	pan_blockrG  )rS   rl   r  r.  r‘   rU   s    `  @€r2   rM   zDeimv2LiteEncoder.__init__½  s?  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ.ˆ
ØÔ/ˆ
åœ-ØtÐtÐtÐtÐtÐY_ÔYsÐtÑtÔtñ
ô 
ˆŒõ œ,°1¸QÈÐJÑJÔJˆŒÝ-¨f°jÀ*ÈaÐQRÐ_iÐjÑjÔjˆŒÝœ,°1¸QÈÐJÑJÔJˆŒÝ-¨f°jÀ*ÈaÐQRÐ_iÐjÑjÔjˆŒå1°&¸*ÀjÐRSÐUVÐcmÐnÑnÔnˆÔå˜1˜vÔ0Ñ0Ñ1Ô1ˆ
Ý+¨FÀ
ÐKÑKÔKˆŒÝ+¨FÀ
ÐKÑKÔKˆŒà�ŠÑÔÐÐÐr1   Úinputs_embedsr  rJ   c                 ó®  ‡ — ˆ fd„t          |¦  «        D ¦   «         }|                     ‰                      ‰                      |d         ¦  «        ¦  «        ¦  «         ‰                      |d         t          j        |d         d¦  «        z   ¦  «        |d<   g }|d         t          j        |d         dd¬¦  «        z   }|                     ‰                      |¦  «        ¦  «         |d         ‰  	                    ‰  
                    |d         ¦  «        ¦  «        z   }|                     ‰                      |¦  «        ¦  «         t          |¬¦  «        S )	Nc                 óB   •— g | ]\  }} ‰j         |         |¦  «        ‘ŒS r0   )rf  )r—   r¥   ÚfeaturerS   s      €r2   r²   z-Deimv2LiteEncoder.forward.<locals>.<listcomp>Ö  s/   ø€ ÐeÐeÐe¹j¸aÀÐ0˜dœo¨aÔ0°Ñ9Ô9ÐeÐeÐer1   rX   r   r   rô  Únearest©Úscale_factorr¸   ©rC   )r¤   rÎ   ro  rn  rh  r  Úadaptive_avg_pool2drW  rs  rq  rp  rt  rB   )rS   ru  r  Úprojected_featuresra  Úfused_features   `     r2   rc   zDeimv2LiteEncoder.forwardÓ  sC  ø€ ð fÐeÐeÐeÍIÐVcÑLdÔLdÐeÑeÔeÐØ×!Ò! $§/¢/°$·/²/ÐBTÐUWÔBXÑ2YÔ2YÑ"ZÔ"ZÑ[Ô[Ð[à!%×!4Ò!4Ø˜rÔ"¥QÔ%:Ð;MÈbÔ;QÐSTÑ%UÔ%UÑUñ"
ô "
Ð˜2Ñð ˆØ*¨1Ô-µ´Ð>PÐQRÔ>SÐbeÐluÐ0vÑ0vÔ0vÑvˆØ�Š�t—~’~ mÑ4Ô4Ñ5Ô5Ð5à*¨1Ô-°·²ÀÇÂÐPWÐXZÔP[Ñ@\Ô@\Ñ0]Ô0]Ñ]ˆØ�Š�t—~’~ mÑ4Ô4Ñ5Ô5Ð5å"°Ð8Ñ8Ô8Ð8r1   )r(   r)   r*   r   r  Ú_can_record_outputsr   rM   r   r   rD   r,   r   r   r   rB   rc   rh   ri   s   @r2   rð  rð  ´  sË   ø€ € € € € ð 	ØˆNÐ.¸<ÐHÑHÔHØˆNÐ.Ð;KÐLÑLÔLð
ðÐð˜|ð ð ð ð ð ð ð,  Øð9 T¨%¬,Ô%7ð 9À6ÐJ\ÔC]ð 9Ðbuð 9ð 9ð 9ñ „_ñ  Ôð9ð 9ð 9ð 9ð 9r1   rð  rÏ   Úfeature_map_1Úfeature_map_2Úfuse_opc                 óH   — |dk    r| |z   S t          j        | |gd¬¦  «        S )zJFuses two feature maps via element-wise sum or channel-wise concatenation.rÏ   r   rƒ   )r,   r…   )r�  r‚  rƒ  s      r2   Úfuse_feature_mapsr…  ç  s2   € à�%ÒÐØ˜}Ñ,Ð,ÝŒ9�m ]Ð3¸Ð;Ñ;Ô;Ð;r1   c            	       ó¦   ‡ — e Zd ZdZeedœZdefˆ fd„Ze	 e
d¬¦  «        	 ddeej                 dz  d	ee         d
efd„¦   «         ¦   «         Zˆ xZS )rï  aE  
    DEIMv2 variant of DFineHybridEncoder. Uses element-wise sum fusion (`fuse_feature_maps`) instead of
    D-FINE's channel concatenation, Deimv2RepNCSPELAN5 (simplified 4-way concat) instead of DFineRepNCSPELAN4,
    and returns Deimv2EncoderOutput with feature_maps instead of BaseModelOutput with last_hidden_state.
    )r%   r&   rl   c           
      óP  •‡ ‡— t          ¦   «                              ‰¦  «         ‰‰ _        ‰j        ‰ _        t          ‰ j        ¦  «        dz
  ‰ _        ‰j        ‰ _        ‰j        ‰ _        ‰j	        ‰ _	        ‰j
        ‰ _
        ‰j        ‰ _        ˆ fd„‰ j        D ¦   «         ‰ _        ‰ j        ‰ _        ‰j        ‰ _        t!          j        ˆfd„t%          t          ‰ j	        ¦  «        ¦  «        D ¦   «         ¦  «        ‰ _        t!          j        ¦   «         ‰ _        t!          j        ¦   «         ‰ _        t%          t          ‰ j        ¦  «        dz
  dd¦  «        D ]w}‰ j                             t/          ‰‰ j        ‰ j        dd¦  «        ¦  «         t1          d‰j        z  ¦  «        }‰ j                             t5          ‰|¬¦  «        ¦  «         Œxt!          j        ¦   «         ‰ _        t!          j        ¦   «         ‰ _        t%          t          ‰ j        ¦  «        dz
  ¦  «        D ]k}‰ j                             t;          ‰dd¦  «        ¦  «         t1          d‰j        z  ¦  «        }‰ j                             t5          ‰|¬¦  «        ¦  «         Œl‰                      ¦   «          d S )	Nr   c                 ó   •— g | ]	}‰j         ‘Œ
S r0   )r=  rì   s     €r2   r²   z0Deimv2HybridEncoder.__init__.<locals>.<listcomp>  s   ø€ ÐOÐOÐO¸˜TÔ4ÐOÐOÐOr1   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r0   )r²  rµ  s     €r2   r²   z0Deimv2HybridEncoder.__init__.<locals>.<listcomp>  s!   ø€ Ð"hÐ"hÐ"h¸q¥?°6Ñ#:Ô#:Ð"hÐ"hÐ"hr1   r   rX   r   rk  rW   )rL   rM   rl   rl  r  r6  Únum_fpn_stagesÚfeat_stridesr=  Úencode_proj_layersr·  r¶  r  Úout_stridesÚencoder_fuse_oprƒ  rN   r›   rð   ÚaifiÚlateral_convsÚ
fpn_blocksrÎ   r  r>  rr  r:  Údownsample_convsÚ
pan_blocksrK  rG  )rS   rl   rÕ   r.  rU   s   ``  €r2   rM   zDeimv2HybridEncoder.__init__ú  s_  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØ!Ô5ˆÔÝ! $Ô"2Ñ3Ô3°aÑ7ˆÔØ"Ô/ˆÔØ"(Ô";ˆÔØ"(Ô";ˆÔØ/5Ô/UˆÔ,ØÔ)ˆŒØOÐOÐOÐO¸dÔ>NÐOÑOÔOˆÔØÔ,ˆÔØÔ-ˆŒå”MÐ"hÐ"hÐ"hÐ"hÅEÍ#ÈdÔNeÑJfÔJfÑDgÔDgÐ"hÑ"hÔ"hÑiÔiˆŒ	åœ]™_œ_ˆÔÝœ-™/œ/ˆŒÝ•s˜4Ô+Ñ,Ô,¨qÑ0°!°RÑ8Ô8ð 	Wð 	WˆAØÔ×%Ò%Ý# F¨DÔ,CÀTÔE\Ð^_ÐabÑcÔcñô ð õ ˜q 6Ô#4Ñ4Ñ5Ô5ˆJØŒO×"Ò"Õ#5°fÈ*Ð#UÑ#UÔ#UÑVÔVÐVÐVå "¤¡¤ˆÔÝœ-™/œ/ˆŒÝ•s˜4Ô+Ñ,Ô,¨qÑ0Ñ1Ô1ð 	Wð 	WˆAØÔ!×(Ò(­°f¸aÀÑ)CÔ)CÑDÔDÐDÝ˜q 6Ô#4Ñ4Ñ5Ô5ˆJØŒO×"Ò"Õ#5°fÈ*Ð#UÑ#UÔ#UÑVÔVÐVÐVà�ŠÑÔÐÐÐr1   F)Útie_last_hidden_statesNru  r  rJ   c                 óX  — |}| j         j        dk    r7t          | j        ¦  «        D ]"\  }} | j        |         ||         fi |¤Ž||<   Œ#|d         g}t          t          | j        | j        ¦  «        ¦  «        D ]€\  }\  }}	|| j        |z
  dz
           }
|d         } ||¦  «        }||d<   t          j
        |dd¬¦  «        }t          ||
| j        ¦  «        } |	|¦  «        }|                     |¦  «         Œ�|                     ¦   «          |d         g}t          t          | j        | j        ¦  «        ¦  «        D ]\\  }\  }}|d         }||dz            } ||¦  «        }t          ||| j        ¦  «        } ||¦  «        }|                     |¦  «         Œ]t#          |¬¦  «        S )z¿
        Args:
            inputs_embeds (`list[torch.FloatTensor]`):
                Multi-scale feature maps from the backbone (one tensor per feature level) passed to the encoder.
        r   rX   r   rô  ry  rz  r|  )rl   r¹  r¤   rŒ  r�  rœ   r�  r‘  rŠ  r  rW  r…  rƒ  rÎ   Úreverser’  r“  rB   )rS   ru  r  rC   r¥   Úenc_indÚfpn_feature_mapsÚidxÚlateral_convrs  Úbackbone_feature_mapÚtop_fpn_feature_mapÚfused_feature_mapÚnew_fpn_feature_mapÚpan_feature_mapsÚdownsample_convrt  Útop_pan_feature_mapÚfpn_feature_mapÚdownsampled_feature_mapÚnew_pan_feature_maps                        r2   rc   zDeimv2HybridEncoder.forward  s  € ð %ˆàŒ;Ô%¨Ò)Ð)Ý'¨Ô(?Ñ@Ô@ð Vð V‘
��7Ø(4¨¬	°!¬°\À'Ô5JÐ(UÐ(UÈfÐ(UÐ(U�˜WÑ%Ð%ð )¨Ô,Ð-ÐÝ.7½¸DÔ<NÐPTÔP_Ñ8`Ô8`Ñ.aÔ.að 	9ð 	9Ñ*ˆCÑ*�, 	Ø#/°Ô0CÀcÑ0IÈAÑ0MÔ#NÐ Ø"2°2Ô"6ÐØ". ,Ð/BÑ"CÔ"CÐØ#6Ð˜RÑ Ý"#¤-Ð0CÐRUÐ\eÐ"fÑ"fÔ"fÐÝ 1Ð2EÐG[Ð]aÔ]iÑ jÔ jÐØ"+ )Ð,=Ñ">Ô">ÐØ×#Ò#Ð$7Ñ8Ô8Ð8Ð8à× Ò Ñ"Ô"Ð"ð -¨QÔ/Ð0ÐÝ1:½3¸tÔ?TÐVZÔVeÑ;fÔ;fÑ1gÔ1gð 	9ð 	9Ñ-ˆCÑ-�/ 9Ø"2°2Ô"6ÐØ.¨s°Q©wÔ7ˆOØ&5 oÐ6IÑ&JÔ&JÐ#Ý 1Ð2IÈ?Ð\`Ô\hÑ iÔ iÐØ"+ )Ð,=Ñ">Ô">ÐØ×#Ò#Ð$7Ñ8Ô8Ð8Ð8å"Ð0@ÐAÑAÔAÐAr1   rz   )r(   r)   r*   r+   r²  r`  r€  r   rM   r   r   rD   r,   r   r   r   rB   rc   rh   ri   s   @r2   rï  rï  î  sá   ø€ € € € € ðð ð )Ø)ðð Ðð
 ˜|ð  ð  ð  ð  ð  ð  ðD  Ø€_¨EÐ2Ñ2Ô2ð 48ð(Bð (Bà˜EœLÔ)¨DÑ0ð(Bð Ð+Ô,ð(Bð 
ð	(Bð (Bð (Bñ 3Ô2ñ  Ôð(Bð (Bð (Bð (Bð (Br1   rï  r.  c                 ó¼   — |                       dd¬¦  «        } |                       |¬¦  «        }d| z
                        |¬¦  «        }t          j        ||z  ¦  «        S )Nr   r   rˆ  )r‰  )rÈ   r,   r   )r{   rI   Úx1Úx2s       r2   Úinverse_sigmoidr¨  I  sU   € Ø	�Š�A˜1ˆÑÔ€AØ	
�Š�SˆÑ	Ô	€BØ
ˆa‰%�Š˜3ˆÑ	Ô	€BÝŒ9�R˜"‘WÑÔÐr1   rÍ  ró  rò  c                 óÌ  ‡— t          |d         ¦  «        t          |¦  «        z  }t          |d         ¦  «        t          |¦  «        z  dz  }|dz   d| dz
  z  z  Šˆfd„t          | dz  dz
  dd¦  «        D ¦   «         }ˆfd„t          d| dz  ¦  «        D ¦   «         }| g|z   t          j        |d         d         ¦  «        gz   |z   |gz   }t          j        |d¦  «        }|S )uK  
    Generates the non-uniform Weighting Function W(n) for bounding box regression.

    Args:
        max_num_bins (int): Max number of the discrete bins.
        up (Tensor): Controls upper bounds of the sequence,
                     where maximum offset is Â±up * H / W.
        reg_scale (float): Controls the curvature of the Weighting Function.
                           Larger values result in flatter weights near the central axis W(max_num_bins/2)=0
                           and steeper weights at both ends.
    Returns:
        Tensor: Sequence of Weighting Function.
    r   rW   r   c                 ó"   •— g | ]}‰|z   d z   ‘ŒS rî   r0   ©r—   r¥   Ústeps     €r2   r²   z&weighting_function.<locals>.<listcomp>a  s$   ø€ ÐSÐSÐS¨!�d˜q‘[�> AÑ%ÐSÐSÐSr1   rX   c                 ó    •— g | ]
}‰|z  d z
  ‘ŒS rî   r0   r«  s     €r2   r²   z&weighting_function.<locals>.<listcomp>b  s!   ø€ ÐIÐIÐI¨�T˜a‘K !‘OÐIÐIÐIr1   N)r  rð   r,   Ú
zeros_liker…   )	rÍ  ró  rò  Úupper_bound1Úupper_bound2Úleft_valuesÚright_valuesr	  r¬  s	           @r2   Úweighting_functionr³  P  sû   ø€ õ �r˜!”u‘:”:¥ I¡¤Ñ.€LÝ�r˜!”u‘:”:¥ I¡¤Ñ.°Ñ2€LØ˜1Ñ ! |°aÑ'7Ñ"8Ñ9€DØSÐSÐSÐS­u°\ÀQÑ5FÈÑ5JÈAÈrÑ/RÔ/RÐSÑSÔS€KØIÐIÐIÐI­U°1°lÀaÑ6GÑ-HÔ-HÐIÑIÔI€LØˆmˆ_˜{Ñ*­eÔ.>¸rÀ!¼uÀT¼{Ñ.KÔ.KÐ-LÑLÈ|Ñ[Ð_kÐ^lÑl€FÝŒY�v˜qÑ!Ô!€FØ€Mr1   Údistancec                 óˆ  — t          |¦  «        }| d         d|z  |d         z   | d         |z  z  z
  }| d         d|z  |d         z   | d         |z  z  z
  }| d         d|z  |d         z   | d         |z  z  z   }| d         d|z  |d         z   | d         |z  z  z   }t          j        ||||gd¦  «        }t          |¦  «        S )aˆ  
    Decodes edge-distances into bounding box coordinates.

    Args:
        points (`torch.Tensor`):
            (batch_size, num_boxes, 4) or (num_boxes, 4) format, representing [x_center, y_center, width, height]
        distance (`torch.Tensor`):
            (batch_size, num_boxes, 4) or (num_boxes, 4), representing distances from the point to the left, top, right, and bottom boundaries.
        reg_scale (`float`):
            Controls the curvature of the Weighting Function.
    Returns:
        `torch.Tensor`: Bounding boxes in (batch_size, num_boxes, 4) or (num_boxes, 4) format, representing [x_center, y_center, width, height]
    r¾   r½   ).rW   r¿   ).r   rX   )r  r,   rÉ   r   )Úpointsr´  rò  Ú
top_left_xÚ
top_left_yÚbottom_right_xÚbottom_right_yÚbboxess           r2   Údistance2bboxr¼  h  sè   € õ �I‘”€IØ˜” 3¨¡?°X¸fÔ5EÑ#EÈ&ÐQWÌ.Ð[dÑJdÑ"eÑe€JØ˜” 3¨¡?°X¸fÔ5EÑ#EÈ&ÐQWÌ.Ð[dÑJdÑ"eÑe€JØ˜F”^ s¨Y¡¸À&Ô9IÑ'IÈfÐU[ÌnÐ_hÑNhÑ&iÑi€NØ˜F”^ s¨Y¡¸À&Ô9IÑ'IÈfÐU[ÌnÐ_hÑNhÑ&iÑi€NåŒ[˜* j°.À.ÐQÐSUÑVÔV€Få# FÑ+Ô+Ð+r1   c                   ó¤   ‡ — e Zd ZdZeeedœZdefˆ fd„Z	e
e	 	 	 	 ddej        dej        dej        d	ee         d
ef
d„¦   «         ¦   «         Zˆ xZS )rû  aW  
    D-FINE Decoder implementing Fine-grained Distribution Refinement (FDR).

    This decoder refines object detection predictions through iterative updates across multiple layers,
    utilizing attention mechanisms, location quality estimators, and distribution refinement techniques
    to improve bounding box accuracy and robustness.
    )r%   r&   r'   rl   c                 ó  •‡— t          ¦   «                              ‰¦  «         ‰j        dk    r‰j        n‰j        ‰j        z   | _        ‰j        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ˆfd„t          ‰j        | j        z
  dz
  ¦  «        D ¦   «         z   ¦  «        | _        t          d‰j
        ‰j
        d‰j        ¦  «        | _        d | _        d | _        t          j        t!          j        ‰j        g¦  «        d¬¦  «        | _        ‰j        | _        ‰j
        | _
        ‰j        | _        t          ‰j        ‰j        dd¦  «        | _        t/          ‰¦  «        | _        ‰j        | _        t          j        t!          j        ‰j        g¦  «        d¬¦  «        | _        t          j        ˆfd	„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )
Nr   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r0   ©râ  rµ  s     €r2   r²   z*Deimv2Decoder.__init__.<locals>.<listcomp>–  s"   ø€ ÐNÐNÐN¨AÕ Ñ'Ô'ÐNÐNÐNr1   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r0   rÀ  rµ  s     €r2   r²   z*Deimv2Decoder.__init__.<locals>.<listcomp>—  s"   ø€ ÐdÐdÐd¨aÕ! &Ñ)Ô)ÐdÐdÐdr1   r   r´   r   F)Úrequires_gradc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r0   )rÓ  rµ  s     €r2   r²   z*Deimv2Decoder.__init__.<locals>.<listcomp>¦  s!   ø€ Ð(aÐ(aÐ(a¸q­°6Ñ):Ô):Ð(aÐ(aÐ(ar1   )rL   rM   Úeval_idxÚdecoder_layersrT  rN   r›   rð   r�   rŽ   rr   Údecoder_activation_functionÚquery_pos_headr  rü  rO   r,   rÆ   rò  rÍ  Úlayer_scalerT   Úpre_bbox_headrË  Úintegralrõ   Únum_headró  r×  rG  r„  s    `€r2   rM   zDeimv2Decoder.__init__�  sÑ  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø+1¬?¸aÒ+?Ð+?˜œ˜ÀVÔEZÐ]cÔ]lÑElˆŒà”~ˆŒÝ”mØNÐNÐNÐNµ°vÔ7LÑ1MÔ1MÐNÑNÔNØdÐdÐdÐdµ5¸Ô9NÐQUÔQ^Ñ9^ÐabÑ9bÑ3cÔ3cÐdÑdÔdñeñ
ô 
ˆŒõ (¨¨6¬>¸6¼>È1ÈfÔNpÑqÔqˆÔð ˆŒØˆÔÝœ¥e¤l°FÔ4DÐ3EÑ&FÔ&FÐV[Ð\Ñ\Ô\ˆŒØ"Ô/ˆÔØ”~ˆŒØ!Ô-ˆÔÝ& vÔ'9¸6Ô;MÈqÐRSÑTÔTˆÔÝ& vÑ.Ô.ˆŒØÔ6ˆŒÝ”,�uœ|¨V¬Y¨KÑ8Ô8ÈÐNÑNÔNˆŒÝœ-Ð(aÐ(aÐ(aÐ(aÅEÈ&ÔJ_ÑD`ÔD`Ð(aÑ(aÔ(aÑbÔbˆŒð 	�ŠÑÔÐÐÐr1   Nr8   r
  ru  r  rJ   c	                 óþ  — |�|}
d}d}d}d}d}dx}}t          | j        | j        | j        ¦  «        }t	          j        |¦  «        }t          | j        ¦  «        D �]“\  }}|                     d¦  «        }|  	                    |¦  «         
                    dd¬¦  «        } ||
f||||||dœ|	¤Ž}
|dk    rKt	          j        |                      |
¦  «        t          |¦  «        z   ¦  «        }|                     ¦   «         }| j        �\ | j        |         |
|z   ¦  «        |z   }t          ||                      ||¦  «        | j        ¦  «        }|}|                     ¦   «         }|
                     ¦   «         }||
fz  }| j        �i| j        s|| j        k    rW | j        |         |
¦  «        }|dk    r||fz  }||fz  } | j        |         ||¦  «        }||fz  }||fz  }||fz  }||fz  }�Œ•t+          j        |¦  «        }| j        �_| j        �Xt+          j        |d	¬
¦  «        }t+          j        |d	¬
¦  «        }t+          j        |d	¬
¦  «        }t+          j        |d	¬
¦  «        }t/          |
|||||¬¦  «        S )a³  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`):
                The query embeddings that are passed into the decoder.
            encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
                Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention
                of the decoder.
            encoder_attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing cross-attention on padding pixel_values of the encoder. Mask values selected
                in `[0, 1]`:
                - 1 for pixels that are real (i.e. **not masked**),
                - 0 for pixels that are padding (i.e. **masked**).
            reference_points (`torch.FloatTensor` of shape `(batch_size, num_queries, 4)` is `as_two_stage` else `(batch_size, num_queries, 2)` or , *optional*):
                Reference point in range `[0, 1]`, top-left (0,0), bottom-right (1, 1), including padding area.
            spatial_shapes (`torch.FloatTensor` of shape `(num_feature_levels, 2)`):
                Spatial shapes of the feature maps.
            level_start_index (`torch.LongTensor` of shape `(num_feature_levels)`, *optional*):
                Indexes for the start of each feature level. In range `[0, sequence_length]`.
        Nr0   r   rW   iöÿÿÿé
   rˆ  )rj  r
  r  r  r8   ré  r   rƒ   )r   r    r!   r"   r#   r$   )r³  rÍ  ró  rò  r  r†   r¤   r�   rË   rÇ  rÈ   rÉ  r¨  Údetachr  r¼  rÊ  rü  rY  rÄ  r×  r,   rÉ   r   )rS   r8   r
  ru  r  Úlevel_start_indexr  ré  Úmemory_maskr  r%   Úintermediater"   r!   r#   r$   Úoutput_detachÚpred_corners_undetachrÏ  Úref_points_detachr¥   Údecoder_layerÚref_points_inputÚquery_pos_embedÚnew_reference_pointsÚref_points_initialrÎ  Úinter_ref_bboxrÙ  s                                r2   rc   zDeimv2Decoder.forward«  s  € ðB Ð$Ø)ˆMð ˆØ(*Ð%Ø ÐØ)+Ð&Ø#%Ð à01Ð1ˆÐ-å$ TÔ%6¸¼ÀÄÑPÔPˆÝœIÐ&6Ñ7Ô7Ðå )¨$¬+Ñ 6Ô 6ð .	Bñ .	BÑˆAˆ}Ø0×:Ò:¸1Ñ=Ô=ÐØ"×1Ò1Ð2CÑDÔD×JÒJÈsÐXZÐJÑ[Ô[ˆOà)˜MØð	à$3Ø!1Ø-Ø$7Ø&;Ø'=ð	ð 	ð ð	ð 	ˆMð �AŠvˆvå'(¤yØ×&Ò& }Ñ5Ô5½ÐHYÑ8ZÔ8ZÑZñ(ô (Ð$ð &:×%@Ò%@Ñ%BÔ%BÐ"ð ŒÐ*Ø1˜tœ¨qÔ1°-À-Ñ2OÑPÔPÐShÑh�Ý!.Ø&¨¯ª°lÀGÑ(LÔ(LÈdÌnñ"ô "�ð )5Ð%Ø$2×$9Ò$9Ñ$;Ô$;Ð!à)×0Ò0Ñ2Ô2ˆMà˜]Ð,Ñ,ˆLàÔÐ+°´Ð+À!ÀtÄ}ÒBTÐBTØ,˜Ô)¨!Ô,¨]Ñ;Ô;�à˜’6�6Ø'¨F¨9Ñ4Ð'Ø1Ð6JÐ5LÑLÐ1à+˜œ¨Ô+¨F°LÑAÔA�Ø#¨ yÑ0Ð#Ø-°.Ð1BÑBÐ-Ø(Ð-?Ð,AÑAÐ(Ø.°<°/ÑAÐ.ùõ ”{ <Ñ0Ô0ˆØÔÐ'¨D¬OÐ,GÝ"'¤+Ð.AÀqÐ"IÑ"IÔ"IÐÝ-2¬[Ð9WÐ]^Ð-_Ñ-_Ô-_Ð*Ý',¤{Ð3KÐQRÐ'SÑ'SÔ'SÐ$Ý,1¬KÐ8UÐ[\Ð,]Ñ,]Ô,]Ð)å"Ø+Ø'3Ø 3Ø*GØ+IØ%=ð
ñ 
ô 
ð 	
r1   ©NNNN)r(   r)   r*   r+   râ  r`  rè   r€  r   rM   r   r   r,   r   r   r   r   rc   rh   ri   s   @r2   rû  rû  �  sî   ø€ € € € € ðð ð ,Ø)Ø?ðð Ðð˜|ð ð ð ð ð ð ð6  Øð Ø Ø#Øðm
ð m
à$œ|ðm
ð  œ,ðm
ð ”|ð	m
ð Ð+Ô,ðm
ð 
ðm
ð m
ð m
ñ „_ñ  Ôðm
ð m
ð m
ð m
ð m
r1   rû  éd   r½   r-  c                 ó¶  ‡— |dk    rdS d„ | D ¦   «         }| d         d         j         }t          |¦  «        }	|	dk    rdS ||	z  Š‰dk    rdn‰Št          |¦  «        }
t          j        |
|	g|t          j        |¬¦  «        }t          j        |
|	dg|¬¦  «        }t          j        |
|	gt          j        |¬¦  «        }t          |
¦  «        D ]C}||         }|dk    r3| |         d         ||d	|…f<   | |         d
         ||d	|…f<   d||d	|…f<   ŒD| 	                    dd‰z  g¦  «        }| 	                    dd‰z  dg¦  «        }| 	                    dd‰z  g¦  «        }t          j        |
|	dz  dg|¬¦  «        }d|d	d	…|	d	…f<   | 	                    d‰dg¦  «        }d|z
  }| 
                    d¦  «        |z  }t          j        |¦  «        d	d	…df         }t          j        |ˆfd„|D ¦   «         ¦  «        }t          |	dz  ‰z  ¦  «        }|dk    r]t          j        |t          j        ¬¦  «        |dz  k     }t          j        |d||j        ¬¦  «        }t          j        ||z  ||¦  «        }|dk    r¹t'          |¦  «        }t          j	        |ddd	…f         dz  g d¢¦  «        |z  }t          j        |dd¦  «        dz  dz
  }t          j        |¦  «        }|dz   |z  |d|z
  z  z   }||z  }|||z  z  }|                     dd¬¦  «         t+          |¦  «        }t-          |¦  «        } ||¦  «        }||z   }t          j        ||gdt          j        |¬¦  «        }t          j         ||d	…d	|…f<   t          ‰¦  «        D ]A}|	dz  |z  }|	dz  |dz   z  }t          j         |||…d	|…f<   t          j         |||…||…f<   ŒB|‰||gdœ}||||fS )a~  
    Creates a contrastive denoising training group using ground-truth samples. It adds noise to labels and boxes.

    Args:
        targets (`list[dict]`):
            The target objects, each containing 'class_labels' and 'boxes' for objects in an image.
        num_classes (`int`):
            Total number of classes in the dataset.
        num_queries (`int`):
            Number of query slots in the transformer.
        class_embed (`callable`):
            A function or a model layer to embed class labels.
        num_denoising_queries (`int`, *optional*, defaults to 100):
            Number of denoising queries.
        label_noise_ratio (`float`, *optional*, defaults to 0.5):
            Ratio of noise applied to labels.
        box_noise_scale (`float`, *optional*, defaults to 1.0):
            Scale of noise applied to bounding boxes.
    Returns:
        `tuple` comprising various elements:
        - **input_query_class** (`torch.FloatTensor`) --
          Class queries with applied label noise.
        - **input_query_bbox** (`torch.FloatTensor`) --
          Bounding box queries with applied box noise.
        - **attn_mask** (`torch.FloatTensor`) --
           Attention mask for separating denoising and reconstruction queries.
        - **denoising_meta_values** (`dict`) --
          Metadata including denoising positive indices, number of groups, and split sizes.
    r   rÛ  c                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS )Úclass_labels)r6  )r—   Úts     r2   r²   z<get_contrastive_denoising_training_group.<locals>.<listcomp>G  s%   € ÐAÐAÐA°A�˜Q˜~Ô.Ñ/Ô/ÐAÐAÐAr1   rß  r   r”  r´   r»   NÚboxesrW   rX   c                 ó   •— g | ]}|‰z  ‘ŒS r0   r0   )r—   rò   Únum_groups_denoising_queriess     €r2   r²   z<get_contrastive_denoising_training_group.<locals>.<listcomp>j  s   ø€ Ð[Ð[Ð[ÀA˜qÐ#?Ñ?Ð[Ð[Ð[r1   rô   r½   .)r   r   rW   rô  r-  rO  rˆ  )Údn_positive_idxÚdn_num_groupÚdn_num_split)r¼   rŠ  r6  r,   ÚfullÚint32r·   ru  rð   r
  ÚsqueezeÚnonzerorÂ   r   Ú	rand_likerg   Úrandint_liker[   Úwherer
   Úclip_r   r¨  Úinf)ÚtargetsÚnum_classesr×   rü  Únum_denoising_queriesÚlabel_noise_ratioÚbox_noise_scaleÚnum_ground_truthsr¼   Ú
max_gt_numrÔ   Úinput_query_classÚinput_query_bboxÚpad_gt_maskr¥   Únum_gtÚnegative_gt_maskÚpositive_gt_maskÚdenoise_positive_idxÚmaskÚ	new_labelÚ
known_bboxÚdiffÚ	rand_signÚ	rand_partÚtarget_sizeÚ	attn_maskÚidx_block_startÚidx_block_endr?   rã  s                                 @r2   Ú(get_contrastive_denoising_training_groupr    sæ  ø€ ðN  Ò!Ð!Ø%Ð%àAÐA¸ÐAÑAÔAÐØ�QŒZ˜Ô'Ô.€FåÐ&Ñ'Ô'€JØ�Q‚€Ø%Ð%à#8¸JÑ#FÐ Ø(DÈÒ(IÐ(I 1 1ÐOkÐ åÐ&Ñ'Ô'€Jåœ
 J°
Ð#;¸[ÕPUÔP[ÐdjÐkÑkÔkÐÝ”{ J°
¸AÐ#>ÀvÐNÑNÔNÐÝ”+˜z¨:Ð6½e¼jÐQWÐXÑXÔX€Kå�:ÑÔð (ð (ˆØ" 1Ô%ˆØ�AŠ:ˆ:Ø,3°A¬J°~Ô,FÐ˜a  & ˜jÑ)Ø+2°1¬:°gÔ+>Ð˜Q   ˜ZÑ(Ø&'ˆK˜˜7˜F˜7˜
Ñ#øà)×.Ò.°°1Ð7SÑ3SÐ/TÑUÔUÐØ'×,Ò,¨a°Ð5QÑ1QÐSTÐ-UÑVÔVÐØ×"Ò" A qÐ+GÑ'GÐ#HÑIÔI€Kå”{ J°
¸Q±ÀÐ#BÈ6ÐRÑRÔRÐØ'(Ð�Q�Q�Q˜
˜˜�^Ñ$Ø'×,Ò,¨aÐ1MÈqÐ-QÑRÔRÐØÐ+Ñ+Ðà'×/Ò/°Ñ3Ô3°kÑAÐÝ œ=Ð)9Ñ:Ô:¸1¸1¸1¸a¸4Ô@ÐÝ œ;ØÐ[Ð[Ð[Ð[ÐIZÐ[Ñ[Ô[ñô Ðõ & j°1¡nÐ7SÑ&SÑTÔTÐà˜1ÒÐÝŒÐ0½¼ÐDÑDÔDÐHYÐ\_ÑH_Ò`ˆåÔ& t¨Q°ÐCTÔCZÐ[Ñ[Ô[ˆ	Ý!œK¨¨{Ñ(:¸IÐGXÑYÔYÐà˜ÒÐÝ-Ð.>Ñ?Ô?ˆ
ÝŒzÐ*¨3°°°¨7Ô3°cÑ9¸9¸9¸9ÑEÔEÈÑWˆÝÔ&Ð'7¸¸AÑ>Ô>ÀÑDÀsÑJˆ	Ý”OÐ$4Ñ5Ô5ˆ	Ø ‘_Ð(8Ñ8¸9ÈÐL\ÑH\Ñ;]Ñ]ˆ	Ø�YÑˆ	Ø�i $Ñ&Ñ&ˆ
Ø×Ò˜S cÐÑ*Ô*Ð*Ý3°JÑ?Ô?ÐÝ*Ð+;Ñ<Ô<Ðà#˜Ð$5Ñ6Ô6Ðà'¨+Ñ5€KÝ”
˜K¨Ð5°qÅÄÐTZÐ[Ñ[Ô[€IåAFÄÀ
€IÐ#Ð$Ð$Ð&<Ð'<Ð&<Ð<Ñ=õ Ð/Ñ0Ô0ð cð cˆØ$ q™.¨1Ñ,ˆØ" Q™¨!¨a©%Ñ0ˆÝFKÄiÀZˆ	�/ -Ð/Ð1A°/Ð1AÐAÑBÝY^ÔYbÐXbˆ	�/ -Ð/°Ð?TÐ1TÐTÑUÐUð 0Ø4Ø.°Ð<ðð Ðð Ð.°	Ð;PÐPÐPr1   z|
    RT-DETR Model (consisting of a backbone and encoder-decoder) outputting raw hidden states without any head on top.
    c                   óÊ  ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Ze ed¬¦  «        de	j
        fdeeeef         d	f         d
ede	j        ez  de	j        dee	j        e	j        f         f
d„¦   «         ¦   «         Zddde	j
        fd„Zee	 	 	 	 dde	j        de	j        dz  de	j        dz  de	j        dz  dee         dz  dee         dee	j                 ez  fd„¦   «         ¦   «         Zˆ xZS )r  rl   c           
      óð  •— t          ¦   «                              |¦  «         t          |j        dd ¦  «        dk    }|rt	          |¦  «        nt          |¦  «        | _        |j        dk    rt          |¦  «        nt          |¬¦  «        | _
        |j        dk    r.t          j        |j        dz   |j        |j        ¬¦  «        | _        |j        r$t          j        |j        |j        ¦  «        | _        t          j        t          j        |j        |j        ¦  «        t          j        |j        |j        ¬¦  «        ¦  «        | _        t          j        |j        |j        ¦  «        | _        t5          |j        |j        d	d
¦  «        | _        |j        r(|                      | j        ¬¦  «        \  | _        | _         tC          |j"        ¦  «        }g }|j"        d         }tG          |¦  «        D ]V}| $                    |j%        |j"        d         k    rt          j&        ¦   «         ntO          |||j        dd¦  «        ¦  «         ŒWtG          |j(        |z
  ¦  «        D ]V}| $                    |j%        |j"        d         k    rt          j&        ¦   «         ntO          |||j        d
d¦  «        ¦  «         ŒWt          j)        |¦  «        | _*        tW          |¦  «        | _,        |  -                    ¦   «          d S )NÚ
model_typeÚ
dinov3_vitr@  rä  r   r   )Úpadding_idxrz  r´   r   rô   rX   rW   ).rL   rM   ÚgetattrrR  rO  r=  Úconv_encoderrA  rð  rï  Úencoderr  rN   Ú	Embeddingrþ  rr   rø  r  r×   r÷  Ú
Sequentialrq   r}  r~  Ú
enc_outputr  rŽ   Úenc_bbox_headÚanchor_image_sizeÚgenerate_anchorsr[   ÚanchorsÚ
valid_maskr6  Údecoder_in_channelsrð   rÎ   rT   r  r  r÷   r›   Údecoder_input_projrû  ÚdecoderrG  )rS   rl   Ú	is_dinov3Únum_backbone_outsr  r  rÕ   rU   s          €r2   rM   zDeimv2Model.__init__ž  sÒ  ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜FÔ2°LÀ$ÑGÔGÈ<ÒWˆ	Ø?HÐgÕ3°FÑ;Ô;Ð;ÕN_Ð`fÑNgÔNgˆÔà)/Ô)<ÀÒ)FÐ)FÕ˜fÑ%Ô%Ð%ÕL_ÐgmÐLnÑLnÔLnð 	Œð Ô !Ò#Ð#Ý)+¬ØÔ! AÑ% v¤~À6ÔCTð*ñ *ô *ˆDÔ&ð Ô%ð 	UÝ$&¤L°Ô1CÀVÄ^Ñ$TÔ$TˆDÔ!åœ-ÝŒI�f”n f¤nÑ5Ô5ÝŒL˜œ¨VÔ-BÐCÑCÔCñ
ô 
ˆŒõ !œi¨¬¸Ô8IÑJÔJˆÔÝ& v¤~°v´~ÀqÈ!ÑLÔLˆÔàÔ#ð 	TØ,0×,AÒ,AÈÌ
Ð,AÑ,SÔ,SÑ)ˆDŒL˜$œ/å Ô :Ñ;Ô;ÐØÐØÔ0°Ô4ˆÝÐ(Ñ)Ô)ð 	ð 	ˆAØ×%Ò%àÔ%¨Ô)CÀBÔ)GÒGÐGõ ”‘”�å(¨°¸f¼nÈaÐQRÑSÔSñô ð ð õ
 �vÔ0Ð3DÑDÑEÔEð 	ð 	ˆAØ×%Ò%àÔ%¨Ô)CÀBÔ)GÒGÐGõ ”‘”�å(¨°¸f¼nÈaÐQRÑSÔSñô ð ð õ
 #%¤-Ð0BÑ"CÔ"CˆÔÝ$ VÑ,Ô,ˆŒà�ŠÑÔÐÐÐr1   c                 óh   — | j                              ¦   «         D ]}|                     d¦  «         Œd S )NF©rH  Ú
parametersÚrequires_grad_©rS   Úparams     r2   Úfreeze_backbonezDeimv2Model.freeze_backboneÍ  s@   € Ø”]×-Ò-Ñ/Ô/ð 	(ð 	(ˆEØ× Ò  Ñ'Ô'Ð'Ð'ð	(ð 	(r1   c                 óh   — | j                              ¦   «         D ]}|                     d¦  «         Œd S )NTr  r"  s     r2   Úunfreeze_backbonezDeimv2Model.unfreeze_backboneÑ  s@   € Ø”]×-Ò-Ñ/Ô/ð 	'ð 	'ˆEØ× Ò  Ñ&Ô&Ð&Ð&ð	'ð 	'r1   r©  rª  Úcpur  .Ú	grid_sizer¼   r[   rJ   c           	      óž  — g }t          | ¦  «        D �]\  }\  }}t          j        t          j        ||¬¦  «                             |¦  «        t          j        ||¬¦  «                             |¦  «        d¬¦  «        \  }}	t          j        |	|gd¦  «        }
|
                     d¦  «        dz   }
|
dxx         |z  cc<   |
dxx         |z  cc<   t          j        |
¦  «        |z  d	|z  z  }|                     t          j	        |
|gd¦  «         
                    d||z  d
¦  «        ¦  «         �Œ!d}t          j	        |d¦  «        }||k    |d|z
  k     z                       dd¬¦  «        }t          j        |d|z
  z  ¦  «        }t          j        ||t          j        t          j        |¦  «        j        ||¬¦  «        ¦  «        }||fS )N)Úendr¼   r•  r–  rX   r   r½   r¾   r¿   rô  r´   g{®Gáz„?r   TrY   r”  )r¤   r,   r™  rÊ   r\   rÉ   rË   Ú	ones_likerÎ   rÐ   rÃ   rŒ  r   rí  rÆ   r�  rŠ  )r  r(  r¼   r[   r  Úlevelr°   r±   Úgrid_yÚgrid_xÚgrid_xyÚwhrI   r  s                 r2   Ú_cached_generate_anchorsz$Deimv2Model._cached_generate_anchorsÕ  sÔ  € ð ˆÝ&/°Ñ&?Ô&?ð 	[ñ 	[Ñ"ˆE‘?�F˜EÝ"œ^Ý” °Ð7Ñ7Ô7×:Ò:¸5ÑAÔAÝ” ¨vÐ6Ñ6Ô6×9Ò9¸%Ñ@Ô@Øðñ ô ‰NˆF�Fõ
 ”k 6¨6Ð"2°BÑ7Ô7ˆGØ×'Ò'¨Ñ*Ô*¨SÑ0ˆGØ�FˆOˆOŒO˜uÑ$ˆOˆO‰OØ�FˆOˆOŒO˜vÑ%ˆOˆO‰OÝ” Ñ)Ô)¨IÑ5¸¸e¹ÑDˆBØ�NŠN�5œ<¨°"¨°rÑ:Ô:×BÒBÀ2ÀvÐPUÁ~ÐWXÑYÔYÑZÔZÐZÑZàˆÝ”,˜w¨Ñ*Ô*ˆØ ’}¨°1°s±7Ò):Ñ;×@Ò@ÀÈTÐ@ÑRÔRˆ
Ý”)˜G q¨7¡{Ñ3Ñ4Ô4ˆÝ”+˜j¨'µ5´<ÅÄÈEÑ@RÔ@RÔ@VÐ^cÐlrÐ3sÑ3sÔ3sÑtÔtˆà˜
Ð"Ð"r1   Ngš™™™™™©?c                 óh   ‡ — |€ˆ fd„‰ j         j        D ¦   «         }‰                      ||||¦  «        S )Nc              3   ó    •K  — | ]H}t          ‰j        j        d          |z  ¦  «        t          ‰j        j        d         |z  ¦  «        fV — ŒIdS )r   r   N)rŒ   rl   r  )r—   ÚsrS   s     €r2   rš   z/Deimv2Model.generate_anchors.<locals>.<genexpr>õ  sl   øè è € ð ð àõ �T”[Ô2°1Ô5¸Ñ9Ñ:Ô:½CÀÄÔ@]Ð^_Ô@`ÐcdÑ@dÑ<eÔ<eÐfðð ð ð ð ð r1   )rl   r‹  r1  )rS   r  r(  r¼   r[   s   `    r2   r  zDeimv2Model.generate_anchorsó  sS   ø€ ØÐ!ðð ð ð àœÔ1ðñ ô ˆNð ×,Ò,¨^¸YÈÐPUÑVÔVÐVr1   rÈ  Ú
pixel_maskÚencoder_outputsru  Úlabelsr  c                 ó¦  — |€|€t          d¦  «        ‚|€D|j        \  }}}	}
|j        }|€t          j        ||	|
f|¬¦  «        }|                      |¦  «        }n|j        d         }|j        }|} | j        |fi |¤Ž}g }t          |j        ¦  «        D ].\  }}| 	                     | j
        |         |¦  «        ¦  «         Œ/| j        j        t          |¦  «        k    rŸ| 	                     | j
        t          |¦  «                 |j        d         ¦  «        ¦  «         t          t          |¦  «        | j        j        ¦  «        D ]6}| 	                     | j
        |         |j        d         ¦  «        ¦  «         Œ7g }g }t          j        t          |¦  «        df|t          j        ¬¦  «        }t          |¦  «        D ]z\  }}|j        dd…         \  }	}
|	||df<   |
||d	f<   | 	                    |	|
f¦  «         |                     d¦  «                             d	d¦  «        }| 	                    |¦  «         Œ{t          j        |d	¦  «        }t          j        |                     d
¦  «        |                     d	¦  «                             d¦  «        dd…         f¦  «        }| j        re| j        j        dk    rU|�St3          || j        j        | j        j        | j        | j        j        | j        j        | j        j        ¬¦  «        \  }}}}nd\  }}}}t          |¦  «        }|j        }|j        }| j        s| j        j         €+tC          |¦  «        }|  "                    |||¬¦  «        \  }}n:| j#        | j$        }}| %                    ||¦  «        | %                    ||¦  «        }}| %                    |j        ¦  «        |z  }|  &                    |¦  «        }|  '                    |¦  «        }|  (                    |¦  «        |z   } t          j)        | *                    d¦  «        j+        | j        j        d	¬¦  «        \  }!}"|  ,                    d	|" -                    d¦  «         .                    d	d	| j        d         ¦  «        ¬¦  «        }#t_          j0        |#¦  «        }$|�t          j1        ||#gd	¦  «        }#| ,                    d	|" -                    d¦  «         .                    d	d	|j        d         ¦  «        ¬¦  «        }%| j        j2        r| j3         4                    |d	d	g¦  «        }&n^| ,                    d	|" -                    d¦  «         .                    d	d	|j        d         ¦  «        ¬¦  «        }&|& 5                    ¦   «         }&|�t          j1        ||&gd	¦  «        }&|# 5                    ¦   «         }' | j6        d"|&|||'|||dœ|¤Ž}(to          d"i d|(j8        “d|(j9        “d|(j:        “d|(j;        “d|(j<        “d|(j=        “d|(j>        “d|(j?        “d|(j@        “d|j        “d|j>        “d|j?        “d|'“d|%“d|$“d|“d | “d!|“ŽS )#av  
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing the flattened feature map (output of the backbone + projection layer), you
            can choose to directly pass a flattened representation of an image.
        labels (`list[Dict]` of len `(batch_size,)`, *optional*):
            Labels for computing the bipartite matching loss. List of dicts, each dictionary containing at least the
            following 2 keys: 'class_labels' and 'boxes' (the class labels and bounding boxes of an image in the batch
            respectively). The class labels themselves should be a `torch.LongTensor` of len `(number of bounding boxes
            in the image,)` and the boxes a `torch.FloatTensor` of shape `(number of bounding boxes in the image, 4)`.

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, Deimv2Model
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

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

        >>> image_processor = AutoImageProcessor.from_pretrained("PekingU/Deimv2_r50vd")
        >>> model = Deimv2Model.from_pretrained("PekingU/Deimv2_r50vd")

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

        >>> outputs = model(**inputs)

        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 300, 256]
        ```Nz8You have to specify either pixel_values or inputs_embedsr»   r   rX   rW   )r¼   r[   rµ   r   rî   )rð  rñ  r×   rü  rò  ró  rô  rÛ  rƒ   )r„   Úindex)ru  r8   ré  r
  r  r  rÏ  r   r    r!   r"   r#   r$   r5   r6   r'   r7   r8   r9   r:   r;   r<   r=   r>   r?   r0   )Ar	  re   r¼   r,   rP   r  r  r¤   rC   rÎ   r  rl   r÷   r6  rð   ÚemptyÚlongrÁ   rÍ   r…   Ú	new_zerosÚprodÚcumsumrY  r  r  rþ  r×   rø  ró  rô  r[   r  r/   r  r  r  r\   r  r  r  rÛ  rŠ  r	  ÚgatherrË   rÌ   r  r†   rÐ   r  r÷  r
  rÎ  r  r4   r   r    r!   r"   r#   r$   r%   r&   r'   ))rS   rÈ  r5  r6  ru  r7  r  rÔ   Únum_channelsr°   r±   r¼   Ú
proj_featsÚsourcesr,  Úsourcer¥   Úsource_flattenr  r  rÏ  Údenoising_classÚdenoising_bbox_unactr  r?   r[   Úspatial_shapes_tupler  r  ÚmemoryÚoutput_memoryr=   r>   rÕ   Útopk_indÚreference_points_unactr<   r;   Útargetr:   Údecoder_outputss)                                            r2   rc   zDeimv2Model.forwardû  sW  € ð\ Ð MÐ$9ÝÐWÑXÔXÐXð Ð Ø6BÔ6HÑ3ˆJ˜ f¨eØ!Ô(ˆFØÐ!Ý"œZ¨*°f¸eÐ)DÈfÐUÑUÔU�
ð ×*Ò*¨<Ñ8Ô8ˆJˆJà&Ô,¨QÔ/ˆJØ"Ô)ˆFØ&ˆJà&˜$œ,Øð
ð 
àð
ð 
ˆð ˆÝ& Ô'CÑDÔDð 	Cð 	C‰MˆE�6Ø�NŠNÐ9˜4Ô2°5Ô9¸&ÑAÔAÑBÔBÐBÐBð Œ;Ô)­C°©L¬LÒ8Ð8Ø�NŠNÐ@˜4Ô2µ3°w±<´<Ô@ÀÔA]Ð^`ÔAaÑbÔbÑcÔcÐcÝ�3˜w™<œ<¨¬Ô)GÑHÔHð ]ð ]�Ø—’Ð9˜tÔ6°qÔ9¸/Ô:VÐWYÔ:ZÑ[Ô[Ñ\Ô\Ð\Ð\ð ˆØ ÐÝœ¥c¨'¡l¤l°AÐ%6¸vÍUÌZÐXÑXÔXˆÝ& wÑ/Ô/ð 	*ð 	*‰MˆE�6Ø"œL¨¨¨Ô-‰MˆF�EØ'-ˆN˜5 !˜8Ñ$Ø',ˆN˜5 !˜8Ñ$Ø×&Ò&¨° Ñ7Ô7Ð7Ø—^’^ AÑ&Ô&×0Ò0°°AÑ6Ô6ˆFØ×!Ò! &Ñ)Ô)Ð)Ð)Ýœ >°1Ñ5Ô5ˆÝ!œI ~×'?Ò'?ÀÑ'EÔ'EÀ~×GZÒGZÐ[\ÑG]ÔG]×GdÒGdÐefÑGgÔGgÐhkÐikÐhkÔGlÐ&mÑnÔnÐð Œ=ð 	r˜Tœ[Ô6¸Ò:Ð:¸vÐ?Qõ 9ØØ œKÔ2Ø œKÔ3Ø Ô6Ø&*¤kÔ&?Ø"&¤+Ô"?Ø $¤Ô ;ðñ ô ñØØ$ØØ%Ð%ð \rÑXˆOÐ1°>ÐCXå˜Ñ(Ô(ˆ
ØÔ&ˆØÔ$ˆð Œ=ð 	Z˜DœKÔ9ÐAõ $)Ð)<Ñ#=Ô#=Ð Ø"&×"7Ò"7Ð8LÐU[ÐchÐ"7Ñ"iÔ"iÑˆG�Z�Zà"&¤,°´�ZˆGØ")§*¢*¨V°UÑ";Ô";¸Z¿]º]È6ÐSXÑ=YÔ=Y�ZˆGð —’˜~Ô3Ñ4Ô4°~ÑEˆàŸš¨Ñ/Ô/ˆà ×/Ò/°Ñ>Ô>ÐØ#'×#5Ò#5°mÑ#DÔ#DÀwÑ#NÐ å”jÐ!2×!6Ò!6°rÑ!:Ô!:Ô!AÀ4Ä;ÔCZÐ`aÐbÑbÔb‰ˆˆ8à!9×!@Ò!@Ø˜×+Ò+¨BÑ/Ô/×6Ò6°q¸!Ð=UÔ=[Ð\^Ô=_Ñ`Ô`ð "Añ "
ô "
Ðõ œ)Ð$:Ñ;Ô;ˆØÐ+Ý%*¤\Ð3GÐI_Ð2`ÐbcÑ%dÔ%dÐ"à+×2Ò2Ø˜×+Ò+¨BÑ/Ô/×6Ò6°q¸!Ð=NÔ=TÐUWÔ=XÑYÔYð 3ñ 
ô 
ˆð
 Œ;Ô*ð 	%ØÔ*×/Ò/°¸QÀÐ0BÑCÔCˆFˆFà"×)Ò)¨a°x×7IÒ7IÈ"Ñ7MÔ7M×7TÒ7TÐUVÐXYÐ[hÔ[nÐoqÔ[rÑ7sÔ7sÐ)ÑtÔtˆFØ—]’]‘_”_ˆFàÐ&Ý”\ ?°FÐ";¸QÑ?Ô?ˆFà 6× =Ò =Ñ ?Ô ?Ðð '˜$œ,ð 	
Ø Ø"0Ø#1Ø2Ø)Ø 3Ø/ð	
ð 	
ð ð	
ð 	
ˆõ !ð 
ð 
ð 
Ø-Ô?Ð?ð
à'6Ô'QÐ'Qð
ð !0Ô CÐ Cð
ð +:Ô*WÐ*Wð	
ð
 ,;Ô+YÐ+Yð
ð &5Ô%MÐ%Mð
ð #2Ô"?Ð"?ð
ð  /Ô9Ð9ð
ð -Ô=Ð=ð
ð '6Ô&BÐ&Bð
ð #2Ô"?Ð"?ð
ð  /Ô9Ð9ð
ð #8Ð"7ð
ð ,˜Oð
ð ,˜Oð
ð  0Ð/ð!
ð" &>Ð%=ð#
ð$ #8Ð"7ð%
ð 	
r1   rÛ  )r(   r)   r*   r   rM   r$  r&  r°  r   r,   r]   r/   rŒ   rg   r¼   r§   r[   r   r1  r  r   r   r-   Ú
LongTensorrD   r@   r   r   r4   rc   rh   ri   s   @r2   r  r  ˜  só  ø€ € € € € ð-˜|ð -ð -ð -ð -ð -ð -ð^(ð (ð (ð'ð 'ð 'ð Ø(Ð(°Ð4Ñ4Ô4ð &+Ø"œ]ð	#ð #Ø˜e C¨ Hœo¨sÐ2Ô3ð#àð#ð ”˜sÑ"ð#ð Œ{ð	#ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð#ð #ð #ñ 5Ô4ñ „\ð#ð8 /3¸dÈ5ÐX]ÔXeð Wð Wð Wð Wð Øð /3Ø48Ø26Ø$(ð~
ð ~
àÔ'ð~
ð Ô$ tÑ+ð~
ð Ô*¨TÑ1ð	~
ð
 Ô(¨4Ñ/ð~
ð �T”
˜TÑ!ð~
ð Ð+Ô,ð~
ð 
ˆuÔ Ô	!Ð$5Ñ	5ð~
ð ~
ð ~
ñ Ôñ „^ð~
ð ~
ð ~
ð ~
ð ~
r1   r  z6
    Output type of [`Deimv2ForObjectDetection`].
    c                   óü  — e Zd ZU dZdZej        dz  ed<   dZe	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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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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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	dz  ed<   dS )ÚDeimv2ObjectDetectionOutputa  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` are provided)):
        Total loss as a linear combination of a negative log-likelihood (cross-entropy) for class prediction and a
        bounding box loss. The latter is defined as a linear combination of the L1 loss and the generalized
        scale-invariant IoU loss.
    loss_dict (`Dict`, *optional*):
        A dictionary containing the individual losses. Useful for logging.
    logits (`torch.FloatTensor` of shape `(batch_size, num_queries, num_classes + 1)`):
        Classification logits (including no-object) for all queries.
    pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_queries, 4)`):
        Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height). These
        values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding
        possible padding). You can use [`~Deimv2ImageProcessor.post_process_object_detection`] to retrieve the
        unnormalized (absolute) bounding boxes.
    auxiliary_outputs (`list[Dict]`, *optional*):
        Optional, only returned when auxiliary losses are activated (i.e. `config.auxiliary_loss` is set to `True`)
        and labels are provided. It is a list of dictionaries containing the two above keys (`logits` and
        `pred_boxes`) for each decoder layer.
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`):
        Sequence of hidden-states at the output of the last layer of the decoder of the model.
    intermediate_hidden_states (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, hidden_size)`):
        Stacked intermediate hidden states (output of each layer of the decoder).
    intermediate_logits (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, config.num_labels)`):
        Stacked intermediate logits (logits of each layer of the decoder).
    intermediate_reference_points (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked intermediate reference points (reference points of each layer of the decoder).
    intermediate_predicted_corners (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked intermediate predicted corners (predicted corners of each layer of the decoder).
    initial_reference_points (`torch.FloatTensor` of shape `(batch_size, config.decoder_layers, num_queries, 4)`):
        Stacked initial reference points (initial reference points of each layer of the decoder).
    init_reference_points (`torch.FloatTensor` of shape  `(batch_size, num_queries, 4)`):
        Initial reference points sent through the Transformer decoder.
    enc_topk_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_labels)`, *optional*, returned when `config.with_box_refine=True` and `config.two_stage=True`):
        Logits of predicted bounding boxes coordinates in the encoder.
    enc_topk_bboxes (`torch.FloatTensor` of shape `(batch_size, sequence_length, 4)`, *optional*, returned when `config.with_box_refine=True` and `config.two_stage=True`):
        Logits of predicted bounding boxes coordinates in the encoder.
    enc_outputs_class (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_labels)`, *optional*, returned when `config.with_box_refine=True` and `config.two_stage=True`):
        Predicted bounding boxes scores where the top `config.two_stage_num_proposals` scoring bounding boxes are
        picked as region proposals in the first stage. Output of bounding box binary classification (i.e.
        foreground and background).
    enc_outputs_coord_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, 4)`, *optional*, returned when `config.with_box_refine=True` and `config.two_stage=True`):
        Logits of predicted bounding boxes coordinates in the first stage.
    denoising_meta_values (`dict`):
        Extra dictionary for the denoising related values
    NÚlossÚ	loss_dictÚlogitsÚ
pred_boxesÚauxiliary_outputsr   r    r!   r"   r#   r$   r5   r6   r'   r7   r8   r9   r:   r;   r<   r=   r>   r?   )!r(   r)   r*   r+   rQ  r,   r-   r.   rR  r@   rS  rT  rU  rD   r   r    r!   r"   r#   r$   r5   r/   r6   r'   r7   r8   r9   r:   r;   r<   r=   r>   r?   r0   r1   r2   rP  rP  ¾  so  € € € € € € ð,ð ,ð\ &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø!€Iˆt�d‰{Ð!Ð!Ñ!Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø+/Ð�t˜D”z DÑ(Ð/Ð/Ñ/Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø;?Ð Ô 1°DÑ 8Ð?Ð?Ñ?Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ø>BÐ! 5Ô#4°tÑ#;ÐBÐBÑBØ?CÐ" EÔ$5¸Ñ$<ÐCÐCÑCØ9=Ð˜eÔ/°$Ñ6Ð=Ð=Ñ=Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ø8<Ð�e˜EÔ-Ô.°Ñ5Ð<Ð<Ñ<Ø:>Ð˜uÔ0°4Ñ7Ð>Ð>Ñ>Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø9=Ð˜eÔ/°$Ñ6Ð=Ð=Ñ=Ø)-Ð˜4 $™;Ð-Ð-Ñ-Ð-Ð-r1   rP  zž
    RT-DETR Model (consisting of a backbone and encoder-decoder) outputting bounding boxes and logits to be further
    decoded into scores and classes.
    c                   ó  ‡ — e Zd ZdZdddddœZdefˆ fd„Zd	„ Zee		 	 	 	 dd
e
j        de
j        dz  de
j        dz  de
j        dz  dee         dz  dee         dee
j                 ez  fd„¦   «         ¦   «         Zed„ ¦   «         Zˆ xZS )rú  Núbbox_embed.0ú^class_embed.0úmodel.decoder.class_embedúmodel.decoder.bbox_embed)úbbox_embed.(?![0])\d+úclass_embed.(?![0])\d+rü  r  rl   c                 óR  •‡‡— t          ¦   «                              ‰¦  «         ‰j        dk    r‰j        n‰j        ‰j        z   | _        t	          ‰¦  «        | _        t          ‰j        ‰j        z  ¦  «        Š‰j        }t          j
        ˆfd„t          |¦  «        D ¦   «         ¦  «        | _        ‰j        rEt          ‰j        ‰j        d‰j        dz   z  d¦  «        }t          j
        |g|z  ¦  «        | _        ngt          j
        ˆfd„t          | j        dz   ¦  «        D ¦   «         ˆˆfd„t          ‰j        | j        z
  dz
  ¦  «        D ¦   «         z   ¦  «        | _        | j        | j        j        _        | j        | j        j        _        |                      ¦   «          d S )Nr   c                 óN   •— g | ]!}t          j        ‰j        ‰j        ¦  «        ‘Œ"S r0   )rN   rq   rr   rþ  rµ  s     €r2   r²   z5Deimv2ForObjectDetection.__init__.<locals>.<listcomp>"  s+   ø€ Ð)pÐ)pÐ)pÐ[\­"¬)°F´NÀFÔDUÑ*VÔ*VÐ)pÐ)pÐ)pr1   r´   r   r   c           	      ó^   •— g | ])}t          ‰j        ‰j        d ‰j        dz   z  d¦  «        ‘Œ*S ©r´   r   r   )rŽ   rT   rÍ  rµ  s     €r2   r²   z5Deimv2ForObjectDetection.__init__.<locals>.<listcomp>(  sL   ø€ ð ð ð àõ ˜fÔ0°&Ô2DÀaÈ6ÔK^ÐabÑKbÑFcÐefÑgÔgðð ð r1   c           	      óJ   •— g | ]}t          ‰‰d ‰j        dz   z  d¦  «        ‘Œ S r`  )rŽ   rÍ  )r—   rÕ   rl   Ú
scaled_dims     €€r2   r²   z5Deimv2ForObjectDetection.__init__.<locals>.<listcomp>,  sF   ø€ ð ð ð àõ ˜j¨*°a¸6Ô;NÐQRÑ;RÑ6SÐUVÑWÔWðð ð r1   )rL   rM   rÄ  rÅ  r  r9  r>  rÈ  rT   rN   r›   rð   rü  Úshare_bbox_headrŽ   rÍ  r  r  rG  )rS   rl   Únum_predÚshared_bboxrb  rU   s    `  @€r2   rM   z!Deimv2ForObjectDetection.__init__  s¶  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð à+1¬?¸aÒ+?Ð+?˜œ˜ÀVÔEZÐ]cÔ]lÑElˆŒÝ  Ñ(Ô(ˆŒ
Ý˜6Ô-°Ô0BÑBÑCÔCˆ
ØÔ(ˆÝœ=Ð)pÐ)pÐ)pÐ)pÕ`eÐfnÑ`oÔ`oÐ)pÑ)pÔ)pÑqÔqˆÔØÔ!ð 	Ý# FÔ$6¸Ô8JÈAÐQWÔQdÐghÑQhÑLiÐklÑmÔmˆKÝ œm¨[¨M¸HÑ,DÑEÔEˆDŒOˆOå œmðð ð ð å" 4¤=°1Ñ#4Ñ5Ô5ðñ ô ðð ð ð ð å" 6Ô#8¸4¼=Ñ#HÈ1Ñ#LÑMÔMðñ ô ñ	ñ	ô 	ˆDŒOð *.Ô)9ˆŒ
ÔÔ&Ø(,¬ˆŒ
ÔÔ%Ø�ŠÑÔÐÐÐr1   c                 ó6   — d„ t          ||¦  «        D ¦   «         S )Nc                 ó   — g | ]
\  }}||d œ‘ŒS ))rS  rT  r0   )r—   ÚaÚbs      r2   r²   z:Deimv2ForObjectDetection._set_aux_loss.<locals>.<listcomp>7  s$   € Ð]Ð]Ð]±4°1°a˜1¨AÐ.Ð.Ð]Ð]Ð]r1   )rœ   )rS   Úoutputs_classÚoutputs_coords      r2   Ú_set_aux_lossz&Deimv2ForObjectDetection._set_aux_loss6  s    € Ø]Ð]½3¸}ÈmÑ;\Ô;\Ð]Ñ]Ô]Ð]r1   rÈ  r5  r6  ru  r7  r  rJ   c           	      ó‚  —  | j         |f||||dœ|¤Ž}| j        r|j        nd}|j        }	|j        }
|j        }|j        }|	dd…df         }|
dd…df         }d\  }}}}}|�6|j        }|j        } | j	        ||| j
        || j        |	|
f|||||dœ|¤Ž\  }}}t          di d|“d|“d|“d	|“d
|“d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “d|j        “ŽS )aW  
        Example:

        ```python
        >>> import torch
        >>> from transformers.image_utils import load_image
        >>> from transformers import AutoImageProcessor, Deimv2ForObjectDetection

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

        >>> image_processor = AutoImageProcessor.from_pretrained("harshaljanjani/DEIMv2_HGNetv2_N_COCO_Transformers")
        >>> model = Deimv2ForObjectDetection.from_pretrained("harshaljanjani/DEIMv2_HGNetv2_N_COCO_Transformers")

        >>> # prepare image for the model
        >>> inputs = image_processor(images=image, return_tensors="pt")

        >>> # forward pass
        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> list(logits.shape)
        [1, 300, 80]

        >>> boxes = outputs.pred_boxes
        >>> list(boxes.shape)
        [1, 300, 4]

        >>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
        >>> target_sizes = torch.tensor([image.size[::-1]])
        >>> results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)
        >>> result = results[0]  # first image in batch

        >>> for score, label, box in zip(result["scores"], result["labels"], result["boxes"]):
        ...     box = [round(i, 2) for i in box.tolist()]
        ...     print(
        ...         f"Detected {model.config.id2label[label.item()]} with confidence "
        ...         f"{round(score.item(), 3)} at location {box}"
        ...     )
        ```
        )r5  r6  ru  r7  NrX   r  )r;   r<   r?   Úpredicted_cornersr$   rQ  rR  rS  rT  rU  r   r    r!   r"   r#   r$   r5   r6   r'   r7   r8   r9   r:   r;   r<   r=   r>   r?   r0   )r9  rY  r?   r!   r"   r#   r$   r;   r<   Úloss_functionr¼   rl   rP  r   r    r5   r6   r'   r7   r8   r9   r:   r=   r>   )rS   rÈ  r5  r6  ru  r7  r  ra  r?   rj  rk  rn  r$   rS  rT  rQ  rR  rU  r;   r<   s                       r2   rc   z Deimv2ForObjectDetection.forward9  sŽ  € ðh �$”*Øð
à!Ø+Ø'Øð
ð 
ð ð
ð 
ˆð BFÄÐ X Ô =Ð =ÐTXÐàÔ3ˆØÔ=ˆØ#ÔBÐØ#*Ô#CÐ à˜q˜q˜q "˜uÔ%ˆØ" 1 1 1 b 5Ô)ˆ
àOkÑLˆˆiÐ*¨O¸_ØÐØ%Ô5ˆOØ%Ô5ˆOØ1C°Ô1CØØØ”ØØ”ØØð2ð !0Ø /Ø&;Ø"3Ø)Að2ð 2ð ð2ð 2Ñ.ˆD�)Ð.õ  +ð 
ð 
ð 
Ø�ð
à�ið
ð �6ð
ð "�zð	
ð
 0Ð/ð
ð &Ô7Ð7ð
ð (/Ô'IÐ'Ið
ð !(Ô ;Ð ;ð
ð +2Ô*OÐ*Oð
ð ,3Ô+QÐ+Qð
ð &-Ô%EÐ%Eð
ð #*Ô"?Ð"?ð
ð  'Ô9Ð9ð
ð %Ô5Ð5ð
ð '.Ô&GÐ&Gð
ð  #*Ô"?Ð"?ð!
ð"  'Ô9Ð9ð#
ð$ #*Ô"?Ð"?ð%
ð& $Ô3Ð3ð'
ð( $Ô3Ð3ð)
ð* &Ô7Ð7ð+
ð, &-Ô%EÐ%Eð-
ð. #*Ô"?Ð"?ð/
ð 	
r1   c                 ó>   — ddddœ}| j         j        r
d|d<   d|d<   |S )	NrX  rY  rZ  )r\  rü  r  zmodel.decoder.bbox_embed.0z&model\.decoder\.bbox_embed\.(?![0])\d+rW  r[  )rl   rc  )rS   Úkeyss     r2   Ú_tied_weights_keysz+Deimv2ForObjectDetection._tied_weights_keys®  sC   € ð (9Ø6Ø4ð
ð 
ˆð
 Œ;Ô&ð 	=Ø>[ˆDÐ:Ñ;Ø-<ˆDÐ)Ñ*Øˆr1   rÛ  )r(   r)   r*   r  rr  r   rM   rl  r   r   r,   r-   rN  rD   r@   r   r   r/   rP  rc   Úpropertyrh   ri   s   @r2   rú  rú    sY  ø€ € € € € ð Ðà"1Ø#4Ø2Ø0ð	ð Ðð˜|ð ð ð ð ð ð ð6^ð ^ð ^ð Øð /3Ø48Ø26Ø$(ðq
ð q
àÔ'ðq
ð Ô$ tÑ+ðq
ð Ô*¨TÑ1ð	q
ð
 Ô(¨4Ñ/ðq
ð �T”
˜TÑ!ðq
ð Ð+Ô,ðq
ð 
ˆuÔ Ô	!Ð$?Ñ	?ðq
ð q
ð q
ñ Ôñ „^ðq
ðf ð	ð 	ñ „Xð	ð 	ð 	ð 	ð 	r1   rú  )r  rì  rú  )r¨   )NrO  )rÏ   )r.  )rÜ  r½   r-  )`rÿ  Úcollections.abcr   Údataclassesr   r,   Útorch.nnrN   Útorch.nn.functionalrÄ   r  r   Ú r   r  Úactivationsr   Úbackbone_utilsr	   Úimage_transformsr
   r   Úintegrationsr   Úmodeling_outputsr   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   r   Úconfiguration_deimv2r   r   r4   rB   ÚModulerG   rk   r}   rŽ   rD   rŒ   ræ   rè   r  r#  r,  r:  rK  rg   r^  r`  rw  r]   ru  r¼   r[   r¤  r¦  r²  r¼  rË  rÓ  râ  rì  r  r8  r=  rO  rð  r§   r…  rï  r¨  r³  r¼  rû  r  r  rP  rú  Ú__all__r0   r1   r2   ú<module>r‡     sê
  ðð* €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ø ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ .Ð .Ð .Ð .Ð .Ð .ð €ððñ ô ð ð=ð =ð =ð =ð =˜+ñ =ô =ñ „ñô ð=ð: €ððñ ô ð
 ð1.ð 1.ð 1.ð 1.ð 1.˜ñ 1.ô 1.ñ „ñô ð1.ðh €ððñ ô ð ð<ð <ð <ð <ð <˜+ñ <ô <ñ „ñô ð<ð Ð˜YÑ'Ô'ðJð Jð Jð Jð J�B”Iñ Jô Jñ (Ô'ðJð(ð ð ð ð �b”iñ ô ð ðð ð ð ð �”ñ ô ð ðð ð ð ð �”	ñ ô ð ð, ðG/ð G/ØðG/à ðG/ð ðG/ð ð	G/ð
 ˜#”YðG/ð ðG/ð G/ð G/ð G/ðTY)ð Y)ð Y)ð Y)ð Y)¨"¬)ñ Y)ô Y)ð Y)ðxð ð ð ð ˜"œ)ñ ô ð ð@"ð "ð "ð "ð "˜œ	ñ "ô "ð "ð&4ð 4ð 4ð 4ð 4˜œ	ñ 4ô 4ð 4ð<0ð 0ð 0ð 0ð 0˜œñ 0ô 0ð 0ð<ð ð ð ð �2”9ñ ô ð ð2 !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8?)ð ?)ð ?)ð ?)ð ?)˜"œ)ñ ?)ô ?)ð ?)ðDDð Dð Dð Dð D˜œñ Dô Dð DðT Ø ØØ"&Øœð-ð -Øð-àð-ð ð-ð ð	-ð
 ð-ð ŒL˜4Ñð-ð Œ;ð-ð „\ð-ð -ð -ð -ð`#ð #ð #ð #ð # "¤)ñ #ô #ð #ðL6ð 6ð 6ð 6ð 6�b”iñ 6ô 6ð 6ðrAð Að Að Að A ¤ñ Aô Að Að&ð ð ð ð �R”Yñ ô ð ð2ð ð ð ð �”	ñ ô ð ð"Zð Zð Zð Zð Z˜œñ Zô Zð Zðz ðP5ð P5ð P5ð P5ð P5˜Oñ P5ô P5ñ „ðP5ðf$ ð $ ð $ ð $ ð $ ˜bœiñ $ ô $ ð $ ðN'ð 'ð 'ð2Uð Uð Uð Uð UÐ-ñ Uô Uð Uð8+ð +ð +ð +ð +Ð3ñ +ô +ð +ð\09ð 09ð 09ð 09ð 09Ð-ñ 09ô 09ð 09ðf<ð < U¤\ð <À%Ä,ð <ÐY\ð <ÐinÔiuð <ð <ð <ð <ðXBð XBð XBð XBð XBÐ/ñ XBô XBð XBðvð ð ð ð Sð ¨e¬lð Àsð ÈuÌ|ð ð ð ð ð0, E¤Lð ,¸Uð ,ÀuÄ|ð ,ð ,ð ,ð ,ð2Y
ð Y
ð Y
ð Y
ð Y
Ð)ñ Y
ô Y
ð Y
ðB ØØðxQð xQð xQð xQðv €ððñ ô ð
^
ð ^
ð ^
ð ^
ð ^
Ð'ñ ^
ô ^
ñô ð
^
ðB	 €ððñ ô ð
 ðE.ð E.ð E.ð E.ð E. +ñ E.ô E.ñ „ñô ðE.ðP €ððñ ô ðfð fð fð fð fÐ4ñ fô fñô ðfðR OÐ
NÐ
N€€€r1   