§
    ‚Štj®¨  ã            	       ó  — 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 dd	lmZmZ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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7  ej8        e9¦  «        Z: ed¬¦  «        e	 G d„ de¦  «        ¦   «         ¦   «         Z; G d„ de%¦  «        Z< G d„ de.¦  «        Z= ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z> G d„ de7¦  «        Z? G d„ d e6¦  «        Z@ G d!„ d"e(¦  «        ZA G d#„ d$e,¦  «        ZB G d%„ d&e/¦  «        ZC G d'„ d(e"¦  «        ZD G d)„ d*e1¦  «        ZE G d+„ d,ejF        ¦  «        ZG G d-„ d.ejF        ¦  «        ZH G d/„ d0e2¦  «        ZI G d1„ d2e&¦  «        ZJ G d3„ d4e!¦  «        ZK G d5„ d6ejF        ¦  «        ZLdTd8ejM        d9ejM        d:eNd;ejM        fd<„ZO G d=„ d>e*¦  «        ZP G d?„ d@e+¦  «        ZQ G dA„ dBe$¦  «        ZR G dC„ dDe0¦  «        ZS G dE„ dFeS¦  «        ZT G dG„ dHeS¦  «        ZU G dI„ dJeS¦  «        ZV G dK„ dLe)¦  «        ZW G dM„ dNe#¦  «        ZX G dO„ dPe-¦  «        ZY G dQ„ dRe'¦  «        ZZg dS¢Z[dS )Ué    )Ú	dataclassN)Ústricté   )Úinitialization)Úload_backbone)ÚModelOutput)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )Ú
AutoConfig)ÚDFineConfig)ÚDFineAIFILayerÚDFineConvNormLayerÚDFineDecoderÚDFineDecoderLayerÚDFineDecoderOutputÚDFineEncoderLayerÚDFineForObjectDetectionÚ	DFineGateÚDFineHybridEncoderÚDFineIntegralÚDFineLQEÚDFineMLPÚ
DFineModelÚDFineModelOutputÚ"DFineMultiscaleDeformableAttentionÚDFinePreTrainedModelÚDFineRepVggBlockÚDFineSCDownÚ(get_contrastive_denoising_training_groupÚreplace_batch_norm)ÚLlamaMLPÚLlamaRMSNormz"Intellindust/DEIMv2_HGNetv2_N_COCO)Ú
checkpointc                   óÚ   — e Zd ZU dZdZdeiZdZee	         e
e	e	f         z  dz  ed<   dZeed<   dZeed	<   dZedz  ed
<   dZeed<   dZe	ed<   dZeed<   dZeed<   dZeed<   dZeed<   dS )ÚDeimv2Configa#  
    initializer_bias_prior_prob (`float`, *optional*):
        The prior probability used by the bias initializer to initialize biases for `enc_score_head` and `class_embed`.
        If `None`, `prior_prob` computed as `prior_prob = 1 / (num_labels + 1)` while initializing model weights.
    freeze_backbone_batch_norms (`bool`, *optional*, defaults to `True`):
        Whether to freeze the batch normalization layers in the backbone.
    encoder_in_channels (`list`, *optional*, defaults to `[512, 1024, 2048]`):
        Multi level features input for encoder.
    feat_strides (`list[int]`, *optional*, defaults to `[8, 16, 32]`):
        Strides used in each feature map.
    encode_proj_layers (`list[int]`, *optional*, defaults to `[2]`):
        Indexes of the projected layers to be used in the encoder.
    positional_encoding_temperature (`int`, *optional*, defaults to 10000):
        The temperature parameter used to create the positional encodings.
    encoder_activation_function (`str`, *optional*, defaults to `"gelu"`):
        The non-linear activation function (function or string) in the encoder and pooler.
    eval_size (`list[int]` or `tuple[int, int]`, *optional*):
        Height and width used to computes the effective height and width of the position embeddings after taking
        into account the stride.
    normalize_before (`bool`, *optional*, defaults to `False`):
        Determine whether to apply layer normalization in the transformer encoder layer before self-attention and
        feed-forward modules.
    hidden_expansion (`float`, *optional*, defaults to 1.0):
        Expansion ratio to enlarge the dimension size of RepVGGBlock and CSPRepLayer.
    num_queries (`int`, *optional*, defaults to 300):
        Number of object queries.
    decoder_in_channels (`list`, *optional*, defaults to `[256, 256, 256]`):
        Multi level features dimension for decoder.
    num_feature_levels (`int`, *optional*, defaults to 3):
        The number of input feature levels.
    decoder_n_points (`int`, *optional*, defaults to 4):
        The number of sampled keys in each feature level for each attention head in the decoder.
    decoder_activation_function (`str`, *optional*, defaults to `"relu"`):
        The non-linear activation function (function or string) in the decoder.
    num_denoising (`int`, *optional*, defaults to 100):
        The total number of denoising tasks or queries to be used for contrastive denoising.
    label_noise_ratio (`float`, *optional*, defaults to 0.5):
        The fraction of denoising labels to which random noise should be added.
    box_noise_scale (`float`, *optional*, defaults to 1.0):
        Scale or magnitude of noise to be added to the bounding boxes.
    learn_initial_query (`bool`, *optional*, defaults to `False`):
        Indicates whether the initial query embeddings for the decoder should be learned during training.
    anchor_image_size (`tuple[int, int]`, *optional*):
        Height and width of the input image used during evaluation to generate the bounding box anchors.
    with_box_refine (`bool`, *optional*, defaults to `True`):
        Whether to apply iterative bounding box refinement.
    matcher_alpha (`float`, *optional*, defaults to 0.25):
        Parameter alpha used by the Hungarian Matcher.
    matcher_gamma (`float`, *optional*, defaults to 2.0):
        Parameter gamma used by the Hungarian Matcher.
    matcher_class_cost (`float`, *optional*, defaults to 2.0):
        The relative weight of the class loss used by the Hungarian Matcher.
    matcher_bbox_cost (`float`, *optional*, defaults to 5.0):
        The relative weight of the bounding box loss used by the Hungarian Matcher.
    matcher_giou_cost (`float`, *optional*, defaults to 2.0):
        The relative weight of the giou loss of used by the Hungarian Matcher.
    use_focal_loss (`bool`, *optional*, defaults to `True`):
        Parameter informing if focal loss should be used.
    focal_loss_alpha (`float`, *optional*, defaults to 0.75):
        Parameter alpha used to compute the focal loss.
    focal_loss_gamma (`float`, *optional*, defaults to 2.0):
        Parameter gamma used to compute the focal loss.
    weight_loss_vfl (`float`, *optional*, defaults to 1.0):
        Relative weight of the varifocal loss in the object detection loss.
    weight_loss_bbox (`float`, *optional*, defaults to 5.0):
        Relative weight of the L1 bounding box loss in the object detection loss.
    weight_loss_giou (`float`, *optional*, defaults to 2.0):
        Relative weight of the generalized IoU loss in the object detection loss.
    weight_loss_fgl (`float`, *optional*, defaults to 0.15):
        Relative weight of the fine-grained localization loss in the object detection loss.
    weight_loss_ddf (`float`, *optional*, defaults to 1.5):
        Relative weight of the decoupled distillation focal loss in the object detection loss.
    eval_idx (`int`, *optional*, defaults to -1):
        Index of the decoder layer to use for evaluation.
    layer_scale (`float`, *optional*, defaults to `1.0`):
        Scaling factor for the hidden dimension in later decoder layers.
    max_num_bins (`int`, *optional*, defaults to 32):
        Maximum number of bins for the distribution-guided bounding box refinement.
    reg_scale (`float`, *optional*, defaults to 4.0):
        Scale factor for the regression distribution.
    depth_mult (`float`, *optional*, defaults to 1.0):
        Multiplier for the number of blocks in RepNCSPELAN5 layers.
    top_prob_values (`int`, *optional*, defaults to 4):
        Number of top probability values to consider from each corner's distribution.
    lqe_hidden_dim (`int`, *optional*, defaults to 64):
        Hidden dimension size for the Location Quality Estimator (LQE) network.
    lqe_layers (`int`, *optional*, defaults to 2):
        Number of layers in the Location Quality Estimator MLP.
    decoder_offset_scale (`float`, *optional*, defaults to 0.5):
        Offset scale used in deformable attention.
    decoder_method (`str`, *optional*, defaults to `"default"`):
        The method to use for the decoder: `"default"` or `"discrete"`.
    up (`float`, *optional*, defaults to 0.5):
        Controls the upper bounds of the Weighting Function.
    weight_loss_mal (`float`, *optional*, defaults to 1.0):
        Relative weight of the matching auxiliary loss in the object detection loss.
    use_dense_one_to_one (`bool`, *optional*, defaults to `True`):
        Whether to use dense one-to-one matching across decoder layers.
    mal_alpha (`float`, *optional*):
        Alpha parameter for the Matching Auxiliary Loss (MAL). If `None`, uses `focal_loss_alpha`.
    encoder_fuse_op (`str`, *optional*, defaults to `"sum"`):
        Fusion operation used in the encoder FPN. DEIMv2 uses `"sum"` instead of D-FINE's `"cat"`.
    spatial_tuning_adapter_inplanes (`int`, *optional*, defaults to 16):
        Number of input planes for the STA convolutional stem.
    encoder_type (`str`, *optional*, defaults to `"hybrid"`):
        Type of encoder to use. `"hybrid"` uses the full HybridEncoder with AIFI, FPN, and PAN.
        `"lite"` uses the lightweight LiteEncoder with GAP fusion for smaller variants (Atto, Femto, Pico).
    use_gateway (`bool`, *optional*, defaults to `True`):
        Whether to use the gateway mechanism (cross-attention gating) in decoder layers. When `False`,
        uses RMSNorm on the encoder attention output instead.
    share_bbox_head (`bool`, *optional*, defaults to `False`):
        Whether to share the bounding box prediction head across all decoder layers.
    encoder_has_trailing_conv (`bool`, *optional*, defaults to `True`):
        Whether the encoder's CSP blocks include a trailing 3x3 convolution after the bottleneck path.
        `True` for RepNCSPELAN4 (used by HGNetV2 N and LiteEncoder variants).
        `False` for RepNCSPELAN5 (used by DINOv3 variants).
    Údeimv2Úbackbone_configNÚ	eval_sizeç      ð?Úweight_loss_malTÚuse_dense_one_to_oneÚ	mal_alphaÚsumÚencoder_fuse_opé   Úspatial_tuning_adapter_inplanesÚhybridÚencoder_typeÚuse_gatewayFÚshare_bbox_headÚencoder_has_trailing_conv)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer   Úsub_configsr.   ÚlistÚintÚtupleÚ__annotations__r0   Úfloatr1   Úboolr2   r4   Ústrr6   r8   r9   r:   r;   © ó    úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/deimv2/modular_deimv2.pyr+   r+   ;   sí   € € € € € € ðtð tðl €JØ$ jÐ1€Kà48€Iˆt�CŒy˜5  c œ?Ñ*¨TÑ1Ð8Ð8Ñ8Ø €O�UÐ Ð Ñ Ø!%Ð˜$Ð%Ð%Ñ%Ø"€Iˆu�t‰|Ð"Ð"Ñ"Ø €O�SÐ Ð Ñ Ø+-Ð# SÐ-Ð-Ñ-Ø €L�#Ð Ð Ñ Ø€K�ÐÐÑØ!€O�TÐ!Ð!Ñ!Ø&*Ð˜tÐ*Ð*Ñ*Ð*Ð*rJ   r+   c                   ó   — e Zd ZdS )ÚDeimv2DecoderOutputN©r<   r=   r>   rI   rJ   rK   rM   rM   Ã   ó   € € € € € Ø€DrJ   rM   c                   ó   — e Zd ZdS )ÚDeimv2ModelOutputNrN   rI   rJ   rK   rQ   rQ   Ç   rO   rJ   rQ   z 
    Output type for DEIMv2 encoder modules (HybridEncoder and LiteEncoder).
    Attentions are only available for HybridEncoder variants with AIFI layers.
    )Úcustom_introc                   ó”   — 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.Úhidden_statesÚ
attentions)r<   r=   r>   r?   rU   rB   ÚtorchÚFloatTensorrE   rV   rD   rW   rI   rJ   rK   rT   rT   Ë   sz   € € € € € € ðð ð
 -1€L�$�uÔ(Ô)Ð0Ð0Ñ0Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;rJ   rT   c                   ó   — e Zd ZdS )ÚDeimv2RMSNormNrN   rI   rJ   rK   r[   r[   Ý   rO   rJ   r[   c                   ó   — e Zd Zdefd„ZdS )ÚDeimv2SwiGLUFFNÚconfigc                 óN  — t           j                             | ¦  «         |j        dz  }t          j        |j        |d¬¦  «        | _        t          j        |j        |d¬¦  «        | _        t          j        ||j        d¬¦  «        | _        t          j	        ¦   «         | _
        d S )Nr   T)Úbias)ÚnnÚModuleÚ__init__Údecoder_ffn_dimÚLinearÚd_modelÚ	gate_projÚup_projÚ	down_projÚSiLUÚact_fn)Úselfr^   Úhidden_featuress      rK   rc   zDeimv2SwiGLUFFN.__init__â   s„   € Ý
Œ	×Ò˜4Ñ Ô Ð Ø Ô0°AÑ5ˆÝœ 6¤>°?ÈÐNÑNÔNˆŒÝ”y ¤°ÀtÐLÑLÔLˆŒÝœ ?°F´NÈÐNÑNÔNˆŒÝ”g‘i”iˆŒˆˆrJ   N)r<   r=   r>   r+   rc   rI   rJ   rK   r]   r]   á   s/   € € € € € ð ˜|ð  ð  ð  ð  ð  ð  rJ   r]   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )Ú
Deimv2Gaterf   c                 ór   •— t          ¦   «                              |¦  «         t          |¦  «        | _        d S ©N)Úsuperrc   r[   Únorm)rl   rf   Ú	__class__s     €rK   rc   zDeimv2Gate.__init__ì   s.   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ý! 'Ñ*Ô*ˆŒ	ˆ	ˆ	rJ   )r<   r=   r>   rC   rc   Ú__classcell__©rt   s   @rK   ro   ro   ë   sD   ø€ € € € € ð+ ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +rJ   ro   c                   ó   — e Zd ZdS )Ú	Deimv2MLPNrN   rI   rJ   rK   rx   rx   ñ   rO   rJ   rx   c                   ó   — e Zd ZdS )Ú#Deimv2MultiscaleDeformableAttentionNrN   rI   rJ   rK   rz   rz   õ   rO   rJ   rz   c                   ó   — e Zd ZdS )ÚDeimv2ConvNormLayerNrN   rI   rJ   rK   r|   r|   ù   rO   rJ   r|   c                   ó   — e Zd ZdS )ÚDeimv2RepVggBlockNrN   rI   rJ   rK   r~   r~   ý   rO   rJ   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`.
    r/   r^   Úin_channelsÚout_channelsÚ
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 )Nr   é   ©Ú
activationc                 ó2   •— g | ]}t          ‰‰‰¦  «        ‘ŒS rI   )r~   )Ú.0Ú_r^   Úhidden_channelss     €€rK   ú
<listcomp>z.Deimv2CSPRepLayer.__init__.<locals>.<listcomp>  s&   ø€ ÐdÐdÐdÈQÕ˜v ¸ÑHÔHÐdÐdÐdrJ   r   )rr   rc   Úactivation_functionrC   r|   Úconv1ra   Ú
ModuleListÚrangeÚbottlenecksr;   ÚIdentityÚconv2)	rl   r^   r�   r‚   rƒ   r„   rˆ   rŒ   rt   s	    `     @€rK   rc   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å”‘”ð 	Œ
ˆ
ˆ
rJ   rV   Úreturnc                 ó¶   — |                       |¦  «                             dd¬¦  «        \  }}| j        D ]} ||¦  «        }Œ|                      ||z   ¦  «        S ©Nr   r†   ©Údim)r�   Úchunkr’   r”   )rl   rV   ÚresidualÚ
bottlenecks       rK   ÚforwardzDeimv2CSPRepLayer.forward  se   € Ø"&§*¢*¨]Ñ";Ô";×"AÒ"AÀ!ÈÐ"AÑ"KÔ"KÑˆ�-ØÔ*ð 	6ð 	6ˆJØ&˜J }Ñ5Ô5ˆMˆMØ�zŠz˜( ]Ñ2Ñ3Ô3Ð3rJ   )r/   )r<   r=   r>   r?   r+   rC   rF   rc   rX   ÚTensorr�   ru   rv   s   @rK   r€   r€     s¡   ø€ € € € € ðð ð nqð
ð 
Ø"ð
Ø14ð
ØDGð
ØUXð
Øejð
ð 
ð 
ð 
ð 
ð 
ð 4 U¤\ð 4°e´lð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4rJ   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   r^   Ú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 )Nr   r†   r‡   )rƒ   )rr   rc   rŽ   Úencoder_hidden_dimÚroundÚhidden_expansionr|   r�   r€   Úcsp_rep1Úcsp_rep2r”   )	rl   r^   r¡   rˆ   r�   r‚   Úsplit_channelsÚcsp_channelsrt   s	           €rK   rc   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ð
ñ 
ô 
ˆŒ
ˆ
ˆ
rJ   rV   r•   c                 ó  — |                       |¦  «                             dd¬¦  «        \  }}|                      |¦  «        }|                      |¦  «        }t	          j        ||||gd¬¦  «        }|                      |¦  «        S r—   )r�   rš   r¦   r§   rX   Úcatr”   )rl   rV   Úhidden_states_1Úhidden_states_2Úhidden_states_3Úhidden_states_4Úmerged_hidden_statess          rK   r�   zDeimv2RepNCSPELAN5.forward5  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Ð.Ñ/Ô/Ð/rJ   )r   )r<   r=   r>   r?   r+   rC   rc   rX   rž   r�   ru   rv   s   @rK   r    r      s€   ø€ € € € € ðð ð
ð 
˜|ð 
¸#ð 
ð 
ð 
ð 
ð 
ð 
ð0 U¤\ð 0°e´lð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0rJ   r    c                   ó   — e Zd ZdS )ÚDeimv2SCDownNrN   rI   rJ   rK   r²   r²   =  rO   rJ   r²   c                   ó   — e Zd ZdS )ÚDeimv2EncoderLayerNrN   rI   rJ   rK   r´   r´   A  rO   rJ   r´   c                   ó   — e Zd ZdS )ÚDeimv2AIFILayerNrN   rI   rJ   rK   r¶   r¶   E  rO   rJ   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 )ÚDeimv2SpatialTuningAdapterr^   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   r   Úgelur‡   r†   ©Úkernel_sizeÚstrideÚpaddingé   )rr   rc   r6   r|   Ú	stem_convra   Ú	MaxPool2dÚ	stem_poolr”   Úconv3Úconv4ÚGELUrk   )rl   r^   Úinplanesrt   s      €rK   rc   z#Deimv2SpatialTuningAdapter.__init__J  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ˆŒˆˆrJ   Úpixel_valuesr•   c                 ó&  — |                       |                      |¦  «        ¦  «        }|                      |¦  «        }|                      |                      |¦  «        ¦  «        }|                      |                      |¦  «        ¦  «        }|||fS rq   )rÂ   rÀ   r”   rÃ   rk   rÄ   )rl   rÇ   r¬   r­   r®   r¯   s         rK   r�   z"Deimv2SpatialTuningAdapter.forwardT  sw   € ØŸ.š.¨¯ª¸Ñ)EÔ)EÑFÔFˆØŸ*š* _Ñ5Ô5ˆØŸ*š* T§[¢[°Ñ%AÔ%AÑBÔBˆØŸ*š* T§[¢[°Ñ%AÔ%AÑBÔBˆØ °Ð@Ð@rJ   )
r<   r=   r>   r+   rc   rX   rž   rD   r�   ru   rv   s   @rK   r¸   r¸   I  s†   ø€ € € € € ð ˜|ð  ð  ð  ð  ð  ð  ðA E¤Lð A°U¸5¼<ÈÌÐW\ÔWcÐ;cÔ5dð Að Að Að Að Að Að Að ArJ   r¸   r3   Úfeature_map_1Úfeature_map_2Úfuse_opr•   c                 óH   — |dk    r| |z   S t          j        | |gd¬¦  «        S )zJFuses two feature maps via element-wise sum or channel-wise concatenation.r3   r†   r˜   )rX   r«   )rÉ   rÊ   rË   s      rK   Úfuse_feature_mapsrÍ   \  s2   € à�%ÒÐØ˜}Ñ,Ð,ÝŒ9�m ]Ð3¸Ð;Ñ;Ô;Ð;rJ   c                   ó   — e Zd ZdS )ÚDeimv2IntegralNrN   rI   rJ   rK   rÏ   rÏ   c  rO   rJ   rÏ   c                   ó   — e Zd ZdS )Ú	Deimv2LQENrN   rI   rJ   rK   rÑ   rÑ   g  rO   rJ   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 )ÚDeimv2DecoderLayerr^   c                 ó   •— t          ¦   «                              |¦  «         t          |¬¦  «        | _        t	          |j        ¦  «        | _        t	          |j        ¦  «        | _        t          |¦  «        | _	        |j
        | _
        |j
        rt          |j        ¦  «        nd | _        |j
        rd nt	          |j        ¦  «        | _        d S )N©r^   )rr   rc   rz   Úencoder_attnr[   rf   Úself_attn_layer_normÚfinal_layer_normr]   Úmlpr9   ro   ÚgatewayÚencoder_attn_layer_norm©rl   r^   rt   s     €rK   rc   zDeimv2DecoderLayer.__init__l  s°   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý?ÀvÐNÑNÔNˆÔÝ$1°&´.Ñ$AÔ$AˆÔ!Ý -¨f¬nÑ =Ô =ˆÔÝ" 6Ñ*Ô*ˆŒØ!Ô-ˆÔØ5;Ô5GÐQ•z &¤.Ñ1Ô1Ð1ÈTˆŒØ/5Ô/AÐ'd t tÅ}ÐU[ÔUcÑGdÔGdˆÔ$Ð$Ð$rJ   NrV   Úposition_embeddingsÚreference_pointsÚspatial_shapesÚspatial_shapes_listÚencoder_hidden_statesÚencoder_attention_maskÚkwargsr•   c                 ó8  — |}	 | j         d|||dœ|¤Ž\  }}
t          j                             || j        | j        ¬¦  «        }|	|z   }|                      |¦  «        }|}	|€|n||z   }|                      |||||¬¦  «        \  }}
t          j                             || j        | j        ¬¦  «        }| j        �|                      |	|¦  «        }n|	|z   }|                      |¦  «        }|}	|  	                    |¦  «        }|	|z   }|  
                    |¦  «        }|S )N)rV   Úattention_maskrÝ   )ÚpÚtraining)rV   rá   rÞ   rß   rà   rI   )Ú	self_attnra   Ú
functionalÚdropoutrç   r×   rÖ   rÚ   rÛ   rÙ   rØ   )rl   rV   rÝ   rÞ   rß   rà   rá   râ   rã   r›   r‹   s              rK   r�   zDeimv2DecoderLayer.forwardv  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Ñ<Ô<ˆàÐrJ   )NNNNNN)r<   r=   r>   r+   rc   rX   rž   rB   rD   rC   r	   r
   r�   ru   rv   s   @rK   rÓ   rÓ   k  s  ø€ € € € € ðe˜|ð eð eð eð eð eð eð 48Ø04Ø.2Ø<@Ø59Ø6:ð2ð 2à”|ð2ð #œ\¨DÑ0ð2ð  œ,¨Ñ-ð	2ð
 œ tÑ+ð2ð " %¨¨S¨¤/Ô2°TÑ9ð2ð  %œ|¨dÑ2ð2ð !&¤¨tÑ 3ð2ð Ð+Ô,ð2ð 
Œð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2rJ   rÓ   c                   óP   ‡ — e Zd Zg d¢Z ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚDeimv2PreTrainedModel)ÚDeimv2HybridEncoderÚDeimv2LiteEncoderrÓ   c                 óæ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        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 )Nr   )rr   Ú_init_weightsÚ
isinstancer]   ÚinitÚxavier_uniform_rg   ÚweightÚ	constant_r`   rh   ri   )rl   Úmodulert   s     €rK   rð   z#Deimv2PreTrainedModel._init_weights®  sÈ   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%å�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ð 	5rJ   )r<   r=   r>   Ú_no_split_modulesrX   Úno_gradrð   ru   rv   s   @rK   rì   rì   «  sV   ø€ € € € € Ø]Ð]Ð]Ðà€U„]�_„_ð	5ð 	5ð 	5ð 	5ñ „_ð	5ð 	5ð 	5ð 	5ð 	5rJ   rì   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†   )r8   r|   r£   ra   r“   )rŠ   Ú
in_channelr^   s     €rK   r�   z.Deimv2ConvEncoder.__init__.<locals>.<listcomp>É  s\   ø€ ð ð ð ð ð Ô&¨&Ò0Ð0õ $ F¨J¸Ô8QÐSTÐVWÑXÔXÐXå”[‘]”]ðð ð rJ   )rr   rc   r   Úfreeze_backbone_batch_normsrX   rø   r&   ÚmodelÚchannelsÚintermediate_channel_sizesra   r�   Úencoder_input_projÚ	post_init)rl   r^   Úbackbonert   s    ` €rK   rc   zDeimv2ConvEncoder.__init__½  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð å  Ñ(Ô(ˆàÔ-ð 	-å”‘”ð -ð -Ý" 8Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -àˆŒ
Ø*.¬*Ô*=ˆÔ'Ý"$¤-ðð ð ð ð #'Ô"Að	ñ ô ñ#
ô #
ˆÔð 	�ŠÑÔÐÐÐs   ÁA)Á)A-Á0A-rÇ   rã   r•   c                 óf   —  | j         |fi |¤Žj        }d„ t          | j        |¦  «        D ¦   «         S )Nc                 ó*   — g | ]\  }} ||¦  «        ‘ŒS rI   rI   )rŠ   ÚprojÚfeats      rK   r�   z-Deimv2ConvEncoder.forward.<locals>.<listcomp>Õ  s$   € ÐTÐTÐT™z˜t T���T‘
”
ÐTÐTÐTrJ   )r   rU   Úzipr  )rl   rÇ   rã   Úfeaturess       rK   r�   zDeimv2ConvEncoder.forwardÓ  s?   € Ø�4”:˜lÐ5Ð5¨fÐ5Ð5ÔBˆØTÐT­S°Ô1HÈ(Ñ-SÔ-SÐTÑTÔTÐTrJ   )r<   r=   r>   rc   rX   rž   r	   r
   rB   r�   ru   rv   s   @rK   rú   rú   ¼  s~   ø€ € € € € ðð ð ð ð ð,U E¤Lð U¸FÐCUÔ<Vð UÐ[_Ð`eÔ`lÔ[mð Uð Uð Uð Uð Uð Uð Uð UrJ   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 )ÚDeimv2DINOv3ConvEncoderr^   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 )Nr   r†   r¿   )rr   rc   r   r  r¸   Úspatial_tuning_adapterr-   Úhidden_sizer£   r6   ra   r�   r|   Úfusion_projr  )rl   r^   Ú	embed_dimÚ
hidden_dimÚspatial_tuning_adapter_channelsrt   s        €rK   rc   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ðñ
ô 
ˆÔð 	�ŠÑÔÐÐÐrJ   rÇ   rã   r•   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 )Nr   r   ÚbilinearF)ÚsizeÚmodeÚalign_cornersr†   r˜   )r  rU   r^   Ú
patch_sizeÚshapeÚlenÚ	enumeraterC   ÚFÚinterpolateÚappendr  r
  rX   r«   ÚtoÚdevicer  )rl   rÇ   rã   Úbackbone_outputrU   r  Úheight_patchesÚwidth_patchesÚsemantic_featuresÚ
num_scalesÚir	  Úresize_heightÚresize_widthÚspatialÚdetail_featuresÚoutputsÚsemantic_featureÚdetail_featureÚfuseds                       rK   r�   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àˆrJ   )r<   r=   r>   r+   rc   rX   rž   r	   r
   rB   r�   ru   rv   s   @rK   r  r  Ø  s   ø€ € € € € ð˜|ð ð ð ð ð ð ð& E¤Lð ¸FÐCUÔ<Vð Ð[_Ð`eÔ`lÔ[mð ð ð ð ð ð ð ð rJ   r  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î   rV   Ú
input_proj)Ú
layer_nameÚbi_fusion_convr^   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Š   rþ   r^   r  s     €€rK   r�   z.Deimv2LiteEncoder.__init__.<locals>.<listcomp>  s*   ø€ ÐtÐtÐtÈ:Õ  ¨°ZÀÀAÑFÔFÐtÐtÐtrJ   r   r   r†   r»   r‡   ©r¡   )rr   rc   r£   rŽ   ra   r�   Úencoder_in_channelsr2  Ú	AvgPool2dÚ
down_pool1r|   Ú
down_conv1Ú
down_pool2Ú
down_conv2r4  r¤   Ú
depth_multr    Ú	fpn_blockÚ	pan_blockr  )rl   r^   rˆ   rƒ   r  rt   s    `  @€rK   rc   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ˆŒà�ŠÑÔÐÐÐrJ   Úinputs_embedsrã   r•   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 rI   )r2  )rŠ   r(  Úfeaturerl   s      €rK   r�   z-Deimv2LiteEncoder.forward.<locals>.<listcomp>(  s/   ø€ ÐeÐeÐe¹j¸aÀÐ0˜dœo¨aÔ0°Ñ9Ô9ÐeÐeÐerJ   éÿÿÿÿr†   r   ç       @Únearest©Úscale_factorr  ©rU   )r  r   r<  r;  r4  r  Úadaptive_avg_pool2dr  r@  r>  r=  rA  rT   )rl   rB  rã   Úprojected_featuresr-  Úfused_features   `     rK   r�   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Ð8rJ   )r<   r=   r>   r   r|   Ú_can_record_outputsr+   rc   r   r   rB   rX   rž   r	   r
   rT   r�   ru   rv   s   @rK   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ð 9rJ   rî   c                   ó^   — e Zd ZdZdefd„Z	 d	deej                 dz  de	e
         defd„Zd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^   c           
      óB  ‡ ‡— 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 rI   )r£   )rŠ   r‹   rl   s     €rK   r�   z0Deimv2HybridEncoder.__init__.<locals>.<listcomp>J  s   ø€ ÐOÐOÐO¸˜TÔ4ÐOÐOÐOrJ   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rI   )r¶   ©rŠ   r‹   r^   s     €rK   r�   z0Deimv2HybridEncoder.__init__.<locals>.<listcomp>N  s!   ø€ Ð"hÐ"hÐ"h¸q¥?°6Ñ#:Ô#:Ð"hÐ"hÐ"hrJ   r   rF  r   r8  r   )rì   rc   r^   r9  r�   r  Únum_fpn_stagesÚfeat_stridesr£   Úencode_proj_layersÚpositional_encoding_temperaturer.   r‚   Úout_stridesr4   rË   ra   r�   r‘   ÚaifiÚlateral_convsÚ
fpn_blocksr   r|   r¤   r?  r    Údownsample_convsÚ
pan_blocksr²   r  )rl   r^   r‹   rƒ   s   ``  rK   rc   zDeimv2HybridEncoder.__init__@  s\  øø€ Ý×&Ò& t¨VÑ4Ô4Ð4ØˆŒØ!Ô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à�ŠÑÔÐÐÐrJ   NrB  rã   r•   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   rF  r†   rG  rH  rI  rK  )r^   Úencoder_layersr  rW  rZ  r
  r[  r\  rU  r  r  rÍ   rË   r   Úreverser]  r^  rT   )rl   rB  rã   rU   r(  Úenc_indÚfpn_feature_mapsÚidxÚlateral_convr@  Úbackbone_feature_mapÚtop_fpn_feature_mapÚfused_feature_mapÚnew_fpn_feature_mapÚpan_feature_mapsÚdownsample_convrA  Útop_pan_feature_mapÚfpn_feature_mapÚdownsampled_feature_mapÚnew_pan_feature_maps                        rK   r�   zDeimv2HybridEncoder.forwardb  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ÐArJ   rq   )r<   r=   r>   r?   r+   rc   rB   rX   rž   r	   r
   rT   r�   rI   rJ   rK   rí   rí   9  s�   € € € € € ðð ð ˜|ð  ð  ð  ð  ðH 48ð(Bð (Bà˜EœLÔ)¨DÑ0ð(Bð Ð+Ô,ð(Bð 
ð	(Bð (Bð (Bð (Bð (Bð (BrJ   rí   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚDeimv2Decoderr^   c                 óš   •— t          ¦   «                              |¬¦  «         t          d|j        |j        d|j        ¦  «        | _        d S )NrÕ   r¿   r   )rr   rc   rx   rf   Údecoder_activation_functionÚquery_pos_headrÜ   s     €rK   rc   zDeimv2Decoder.__init__Ž  sC   ø€ Ý‰Œ×Ò ÐÑ'Ô'Ð'Ý'¨¨6¬>¸6¼>È1ÈfÔNpÑqÔqˆÔÐÐrJ   )r<   r=   r>   r+   rc   ru   rv   s   @rK   rq  rq  �  sO   ø€ € € € € ðr˜|ð rð rð rð rð rð rð rð rð rð rrJ   rq  c                   óœ   — e Zd Zde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	         dz  d	e
e         fd
„ZdS )ÚDeimv2Modelr^   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 )Nr@   Ú
dinov3_vitrý   rÕ   r   r†   )Úpadding_idx)Úepsr¿   r   )ÚdtyperF  r   ).rì   rc   Úgetattrr-   r  rú   Úconv_encoderr8   rî   rí   ÚencoderÚnum_denoisingra   Ú	EmbeddingÚ
num_labelsrf   Údenoising_class_embedÚlearn_initial_queryÚnum_queriesÚweight_embeddingÚ
Sequentialre   Ú	LayerNormÚlayer_norm_epsÚ
enc_outputÚenc_score_headrx   Úenc_bbox_headÚanchor_image_sizeÚgenerate_anchorsr{  ÚanchorsÚ
valid_maskr  Údecoder_in_channelsr‘   r   r  r“   r|   Únum_feature_levelsr�   Údecoder_input_projrq  Údecoderr  )rl   r^   Ú	is_dinov3Únum_backbone_outsr’  r�   r‹   s          rK   rc   zDeimv2Model.__init__”  sÏ  € Ý×&Ò& t¨VÑ4Ô4Ð4å˜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Ñ,Ô,ˆŒà�ŠÑÔÐÐÐrJ   NrÇ   Ú
pixel_maskÚencoder_outputsrB  Ú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 )"Nz8You have to specify either pixel_values or inputs_embeds)r"  r   rF  r   )r"  r{  éþÿÿÿr†   r7  )ÚtargetsÚnum_classesr„  Úclass_embedÚnum_denoising_queriesÚlabel_noise_ratioÚbox_noise_scale©NNNNr˜   )r™   Úindex)rB  rá   râ   rÞ   rß   rà   Úlevel_start_indexÚlast_hidden_stateÚintermediate_hidden_statesÚintermediate_logitsÚintermediate_reference_pointsÚintermediate_predicted_cornersÚinitial_reference_pointsÚdecoder_hidden_statesÚdecoder_attentionsÚcross_attentionsÚencoder_last_hidden_staterá   Úencoder_attentionsÚinit_reference_pointsÚenc_topk_logitsÚenc_topk_bboxesÚenc_outputs_classÚenc_outputs_coord_logitsÚdenoising_meta_valuesrI   )AÚ
ValueErrorr  r"  rX   Úonesr}  r~  r  rU   r   r’  r^   r‘  r  r‘   ÚemptyÚlongÚflattenÚ	transposer«   Ú	new_zerosÚprodÚcumsumrç   r  r%   r�  r„  r‚  rŸ  r   r{  rŒ  rD   r�  rŽ  r�  r!  r‰  rŠ  r‹  ÚtopkÚmaxÚvaluesÚgatherÚ	unsqueezeÚrepeatr  ÚsigmoidÚconcatrƒ  r…  ÚtileÚdetachr“  rQ   r¤  r¥  r¦  r§  r¨  r©  rV   rW   r¬  ))rl   rÇ   r–  r—  rB  r˜  rã   Ú
batch_sizeÚnum_channelsÚheightÚwidthr"  Ú
proj_featsÚsourcesÚlevelÚ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)                                            rK   r�   zDeimv2Model.forwardÃ  sV  € ð Ð 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ð%
ð 	
rJ   r¡  )r<   r=   r>   r+   rc   rX   rY   Ú
LongTensorrB   Údictr	   r
   r�   rI   rJ   rK   rv  rv  “  sÈ   € € € € € ð-˜|ð -ð -ð -ð -ðd /3Ø48Ø26Ø$(ð]
ð ]
àÔ'ð]
ð Ô$ tÑ+ð]
ð Ô*¨TÑ1ð	]
ð
 Ô(¨4Ñ/ð]
ð �T”
˜TÑ!ð]
ð Ð+Ô,ð]
ð ]
ð ]
ð ]
ð ]
ð ]
rJ   rv  c                   óD   ‡ — e Zd ZdZed„ ¦   «         Zdefd„Zˆ fd„Zˆ xZ	S )ÚDeimv2ForObjectDetectionNc                 ó>   — ddddœ}| j         j        r
d|d<   d|d<   |S )	Nz^class_embed.0zmodel.decoder.class_embedzmodel.decoder.bbox_embed)zclass_embed.(?![0])\d+r�  Ú
bbox_embedzmodel.decoder.bbox_embed.0z&model\.decoder\.bbox_embed\.(?![0])\d+zbbox_embed.0zbbox_embed.(?![0])\d+)r^   r:   )rl   Úkeyss     rK   Ú_tied_weights_keysz+Deimv2ForObjectDetection._tied_weights_keysf  sC   € ð (9Ø6Ø4ð
ð 
ˆð
 Œ;Ô&ð 	=Ø>[ˆDÐ:Ñ;Ø-<ˆDÐ)Ñ*ØˆrJ   r^   c                 óD  ‡‡— 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 rI   )ra   re   rf   r�  rT  s     €rK   r�   z5Deimv2ForObjectDetection.__init__.<locals>.<listcomp>y  s+   ø€ Ð)pÐ)pÐ)pÐ[\­"¬)°F´NÀFÔDUÑ*VÔ*VÐ)pÐ)pÐ)prJ   r¿   r†   r   c           	      ó^   •— g | ])}t          ‰j        ‰j        d ‰j        dz   z  d¦  «        ‘Œ*S ©r¿   r†   r   )rx   r  Úmax_num_binsrT  s     €rK   r�   z5Deimv2ForObjectDetection.__init__.<locals>.<listcomp>  sL   ø€ ð ð ð àõ ˜fÔ0°&Ô2DÀaÈ6ÔK^ÐabÑKbÑFcÐefÑgÔgðð ð rJ   c           	      óJ   •— g | ]}t          ‰‰d ‰j        dz   z  d¦  «        ‘Œ S rå  )rx   ræ  )rŠ   r‹   r^   Ú
scaled_dims     €€rK   r�   z5Deimv2ForObjectDetection.__init__.<locals>.<listcomp>ƒ  sF   ø€ ð ð ð àõ ˜j¨*°a¸6Ô;NÐQRÑ;RÑ6SÐUVÑWÔWðð ð rJ   )rì   rc   Úeval_idxÚdecoder_layersrv  r   r¤   Úlayer_scaler  ra   r�   r‘   r�  r:   rx   ræ  rß  r“  r  )rl   r^   Únum_predÚshared_bboxrè  s    `  @rK   rc   z!Deimv2ForObjectDetection.__init__r  s³  øø€ Ý×&Ò& t¨VÑ4Ô4Ð4à+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ˆŒ
ÔÔ&Ø(,¬ˆŒ
ÔÔ%Ø�ŠÑÔÐÐÐrJ   c                  ó:   •—  t          ¦   «         j        di | ¤Ž d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}"
        ...     )
        ```
        NrI   )rr   r�   )Úsuper_kwargsrt   s    €rK   r�   z Deimv2ForObjectDetection.forward�  s(   ø€ ðT 	�‰ŒŒÐ'Ð'˜,Ð'Ð'Ð'Ð'Ð'rJ   )
r<   r=   r>   r÷   Úpropertyrá  r+   rc   r�   ru   rv   s   @rK   rÝ  rÝ  c  sr   ø€ € € € € ØÐàð	ð 	ñ „Xð	ð˜|ð ð ð ð ð6*(ð *(ð *(ð *(ð *(ð *(ð *(ð *(ð *(rJ   rÝ  )r+   rv  rì   rÝ  )r3   )\Údataclassesr   rX   Útorch.nnra   Útorch.nn.functionalré   r  Úhuggingface_hub.dataclassesr   Ú r   rò   Úbackbone_utilsr   Úmodeling_outputsr   Úprocessing_utilsr	   Úutilsr
   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úautor   Úd_fine.configuration_d_finer   Úd_fine.modeling_d_finer   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Úllama.modeling_llamar'   r(   Ú
get_loggerr<   Úloggerr+   rM   rQ   rT   r[   r]   ro   rx   rz   r|   r~   rb   r€   r    r²   r´   r¶   r¸   rž   rH   rÍ   rÏ   rÑ   rÓ   rì   rú   r  rî   rí   rq  rv  rÝ  Ú__all__rI   rJ   rK   ú<module>r     s»  ðð "Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .à &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð, :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð 
ˆÔ	˜HÑ	%Ô	%€ð €Ð?Ð@Ñ@Ô@ØðC+ð C+ð C+ð C+ð C+�;ñ C+ô C+ñ „ñ AÔ@ðC+ðL	ð 	ð 	ð 	ð 	Ð,ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð €ððñ ô ð ð<ð <ð <ð <ð <˜+ñ <ô <ñ „ñô ð<ð	ð 	ð 	ð 	ð 	�Lñ 	ô 	ð 	ð ð  ð  ð  ð  �hñ  ô  ð  ð+ð +ð +ð +ð +�ñ +ô +ð +ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð*Lñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð,ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð4ð 4ð 4ð 4ð 4˜œ	ñ 4ô 4ð 4ð<0ð 0ð 0ð 0ð 0˜œñ 0ô 0ð 0ð<	ð 	ð 	ð 	ð 	�;ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð*ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�nñ 	ô 	ð 	ðAð Að Að Að A ¤ñ Aô Að Að&<ð < U¤\ð <À%Ä,ð <ÐY\ð <ÐinÔiuð <ð <ð <ð <ð	ð 	ð 	ð 	ð 	�]ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð=ð =ð =ð =ð =Ð*ñ =ô =ð =ð@5ð 5ð 5ð 5ð 5Ð0ñ 5ô 5ð 5ð"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QBð QBð QBð QBð QBÐ,ñ QBô QBð QBðhrð rð rð rð r�Lñ rô rð rðM
ð M
ð M
ð M
ð M
�*ñ M
ô M
ð M
ð`T(ð T(ð T(ð T(ð T(Ð6ñ T(ô T(ð T(ðnð ð €€€rJ   