Ë
    ÜÓ^j×s  ã                   óÆ  — d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ  ej8                  e«      Z G d„ dej>                  «      Z ejB                  jD                  d„ «       Z#d„ Z$ G d„ dej>                  «      Z% G d„ dej>                  «      Z& G d„ dej>                  «      Z' G d„ dej>                  «      Z(d„ Z)d„ Z* G d„ dej>                  «      Z+ G d„ d e«      Z, G d!„ d"ej>                  «      Z-e G d#„ d$e«      «       Z.e G d%„ d&e.«      «       Z/ ed'¬(«       G d)„ d*ee.«      «       Z0g d+¢Z1y),zPyTorch ViTDet backbone.é    N)Únné   )Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚGradientCheckpointingLayer)ÚBackboneOutputÚBaseModelOutput)ÚPreTrainedModel)Úauto_docstringÚlogging)Úcan_return_tupleé   )ÚVitDetConfigc                   ó`   ‡ — e Zd ZdZˆ fd„Zd„ Zdej                  dej                  fd„Zˆ xZ	S )ÚVitDetEmbeddingsz·
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) to be consumed by a Transformer.
    c                 óp  •— t         ‰| �  «        |j                  |j                  }}|j                  |j
                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _
        || _        || _        || _        |j                  r?|dz   }t        j                  t        j                   d||j
                  «      «      | _        nd | _        t        j$                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__Úpretrain_image_sizeÚ
patch_sizeÚnum_channelsÚhidden_sizeÚ
isinstanceÚcollectionsÚabcÚIterableÚ
image_sizeÚnum_patchesÚ use_absolute_position_embeddingsr   Ú	ParameterÚtorchÚzerosÚposition_embeddingsÚConv2dÚ
projection)	ÚselfÚconfigr!   r   r   r   r"   Únum_positionsÚ	__class__s	           €úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/vitdet/modeling_vitdet.pyr   zVitDetEmbeddings.__init__*   s  ø€ Ü‰ÑÔØ!'×!;Ñ!;¸V×=NÑ=N�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔà×2Ò2à'¨!™OˆMÜ')§|¡|´E·K±KÀÀ=ÐRX×RdÑRdÓ4eÓ'fˆDÕ$à'+ˆDÔ$äŸ)™) L°+È:Ð^hÔiˆ�ó    c                 óÎ  — |r|dd…dd…f   }|j                   d   }t        t        j                  |«      «      }||z  |k7  rt	        d«      ‚t
        j                  j                  «       s
||k7  s||k7  r]t        j                  j                  |j                  d||d«      j                  dddd«      ||fdd	¬
«      }|j                  dddd«      S |j                  d||d«      S )a¯  
        Calculate absolute positional embeddings. If needed, resize embeddings and remove cls_token dimension for the
        original embeddings.

        Args:
            abs_pos_embeddings (`torch.Tensor`):
                Absolute positional embeddings with (1, num_position, num_channels).
            has_cls_token (`bool`):
                If true, has 1 embedding in abs_pos_embeddings for cls token.
            height (`int`):
                Height of input image tokens.
            width (`int`):
                Width of input image tokens.

        Returns:
            Absolute positional embeddings after processing with shape (1, height, width, num_channels)
        Nr   z5Absolute position embeddings must be a square number.éÿÿÿÿr   r   é   ÚbicubicF)ÚsizeÚmodeÚalign_corners)ÚshapeÚintÚmathÚsqrtÚ
ValueErrorr%   ÚjitÚ
is_tracingr   Ú
functionalÚinterpolateÚreshapeÚpermute)r*   Úabs_pos_embeddingsÚhas_cls_tokenÚheightÚwidthÚnum_positionr4   Únew_abs_pos_embeddingss           r.   Úget_absolute_positionsz'VitDetEmbeddings.get_absolute_positions@   së   € ñ$ Ø!3²A°q±r°EÑ!:ÐØ)×/Ñ/°Ñ2ˆÜ”4—9‘9˜\Ó*Ó+ˆØ�$‰;˜,Ò&ÜÐTÓUÐUä�9‰9×ÑÔ! d¨f¢n¸Àºä%'§]¡]×%>Ñ%>Ø"×*Ñ*¨1¨d°D¸"Ó=×EÑEÀaÈÈAÈqÓQØ˜e�_ØØ#ð	 &?ó &Ð"ð *×1Ñ1°!°Q¸¸1Ó=Ð=à%×-Ñ-¨a°¸ÀÓCÐCr/   Úpixel_valuesÚreturnc                 óz  — |j                   d   }|| j                  k7  rt        d| j                  › d|› d�«      ‚| j                  |«      }| j                  �c|j                  dddd«      }|| j                  | j                  d|j                   d   |j                   d   «      z   }|j                  dddd«      }|S )	Nr   zoMake sure that the channel dimension of the pixel values match with the one set in the configuration. Expected z	 but got ú.r   r2   r   T)r7   r   r;   r)   r'   rA   rH   )r*   rI   r   Ú
embeddingss       r.   ÚforwardzVitDetEmbeddings.forwardf   sÙ   € Ø#×)Ñ)¨!Ñ,ˆØ˜4×,Ñ,Ò,ÜðØ!×.Ñ.Ð/¨y¸¸ÀaðIóð ð —_‘_ \Ó2ˆ
à×#Ñ#Ð/à#×+Ñ+¨A¨q°!°QÓ7ˆJà# d×&AÑ&AØ×(Ñ(¨$°
×0@Ñ0@ÀÑ0CÀZ×EUÑEUÐVWÑEXó'ñ ˆJð $×+Ñ+¨A¨q°!°QÓ7ˆJàÐr/   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rH   r%   ÚTensorrN   Ú__classcell__©r-   s   @r.   r   r   $   s0   ø„ ñô
jò,$DðL E§L¡Lð °U·\±\÷ r/   r   c                 óT  — t        dt        | |«      z  dz
  «      }|j                  d   |k7  rtt        j                  j                  |j                  d|j                  d   d«      j                  ddd«      |d¬«      }|j                  d|«      j                  dd«      }n|}t        j                  | «      dd…df   t        || z  d«      z  }t        j                  |«      ddd…f   t        | |z  d«      z  }||z
  |dz
  t        | |z  d«      z  z   }||j                  «          S )	a�  
    Get relative positional embeddings according to the relative positions of query and key sizes.

    Args:
        q_size (`int`):
            Size of query q.
        k_size (`int`):
            Size of key k.
        rel_pos (`torch.Tensor`):
            Relative position embeddings (num_embeddings, num_channels).

    Returns:
        Extracted positional embeddings according to relative positions.
    r2   r   r   r1   Úlinear)r4   r5   Ng      ð?)r8   Úmaxr7   r   r>   r?   r@   rA   r%   ÚarangeÚlong)Úq_sizeÚk_sizeÚrel_posÚmax_rel_distÚrel_pos_resizedÚq_coordsÚk_coordsÚrelative_coordss           r.   Úget_rel_posrc   |   s%  € ô  �qœ3˜v vÓ.Ñ.°Ñ2Ó3€Là‡}�}�QÑ˜<Ò'äŸ-™-×3Ñ3Ø�O‰O˜A˜wŸ}™}¨QÑ/°Ó4×<Ñ<¸QÀÀ1ÓEØØð 4ó 
ˆð
 *×1Ñ1°"°lÓC×KÑKÈAÈqÓQ‰à!ˆô �|‰|˜FÓ#¢A t GÑ,¬s°6¸F±?ÀCÓ/HÑH€HÜ�|‰|˜FÓ# Dª! GÑ,¬s°6¸F±?ÀCÓ/HÑH€HØ (Ñ*¨v¸©z¼SÀÈ&ÁÐRUÓ=VÑ.VÑV€Oà˜?×/Ñ/Ó1Ñ2Ð2r/   c                 ó–  — |\  }}|\  }}	t        |||«      }
t        ||	|«      }|j                  \  }}}|j                  ||||«      }t        j                  d||
«      }
t        j                  d||«      }| j                  |||||	«      |
dd…dd…dd…dd…df   z   |dd…dd…dd…ddd…f   z   j                  |||z  ||	z  «      } | S )aÀ  
    Calculate decomposed Relative Positional Embeddings as introduced in
    [MViT2](https://github.com/facebookresearch/mvit/blob/19786631e330df9f3622e5402b4a419a263a2c80/mvit/models/attention.py).

    Args:
        attn (`torch.Tensor`):
            Attention map.
        queries (`torch.Tensor`):
            Query q in the attention layer with shape (batch_size, queries_height * queries_width, num_channels).
        rel_pos_h (`torch.Tensor`):
            Relative position embeddings (Lh, num_channels) for height axis.
        rel_pos_w (`torch.Tensor`):
            Relative position embeddings (Lw, num_channels) for width axis.
        q_size (`tuple[int]`):
            Spatial sequence size of query q with (queries_height, queries_width).
        k_size (`tuple[int]`):
            Spatial sequence size of key k with (keys_height, keys_width).

    Returns:
        attn (Tensor): attention map with added relative positional embeddings.
    zbhwc,hkc->bhwkzbhwc,wkc->bhwkN)rc   r7   r@   r%   ÚeinsumÚview)ÚattnÚqueriesÚ	rel_pos_hÚ	rel_pos_wr[   r\   Úqueries_heightÚqueries_widthÚkeys_heightÚ
keys_widthÚrelative_heightÚrelative_widthÚ
batch_sizeÚ_ÚdimÚr_qÚrelative_weights                    r.   Ú!add_decomposed_relative_positionsrv   ¡   sê   € ð, %+Ñ!€N�MØ$Ñ€K�Ü! .°+¸yÓI€OÜ  °
¸IÓF€Nà Ÿ™Ñ€J��3Ø
�/‰/˜* n°mÀSÓ
I€CÜ—l‘lÐ#3°S¸/ÓJ€OÜ—l‘lÐ#3°S¸.ÓI€Oð 	�	‰	�*˜n¨m¸[È*ÓUØ
š!šQ¢¢1 dÐ*Ñ
+ñ	,à
š!šQ¢ 4ªÐ*Ñ
+ñ	,÷ �dˆ:�~¨Ñ5°{ÀZÑ7OÓPð	 	ð €Kr/   c                   ó,   ‡ — e Zd ZdZdˆ fd„	Zdd„Zˆ xZS )ÚVitDetAttentionz=Multi-head Attention block with relative position embeddings.c                 ó   •— t         ‰| �  «        |j                  }|j                  }|| _        ||z  }|dz  | _        t        j                  ||dz  |j                  ¬«      | _	        t        j                  ||«      | _
        |j                  | _        | j                  rot        j                  t        j                  d|d   z  dz
  |«      «      | _        t        j                  t        j                  d|d   z  dz
  |«      «      | _        yy)zô
        Args:
            config (`VitDetConfig`):
                Model configuration.
            input_size (`tuple[int]`, *optional*):
                Input resolution, only required in case relative position embeddings are added.
        g      à¿r   ©Úbiasr2   r   r   N)r   r   r   Únum_attention_headsÚ	num_headsÚscaler   ÚLinearÚqkv_biasÚqkvÚprojÚ use_relative_position_embeddingsr$   r%   r&   ri   rj   )r*   r+   Ú
input_sizers   r}   Úhead_dimr-   s         €r.   r   zVitDetAttention.__init__Í   sÞ   ø€ ô 	‰ÑÔà× Ñ ˆØ×.Ñ.ˆ	à"ˆŒØ˜)Ñ#ˆØ˜t‘^ˆŒ
ä—9‘9˜S #¨¡'°·±Ô@ˆŒÜ—I‘I˜c 3Ó'ˆŒ	à06×0WÑ0WˆÔ-Ø×0Ò0äŸ\™\¬%¯+©+°a¸*ÀQ¹-Ñ6GÈ!Ñ6KÈXÓ*VÓWˆDŒNÜŸ\™\¬%¯+©+°a¸*ÀQ¹-Ñ6GÈ!Ñ6KÈXÓ*VÓWˆD�Nð 1r/   c           	      ó0  — |j                   \  }}}}| j                  |«      j                  |||z  d| j                  d«      j	                  ddddd«      }|j                  d|| j                  z  ||z  d«      j                  d«      \  }}	}
|| j                  z  |	j                  dd«      z  }| j                  r(t        ||| j                  | j                  ||f||f«      }|j                  d¬«      }||
z  }|j                  || j                  ||d«      }|j	                  ddddd«      }|j                  |||d«      }| j                  |«      }|r>|j                  || j                  |j                   d   |j                   d   «      }||f}|S |f}|S )	Nr   r1   r2   r   r   é   éþÿÿÿ)rs   )r7   r�   r@   r}   rA   Úunbindr~   Ú	transposerƒ   rv   ri   rj   Úsoftmaxrf   r‚   )r*   Úhidden_stateÚoutput_attentionsrq   rD   rE   rr   r�   rh   ÚkeysÚvaluesÚattention_scoresÚattention_probsÚoutputss                 r.   rN   zVitDetAttention.forwardç   s²  € Ø'3×'9Ñ'9Ñ$ˆ
�F˜E 1à�h‰h�|Ó$×,Ñ,¨Z¸À%¹ÈÈDÏNÉNÐ\^Ó_×gÑgÐhiÐklÐnoÐqrÐtuÓvˆà #§¡¨A¨z¸D¿N¹NÑ/JÈFÐUZÉNÐ\^Ó _× fÑ fÐghÓ iÑˆ��và# d§j¡jÑ0°D·N±NÀ2ÀrÓ4JÑJÐà×0Ò0Ü@Ø  '¨4¯>©>¸4¿>¹>ÈFÐTYÈ?Ð]cÐejÐ\kó Ðð +×2Ñ2°rÐ2Ó:ˆà&¨Ñ/ˆØ#×(Ñ(¨°T·^±^ÀVÈUÐTVÓWˆØ#×+Ñ+¨A¨q°!°Q¸Ó:ˆØ#×+Ñ+¨J¸ÀÀrÓJˆØ—y‘y Ó.ˆáØ-×5Ñ5Ø˜DŸN™N¨O×,AÑ,AÀ"Ñ,EÀ×G\ÑG\Ð]_ÑG`óˆOð $ _Ð5ˆGð ˆð $�oˆGàˆr/   ©N©F©rO   rP   rQ   rR   r   rN   rT   rU   s   @r.   rx   rx   Ê   s   ø„ ÙGõX÷4r/   rx   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚVitDetLayerNormaL  
    A LayerNorm variant, popularized by Transformers, that performs point-wise mean and variance normalization over the
    channel dimension for inputs that have shape (batch_size, channels, height, width).
    https://github.com/facebookresearch/ConvNeXt/blob/d1fa8f6fef0a165b27399986cc2bdacc92777e40/models/convnext.py#L119
    c                 óô   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        t        j                  t	        j                  |«      «      | _        || _	        |f| _
        y r“   )r   r   r   r$   r%   ÚonesÚweightr&   r{   ÚepsÚnormalized_shape)r*   rœ   r›   r-   s      €r.   r   zVitDetLayerNorm.__init__  sT   ø€ Ü‰ÑÔÜ—l‘l¤5§:¡:Ð.>Ó#?Ó@ˆŒÜ—L‘L¤§¡Ð-=Ó!>Ó?ˆŒ	ØˆŒØ!1Ð 3ˆÕr/   c                 ó  — |j                  dd¬«      }||z
  j                  d«      j                  dd¬«      }||z
  t        j                  || j                  z   «      z  }| j
                  d d …d d f   |z  | j                  d d …d d f   z   }|S )Nr   T)Úkeepdimr2   )ÚmeanÚpowr%   r:   r›   rš   r{   )r*   ÚxÚuÚss       r.   rN   zVitDetLayerNorm.forward  s†   € Ø�F‰F�1˜dˆFÓ#ˆØ�‰U�K‰K˜‹N×Ñ ¨4ÐÓ0ˆØ�‰U”e—j‘j  T§X¡X¡Ó.Ñ.ˆØ�K‰Kš˜4 ˜Ñ&¨Ñ*¨T¯Y©Y²q¸$À°}Ñ-EÑEˆØˆr/   )g�íµ ÷Æ°>r•   rU   s   @r.   r—   r—     s   ø„ ñõ4ör/   r—   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚVitDetResBottleneckBlockz�
    The standard bottleneck residual block without the last activation layer. It contains 3 conv layers with kernels
    1x1, 3x3, 1x1.
    c                 ó˜  •— t         ‰| �  «        t        j                  ||dd¬«      | _        t        |«      | _        t        |j                     | _	        t        j                  ||ddd¬«      | _
        t        |«      | _        t        |j                     | _        t        j                  ||dd¬«      | _        t        |«      | _        y)ar  
        Args:
            config (`VitDetConfig`):
                Model configuration.
            in_channels (`int`):
                Number of input channels.
            out_channels (`int`):
                Number of output channels.
            bottleneck_channels (`int`):
                Number of output channels for the 3x3 "bottleneck" conv layers.
        r   Frz   r   )Úpaddingr{   N)r   r   r   r(   Úconv1r—   Únorm1r   Ú
hidden_actÚact1Úconv2Únorm2Úact2Úconv3Únorm3)r*   r+   Úin_channelsÚout_channelsÚbottleneck_channelsr-   s        €r.   r   z!VitDetResBottleneckBlock.__init__$  s¤   ø€ ô 	‰ÑÔÜ—Y‘Y˜{Ð,?ÀÈÔOˆŒ
Ü$Ð%8Ó9ˆŒ
Ü˜6×,Ñ,Ñ-ˆŒ	ä—Y‘YÐ2Ð4GÈÐTUÐ\aÔbˆŒ
Ü$Ð%8Ó9ˆŒ
Ü˜6×,Ñ,Ñ-ˆŒ	ä—Y‘YÐ2°LÀ!È%ÔPˆŒ
Ü$ \Ó2ˆ�
r/   c                 óN   — |}| j                  «       D ]
  } ||«      }Œ ||z   }|S r“   )Úchildren)r*   r¡   ÚoutÚlayers       r.   rN   z VitDetResBottleneckBlock.forward<  s5   € ØˆØ—]‘]“_ò 	ˆEÙ˜“*‰Cð	ð �#‰gˆØˆ
r/   r•   rU   s   @r.   r¥   r¥     s   ø„ ñô
3ö0r/   r¥   c                   ód   ‡ — e Zd Zdededdfˆ fd„Zdej                  dej                  fd„Zˆ xZS )Ú	VitDetMlpÚin_featuresÚhidden_featuresrJ   Nc                 ó  •— t         ‰| �  «        t        j                  ||«      | _        t
        |j                     | _        t        j                  ||«      | _        t        j                  |j                  «      | _        y r“   )r   r   r   r   Úfc1r   rª   ÚactÚfc2ÚDropoutÚdropout_probÚdrop)r*   r+   rº   r»   r-   s       €r.   r   zVitDetMlp.__init__F  sZ   ø€ Ü‰ÑÔÜ—9‘9˜[¨/Ó:ˆŒÜ˜&×+Ñ+Ñ,ˆŒÜ—9‘9˜_¨kÓ:ˆŒÜ—J‘J˜v×2Ñ2Ó3ˆ�	r/   r¡   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r“   )r½   r¾   rÂ   r¿   )r*   r¡   s     r.   rN   zVitDetMlp.forwardM  sH   € Ø�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�I‰I�a‹Lˆàˆr/   )	rO   rP   rQ   r8   r   r%   rS   rN   rT   rU   s   @r.   r¹   r¹   E  s8   ø„ ð4¨Cð 4À#ð 4È$õ 4ð˜Ÿ™ð ¨%¯,©,÷ r/   r¹   c           	      óT  — | j                   \  }}}}| |z  }| |z  }t        j                  j                  | ddd|d|f«      } ||z   ||z   }	}||z  }
|	|z  }| j	                  ||
||||«      } | j                  dddddd«      j                  «       j	                  d|||«      }|||	ffS )a  
    Partition into non-overlapping windows with padding if needed.

    Args:
        hidden_state (`torch.Tensor`):
            Input tokens with [batch_size, height, width, num_channels].
        window_size (`int`):
            Window size.

    Returns:
        `tuple(torch.FloatTensor)` comprising various elements:
        - windows: windows after partition with [batch_size * num_windows, window_size, window_size, num_channels].
        - (padded_height, padded_width): padded height and width before partition
    r   r   r   r2   r‡   é   r1   )r7   r   r>   Úpadrf   rA   Ú
contiguous)rŒ   Úwindow_sizerq   rD   rE   r   Ú
pad_heightÚ	pad_widthÚpadded_heightÚpadded_widthÚn_hÚn_wÚwindowss                r.   Úwindow_partitionrÐ   W  sÝ   € ð /;×.@Ñ.@Ñ+€J�˜˜|ð �'˜[Ñ(€JØ�˜;Ñ&€IÜ—=‘=×$Ñ$ \°A°q¸!¸YÈÈ:Ð3VÓW€LØ"(¨:Ñ"5°u¸yÑ7H�<€Mà
˜;Ñ
&€CØ
˜+Ñ
%€CØ×$Ñ$ Z°°kÀ3ÈÐUaÓb€LØ×"Ñ" 1 a¨¨A¨q°!Ó4×?Ñ?ÓA×FÑFÀrÈ;ÐXcÐeqÓr€GØ�] LÐ1Ð1Ð1r/   c                 ó.  — |\  }}|\  }}||z  }||z  }	| j                   d   ||	z  z  }
| j                  |
||	||d«      }|j                  dddddd«      j                  «       }|j                  |
||d«      }|dd…d|…d|…dd…f   j                  «       S )	aB  
    Window unpartition into original sequences and removing padding.

    Args:
        windows (`torch.Tensor`):
            Input tokens with [batch_size * num_windows, window_size, window_size, num_channels].
        window_size (`int`):
            Window size.
        pad_height_width (`tuple[int]`):
            Padded height and width (padded_height, padded_width).
        height_width (`tuple[int]`):
            Original height and width before padding.

    Returns:
        hidden_state: unpartitioned sequences with [batch_size, height, width, num_channels].
    r   r1   r   r   r2   r‡   rÅ   N)r7   rf   rA   rÇ   )rÏ   rÈ   Úpad_height_widthÚheight_widthrË   rÌ   rD   rE   rÍ   rÎ   rq   rŒ   s               r.   Úwindow_unpartitionrÔ   v  s¹   € ð" #3Ñ€M�<Ø �M€FˆEØ
˜;Ñ
&€CØ
˜+Ñ
%€CØ—‘˜qÑ! c¨C¡iÑ0€JØ—<‘< 
¨C°°kÀ;ÐPRÓS€LØ×'Ñ'¨¨1¨a°°A°qÓ9×DÑDÓF€LØ×$Ñ$ Z°ÀÈbÓQ€Làš˜7˜F˜7 F U FªAÐ-Ñ.×9Ñ9Ó;Ð;r/   c                   ór   ‡ — e Zd ZdZd	deddfˆ fd„Zdej                  dej                  fd„Zde	fd„Z
ˆ xZS )
ÚVitDetDropPathzÏStochastic depth (DropPath) per sample, for residual blocks.

    Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
    <https://arxiv.org/abs/1603.09382>`_.
    Ú	drop_probrJ   Nc                 ó0   •— t         ‰| �  «        || _        y r“   )r   r   r×   )r*   r×   r-   s     €r.   r   zVitDetDropPath.__init__›  s   ø€ Ü‰ÑÔØ"ˆ�r/   Úhidden_statesc                 óP  — | j                   dk(  s| j                  s|S d| j                   z
  }|j                  d   fd|j                  dz
  z  z   }t	        j
                  ||j                  |j                  ¬«      }t	        j                  ||z   «      }|j                  |«      |z  S )Nç        r   r   )r   )ÚdtypeÚdevice)
r×   Útrainingr7   Úndimr%   ÚrandrÜ   rÝ   ÚfloorÚdiv)r*   rÙ   Ú	keep_probr7   Úrandom_tensors        r.   rN   zVitDetDropPath.forwardŸ  s—   € Ø�>‰>˜SÒ ¨¯ªØ Ð Ø˜Ÿ™Ñ&ˆ	Ø×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆÜŸ
™
 5°×0CÑ0CÈM×L`ÑL`ÔaˆÜŸ™ M°IÑ$=Ó>ˆØ× Ñ  Ó+¨mÑ;Ð;r/   c                 ó    — d| j                   › �S )Nzp=)r×   ©r*   s    r.   Ú
extra_reprzVitDetDropPath.extra_repr¨  s   € Ø�D—N‘NÐ#Ð$Ð$r/   )rÛ   )rO   rP   rQ   rR   Úfloatr   r%   rS   rN   Ústrrç   rT   rU   s   @r.   rÖ   rÖ   ”  sB   ø„ ññ# %ð #°$õ #ð< U§\¡\ð <°e·l±ló <ð%˜C÷ %r/   rÖ   c                   óº   ‡ — e Zd ZdZ	 ddededededdf
ˆ fd„Z	 dd	e	j                  d
edee	j                  e	j                  f   ee	j                     z  fd„Zˆ xZS )ÚVitDetLayerzCThis corresponds to the Block class in the original implementation.r+   Údrop_path_raterÈ   Úuse_residual_blockrJ   Nc                 óÜ  •— t         ‰	| �  «        |j                  }|j                  }t	        |t
        t        f«      r|n||f}|j                  }t	        |t
        t        f«      r|n||f}|d   |d   z  |d   |d   z  f}t        j                  ||j                  ¬«      | _        t        ||dk(  r|n||f¬«      | _        |dkD  rt        |«      nt        j                  «       | _        t        j                  ||j                  ¬«      | _        t%        ||t'        ||j(                  z  «      ¬«      | _        || _        || _        | j.                  rt1        ||||dz  ¬«      | _        y y )	Nr   r   )r›   )r„   rÛ   )r+   rº   r»   r2   )r+   r±   r²   r³   )r   r   r   r!   r   ÚlistÚtupler   r   Ú	LayerNormÚlayer_norm_epsr©   rx   Ú	attentionrÖ   ÚIdentityÚ	drop_pathr­   r¹   r8   Ú	mlp_ratioÚmlprÈ   rí   r¥   Úresidual)
r*   r+   rì   rÈ   rí   rs   r!   r   r„   r-   s
            €r.   r   zVitDetLayer.__init__¯  sX  ø€ ô 	‰ÑÔà× Ñ ˆà×&Ñ&ˆ
Ü#-¨j¼4Ä¸-Ô#H‘ZÈzÐ[eÐNfˆ
à×&Ñ&ˆ
Ü#-¨j¼4Ä¸-Ô#H‘ZÈzÐ[eÐNfˆ
à  ‘m z°!¡}Ñ4°jÀ±mÀzÐRSÁ}Ñ6TÐUˆ
Ü—\‘\ #¨6×+@Ñ+@ÔAˆŒ
Ü(Ø¨[¸AÒ-=™zÀKÐQ\ÐC]ô
ˆŒð <JÈCÒ;Oœ¨Ô7ÔUW×U`ÑU`ÓUbˆŒÜ—\‘\ #¨6×+@Ñ+@ÔAˆŒ
Ü F¸ÌSÐQTÐW]×WgÑWgÑQgÓMhÔiˆŒà&ˆÔà"4ˆÔØ×"Ò"ä4ØØØ Ø$'¨1¡Hô	ˆD�Mð #r/   rÙ   r�   c                 óf  — |j                  dddd«      }|}| j                  |«      }| j                  dkD  r7|j                  d   |j                  d   }}t	        || j                  «      \  }}| j                  ||¬«      }|d   }|dd  }| j                  dkD  rt        || j                  f«      }|| j                  |«      z   }|| j                  | j                  | j                  |«      «      «      z   }|j                  dddd«      }| j                  r| j                  |«      }|f|z   }|S )Nr   r2   r   r   )r�   )rA   r©   rÈ   r7   rÐ   ró   rÔ   rõ   r÷   r­   rí   rø   )	r*   rÙ   r�   ÚshortcutrD   rE   rÒ   Úself_attention_outputsr’   s	            r.   rN   zVitDetLayer.forwardÒ  sM  € ð
 &×-Ñ-¨a°°A°qÓ9ˆà ˆàŸ
™
 =Ó1ˆð ×Ñ˜aÒØ)×/Ñ/°Ñ2°M×4GÑ4GÈÑ4J�EˆFÜ.>¸}Èd×N^ÑN^Ó._Ñ+ˆMÐ+à!%§¡ØØ/ð "0ó "
Ðð /¨qÑ1ˆØ(¨¨Ð,ˆð ×Ñ˜aÒÜ.¨}¸d×>NÑ>NÐP`ÐciÐkpÐbqÓrˆMð ! 4§>¡>°-Ó#@Ñ@ˆà%¨¯©°t·x±xÀÇ
Á
È=Ó@YÓ7ZÓ([Ñ[ˆà%×-Ñ-¨a°°A°qÓ9ˆà×"Ò"Ø ŸM™M¨-Ó8ˆMà Ð" WÑ,ˆàˆr/   )r   r   Fr”   )rO   rP   rQ   rR   r   rè   r8   Úboolr   r%   rS   rð   rN   rT   rU   s   @r.   rë   rë   ¬  s…   ø„ ÙMð qvñ!Ø"ð!Ø49ð!ØLOð!Øimð!à	õ!ðL #(ñ'à—|‘|ð'ð  ð'ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*¨U°5·<±<Ñ-@Ñ	@÷	'r/   rë   c                   óf   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 d
dej                  dedededee	z  f
d	„Z
ˆ xZS )ÚVitDetEncoderr+   rJ   Nc           
      óÂ  •— t         ‰| �  «        || _        |j                  }t	        j
                  d|j                  |d¬«      D �cg c]  }|j                  «       ‘Œ }}g }t        |«      D ]I  }|j                  t        |||   ||j                  v r|j                  nd||j                  v ¬«      «       ŒK t        j                  |«      | _        d| _        y c c}w )Nr   Úcpu)rÝ   )rì   rÈ   rí   F)r   r   r+   Únum_hidden_layersr%   Úlinspacerì   ÚitemÚrangeÚappendrë   Úwindow_block_indicesrÈ   Úresidual_block_indicesr   Ú
ModuleListr·   Úgradient_checkpointing)r*   r+   Údepthr¡   rì   ÚlayersÚir-   s          €r.   r   zVitDetEncoder.__init__ý  sÐ   ø€ Ü‰ÑÔØˆŒØ×(Ñ(ˆô -2¯N©N¸1¸f×>SÑ>SÐUZÐchÔ,iÖj q˜!Ÿ&™&�(ÐjˆÐjàˆÜ�u“ò 	ˆAØ�M‰MÜØØ#1°!Ñ#4Ø67¸6×;VÑ;VÑ6V × 2Ò 2Ð\]Ø'(¨F×,IÑ,IÐ'Iô	õð	ô —]‘] 6Ó*ˆŒ
Ø&+ˆÕ#ùò ks   ÁCrÙ   r�   Úoutput_hidden_statesÚreturn_dictc                 óò   — |rdnd }|rdnd }t        | j                  «      D ]'  \  }}|r||fz   } |||«      }	|	d   }|sŒ||	d   fz   }Œ) |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )N© r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr“   r  )Ú.0Úvs     r.   ú	<genexpr>z(VitDetEncoder.forward.<locals>.<genexpr>,  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š©Úlast_hidden_staterÙ   Ú
attentions)Ú	enumerater·   rð   r   )
r*   rÙ   r�   r  r  Úall_hidden_statesÚall_self_attentionsr  Úlayer_moduleÚlayer_outputss
             r.   rN   zVitDetEncoder.forward  sº   € ñ #7™B¸DÐÙ$5™b¸4Ðä(¨¯©Ó4ò 		P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(¨Ð8IÓJˆMà)¨!Ñ,ˆMâ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð		Pñ  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r/   )FFT)rO   rP   rQ   r   r   r%   rS   rü   rð   r   rN   rT   rU   s   @r.   rþ   rþ   ü  s_   ø„ ð,˜|ð ,°õ ,ð2 #(Ø%*Ø ñ
à—|‘|ð
ð  ð
ð #ð	
ð
 ð
ð 
�Ñ	 ÷
r/   rþ   c                   ó¸   ‡ — e Zd ZU eed<   dZdZdZdZg Z	 e
j                  «       dej                  ej                  z  ej                  z  ddfˆ fd	„«       Zˆ xZS )
ÚVitDetPreTrainedModelr+   ÚvitdetrI   )ÚimageTÚmodulerJ   Nc                 ó^  •— t         ‰| �  |«       t        |t        j                  t        j
                  f«      rct        j                  |j                  d| j                  j                  ¬«       |j                  � t        j                  |j                  «       yyt        |t        «      r7t        j                  |j                  d| j                  j                  ¬«       yt        |t        «      rƒ| j                  j                   rmt        j                  |j"                  d| j                  j                  ¬«       t        j                  |j$                  d| j                  j                  ¬«       yt        |t&        «      �r%|j(                  |j*                  |j,                  fD ]Q  }t        j.                  |j                  dd¬«       |j                  €Œ2t        j0                  |j                  d«       ŒS |j2                  |j4                  fD ]@  }t        j6                  |j                  «       t        j                  |j                  «       ŒB t        j                  |j8                  j                  «       t        j                  |j8                  j                  «       yy)zInitialize the weightsrÛ   )rŸ   ÚstdNÚfan_outÚrelu)r5   Únonlinearityr   )r   Ú_init_weightsr   r   r   r(   ÚinitÚtrunc_normal_rš   r+   Úinitializer_ranger{   Úzeros_r   r'   rx   rƒ   ri   rj   r¥   r¨   r¬   r¯   Úkaiming_normal_Ú	constant_r©   r­   Úones_r°   )r*   r!  r·   r-   s      €r.   r'  z#VitDetPreTrainedModel._init_weights=  sÀ  ø€ ô 	‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)Ð4Ô5Ü×Ñ˜vŸ}™}°3¸D¿K¹K×<YÑ<YÕZØ�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ä˜Ô 0Ô1Ü×Ñ˜v×9Ñ9ÀÈÏÉ×IfÑIfÖgÜ˜¤Ô0°T·[±[×5aÒ5aÜ×Ñ˜v×/Ñ/°c¸t¿{¹{×?\Ñ?\Õ]Ü×Ñ˜v×/Ñ/°c¸t¿{¹{×?\Ñ?\Ö]Ü˜Ô 8Õ9Ø Ÿ,™,¨¯©°f·l±lÐCò 2�Ü×$Ñ$ U§\¡\¸	ÐPVÕWØ—:‘:Ñ)Ü—N‘N 5§:¡:¨qÕ1ð2ð !Ÿ,™,¨¯©Ð5ò (�Ü—
‘
˜5Ÿ<™<Ô(Ü—‘˜EŸJ™JÕ'ð(ô �K‰K˜Ÿ™×+Ñ+Ô,Ü�K‰K˜Ÿ™×)Ñ)Õ*ð :r/   )rO   rP   rQ   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesr%   Úno_gradr   r   r(   rñ   r'  rT   rU   s   @r.   r  r  4  sd   ø… àÓØ ÐØ$€OØ!ÐØ&*Ð#ØÐà€U‡]�]ƒ_ð+ B§I¡I°·	±	Ñ$9¸B¿L¹LÑ$Hð +ÈTô +ó ô+r/   r  c                   ó’   ‡ — e Zd Zdefˆ fd„Zdefd„Ze	 	 	 	 ddej                  dz  de
dz  de
dz  d	e
dz  deez  f
d
„«       Zˆ xZS )ÚVitDetModelr+   c                 ó’   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        | j                  «        y r“   )r   r   r+   r   rM   rþ   ÚencoderÚ	post_init)r*   r+   r-   s     €r.   r   zVitDetModel.__init__Y  s;   ø€ Ü‰Ñ˜Ô ØˆŒä*¨6Ó2ˆŒÜ$ VÓ,ˆŒð 	�‰Õr/   rJ   c                 ó.   — | j                   j                  S r“   ©rM   r)   ræ   s    r.   Úget_input_embeddingsz VitDetModel.get_input_embeddingsc  ó   € Ø�‰×)Ñ)Ð)r/   NrI   r�   r  r  c                 óh  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  |«      }| j                  ||||¬«      }|d   }|s	|f|dd z   S t        ||j                  |j                  ¬«      S )aß  
        Examples:

        ```python
        >>> from transformers import VitDetConfig, VitDetModel
        >>> import torch

        >>> config = VitDetConfig()
        >>> model = VitDetModel(config)

        >>> pixel_values = torch.randn(1, 3, 224, 224)

        >>> with torch.no_grad():
        ...     outputs = model(pixel_values)

        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 768, 14, 14]
        ```Nz You have to specify pixel_values)r�   r  r  r   r   r  )
r+   r�   r  r  r;   rM   r9  r   rÙ   r  )	r*   rI   r�   r  r  ÚkwargsÚembedding_outputÚencoder_outputsÚsequence_outputs	            r.   rN   zVitDetModel.forwardf  sØ   € ð8 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÜÐ?Ó@Ð@àŸ?™?¨<Ó8ÐàŸ,™,ØØ/Ø!5Ø#ð	 'ó 
ˆð *¨!Ñ,ˆáØ#Ð%¨¸¸Ð(;Ñ;Ð;äØ-Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
r/   )NNNN)rO   rP   rQ   r   r   r   r=  r   r%   rS   rü   rð   r   rN   rT   rU   s   @r.   r7  r7  W  sˆ   ø„ ð˜|õ ð*Ð&6ó *ð ð -1Ø)-Ø,0Ø#'ñ5
à—l‘l TÑ)ð5
ð   $™;ð5
ð # T™kð	5
ð
 ˜D‘[ð5
ð 
�Ñ	 ò5
ó ô5
r/   r7  zF
    ViTDet backbone, to be used with frameworks like Mask R-CNN.
    )Úcustom_introc                   ó’   ‡ — e Zd Zˆ fd„Zdefd„Zeee	 	 	 d
de	j                  dedz  dedz  dedz  def
d	„«       «       «       Zˆ xZS )ÚVitDetBackbonec                 óø   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        |j                  dz   «      D �cg c]  }|j                  ‘Œ c}| _	        | j                  «        y c c}w )Nr   )r   r   r   rM   rþ   r9  r  r  r   Únum_featuresr:  )r*   r+   rr   r-   s      €r.   r   zVitDetBackbone.__init__¥  sd   ø€ Ü‰Ñ˜Ô ä*¨6Ó2ˆŒÜ$ VÓ,ˆŒÜ9>¸v×?WÑ?WÐZ[Ñ?[Ó9\Ö]°A˜V×/Ó/Ò]ˆÔð 	�‰Õùò ^s   ÁA7rJ   c                 ó.   — | j                   j                  S r“   r<  ræ   s    r.   r=  z#VitDetBackbone.get_input_embeddings¯  r>  r/   NrI   r  r�   r  c                 óú  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |«      }| j                  |d||¬«      }|r|j                  n|d   }d}	t        | j                  |«      D ]  \  }
}|
| j                  v sŒ|	|fz  }	Œ |s|r|	f|dd z   }|S |	f|dd z   }|S t        |	|r|j                  nd|j                  ¬«      S )aØ  
        Examples:

        ```python
        >>> from transformers import VitDetConfig, VitDetBackbone
        >>> import torch

        >>> config = VitDetConfig()
        >>> model = VitDetBackbone(config)

        >>> pixel_values = torch.randn(1, 3, 224, 224)

        >>> with torch.no_grad():
        ...     outputs = model(pixel_values)

        >>> feature_maps = outputs.feature_maps
        >>> list(feature_maps[-1].shape)
        [1, 768, 14, 14]
        ```NT)r  r�   r  r   r  r2   )Úfeature_mapsrÙ   r  )r+   r  r  r�   rM   r9  rÙ   ÚzipÚstage_namesÚout_featuresr
   r  )r*   rI   r  r�   r  r@  rA  r’   rÙ   rK  ÚstagerŒ   Úoutputs                r.   rN   zVitDetBackbone.forward²  s5  € ð< &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐàŸ?™?¨<Ó8Ðà—,‘,ØØ!%Ø/Ø#ð	 ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆàˆÜ#& t×'7Ñ'7¸Ó#Gò 	0ÑˆE�<Ø˜×)Ñ)Ò)Ø  Ñ/‘ð	0ñ Ù#Ø&˜¨7°1°2¨;Ñ6�ð ˆMð '˜¨7°1°2¨;Ñ6�ØˆMäØ%Ù3G˜'×/Ò/ÈTØ×)Ñ)ô
ð 	
r/   )NNN)rO   rP   rQ   r   r   r=  r   r   r   r%   rS   rü   r
   rN   rT   rU   s   @r.   rF  rF  Ÿ  s„   ø„ ôð*Ð&6ó *ð Ø Øð -1Ø)-Ø#'ñ<
à—l‘lð<
ð # T™kð<
ð   $™;ð	<
ð
 ˜D‘[ð<
ð 
ò<
ó ó !ó ô<
r/   rF  )r7  r  rF  )2rR   Úcollections.abcr   r9   r%   r   Ú r   r(  Úactivationsr   Úbackbone_utilsr   r   Úmodeling_layersr	   Úmodeling_outputsr
   r   Úmodeling_utilsr   Úutilsr   r   Úutils.genericr   Úconfiguration_vitdetr   Ú
get_loggerrO   ÚloggerÚModuler   r<   Úscript_if_tracingrc   rv   rx   r—   r¥   r¹   rÐ   rÔ   rÖ   rë   rþ   r  r7  rF  Ú__all__r  r/   r.   ú<module>r`     sj  ðñ ã Û ã Ý å &Ý !ß HÝ 9ß ?Ý -ß ,Ý -Ý .ð 
ˆ×	Ñ	˜HÓ	%€ôU�r—y‘yô Uðp ‡�×Ññ!3ó ð!3òH&ôR;�b—i‘iô ;ô|�b—i‘iô ô,$˜rŸy™yô $ôN�—	‘	ô ò$2ò><ô<%�R—Y‘Yô %ô0MÐ,ô Mô`5
�B—I‘Iô 5
ðp ô+˜Oó +ó ð+ðD ôD
Ð'ó D
ó ðD
ñN ðôô
M
�]Ð$9ó M
óð
M
ò` E�r/   