ó
    ‡Ž¡j«¨  ã            	       ó„  • S SK Jr  S SKrS SKJr  S SKJs  Jr  S SKJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJrJr  SSKJr  SSKJr  SSK J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6J7r7  \Rp                  " \95      r:\" SS9\	 " S S\5      5       5       r; " S S\%5      r< " S S\.5      r=\" SS9\ " S S\5      5       5       r> " S S\75      r? " S S \65      r@ " S! S"\(5      rA " S# S$\,5      rB " S% S&\/5      rC " S' S(\"5      rD " S) S*\15      rE " S+ S,\RŒ                  5      rG " S- S.\RŒ                  5      rH " S/ S0\25      rI " S1 S2\&5      rJ " S3 S4\!5      rK " S5 S6\RŒ                  5      rLSSS7\Rš                  S8\Rš                  S9\NS:\Rš                  4S; jjrO " S< S=\*5      rP " S> S?\+5      rQ " S@ SA\$5      rR " SB SC\05      rS " SD SE\S5      rT " SF SG\S5      rU " SH SI\S5      rV " SJ SK\)5      rW " SL SM\#5      rX " SN SO\-5      rY " SP SQ\'5      rZ/ SRQr[g)Té    )Ú	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                   óÔ   • \ rS rSr% SrSrS\0rSr\	\
   \\
\
4   -  S-  \S'   Sr\\S'   S	r\\S
'   Sr\S-  \S'   Sr\\S'   Sr\
\S'   Sr\\S'   S	r\\S'   Sr\\S'   S	r\\S'   Srg)ÚDeimv2Configé;   aP  
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 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__Ú__firstlineno__Ú__doc__Ú
model_typer   Úsub_configsr/   ÚlistÚintÚtupleÚ__annotations__r1   Úfloatr2   Úboolr3   r5   Ústrr7   r9   r:   r;   r<   Ú__static_attributes__r=   ó    Ú·C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/deimv2/modular_deimv2.pyr+   r+   ;   s›   ‡ ñtðl €JØ$ jÐ1€Kà48€Iˆt�C‰y˜5  c ™?Ñ*¨TÑ1Ó8Ø €O�UÓ Ø!%Ð˜$Ó%Ø"€Iˆu�t‰|Ó"Ø €O�SÓ Ø+-Ð# SÓ-Ø €L�#Ó Ø€K�ÓØ!€O�TÓ!Ø&*Ð˜tÖ*rM   r+   c                   ó   • \ rS rSrSrg)ÚDeimv2DecoderOutputéÃ   r=   N©r>   r?   r@   rA   rL   r=   rM   rN   rP   rP   Ã   ó   † ÚrM   rP   c                   ó   • \ rS rSrSrg)ÚDeimv2ModelOutputéÇ   r=   NrR   r=   rM   rN   rU   rU   Ç   rS   rM   rU   z 
    Output type for DEIMv2 encoder modules (HybridEncoder and LiteEncoder).
    Attentions are only available for HybridEncoder variants with AIFI layers.
    )Úcustom_introc                   ó¦   • \ rS rSr% SrSr\\R                     \	S'   Sr
\\R                  S4   S-  \	S'   Sr\\R                  S4   S-  \	S'   Srg)	ÚDeimv2EncoderOutputéË   zy
feature_maps (`list[torch.FloatTensor]`):
    List of multi-scale feature maps from the encoder, one per feature level.
NÚfeature_maps.Úhidden_statesÚ
attentionsr=   )r>   r?   r@   rA   rB   r[   rE   ÚtorchÚFloatTensorrH   r\   rG   r]   rL   r=   rM   rN   rY   rY   Ë   s\   ‡ ñð
 -1€L�$�u×(Ñ(Ñ)Ó0Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ö;rM   rY   c                   ó   • \ rS rSrSrg)ÚDeimv2RMSNorméÝ   r=   NrR   r=   rM   rN   ra   ra   Ý   rS   rM   ra   c                   ó"   • \ rS rSrS\4S jrSrg)ÚDeimv2SwiGLUFFNéá   Úconfigc                 óp  • [         R                  R                  U 5        UR                  S-  n[         R                  " UR
                  USS9U l        [         R                  " UR
                  USS9U l        [         R                  " X!R
                  SS9U l        [         R                  " 5       U l
        g )Nr   T)Úbias)ÚnnÚModuleÚ__init__Údecoder_ffn_dimÚLinearÚd_modelÚ	gate_projÚup_projÚ	down_projÚSiLUÚact_fn)Úselfrf   Úhidden_featuress      rN   rk   ÚDeimv2SwiGLUFFN.__init__â   sw   € Ü
�	‰	×Ñ˜4Ô Ø ×0Ñ0°AÑ5ˆÜŸš 6§>¡>°?ÈÑNˆŒÜ—y’y §¡°ÀtÑLˆŒÜŸš ?·N±NÈÑNˆŒÜ—g’g“iˆ�rM   )rs   rq   ro   rp   N)r>   r?   r@   rA   r+   rk   rL   r=   rM   rN   rd   rd   á   s   † ð ˜|÷  rM   rd   c                   ó0   ^ • \ rS rSrS\4U 4S jjrSrU =r$ )Ú
Deimv2Gateéë   rn   c                 óD   >• [         TU ]  U5        [        U5      U l        g ©N)Úsuperrk   ra   Únorm)rt   rn   Ú	__class__s     €rN   rk   ÚDeimv2Gate.__init__ì   s   ø€ Ü‰Ñ˜Ô!Ü! 'Ó*ˆ�	rM   )r}   )r>   r?   r@   rA   rF   rk   rL   Ú__classcell__©r~   s   @rN   rx   rx   ë   s   ø† ð+ ÷ +õ +rM   rx   c                   ó   • \ rS rSrSrg)Ú	Deimv2MLPéñ   r=   NrR   r=   rM   rN   rƒ   rƒ   ñ   rS   rM   rƒ   c                   ó   • \ rS rSrSrg)Ú#Deimv2MultiscaleDeformableAttentionéõ   r=   NrR   r=   rM   rN   r†   r†   õ   rS   rM   r†   c                   ó   • \ rS rSrSrg)ÚDeimv2ConvNormLayeréù   r=   NrR   r=   rM   rN   r‰   r‰   ù   rS   rM   r‰   c                   ó   • \ rS rSrSrg)ÚDeimv2RepVggBlockéý   r=   NrR   r=   rM   rN   rŒ   rŒ   ý   rS   rM   rŒ   c                   ó„   ^ • \ rS rSrSr SS\S\S\S\S\4
U 4S jjjrS	\	R                  S
\	R                  4S jrSrU =r$ )ÚDeimv2CSPRepLayeri  a	  
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`.
rf   Úin_channelsÚout_channelsÚ
num_blocksÚ	expansionc           
      ó‚  >• [         T	U ]  5         UR                  n[        X5-  5      n[	        XUS-  SSUS9U l        [        R                  " [        U5       Vs/ s H  n[        XU5      PM     sn5      U l
        UR                  (       a  [	        XUSSUS9U l        g [        R                  " 5       U l        g s  snf )Nr   é   ©Ú
activationr   )r|   rk   Úactivation_functionrF   r‰   Úconv1ri   Ú
ModuleListÚrangerŒ   Úbottlenecksr<   ÚIdentityÚconv2)
rt   rf   r�   r‘   r’   r“   r—   Úhidden_channelsÚ_r~   s
            €rN   rk   ÚDeimv2CSPRepLayer.__init__  sµ   ø€ ô 	‰ÑÔØ×/Ñ/ˆ
Ü˜lÑ6Ó7ˆÜ(¨¸oÐPQÑ>QÐSTÐVWÐdnÑoˆŒ
ÜŸ=š=ÜRWÐXbÔRcÓdÒRcÈQÔ˜v¸ÖHÑRcÑdó
ˆÔð
 ×/×/ô   ¸ÀqÈ!ÐXbÑcð 	�
ô —’“ð 	�
ùò es   ÁB<r\   Úreturnc                 ó    • U R                  U5      R                  SSS9u  p!U R                   H  nU" U5      nM     U R                  X!-   5      $ ©Nr   r•   ©Údim)r™   Úchunkrœ   rž   )rt   r\   ÚresidualÚ
bottlenecks       rN   ÚforwardÚDeimv2CSPRepLayer.forward  sO   € Ø"&§*¡*¨]Ó";×"AÑ"AÀ!ÈÐ"AÐ"KÑˆØ×*Ô*ˆJÙ& }Ó5ŠMñ +à�z‰z˜(Ñ2Ó3Ð3rM   )rœ   r™   rž   )r0   )r>   r?   r@   rA   rB   r+   rF   rI   rk   r^   ÚTensorrª   rL   r€   r�   s   @rN   r�   r�     sa   ø† ñð nqñ
Ø"ð
Ø14ð
ØDGð
ØUXð
Øej÷
ð 
ð 4 U§\¡\ð 4°e·l±l÷ 4ò 4rM   r�   c                   óv   ^ • \ rS rSrSrS
S\S\4U 4S jjjrS\R                  S\R                  4S jr
S	rU =r$ )ÚDeimv2RepNCSPELAN5i  aI  
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.
rf   Únumb_blocksc           	      óh  >• [         TU ]  5         UR                  nUR                  nUR                  nUR                  S-  n[	        UR
                  UR                  -  S-  5      n[        XUSSUS9U l        [        XS-  XrS9U l	        [        XXrS9U l
        [        XSU-  -   USSUS9U l        g )Nr   r•   r–   )r’   )r|   rk   r˜   Úencoder_hidden_dimÚroundÚhidden_expansionr‰   r™   r�   Úcsp_rep1Úcsp_rep2rž   )	rt   rf   r¯   r—   r�   r‘   Úsplit_channelsÚcsp_channelsr~   s	           €rN   rk   ÚDeimv2RepNCSPELAN5.__init__'  s¹   ø€ Ü‰ÑÔØ×/Ñ/ˆ
Ø×/Ñ/ˆØ×0Ñ0ˆØ×2Ñ2°QÑ6ˆÜ˜V×4Ñ4°v×7PÑ7PÑPÐTUÑUÓVˆÜ(¨¸nÈaÐQRÐ_iÑjˆŒ
Ü)¨&ÀAÑ2EÀ|ÑlˆŒÜ)¨&ÀÑeˆŒÜ(Ø a¨,Ñ&6Ñ7¸ÀqÈ!ÐXbñ
ˆ�
rM   r\   r¢   c                 óØ   • U R                  U5      R                  SSS9u  p#U R                  U5      nU R                  U5      n[        R
                  " X#XE/SS9nU R                  U5      $ r¤   )r™   r§   r´   rµ   r^   Úcatrž   )rt   r\   Úhidden_states_1Úhidden_states_2Úhidden_states_3Úhidden_states_4Úmerged_hidden_statess          rN   rª   ÚDeimv2RepNCSPELAN5.forward5  sg   € Ø+/¯:©:°mÓ+D×+JÑ+JÈ1ÐRSÐ+JÐ+TÑ(ˆØŸ-™-¨Ó8ˆØŸ-™-¨Ó8ˆÜ$Ÿyšy¨/ÈOÐ)mÐstÑuÐØ�z‰zÐ.Ó/Ð/rM   )r™   rž   r´   rµ   )r   )r>   r?   r@   rA   rB   r+   rF   rk   r^   r¬   rª   rL   r€   r�   s   @rN   r®   r®     s@   ø† ññ
˜|ð 
¸#÷ 
ð 
ð0 U§\¡\ð 0°e·l±l÷ 0ò 0rM   r®   c                   ó   • \ rS rSrSrg)ÚDeimv2SCDowni=  r=   NrR   r=   rM   rN   rÂ   rÂ   =  rS   rM   rÂ   c                   ó   • \ rS rSrSrg)ÚDeimv2EncoderLayeriA  r=   NrR   r=   rM   rN   rÄ   rÄ   A  rS   rM   rÄ   c                   ó   • \ rS rSrSrg)ÚDeimv2AIFILayeriE  r=   NrR   r=   rM   rN   rÆ   rÆ   E  rS   rM   rÆ   c                   óž   ^ • \ rS rSrS\4U 4S jjrS\R                  S\\R                  \R                  \R                  4   4S jr	Sr
U =r$ )ÚDeimv2SpatialTuningAdapteriI  rf   c           	      ó^  >• [         TU ]  5         UR                  n[        USUSSSS9U l        [
        R                  " SSSS9U l        [        XSU-  SS5      U l        [        USU-  SU-  SS5      U l	        [        USU-  SU-  SS5      U l
        [
        R                  " 5       U l        g )Nr   r   Úgelur–   r•   ©Úkernel_sizeÚstrideÚpaddingé   )r|   rk   r7   r‰   Ú	stem_convri   Ú	MaxPool2dÚ	stem_poolrž   Úconv3Úconv4ÚGELUrs   )rt   rf   Úinplanesr~   s      €rN   rk   Ú#Deimv2SpatialTuningAdapter.__init__J  s¡   ø€ Ü‰ÑÔØ×9Ñ9ˆÜ,¨V°Q¸À!ÀQÐSYÑZˆŒÜŸš°!¸AÀqÑIˆŒÜ(¨¸1¸x¹<ÈÈAÓNˆŒ
Ü(¨°°X±¸qÀ8¹|ÈQÐPQÓRˆŒ
Ü(¨°°X±¸qÀ8¹|ÈQÐPQÓRˆŒ
Ü—g’g“iˆ�rM   Úpixel_valuesr¢   c                 óì   • U R                  U R                  U5      5      nU R                  U5      nU R                  U R	                  U5      5      nU R                  U R	                  U5      5      nX4U4$ r{   )rÒ   rÐ   rž   rÓ   rs   rÔ   )rt   rØ   r»   r¼   r½   r¾   s         rN   rª   Ú"Deimv2SpatialTuningAdapter.forwardT  s`   € ØŸ.™.¨¯©¸Ó)EÓFˆØŸ*™* _Ó5ˆØŸ*™* T§[¡[°Ó%AÓBˆØŸ*™* T§[¡[°Ó%AÓBˆØ°Ð@Ð@rM   )rs   rž   rÓ   rÔ   rÐ   rÒ   )r>   r?   r@   rA   r+   rk   r^   r¬   rG   rª   rL   r€   r�   s   @rN   rÈ   rÈ   I  sJ   ø† ð ˜|÷  ðA E§L¡Lð A°U¸5¿<¹<ÈÏÉÐW\×WcÑWcÐ;cÑ5d÷ Aò ArM   rÈ   Úfeature_map_1Úfeature_map_2Úfuse_opr¢   c                 óB   • US:X  a  X-   $ [         R                  " X/SS9$ )zJFuses two feature maps via element-wise sum or channel-wise concatenation.r4   r•   r¥   )r^   rº   )rÛ   rÜ   rÝ   s      rN   Úfuse_feature_mapsrß   \  s'   € à�%ÓØÑ,Ð,Ü�9Š9�mÐ3¸Ñ;Ð;rM   c                   ó   • \ rS rSrSrg)ÚDeimv2Integralic  r=   NrR   r=   rM   rN   rá   rá   c  rS   rM   rá   c                   ó   • \ rS rSrSrg)Ú	Deimv2LQEig  r=   NrR   r=   rM   rN   rã   rã   g  rS   rM   rã   c                   ó4  ^ • \ rS rSrS\4U 4S jjr      SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S	\\	\
\
4      S-  S
\R                  S-  S\R                  S-  S\\   S\R                  4S jjrSrU =r$ )ÚDeimv2DecoderLayerik  rf   c                 óª  >• [         TU ]  U5        [        US9U l        [	        UR
                  5      U l        [	        UR
                  5      U l        [        U5      U l	        UR                  U l
        UR                  (       a  [        UR
                  5      OS U l        UR                  (       a  S U l        g [	        UR
                  5      U l        g )N©rf   )r|   rk   r†   Úencoder_attnra   rn   Úself_attn_layer_normÚfinal_layer_normrd   Úmlpr:   rx   ÚgatewayÚencoder_attn_layer_norm©rt   rf   r~   s     €rN   rk   ÚDeimv2DecoderLayer.__init__l  s–   ø€ Ü‰Ñ˜Ô Ü?ÀvÑNˆÔÜ$1°&·.±.Ó$AˆÔ!Ü -¨f¯n©nÓ =ˆÔÜ" 6Ó*ˆŒØ!×-Ñ-ˆÔØ5;×5G×5G”z &§.¡.Ô1ÈTˆŒØ/5×/A×/A tˆÕ$Ä}ÐU[×UcÑUcÓGdˆÕ$rM   Nr\   Úposition_embeddingsÚreference_pointsÚspatial_shapesÚspatial_shapes_listÚencoder_hidden_statesÚencoder_attention_maskÚkwargsr¢   c                 ó$  • Un	U R                   " SUUUS.UD6u  p[        R                  R                  XR                  U R                  S9nX‘-   nU R                  U5      nUn	Uc  UOX-   nU R                  UUUUUS9u  p[        R                  R                  XR                  U R                  S9nU R                  b  U R                  X‘5      nOX‘-   nU R                  U5      nUn	U R                  U5      nX‘-   nU R                  U5      nU$ )N)r\   Úattention_maskrð   )ÚpÚtraining)r\   rô   rñ   rò   ró   r=   )Ú	self_attnri   Ú
functionalÚdropoutrú   ré   rè   rì   rí   rë   rê   )rt   r\   rð   rñ   rò   ró   rô   rõ   rö   r¨   r    s              rN   rª   ÚDeimv2DecoderLayer.forwardv  s8  € ð !ˆð  Ÿ>š>ð 
Ø'Ø1Ø 3ñ
ð ñ	
Ñˆô Ÿ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-ÐdˆØ Ñ0ˆØ×1Ñ1°-Ó@ˆà ˆð *=Ñ)D™È-ÑJmˆØ×,Ñ,Ø'Ø"7Ø-Ø)Ø 3ð -ð 
Ñˆô Ÿ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-Ðdˆà�<‰<Ñ#Ø ŸL™L¨ÓA‰Mà$Ñ4ˆMØ ×8Ñ8¸ÓGˆMð !ˆØŸ™ Ó/ˆØ Ñ0ˆØ×-Ñ-¨mÓ<ˆàÐrM   )rè   rí   rê   rì   rë   ré   r:   )NNNNNN)r>   r?   r@   rA   r+   rk   r^   r¬   rE   rG   rF   r	   r
   rª   rL   r€   r�   s   @rN   rå   rå   k  sÔ   ø† ðe˜|÷ eð 48Ø04Ø.2Ø<@Ø59Ø6:ñ2à—|‘|ð2ð #Ÿ\™\¨DÑ0ð2ð  Ÿ,™,¨Ñ-ð	2ð
 Ÿ™ tÑ+ð2ð " %¨¨S¨¡/Ñ2°TÑ9ð2ð  %Ÿ|™|¨dÑ2ð2ð !&§¡¨tÑ 3ð2ð Ð+Ñ,ð2ð 
�‰÷2ó 2rM   rå   c                   óX   ^ • \ rS rSr/ SQr\R                  " 5       U 4S j5       rSrU =r	$ )ÚDeimv2PreTrainedModeli«  )ÚDeimv2HybridEncoderÚDeimv2LiteEncoderrå   c                 óP  >• [         TU ]  U5        [        U[        5      (       Ga   [        R
                  " UR                  R                  5        [        R                  " UR                  R                  S5        [        R
                  " UR                  R                  5        [        R                  " UR                  R                  S5        [        R
                  " UR                  R                  5        [        R                  " UR                  R                  S5        g g )Nr   )r|   Ú_init_weightsÚ
isinstancerd   ÚinitÚxavier_uniform_ro   ÚweightÚ	constant_rh   rp   rq   )rt   Úmoduler~   s     €rN   r  Ú#Deimv2PreTrainedModel._init_weights®  sº   ø€ ä‰Ñ˜fÔ%ä�fœo×.Ò.Ü× Ò  ×!1Ñ!1×!8Ñ!8Ô9Ü�NŠN˜6×+Ñ+×0Ñ0°!Ô4Ü× Ò  §¡×!6Ñ!6Ô7Ü�NŠN˜6Ÿ>™>×.Ñ.°Ô2Ü× Ò  ×!1Ñ!1×!8Ñ!8Ô9Ü�NŠN˜6×+Ñ+×0Ñ0°!Õ4ð /rM   r=   )
r>   r?   r@   rA   Ú_no_split_modulesr^   Úno_gradr  rL   r€   r�   s   @rN   r   r   «  s!   ø† Ú]Ðà
‡]‚]ƒ_ô	5ó ö	5rM   r   c                   ór   ^ • \ rS rSrU 4S jrS\R                  S\\   S\	\R                     4S jr
SrU =r$ )ÚDeimv2ConvEncoderi¼  c                 ó  >• [         TU ]  U5        [        U5      nUR                  (       a)  [        R
                  " 5          [        U5        S S S 5        X l        U R                  R                  U l	        [        R                  " U R                   Vs/ s H@  nUR                  S:w  a  [        XUR                  SS5      O[        R                  " 5       PMB     sn5      U l        U R#                  5         g ! , (       d  f       N±= fs  snf )NÚliter•   )r|   rk   r   Úfreeze_backbone_batch_normsr^   r  r&   ÚmodelÚchannelsÚintermediate_channel_sizesri   rš   r9   r‰   r±   r�   Úencoder_input_projÚ	post_init)rt   rf   ÚbackboneÚ
in_channelr~   s       €rN   rk   ÚDeimv2ConvEncoder.__init__½  sÓ   ø€ Ü‰Ñ˜Ô ä  Ó(ˆà×-×-ä—’•Ü" 8Ô,÷ !àŒ
Ø*.¯*©*×*=Ñ*=ˆÔ'Ü"$§-¢-ð
 #'×"AÒ"Aó	ò #B�Jð ×&Ñ&¨&Ó0ô $ F¸×8QÑ8QÐSTÐVWÔXä—[’[“]ò#ñ #Bñ	ó#
ˆÔð 	�‰Õ÷ !•üò
s   ÁC9ÂAD
Ã9
DrØ   rö   r¢   c                 óª   • U R                   " U40 UD6R                  n[        U R                  U5       VVs/ s H  u  pEU" U5      PM     snn$ s  snnf r{   )r  r[   Úzipr  )rt   rØ   rö   ÚfeaturesÚprojÚfeats         rN   rª   ÚDeimv2ConvEncoder.forwardÓ  sH   € Ø—:’:˜lÑ5¨fÑ5×BÑBˆÜ-0°×1HÑ1HÈ(Ô-SÔTÒ-S™z˜t‘�T–
Ñ-SÒTÐTùÓTs   ·A)r  r  r  )r>   r?   r@   rA   rk   r^   r¬   r	   r
   rE   rª   rL   r€   r�   s   @rN   r  r  ¼  sC   ø† õð,U E§L¡Lð U¸FÐCUÑ<Vð UÐ[_Ð`e×`lÑ`lÑ[m÷ Uò UrM   r  c                   óz   ^ • \ rS rSrS\4U 4S jjrS\R                  S\\	   S\
\R                     4S jrSrU =r$ )	ÚDeimv2DINOv3ConvEncoderiØ  rf   c                 óˆ  >• [         TU ]  U5        [        U5      U l        [	        U5      U l        UR                  R                  nUR                  nUR                  n[        R                  " [        XUS-  -   USS5      [        XUS-  -   USS5      [        XUS-  -   USS5      /5      U l        U R                  5         g )Nr   r•   rÏ   )r|   rk   r   r  rÈ   Úspatial_tuning_adapterr.   Úhidden_sizer±   r7   ri   rš   r‰   Úfusion_projr  )rt   rf   Ú	embed_dimÚ
hidden_dimÚspatial_tuning_adapter_channelsr~   s        €rN   rk   Ú Deimv2DINOv3ConvEncoder.__init__Ù  sÊ   ø€ Ü‰Ñ˜Ô Ü% fÓ-ˆŒä&@ÀÓ&HˆÔ#à×*Ñ*×6Ñ6ˆ	Ø×.Ñ.ˆ
Ø*0×*PÑ*PÐ'ÜŸ=š=ä# FÐ8WÐZ[Ñ8[Ñ,[Ð]gÐijÐlmÓnÜ# FÐ8WÐZ[Ñ8[Ñ,[Ð]gÐijÐlmÓnÜ# FÐ8WÐZ[Ñ8[Ñ,[Ð]gÐijÐlmÓnðó
ˆÔð 	�‰ÕrM   rØ   rö   r¢   c                 óÌ  • U R                   " U40 UD6nUR                  nU R                   R                  R                  nUR                  S   U-  nUR                  S   U-  n/ n[        U5      n	[        U5       H\  u  p«[        USU	S-
  U
-
  -  -  5      n[        USU	S-
  U
-
  -  -  5      n[        R                  " X¼U/SSS9nUR                  U5        M^     U R                  U5      n/ n[        [        X�5      5       H]  u  n
u  nn[        R                  " UR                  UR                   5      U/SS9nUR                  U R"                  U
   " U5      5        M_     U$ )Nr   r   ÚbilinearF)ÚsizeÚmodeÚalign_cornersr•   r¥   )r  r[   rf   Ú
patch_sizeÚshapeÚlenÚ	enumeraterF   ÚFÚinterpolateÚappendr$  r  r^   rº   ÚtoÚdevicer&  )rt   rØ   rö   Úbackbone_outputr[   r0  Úheight_patchesÚwidth_patchesÚsemantic_featuresÚ
num_scalesÚir  Úresize_heightÚresize_widthÚspatialÚdetail_featuresÚoutputsÚsemantic_featureÚdetail_featureÚfuseds                       rN   rª   ÚDeimv2DINOv3ConvEncoder.forwardì  sd  € ØŸ-š-¨Ñ?¸Ñ?ˆØ&×3Ñ3ˆà—]‘]×)Ñ)×4Ñ4ˆ
Ø%×+Ñ+¨AÑ.°*Ñ<ˆØ$×*Ñ*¨1Ñ-°Ñ;ˆàÐÜ˜Ó&ˆ
Ü  Ö.‰GˆAÜ °°zÀA±~ÈÑ7IÑ1JÑ JÓKˆMÜ˜}¨q°ZÀ!±^ÀaÑ5GÑ/HÑHÓIˆLÜ—m’m D¸|Ð/LÐS]ÐmrÑsˆGØ×$Ñ$ WÖ-ñ	 /ð ×5Ñ5°lÓCˆàˆÜ5>¼sÐCTÓ?fÖ5gÑ1ˆAÑ1Ð  .Ü—I’IÐ/×2Ñ2°>×3HÑ3HÓIÈ>ÐZÐ`aÑbˆEØ�N‰N˜4×+Ñ+¨AÒ.¨uÓ5Ö6ñ 6hð ˆrM   )r  r&  r$  )r>   r?   r@   rA   r+   rk   r^   r¬   r	   r
   rE   rª   rL   r€   r�   s   @rN   r"  r"  Ø  sE   ø† ð˜|÷ ð& E§L¡Lð ¸FÐCUÑ<Vð Ð[_Ð`e×`lÑ`lÑ[m÷ ò rM   r"  c                   óš   ^ • \ rS rSrS\" \SS9\" \SS9/0rS\4U 4S jjr\	\
S\\R                     S	\\   S
\4S j5       5       rSrU =r$ )r  i  r\   Ú
input_proj)Ú
layer_nameÚbi_fusion_convrf   c                 óB  >• [         TU ]  U5        UR                  nUR                  n[        R
                  " UR                   Vs/ s H  n[        XUSS5      PM     sn5      U l        [        R                  " SSSS9U l
        [        XUSSUS9U l        [        R                  " SSSS9U l        [        XUSSUS9U l        [        XUSSUS9U l        [        SUR                   -  5      n[#        XS9U l        [#        XS9U l        U R)                  5         g s  snf )Nr•   r   r   rË   r–   ©r¯   )r|   rk   r±   r˜   ri   rš   Úencoder_in_channelsr‰   rI  Ú	AvgPool2dÚ
down_pool1Ú
down_conv1Ú
down_pool2Ú
down_conv2rK  r²   Ú
depth_multr®   Ú	fpn_blockÚ	pan_blockr  )rt   rf   r(  r—   r  r’   r~   s         €rN   rk   ÚDeimv2LiteEncoder.__init__  s  ø€ Ü‰Ñ˜Ô Ø×.Ñ.ˆ
Ø×/Ñ/ˆ
äŸ-š-ØY_×YsÒYsÓtÒYsÈ:Ô  °ZÀÀAÖFÑYsÑtó
ˆŒô Ÿ,š,°1¸QÈÑJˆŒÜ-¨fÀ*ÈaÐQRÐ_iÑjˆŒÜŸ,š,°1¸QÈÑJˆŒÜ-¨fÀ*ÈaÐQRÐ_iÑjˆŒä1°&ÀjÐRSÐUVÐcmÑnˆÔä˜1˜v×0Ñ0Ñ0Ó1ˆ
Ü+¨FÑKˆŒÜ+¨FÑKˆŒà�‰Õùò us   ÁDÚinputs_embedsrö   r¢   c                 ó`  • [        U5       VVs/ s H  u  p4U R                  U   " U5      PM     nnnUR                  U R                  U R	                  US   5      5      5        U R                  US   [        R                  " US   S5      -   5      US'   / nUS   [        R                  " US   SSS9-   nUR                  U R                  U5      5        US   U R                  U R                  US   5      5      -   nUR                  U R                  U5      5        [        US9$ s  snnf )Néÿÿÿÿr•   r   ç       @Únearest©Úscale_factorr.  ©r[   )r3  rI  r6  rQ  rP  rK  r4  Úadaptive_avg_pool2dr5  rU  rS  rR  rV  rY   )rt   rX  rö   r>  ÚfeatureÚprojected_featuresrC  Úfused_features           rN   rª   ÚDeimv2LiteEncoder.forward%  s   € ô MVÐVcÔLdÔeÒLd¹j¸a˜dŸo™o¨aÒ0°Ö9ÑLdÐÑeØ×!Ñ! $§/¡/°$·/±/ÐBTÐUWÑBXÓ2YÓ"ZÔ[à!%×!4Ñ!4Ø˜rÑ"¤Q×%:Ò%:Ð;MÈbÑ;QÐSTÓ%UÑUó"
Ð˜2Ñð ˆØ*¨1Ñ-´·²Ð>PÐQRÑ>SÐbeÐluÑ0vÑvˆØ�‰�t—~‘~ mÓ4Ô5à*¨1Ñ-°·±ÀÇÁÐPWÐXZÑP[Ó@\Ó0]Ñ]ˆØ�‰�t—~‘~ mÓ4Ô5ä"°Ñ8Ð8ùó fs   �!D*)rK  rQ  rS  rP  rR  rU  rI  rV  )r>   r?   r@   rA   r   r‰   Ú_can_record_outputsr+   rk   r   r   rE   r^   r¬   r	   r
   rY   rª   rL   r€   r�   s   @rN   r  r    sy   ø† ð 	ÙÐ.¸<ÑHÙÐ.Ð;KÑLð
ðÐð˜|÷ ð,  Øð9 T¨%¯,©,Ñ%7ð 9À6ÐJ\ÑC]ð 9Ðbuó 9ó ó  ö9rM   r  c                   óh   • \ rS rSrSrS\4S jr SS\\R                     S-  S\
\   S\4S	 jjrS
rg)r  i9  a5  
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.
rf   c           
      óÎ  • [         R                  X5        Xl        UR                  U l        [        U R                  5      S-
  U l        UR                  U l        UR                  U l        UR                  U l	        UR                  U l
        UR                  U l        U R                   Vs/ s H  o R                  PM     snU l        U R                  U l        UR                  U l        [         R"                  " [%        [        U R                  5      5       Vs/ s H  n['        U5      PM     sn5      U l        [         R"                  " 5       U l        [         R"                  " 5       U l        [%        [        U R                  5      S-
  SS5       Hx  nU R*                  R/                  [1        XR                  U R                  SS5      5        [3        SUR4                  -  5      nU R,                  R/                  [7        XS95        Mz     [         R"                  " 5       U l        [         R"                  " 5       U l        [%        [        U R                  5      S-
  5       Hc  nU R8                  R/                  [=        USS5      5        [3        SUR4                  -  5      nU R:                  R/                  [7        XS95        Me     U R?                  5         g s  snf s  snf )Nr•   r   rZ  r   rM  r   ) r   rk   rf   rN  r�   r2  Únum_fpn_stagesÚfeat_stridesr±   Úencode_proj_layersÚpositional_encoding_temperaturer/   r‘   Úout_stridesr5   rÝ   ri   rš   r›   rÆ   ÚaifiÚlateral_convsÚ
fpn_blocksr6  r‰   r²   rT  r®   Údownsample_convsÚ
pan_blocksrÂ   r  )rt   rf   r    r’   s       rN   rk   ÚDeimv2HybridEncoder.__init__@  s/  € Ü×&Ñ& tÔ4ØŒØ!×5Ñ5ˆÔÜ! $×"2Ñ"2Ó3°aÑ7ˆÔØ"×/Ñ/ˆÔØ"(×";Ñ";ˆÔØ"(×";Ñ";ˆÔØ/5×/UÑ/UˆÔ,Ø×)Ñ)ˆŒØ>B×>NÒ>NÓOÒ>N¸×4Ô4Ñ>NÑOˆÔØ×,Ñ,ˆÔØ×-Ñ-ˆŒä—M’MÄEÌ#Èd×NeÑNeÓJfÔDgÓ"hÒDg¸q¤?°6Ö#:ÑDgÑ"hÓiˆŒ	äŸ]š]›_ˆÔÜŸ-š-›/ˆŒÜ”s˜4×+Ñ+Ó,¨qÑ0°!°RÖ8ˆAØ×Ñ×%Ñ%Ü# F×,CÑ,CÀT×E\ÑE\Ð^_ÐabÓcôô ˜q 6×#4Ñ#4Ñ4Ó5ˆJØ�O‰O×"Ñ"Ô#5°fÑ#UÖVñ 9ô !#§¢£ˆÔÜŸ-š-›/ˆŒÜ”s˜4×+Ñ+Ó,¨qÑ0Ö1ˆAØ×!Ñ!×(Ñ(¬°f¸aÀÓ)CÔDÜ˜q 6×#4Ñ#4Ñ4Ó5ˆJØ�O‰O×"Ñ"Ô#5°fÑ#UÖVñ 2ð
 	�‰Õùò- Pùò #is   Â-KÄK"NrX  rö   r¢   c                 ó&  • UnU R                   R                  S:”  a8  [        U R                  5       H  u  pEU R                  U   " X5   40 UD6X5'   M!     US   /n[        [        U R                  U R                  5      5       Hr  u  nu  p‰X0R                  U-
  S-
     n
US   nU" U5      nX¶S'   [        R                  " USSS9n[        XºU R                  5      nU	" U5      nUR                  U5        Mt     UR                  5         US   /n[        [        U R                  U R                   5      5       HM  u  nu  nnUS   nXgS-      nU" U5      n[        UUU R                  5      nU" U5      nUR                  U5        MO     [#        US9$ )zŸ
Args:
    inputs_embeds (`list[torch.FloatTensor]`):
        Multi-scale feature maps from the backbone (one tensor per feature level) passed to the encoder.
r   rZ  r•   r[  r\  r]  r_  )rf   Úencoder_layersr3  rj  rm  r  rn  ro  rh  r4  r5  rß   rÝ   r6  Úreverserp  rq  rY   )rt   rX  rö   r[   r>  Úenc_indÚfpn_feature_mapsÚidxÚlateral_convrU  Úbackbone_feature_mapÚtop_fpn_feature_mapÚfused_feature_mapÚnew_fpn_feature_mapÚpan_feature_mapsÚdownsample_convrV  Útop_pan_feature_mapÚfpn_feature_mapÚdownsampled_feature_mapÚnew_pan_feature_maps                        rN   rª   ÚDeimv2HybridEncoder.forwardb  s¹  € ð %ˆà�;‰;×%Ñ%¨Ó)Ü'¨×(?Ñ(?Ö@‘
�Ø(,¯	©	°!ª°\Ñ5JÑ(UÈfÑ(U�Ó%ñ Að )¨Ñ,Ð-ÐÜ.7¼¸D×<NÑ<NÐPT×P_ÑP_Ó8`Ö.aÑ*ˆCÑ*�,Ø#/×0CÑ0CÀcÑ0IÈAÑ0MÑ#NÐ Ø"2°2Ñ"6ÐÙ".Ð/BÓ"CÐØ#6˜RÑ Ü"#§-¢-Ð0CÐRUÐ\eÑ"fÐÜ 1Ð2EÐ]a×]iÑ]iÓ jÐÙ"+Ð,=Ó">ÐØ×#Ñ#Ð$7Ö8ñ /bð 	× Ñ Ô"ð -¨QÑ/Ð0ÐÜ1:¼3¸t×?TÑ?TÐVZ×VeÑVeÓ;fÖ1gÑ-ˆCÑ-�/ 9Ø"2°2Ñ"6ÐØ.°Q©wÑ7ˆOÙ&5Ð6IÓ&JÐ#Ü 1Ð2IÈ?Ð\`×\hÑ\hÓ iÐÙ"+Ð,=Ó">ÐØ×#Ñ#Ð$7Ö8ñ 2hô #Ð0@ÑAÐArM   )rm  rf   rp  rj  r±   r/   ri  ro  rÝ   r�   rn  rh  r‘   rl  rq  rk  r{   )r>   r?   r@   rA   rB   r+   rk   rE   r^   r¬   r	   r
   rY   rª   rL   r=   rM   rN   r  r  9  sX   † ñð ˜|ô  ðH 48ñ(Bà˜EŸL™LÑ)¨DÑ0ð(Bð Ð+Ñ,ð(Bð 
÷	(Bð (BrM   r  c                   ó0   ^ • \ rS rSrS\4U 4S jjrSrU =r$ )ÚDeimv2Decoderi�  rf   c                 ó„   >• [         TU ]  US9  [        SUR                  UR                  SUR                  5      U l        g )Nrç   rÏ   r   )r|   rk   rƒ   rn   Údecoder_activation_functionÚquery_pos_headrî   s     €rN   rk   ÚDeimv2Decoder.__init__Ž  s6   ø€ Ü‰Ñ ÐÑ'Ü'¨¨6¯>©>¸6¿>¹>È1Èf×NpÑNpÓqˆÕrM   )r‰  )r>   r?   r@   rA   r+   rk   rL   r€   r�   s   @rN   r†  r†  �  s   ø† ðr˜|÷ rõ rrM   r†  c                   óÄ   • \ rS rSrS\4S jr    SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S	\	\
   S-  S
\\   4S jjrSrg)ÚDeimv2Modeli“  rf   c           
      óŽ  • [         R                  X5        [        UR                  SS 5      S:H  nU(       a  [	        U5      O
[        U5      U l        UR                  S:X  a  [        U5      O[        US9U l
        UR                  S:”  a<  [        R                  " UR                  S-   UR                  UR                  S9U l        UR"                  (       a0  [        R                  " UR$                  UR                  5      U l        [        R(                  " [        R*                  " UR                  UR                  5      [        R,                  " UR                  UR.                  S95      U l        [        R*                  " UR                  UR                  5      U l        [5        UR                  UR                  S	S
5      U l        UR8                  (       a&  U R;                  U R<                  S9u  U l        U l         [C        URD                  5      n/ nURD                  S   n[G        U5       H\  nURI                  URJ                  URD                  S   :X  a  [        RL                  " 5       O[O        XUR                  SS5      5        M^     [G        URP                  U-
  5       H\  nURI                  URJ                  URD                  S   :X  a  [        RL                  " 5       O[O        XUR                  S
S5      5        M^     [        RR                  " U5      U l*        [W        U5      U l,        U R[                  5         g )NrC   Ú
dinov3_vitr  rç   r   r•   )Úpadding_idx)ÚepsrÏ   r   )ÚdtyperZ  r   ).r   rk   Úgetattrr.   r"  r  Úconv_encoderr9   r  r  ÚencoderÚnum_denoisingri   Ú	EmbeddingÚ
num_labelsrn   Údenoising_class_embedÚlearn_initial_queryÚnum_queriesÚweight_embeddingÚ
Sequentialrm   Ú	LayerNormÚlayer_norm_epsÚ
enc_outputÚenc_score_headrƒ   Úenc_bbox_headÚanchor_image_sizeÚgenerate_anchorsr‘  ÚanchorsÚ
valid_maskr2  Údecoder_in_channelsr›   r6  r%  r�   r‰   Únum_feature_levelsrš   Údecoder_input_projr†  Údecoderr  )rt   rf   Ú	is_dinov3Únum_backbone_outsr¨  r�   r    s          rN   rk   ÚDeimv2Model.__init__”  sw  € Ü×&Ñ& tÔ4ä˜F×2Ñ2°LÀ$ÓGÈ<ÑWˆ	Þ?HÔ3°FÔ;ÔN_Ð`fÓNgˆÔà)/×)<Ñ)<ÀÓ)FÔ˜fÔ%ÔL_ÐgmÑLnð 	Œð ×Ñ !Ó#Ü)+¯ªØ×!Ñ! AÑ% v§~¡~À6×CTÑCTñ*ˆDÔ&ð ×%×%Ü$&§L¢L°×1CÑ1CÀVÇ^Á^Ó$TˆDÔ!äŸ-š-Ü�IŠI�f—n‘n f§n¡nÓ5Ü�LŠL˜Ÿ™¨V×-BÑ-BÑCó
ˆŒô !Ÿiši¨¯©¸×8IÑ8IÓJˆÔÜ& v§~¡~°v·~±~ÀqÈ!ÓLˆÔà×#×#Ø,0×,AÑ,AÈÏ
É
Ð,AÐ,SÑ)ˆDŒL˜$œ/ä × :Ñ :Ó;ÐØÐØ×0Ñ0°Ñ4ˆÜÐ(Ö)ˆAØ×%Ñ%à×%Ñ%¨×)CÑ)CÀBÑ)GÓGô —’”ä(¨¸f¿n¹nÈaÐQRÓSöñ *ô �v×0Ñ0Ð3DÑDÖEˆAØ×%Ñ%à×%Ñ%¨×)CÑ)CÀBÑ)GÓGô —’”ä(¨¸f¿n¹nÈaÐQRÓSöñ Fô #%§-¢-Ð0BÓ"CˆÔÜ$ VÓ,ˆŒà�‰ÕrM   NrØ   Ú
pixel_maskÚencoder_outputsrX  Úlabelsrö   c                 ó€  • Uc  Uc  [        S5      eUcG  UR                  u  pxpšUR                  nUc  [        R                  " XyU
4US9nU R                  U5      nOUR                  S   nUR                  nUnU R                  " U40 UD6n/ n[        UR                  5       H)  u  pïUR                  U R                  U   " U5      5        M+     U R                  R                  [        U5      :”  a›  UR                  U R                  [        U5         " UR                  S   5      5        [        [        U5      U R                  R                  5       H4  nUR                  U R                  U   " UR                  S   5      5        M6     / n/ n[        R                  " [        U5      S4U[        R                   S9n[        U5       Hh  u  pïUR                  SS  u  pšU	UUS4'   U
UUS4'   UR                  Xš45        UR#                  S5      R%                  SS5      nUR                  U5        Mj     [        R&                  " US5      n[        R&                  " UR)                  S	5      UR+                  S5      R-                  S5      S S 45      nU R.                  (       a   U R                  R0                  S:”  a†  Ubƒ  [3        UU R                  R4                  U R                  R6                  U R8                  U R                  R0                  U R                  R:                  U R                  R<                  S
9u  nnnnOSu  nnnn[        U5      nUR                  nUR>                  nU R.                  (       d  U R                  R@                  c   [C        U5      nU RE                  UUUS9u  nnO<U RF                  U RH                  nnURK                  UU5      URK                  UU5      nnURK                  UR>                  5      U-  nU RM                  U5      nU RO                  U5      nU RQ                  U5      U-   n [        RR                  " URU                  S5      RV                  U R                  R6                  SS9u  n!n"U RY                  SU"R[                  S5      R]                  SSU R                  S   5      S9n#[^        R`                  " U#5      n$Ub  [        Rb                  " UU#/S5      n#URY                  SU"R[                  S5      R]                  SSUR                  S   5      S9n%U R                  Rd                  (       a  U Rf                  Ri                  USS/5      n&OMURY                  SU"R[                  S5      R]                  SSUR                  S   5      S9n&U&Rk                  5       n&Ub  [        Rb                  " UU&/S5      n&U#Rk                  5       n'U Rl                  " S!U&UUU'UUUS.UD6n([o        S!0 SU(Rp                  _SU(Rr                  _SU(Rt                  _SU(Rv                  _SU(Rx                  _SU(Rz                  _SU(R|                  _SU(R~                  _SU(R€                  _SUR                  _SUR|                  _SUR~                  _SU'_SU%_SU$_SU_SU _S U_6$ )"Nz8You have to specify either pixel_values or inputs_embeds)r8  r   rZ  r   )r8  r‘  éþÿÿÿr•   )r•   )ÚtargetsÚnum_classesrš  Úclass_embedÚnum_denoising_queriesÚlabel_noise_ratioÚbox_noise_scale©NNNNr¥   )r¦   Úindex)rX  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_valuesr=   )AÚ
ValueErrorr1  r8  r^   Úonesr“  r”  r3  r[   r6  r¨  rf   r§  r2  r›   ÚemptyÚlongÚflattenÚ	transposerº   Ú	new_zerosÚprodÚcumsumrú   r•  r%   r—  rš  r˜  r¶  r·  r‘  r¢  rG   r£  r¤  r¥  r7  rŸ  r   r¡  ÚtopkÚmaxÚvaluesÚgatherÚ	unsqueezeÚrepeatr4  ÚsigmoidÚconcatr™  r›  ÚtileÚdetachr©  rU   r»  r¼  r½  r¾  r¿  rÀ  r\   r]   rÃ  ))rt   rØ   r­  r®  rX  r¯  rö   Ú
batch_sizeÚnum_channelsÚheightÚwidthr8  Ú
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)                                            rN   rª   ÚDeimv2Model.forwardÃ  s£  € ð Ñ MÑ$9ÜÐWÓXÐXð Ñ Ø6B×6HÑ6HÑ3ˆJ fØ!×(Ñ(ˆFØÑ!Ü"ŸZšZ¨*¸eÐ)DÈfÑU�
ð ×*Ñ*¨<Ó8‰Jà&×,Ñ,¨QÑ/ˆJØ"×)Ñ)ˆFØ&ˆJàŸ,š,Øñ
àñ
ˆð ˆÜ& ×'CÑ'CÖD‰MˆEØ�N‰N˜4×2Ñ2°5Ò9¸&ÓAÖBñ Eð �;‰;×)Ñ)¬C°«LÓ8Ø�N‰N˜4×2Ñ2´3°w³<Ò@À×A]ÑA]Ð^`ÑAaÓbÔcÜœ3˜w›<¨¯©×)GÑ)GÖH�Ø—‘˜t×6Ñ6°qÒ9¸/×:VÑ:VÐWYÑ:ZÓ[Ö\ñ Ið ˆØ ÐÜŸš¤c¨'£l°AÐ%6¸vÌUÏZÉZÑXˆÜ& wÖ/‰MˆEØ"ŸL™L¨¨Ð-‰MˆFØ'-ˆN˜5 !˜8Ñ$Ø',ˆN˜5 !˜8Ñ$Ø×&Ñ&¨ Ô7Ø—^‘^ AÓ&×0Ñ0°°AÓ6ˆFØ×!Ñ! &Ö)ñ 0ô Ÿš >°1Ó5ˆÜ!ŸIšI ~×'?Ñ'?ÀÓ'EÀ~×GZÑGZÐ[\ÓG]×GdÑGdÐefÓGgÐhkÐikÐGlÐ&mÓnÐð �=�=˜TŸ[™[×6Ñ6¸Ó:¸vÑ?Qô 9ØØ ŸK™K×2Ñ2Ø ŸK™K×3Ñ3Ø ×6Ñ6Ø&*§k¡k×&?Ñ&?Ø"&§+¡+×"?Ñ"?Ø $§¡× ;Ñ ;ññØØ$ØÙ%ð \rÑXˆOÐ1°>ÐCXä˜Ó(ˆ
Ø×&Ñ&ˆØ×$Ñ$ˆð �=�=˜DŸK™K×9Ñ9ÑAô $)Ð)<Ó#=Ð Ø"&×"7Ñ"7Ð8LÐU[ÐchÐ"7Ð"iÑˆG‘Zà"&§,¡,°·±�ZˆGØ")§*¡*¨V°UÓ";¸Z¿]¹]È6ÐSXÓ=Y�ZˆGð —‘˜~×3Ñ3Ó4°~ÑEˆàŸ™¨Ó/ˆà ×/Ñ/°Ó>ÐØ#'×#5Ñ#5°mÓ#DÀwÑ#NÐ ä—j’jÐ!2×!6Ñ!6°rÓ!:×!AÑ!AÀ4Ç;Á;×CZÑCZÐ`aÑb‰ˆˆ8à!9×!@Ñ!@Ø˜×+Ñ+¨BÓ/×6Ñ6°q¸!Ð=U×=[Ñ=[Ð\^Ñ=_Ó`ð "Að "
Ðô Ÿ)š)Ð$:Ó;ˆØÑ+Ü%*§\¢\Ð3GÐI_Ð2`ÐbcÓ%dÐ"à+×2Ñ2Ø˜×+Ñ+¨BÓ/×6Ñ6°q¸!Ð=N×=TÑ=TÐUWÑ=XÓYð 3ð 
ˆð
 �;‰;×*×*Ø×*Ñ*×/Ñ/°¸QÀÐ0BÓC‰Fà"×)Ñ)¨a°x×7IÑ7IÈ"Ó7M×7TÑ7TÐUVÐXYÐ[h×[nÑ[nÐoqÑ[rÓ7sÐ)Ð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ð
ñ ,ð
ñ ,ð
ñ  0ð!
ñ" &>ð#
ñ$ #8ð%
ð 	
rM   )r¤  r“  r©  r¨  r˜  r¡  rŸ  r   r”  r¥  r›  r¸  )r>   r?   r@   rA   r+   rk   r^   r_   Ú
LongTensorrE   Údictr	   r
   rª   rL   r=   rM   rN   rŒ  rŒ  “  sŸ   † ð-˜|ô -ðd /3Ø48Ø26Ø$(ñ]
à×'Ñ'ð]
ð ×$Ñ$ tÑ+ð]
ð ×*Ñ*¨TÑ1ð	]
ð
 ×(Ñ(¨4Ñ/ð]
ð �T‘
˜TÑ!ð]
ð Ð+Ñ,÷]
ð ]
rM   rŒ  c                   óJ   ^ • \ rS rSrSr\S 5       rS\4S jrU 4S jr	Sr
U =r$ )ÚDeimv2ForObjectDetectionic  Nc                 ó\   • SSSS.nU R                   R                  (       a
  SUS'   SUS'   U$ )	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+)rf   r;   )rt   Úkeyss     rN   Ú_tied_weights_keysÚ+Deimv2ForObjectDetection._tied_weights_keysf  s>   € ð (9Ø6Ø4ñ
ˆð
 �;‰;×&×&Ø>[ˆDÐ:Ñ;Ø-<ˆDÐ)Ñ*ØˆrM   rf   c                 óú  • [         R                  X5        UR                  S:¼  a  UR                  OUR                  UR                  -   U l        [	        U5      U l        [        UR                  UR                  -  5      nUR                  n[        R                  " [        U5       Vs/ s H.  n[        R                  " UR                  UR                  5      PM0     sn5      U l        UR                   (       aR  [#        UR                  UR                  SUR$                  S-   -  S5      n[        R                  " U/U-  5      U l        OÄ[        R                  " [        U R                  S-   5       Vs/ s H5  n[#        UR                  UR                  SUR$                  S-   -  S5      PM7     sn[        UR                  U R                  -
  S-
  5       Vs/ s H   n[#        X"SUR$                  S-   -  S5      PM"     sn-   5      U l        U R                  U R
                  R(                  l        U R&                  U R
                  R(                  l        U R+                  5         g s  snf s  snf s  snf )Nr   rÏ   r•   r   )r   rk   Úeval_idxÚdecoder_layersrŒ  r  r²   Úlayer_scaler%  ri   rš   r›   rm   rn   r—  r´  r;   rƒ   Úmax_num_binsr÷  r©  r  )rt   rf   Ú
scaled_dimÚnum_predr    Úshared_bboxs         rN   rk   Ú!Deimv2ForObjectDetection.__init__r  sþ  € Ü×&Ñ& tÔ4à+1¯?©?¸aÓ+?˜ŸšÀV×EZÑEZÐ]c×]lÑ]lÑElˆŒÜ  Ó(ˆŒ
Ü˜6×-Ñ-°×0BÑ0BÑBÓCˆ
Ø×(Ñ(ˆÜŸ=š=Ô`eÐfnÔ`oÓ)pÒ`oÐ[\¬"¯)ª)°F·N±NÀF×DUÑDUÖ*VÑ`oÑ)pÓqˆÔØ×!×!Ü# F×$6Ñ$6¸×8JÑ8JÈAÐQW×QdÑQdÐghÑQhÑLiÐklÓmˆKÜ Ÿmšm¨[¨M¸HÑ,DÓEˆD�Oä Ÿmšmô # 4§=¡=°1Ñ#4Ô5óâ5˜ô ˜f×0Ñ0°&×2DÑ2DÀaÈ6×K^ÑK^ÐabÑKbÑFcÐefÖgÙ5ñô # 6×#8Ñ#8¸4¿=¹=Ñ#HÈ1Ñ#LÔMóâM˜ô ˜j°a¸6×;NÑ;NÐQRÑ;RÑ6SÐUVÖWÙMññ	ó	ˆDŒOð *.×)9Ñ)9ˆ�
‰
×ÑÔ&Ø(,¯©ˆ�
‰
×ÑÔ%Ø�‰Õùò% *qùòùòs   Â+5I.Å9<I3Ç'I8
c                  ó:   >• [        5       R                  " S0 U D6  g)a_  
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}"
...     )
```
Nr=   )r|   rª   )Úsuper_kwargsr~   s    €rN   rª   Ú Deimv2ForObjectDetection.forward�  s   ø€ ôT 	‹�ŠÑ'˜,Ó'rM   )r÷  r´  rü  r  )r>   r?   r@   rA   r  Úpropertyrù  r+   rk   rª   rL   r€   r�   s   @rN   rõ  rõ  c  s1   ø† ØÐàñ	ó ð	ð˜|ô ÷6*(ó *(rM   rõ  )r+   rŒ  r   rõ  )r4   )\Údataclassesr   r^   Útorch.nnri   Útorch.nn.functionalrü   r4  Ú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+   rP   rU   rY   ra   rd   rx   rƒ   r†   r‰   rŒ   rj   r�   r®   rÂ   rÄ   rÆ   rÈ   r¬   rK   rß   rá   rã   rå   r   r  r"  r  r  r†  rŒ  rõ  Ú__all__r=   rM   rN   Ú<module>r     sf  ðõ "ã Ý ß Ð Ý .å &Ý +Ý +Ý &ß @Ñ @Ý 7ß EÝ Ý 5÷÷ ÷ ÷ ÷ ó ÷, :ð 
×	Ò	˜HÓ	%€ñ Ð?Ñ@ØôC+�;ó C+ó ó AðC+ôL	Ð,ô 	ô	Ð(ô 	ñ ðñð ô<˜+ó <ó óð<ô	�Lô 	ô �hô  ô+�ô +ô	�ô 	ô	Ð*Lô 	ô	Ð,ô 	ô	Ð(ô 	ô4˜Ÿ	™	ô 4ô<0˜Ÿ™ô 0ô<	�;ô 	ô	Ð*ô 	ô	�nô 	ôA §¡ô Añ&< U§\¡\ð <À%Ç,Á,ð <ÐY\ð <Ðin×iuÑiuõ <ô	�]ô 	ô	�ô 	ô=Ð*ô =ô@5Ð0ô 5ô"UÐ-ô Uô8+Ð3ô +ô\09Ð-ô 09ôfQBÐ,ô QBôhr�Lô rôM
�*ô M
ô`T(Ð6ô T(òn�rM   