Ë
    ÜÓ^j„  ã            	       óŽ  — d 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	 ddl
mZ dd	lmZmZmZmZ dd
lmZ ddlmZmZ ddlmZ  ej0                  e«      Zd<dedededz  defd„Z ed«       ed«      fdedededef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# G d „ d!ej>                  «      Z$ G d"„ d#ej>                  «      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 d0„ d1e)«      «       Z+ G d2„ d3ej>                  «      Z, G d4„ d5ej>                  «      Z- G d6„ d7ej>                  «      Z. ed8¬/«       G d9„ d:e)«      «       Z/g d;¢Z0y)=zPyTorch MobileViTV2 model.é    N)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚMobileViTV2ConfigÚvalueÚdivisorÚ	min_valueÚreturnc                 ó|   — |€|}t        |t        | |dz  z   «      |z  |z  «      }|d| z  k  r||z  }t        |«      S )zU
    Ensure that all layers have a channel count that is divisible by `divisor`.
    é   gÍÌÌÌÌÌì?)ÚmaxÚint)r   r   r   Ú	new_values       ú/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mobilevitv2/modeling_mobilevitv2.pyÚmake_divisibler   (   sS   € ð ÐØˆ	Ü�Iœs 5¨7°Q©;Ñ#6Ó7¸7ÑBÀWÑLÓM€Ià�3˜‘;ÒØ�WÑˆ	Üˆy‹>Ðó    z-infÚinfÚmin_valÚmax_valc                 ó.   — t        |t        || «      «      S ©N)r   Úmin©r   r   r    s      r   Úclipr%   5   s   € Üˆwœ˜G UÓ+Ó,Ð,r   c                   ó˜   ‡ — e Zd Z	 	 	 	 	 	 ddedededededededed	ed
eez  ddfˆ fd„Zdej                  dej                  fd„Z
ˆ xZS )ÚMobileViTV2ConvLayerÚconfigÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚgroupsÚbiasÚdilationÚuse_normalizationÚuse_activationr   Nc                 ó$  •— t         ‰| �  «        t        |dz
  dz  «      |z  }||z  dk7  rt        d|› d|› d�«      ‚||z  dk7  rt        d|› d|› d�«      ‚t	        j
                  ||||||||d¬	«	      | _        |	r t	        j                  |d
ddd¬«      | _        nd | _        |
rdt        |
t        «      rt        |
   | _        y t        |j                  t        «      rt        |j                     | _        y |j                  | _        y d | _        y )Nr   r   r   zInput channels (z) are not divisible by z groups.zOutput channels (Úzeros)	r)   r*   r+   r,   Úpaddingr/   r-   r.   Úpadding_modegñhãˆµøä>gš™™™™™¹?T)Únum_featuresÚepsÚmomentumÚaffineÚtrack_running_stats)ÚsuperÚ__init__r   Ú
ValueErrorr   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationÚ
isinstanceÚstrr   Ú
activationÚ
hidden_act)Úselfr(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r4   Ú	__class__s               €r   r<   zMobileViTV2ConvLayer.__init__;   s*  ø€ ô 	‰ÑÔÜ�{ Q‘¨!Ñ+Ó,¨xÑ7ˆà˜Ñ 1Ò$ÜÐ/°¨}Ð<SÐTZÐS[Ð[cÐdÓeÐeØ˜&Ñ  AÒ%ÜÐ0°°Ð>UÐV\ÐU]Ð]eÐfÓgÐgäŸ9™9Ø#Ø%Ø#ØØØØØØ ô

ˆÔñ Ü!#§¡Ø)ØØØØ$(ô"ˆDÕð "&ˆDÔáÜ˜.¬#Ô.Ü"(¨Ñ"8�•Ü˜F×-Ñ-¬sÔ3Ü"(¨×):Ñ):Ñ";�•à"(×"3Ñ"3�•à"ˆD�Or   Úfeaturesc                 óœ   — | j                  |«      }| j                  �| j                  |«      }| j                  �| j                  |«      }|S r"   )r?   rA   rD   )rF   rH   s     r   ÚforwardzMobileViTV2ConvLayer.forwardq   sK   € Ø×#Ñ# HÓ-ˆØ×ÑÐ)Ø×)Ñ)¨(Ó3ˆHØ�?‰?Ð&Ø—‘ xÓ0ˆHØˆr   )r   r   Fr   TT)Ú__name__Ú
__module__Ú__qualname__r   r   ÚboolrC   r<   ÚtorchÚTensorrJ   Ú__classcell__©rG   s   @r   r'   r'   :   s¨   ø„ ð ØØØØ"&Ø%)ñ4#à!ð4#ð ð4#ð ð	4#ð
 ð4#ð ð4#ð ð4#ð ð4#ð ð4#ð  ð4#ð ˜s™
ð4#ð 
õ4#ðl §¡ð °·±÷ r   r'   c                   óx   ‡ — e Zd ZdZ	 ddedededededdfˆ fd	„Zd
ej                  dej                  fd„Z	ˆ xZ
S )ÚMobileViTV2InvertedResidualzY
    Inverted residual block (MobileNetv2): https://huggingface.co/papers/1801.04381
    r(   r)   r*   r,   r/   r   Nc           	      ó@  •— t         ‰| �  «        t        t        t	        ||j
                  z  «      «      d«      }|dvrt        d|› d�«      ‚|dk(  xr ||k(  | _        t        |||d¬«      | _	        t        |||d|||¬«      | _
        t        |||dd	¬
«      | _        y )Né   )r   r   zInvalid stride ú.r   )r)   r*   r+   r   )r)   r*   r+   r,   r-   r/   F©r)   r*   r+   r1   )r;   r<   r   r   ÚroundÚexpand_ratior=   Úuse_residualr'   Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)rF   r(   r)   r*   r,   r/   Úexpanded_channelsrG   s          €r   r<   z$MobileViTV2InvertedResidual.__init__€   s¼   ø€ ô 	‰ÑÔÜ*¬3¬u°[À6×CVÑCVÑ5VÓ/WÓ+XÐZ[Ó\Ðà˜ÑÜ˜¨v¨h°aÐ8Ó9Ð9à# q™[ÒK¨{¸lÑ/JˆÔä.Ø Ð:KÐYZô
ˆŒô -ØØ)Ø*ØØØ$Øô
ˆŒô /ØØ)Ø%ØØ ô
ˆ�r   rH   c                 ó’   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  r||z   S |S r"   )r\   r]   r^   r[   )rF   rH   Úresiduals      r   rJ   z#MobileViTV2InvertedResidual.forward¡   sI   € Øˆà—?‘? 8Ó,ˆØ—=‘= Ó*ˆØ—?‘? 8Ó,ˆà&*×&7Ò&7ˆx˜(Ñ"ÐE¸XÐEr   )r   ©rK   rL   rM   Ú__doc__r   r   r<   rO   rP   rJ   rQ   rR   s   @r   rT   rT   {   sc   ø„ ñð
 lmñ
Ø'ð
Ø69ð
ØILð
ØVYð
Øehð
à	õ
ðBF §¡ð F°·±÷ Fr   rT   c                   ót   ‡ — e Zd Z	 ddedededededdfˆ fd„Zd	ej                  dej                  fd
„Zˆ xZ	S )ÚMobileViTV2MobileNetLayerr(   r)   r*   r,   Ú
num_stagesr   Nc                 óÚ   •— t         ‰| �  «        t        j                  «       | _        t        |«      D ]5  }t        ||||dk(  r|nd¬«      }| j                  j                  |«       |}Œ7 y )Nr   r   )r)   r*   r,   )r;   r<   r   Ú
ModuleListÚlayerÚrangerT   Úappend)	rF   r(   r)   r*   r,   rf   Úiri   rG   s	           €r   r<   z"MobileViTV2MobileNetLayer.__init__­   sh   ø€ ô 	‰ÑÔä—]‘]“_ˆŒ
Ü�zÓ"ò 	'ˆAÜ/ØØ'Ø)Ø!" a¢‘v¨Qô	ˆEð �J‰J×Ñ˜eÔ$Ø&‰Kñ	'r   rH   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r"   ©ri   )rF   rH   Úlayer_modules      r   rJ   z!MobileViTV2MobileNetLayer.forward½   s$   € Ø ŸJ™Jò 	.ˆLÙ# HÓ-‰Hð	.àˆr   )r   r   ©
rK   rL   rM   r   r   r<   rO   rP   rJ   rQ   rR   s   @r   re   re   ¬   sV   ø„ àqrñ'Ø'ð'Ø69ð'ØILð'ØVYð'Øknð'à	õ'ð  §¡ð °·±÷ r   re   c                   óh   ‡ — e Zd 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 )	ÚMobileViTV2LinearSelfAttentionay  
    This layer applies a self-attention with linear complexity, as described in MobileViTV2 paper:
    https://huggingface.co/papers/2206.02680

    Args:
        config (`MobileVitv2Config`):
             Model configuration object
        embed_dim (`int`):
            `input_channels` from an expected input of size :math:`(batch_size, input_channels, height, width)`
    r(   Ú	embed_dimr   Nc           	      óâ   •— t         ‰| �  «        t        ||dd|z  z   dddd¬«      | _        t	        j
                  |j                  ¬«      | _        t        |||dddd¬«      | _        || _        y )Nr   r   TF)r(   r)   r*   r.   r+   r0   r1   ©Úp)	r;   r<   r'   Úqkv_projr   ÚDropoutÚattn_dropoutÚout_projrs   )rF   r(   rs   rG   s      €r   r<   z'MobileViTV2LinearSelfAttention.__init__Ï   s{   ø€ Ü‰ÑÔä,ØØ!Ø˜a )™mÑ,ØØØ#Ø ô
ˆŒô ŸJ™J¨×)<Ñ)<Ô=ˆÔÜ,ØØ!Ø"ØØØ#Ø ô
ˆŒð #ˆ�r   Úhidden_statesc                 óØ  — | j                  |«      }t        j                  |d| j                  | j                  gd¬«      \  }}}t        j                  j
                  j                  |d¬«      }| j                  |«      }||z  }t        j                  |dd¬«      }t        j                  j
                  j                  |«      |j                  |«      z  }| j                  |«      }|S )Nr   )Úsplit_size_or_sectionsÚdiméÿÿÿÿ©r~   T©r~   Úkeepdim)rw   rO   Úsplitrs   r   Ú
functionalÚsoftmaxry   ÚsumÚreluÚ	expand_asrz   )	rF   r{   ÚqkvÚqueryÚkeyr   Úcontext_scoresÚcontext_vectorÚouts	            r   rJ   z&MobileViTV2LinearSelfAttention.forwardè   sÌ   € à�m‰m˜MÓ*ˆô
 "ŸK™K¨ÀQÈÏÉÐX\×XfÑXfÐDgÐmnÔoÑˆˆs�Eô Ÿ™×,Ñ,×4Ñ4°UÀÐ4ÓCˆØ×*Ñ*¨>Ó:ˆð ˜~Ñ-ˆäŸ™ >°rÀ4ÔHˆô �h‰h×!Ñ!×&Ñ& uÓ-°×0HÑ0HÈÓ0OÑOˆØ�m‰m˜CÓ ˆØˆ
r   rb   rR   s   @r   rr   rr   Ã   s>   ø„ ñ	ð#Ð0ð #¸Sð #ÀTõ #ð2 U§\¡\ð °e·l±l÷ r   rr   c                   óp   ‡ — e Zd Z	 d
dededededdf
ˆ fd„Zdej                  dej                  fd	„Z	ˆ xZ
S )ÚMobileViTV2FFNr(   rs   Úffn_latent_dimÚffn_dropoutr   Nc           
      óê   •— t         ‰| �  «        t        |||ddddd¬«      | _        t	        j
                  |«      | _        t        |||ddddd¬«      | _        t	        j
                  |«      | _        y )Nr   TF)r(   r)   r*   r+   r,   r.   r0   r1   )	r;   r<   r'   Úconv1r   rx   Údropout1Úconv2Údropout2)rF   r(   rs   r‘   r’   rG   s        €r   r<   zMobileViTV2FFN.__init__  s|   ø€ ô 	‰ÑÔÜ)ØØ!Ø'ØØØØ#Øô	
ˆŒ
ô Ÿ
™
 ;Ó/ˆŒä)ØØ&Ø"ØØØØ#Ø ô	
ˆŒ
ô Ÿ
™
 ;Ó/ˆ�r   r{   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r"   )r”   r•   r–   r—   )rF   r{   s     r   rJ   zMobileViTV2FFN.forward#  s@   € ØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØÐr   ©ç        ©rK   rL   rM   r   r   Úfloatr<   rO   rP   rJ   rQ   rR   s   @r   r�   r�     sY   ø„ ð !ñ0à!ð0ð ð0ð ð	0ð
 ð0ð 
õ0ð@ U§\¡\ð °e·l±l÷ r   r�   c                   óp   ‡ — e Zd Z	 d
dededededdf
ˆ fd„Zdej                  dej                  fd	„Z	ˆ xZ
S )ÚMobileViTV2TransformerLayerr(   rs   r‘   Údropoutr   Nc                 óP  •— t         ‰| �  «        t        j                  d||j                  ¬«      | _        t        ||«      | _        t        j                  |¬«      | _	        t        j                  d||j                  ¬«      | _
        t        ||||j                  «      | _        y )Nr   ©Ú
num_groupsÚnum_channelsr7   ru   )r;   r<   r   Ú	GroupNormÚlayer_norm_epsÚlayernorm_beforerr   Ú	attentionrx   r•   Úlayernorm_afterr�   r’   Úffn)rF   r(   rs   r‘   rŸ   rG   s        €r   r<   z$MobileViTV2TransformerLayer.__init__,  s~   ø€ ô 	‰ÑÔÜ "§¡¸È	ÐW]×WlÑWlÔ mˆÔÜ7¸À	ÓJˆŒÜŸ
™
 WÔ-ˆŒÜ!Ÿ|™|°qÀyÐV\×VkÑVkÔlˆÔÜ! &¨)°^ÀV×EWÑEWÓXˆ�r   r{   c                 ó¢   — | j                  |«      }| j                  |«      }||z   }| j                  |«      }| j                  |«      }||z   }|S r"   )r¦   r§   r¨   r©   )rF   r{   Úlayernorm_1_outÚattention_outputÚlayer_outputs        r   rJ   z#MobileViTV2TransformerLayer.forward:  sY   € Ø×/Ñ/°Ó>ˆØŸ>™>¨/Ó:ÐØ(¨=Ñ8ˆà×+Ñ+¨MÓ:ˆØ—x‘x Ó-ˆà# mÑ3ˆØÐr   r™   r›   rR   s   @r   rž   rž   +  s^   ø„ ð ñYà!ðYð ðYð ð	Yð
 ðYð 
õYð	 U§\¡\ð 	°e·l±l÷ 	r   rž   c                   óh   ‡ — e Zd Zdedededdfˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )	ÚMobileViTV2Transformerr(   Ún_layersÚd_modelr   Nc                 ó<  •— t         ‰	| �  «        |j                  }||z  g|z  }|D �cg c]  }t        |dz  dz  «      ‘Œ }}t	        j
                  «       | _        t        |«      D ].  }t        ||||   ¬«      }| j                  j                  |«       Œ0 y c c}w )Né   )rs   r‘   )
r;   r<   Úffn_multiplierr   r   rh   ri   rj   rž   rk   )
rF   r(   r°   r±   r´   Úffn_dimsÚdÚ	block_idxÚtransformer_layerrG   s
            €r   r<   zMobileViTV2Transformer.__init__G  sž   ø€ Ü‰ÑÔà×.Ñ.ˆà" WÑ,Ð-°Ñ8ˆð 2:Ö:¨A”C˜˜b™ B™Õ'Ð:ˆÐ:ä—]‘]“_ˆŒ
Ü˜x›ò 	1ˆIÜ ;Ø '¸(À9Ñ:Mô!Ðð �J‰J×ÑÐ/Õ0ñ		1ùò ;s   ©Br{   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r"   rn   )rF   r{   ro   s      r   rJ   zMobileViTV2Transformer.forwardX  s%   € Ø ŸJ™Jò 	8ˆLÙ(¨Ó7‰Mð	8àÐr   rp   rR   s   @r   r¯   r¯   F  sA   ø„ ð1Ð0ð 1¸Cð 1È#ð 1ÐRVõ 1ð" U§\¡\ð °e·l±l÷ r   r¯   c                   ó  ‡ — e Zd ZdZ	 	 	 ddededededededed	d
fˆ fd„Zdej                  d	e	ej                  e	eef   f   fd„Z
dej                  de	eef   d	ej                  fd„Zdej                  d	ej                  fd„Zˆ xZS )ÚMobileViTV2LayerzE
    MobileViTV2 layer: https://huggingface.co/papers/2206.02680
    r(   r)   r*   Úattn_unit_dimÚn_attn_blocksr/   r,   r   Nc                 óÞ  •— t         ‰	| �  «        |j                  | _        |j                  | _        |}|dk(  r)t        ||||dk(  r|nd|dkD  r|dz  nd¬«      | _        |}nd | _        t        ||||j                  |¬«      | _	        t        |||ddd¬«      | _
        t        |||¬«      | _        t        j                  d||j                  ¬«      | _        t        |||dd	d¬«      | _        y )
Nr   r   )r)   r*   r,   r/   )r)   r*   r+   r-   F)r)   r*   r+   r0   r1   )r±   r°   r¡   T)r;   r<   Ú
patch_sizeÚpatch_widthÚpatch_heightrT   Údownsampling_layerr'   Úconv_kernel_sizeÚconv_kxkÚconv_1x1r¯   Útransformerr   r¤   r¥   Ú	layernormÚconv_projection)
rF   r(   r)   r*   r¼   r½   r/   r,   Úcnn_out_dimrG   s
            €r   r<   zMobileViTV2Layer.__init__c  s  ø€ ô 	‰ÑÔØ!×,Ñ,ˆÔØ"×-Ñ-ˆÔà#ˆà�QŠ;Ü&AØØ'Ø)Ø!)¨Q¢‘v°AØ*2°Qª,˜ Qš¸Aô'ˆDÔ#ð '‰Kà&*ˆDÔ#ô -ØØ#Ø$Ø×/Ñ/Øô
ˆŒô -ØØ#Ø$ØØ#Ø ô
ˆŒô 2°&À-ÐZgÔhˆÔô Ÿ™°ÀÐTZ×TiÑTiÔjˆŒô  4ØØ#Ø$ØØ"Ø ô 
ˆÕr   Úfeature_mapc                 ó"  — |j                   \  }}}}t        j                  j                  || j                  | j
                  f| j                  | j
                  f¬«      }|j                  ||| j                  | j
                  z  d«      }|||ffS )N)r+   r,   r   )Úshaper   r„   ÚunfoldrÁ   rÀ   Úreshape)rF   rÊ   Ú
batch_sizer)   Ú
img_heightÚ	img_widthÚpatchess          r   Ú	unfoldingzMobileViTV2Layer.unfolding   s’   € Ø9D×9JÑ9JÑ6ˆ
�K ¨YÜ—-‘-×&Ñ&ØØ×*Ñ*¨D×,<Ñ,<Ð=Ø×%Ñ% t×'7Ñ'7Ð8ð 'ó 
ˆð
 —/‘/ *¨k¸4×;LÑ;LÈt×O_ÑO_Ñ;_ÐacÓdˆà˜ YÐ/Ð/Ð/r   rÒ   Úoutput_sizec                 óò   — |j                   \  }}}}|j                  |||z  |«      }t        j                  j	                  ||| j
                  | j                  f| j
                  | j                  f¬«      }|S )N)rÔ   r+   r,   )rÌ   rÎ   r   r„   ÚfoldrÁ   rÀ   )rF   rÒ   rÔ   rÏ   Úin_dimr¿   Ú	n_patchesrÊ   s           r   ÚfoldingzMobileViTV2Layer.folding«  sz   € Ø4;·M±MÑ1ˆ
�F˜J¨	Ø—/‘/ *¨f°zÑ.AÀ9ÓMˆä—m‘m×(Ñ(ØØ#Ø×*Ñ*¨D×,<Ñ,<Ð=Ø×%Ñ% t×'7Ñ'7Ð8ð	 )ó 
ˆð Ðr   rH   c                 ó6  — | j                   r| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      \  }}| j	                  |«      }| j                  |«      }| j                  ||«      }| j                  |«      }|S r"   )rÂ   rÄ   rÅ   rÓ   rÆ   rÇ   rÙ   rÈ   )rF   rH   rÒ   rÔ   s       r   rJ   zMobileViTV2Layer.forward¸  s•   € à×"Ò"Ø×.Ñ.¨xÓ8ˆHð —=‘= Ó*ˆØ—=‘= Ó*ˆð  $Ÿ~™~¨hÓ7Ñˆ�ð ×"Ñ" 7Ó+ˆØ—.‘. Ó)ˆð —<‘< ¨Ó5ˆà×'Ñ'¨Ó1ˆØˆr   )r   r   r   )rK   rL   rM   rc   r   r   r<   rO   rP   ÚtuplerÓ   rÙ   rJ   rQ   rR   s   @r   r»   r»   ^  sÜ   ø„ ñð ØØñ;
à!ð;
ð ð;
ð ð	;
ð
 ð;
ð ð;
ð ð;
ð ð;
ð 
õ;
ðz	0 U§\¡\ð 	0°e¸E¿L¹LÈ%ÐPSÐUXÐPXÉ/Ð<YÑ6Zó 	0ð˜uŸ|™|ð ¸%ÀÀSÀ¹/ð ÈeÏlÉló ð §¡ð °·±÷ r   r»   c            
       ó`   ‡ — e Zd Zdeddfˆ fd„Z	 	 d	dej                  dededee	z  fd„Z
ˆ xZS )
ÚMobileViTV2Encoderr(   r   Nc           	      ó  •— t         ‰| �  «        || _        t        j                  «       | _        d| _        dx}}|j                  dk(  rd}d}n|j                  dk(  rd}d}t        t        d|j                  z  dd¬«      dd¬	«      }t        d|j                  z  d¬
«      }t        d|j                  z  d¬
«      }t        d|j                  z  d¬
«      }t        d|j                  z  d¬
«      }	t        d|j                  z  d¬
«      }
t        |||dd¬«      }| j
                  j                  |«       t        |||dd¬«      }| j
                  j                  |«       t        |||t        |j                  d   |j                  z  d¬
«      |j                  d   ¬«      }| j
                  j                  |«       |r|dz  }t        |||	t        |j                  d   |j                  z  d¬
«      |j                  d   |¬«      }| j
                  j                  |«       |r|dz  }t        ||	|
t        |j                  d   |j                  z  d¬
«      |j                  d   |¬«      }| j
                  j                  |«       y )NFrV   Tr³   r   é    é@   r$   ©r   r   ©r   é€   é   i€  é   )r)   r*   r,   rf   r   r   )r)   r*   r¼   r½   )r)   r*   r¼   r½   r/   )r;   r<   r(   r   rh   ri   Úgradient_checkpointingÚoutput_strider   r%   Úwidth_multiplierre   rk   r»   Úbase_attn_unit_dimsr½   )rF   r(   Údilate_layer_4Údilate_layer_5r/   Úlayer_0_dimÚlayer_1_dimÚlayer_2_dimÚlayer_3_dimÚlayer_4_dimÚlayer_5_dimÚlayer_1Úlayer_2Úlayer_3Úlayer_4Úlayer_5rG   s                   €r   r<   zMobileViTV2Encoder.__init__Ñ  s|  ø€ Ü‰ÑÔØˆŒä—]‘]“_ˆŒ
Ø&+ˆÔ#ð +0Ð/ˆ˜Ø×Ñ 1Ò$Ø!ˆNØ!‰NØ×!Ñ! RÒ'Ø!ˆNàˆä$Ü�r˜F×3Ñ3Ñ3¸RÈÔLÐVWÐceô
ˆô % R¨&×*AÑ*AÑ%AÈ2ÔNˆÜ$ S¨6×+BÑ+BÑ%BÈAÔNˆÜ$ S¨6×+BÑ+BÑ%BÈAÔNˆÜ$ S¨6×+BÑ+BÑ%BÈAÔNˆÜ$ S¨6×+BÑ+BÑ%BÈAÔNˆä+ØØ#Ø$ØØô
ˆð 	�
‰
×Ñ˜'Ô"ä+ØØ#Ø$ØØô
ˆð 	�
‰
×Ñ˜'Ô"ä"ØØ#Ø$Ü(¨×)CÑ)CÀAÑ)FÈ×I`ÑI`Ñ)`ÐjkÔlØ ×.Ñ.¨qÑ1ô
ˆð 	�
‰
×Ñ˜'Ô"áØ˜‰MˆHä"ØØ#Ø$Ü(¨×)CÑ)CÀAÑ)FÈ×I`ÑI`Ñ)`ÐjkÔlØ ×.Ñ.¨qÑ1Øô
ˆð 	�
‰
×Ñ˜'Ô"áØ˜‰MˆHä"ØØ#Ø$Ü(¨×)CÑ)CÀAÑ)FÈ×I`ÑI`Ñ)`ÐjkÔlØ ×.Ñ.¨qÑ1Øô
ˆð 	�
‰
×Ñ˜'Õ"r   r{   Úoutput_hidden_statesÚreturn_dictc                 ó°   — |rdnd }t        | j                  «      D ]  \  }} ||«      }|sŒ||fz   }Œ |st        d„ ||fD «       «      S t        ||¬«      S )N© c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr"   rú   )Ú.0Úvs     r   ú	<genexpr>z-MobileViTV2Encoder.forward.<locals>.<genexpr>1  s   è ø€ ÒX˜qÈ!É-œÑXùs   ‚Š)Úlast_hidden_stater{   )Ú	enumerateri   rÛ   r	   )rF   r{   r÷   rø   Úall_hidden_statesrl   ro   s          r   rJ   zMobileViTV2Encoder.forward"  sq   € ñ #7™B¸DÐä(¨¯©Ó4ò 	I‰OˆAˆ|Ù(¨Ó7ˆMâ#Ø$5¸Ð8HÑ$HÑ!ð		Iñ ÜÑX ]Ð4EÐ$FÔXÓXÐXä-ÀÐ]nÔoÐor   )FT)rK   rL   rM   r   r<   rO   rP   rN   rÛ   r	   rJ   rQ   rR   s   @r   rÝ   rÝ   Ð  s]   ø„ ðO#Ð0ð O#°Tõ O#ðh &+Ø ñ	pà—|‘|ðpð #ðpð ð	pð
 
Ð/Ñ	/÷pr   rÝ   c                   ó†   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	 e
j                  «       dej                  dd	fˆ fd
„«       Zˆ xZS )ÚMobileViTV2PreTrainedModelr(   Úmobilevitv2Úpixel_values)ÚimageTr»   Úmoduler   Nc                 óò  •— t         ‰| �  |«       t        |t        j                  «      rÍt        j                  |j                  d| j                  j                  ¬«       |j                  �t        j                  |j                  «       t        |dd«      �^t        j                  |j                  «       t        j                  |j                  «       t        j                  |j                   «       yyy)zInitialize the weightsrš   )ÚmeanÚstdNÚrunning_mean)r;   Ú_init_weightsrB   r   r@   ÚinitÚnormal_Úweightr(   Úinitializer_ranger.   Úzeros_Úgetattrr  Úones_Úrunning_varÚnum_batches_tracked)rF   r  rG   s     €r   r  z(MobileViTV2PreTrainedModel._init_weights?  s¨   ø€ ô 	‰Ñ˜fÔ%Ü�fœbŸn™nÔ-Ü�L‰L˜Ÿ™¨S°d·k±k×6SÑ6SÕTØ�{‰{Ð&Ü—‘˜FŸK™KÔ(Ü�v˜~¨tÓ4Ð@Ü—‘˜F×/Ñ/Ô0Ü—
‘
˜6×-Ñ-Ô.Ü—‘˜F×6Ñ6Õ7ð Að	 .r   )rK   rL   rM   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrO   Úno_gradr   ÚModuler  rQ   rR   s   @r   r  r  6  sU   ø… àÓØ%ÐØ$€OØ!ÐØ&*Ð#Ø+Ð,Ðà€U‡]�]ƒ_ð
8 B§I¡Ið 
8°$ô 
8ó ô
8r   r  c                   ó€   ‡ — e Zd Zd
dedefˆ fd„Ze	 	 	 ddej                  dz  dedz  dedz  de	e
z  fd	„«       Zˆ xZS )ÚMobileViTV2Modelr(   Úexpand_outputc           	      ó  •— t         ‰| �  |«       || _        || _        t	        t        d|j                  z  dd¬«      dd¬«      }t        ||j                  |ddd	d	¬
«      | _	        t        |«      | _        | j                  «        y)a  
        expand_output (`bool`, *optional*, defaults to `True`):
            Whether to expand the output of the model. If `True`, the model will output pooled features in addition to
            hidden states. If `False`, only the hidden states will be returned.
        rß   r³   rà   r$   rV   rá   r   r   T©r)   r*   r+   r,   r0   r1   N)r;   r<   r(   r   r   r%   rè   r'   r£   Ú	conv_stemrÝ   ÚencoderÚ	post_init)rF   r(   r   rì   rG   s       €r   r<   zMobileViTV2Model.__init__O  s‹   ø€ ô 	‰Ñ˜Ô ØˆŒØ*ˆÔä$Ü�r˜F×3Ñ3Ñ3¸RÈÔLÐVWÐceô
ˆô .ØØ×+Ñ+Ø$ØØØ"Øô
ˆŒô *¨&Ó1ˆŒð 	�‰Õr   Nr  r÷   rø   r   c                 óŠ  — |�|n| j                   j                  }|�|n| j                   j                  }|€t        d«      ‚| j	                  |«      }| j                  |||¬«      }| j                  r |d   }t        j                  |ddgd¬«      }n|d   }d }|s|�||fn|f}	|	|dd  z   S t        |||j                  ¬	«      S )
Nz You have to specify pixel_values©r÷   rø   r   éþÿÿÿr   Fr�   r   )rÿ   Úpooler_outputr{   )r(   r÷   rø   r=   r#  r$  r   rO   r	  r
   r{   )
rF   r  r÷   rø   ÚkwargsÚembedding_outputÚencoder_outputsrÿ   Úpooled_outputÚoutputs
             r   rJ   zMobileViTV2Model.forwardk  sú   € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÜÐ?Ó@Ð@àŸ>™>¨,Ó7ÐàŸ,™,ØØ!5Ø#ð 'ó 
ˆð ×ÒØ /°Ñ 2Ðô "ŸJ™JÐ'8¸rÀ2¸hÐPUÔV‰Mà /°Ñ 2ÐØ ˆMáØ;HÐ;TÐ'¨Ñ7Ð[lÐZnˆFØ˜O¨A¨BÐ/Ñ/Ð/ä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r   )T)NNN)rK   rL   rM   r   rN   r<   r   rO   rP   rÛ   r
   rJ   rQ   rR   s   @r   r  r  M  ss   ø„ ñÐ0ð Àõ ð8 ð -1Ø,0Ø#'ñ	(
à—l‘l TÑ)ð(
ð # T™kð(
ð ˜D‘[ð	(
ð 
Ð9Ñ	9ò(
ó ô(
r   r  z‹
    MobileViTV2 model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    )Úcustom_introc                   óž   ‡ — e Zd Zdeddfˆ fd„Ze	 	 	 	 d
dej                  dz  dedz  dej                  dz  dedz  de	e
z  f
d	„«       Zˆ xZS )Ú!MobileViTV2ForImageClassificationr(   r   Nc                 óL  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        d|j                  z  d¬«      }|j                  dkD  r!t        j                  ||j                  ¬«      nt        j                  «       | _
        | j                  «        y )Nrå   rV   râ   r   )Úin_featuresÚout_features)r;   r<   Ú
num_labelsr  r  r   rè   r   ÚLinearÚIdentityÚ
classifierr%  )rF   r(   r*   rG   s      €r   r<   z*MobileViTV2ForImageClassification.__init__ž  sƒ   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ+¨FÓ3ˆÔä% c¨F×,CÑ,CÑ&CÈQÔOˆð × Ñ  1Ò$ô �I‰I ,¸V×=NÑ=NÕOä—‘“ð 	Œð 	�‰Õr   r  r÷   Úlabelsrø   c                 óB  — |�|n| j                   j                  }| j                  |||¬«      }|r|j                  n|d   }| j	                  |«      }d}	|�| j                  ||| j                   «      }	|s|f|dd z   }
|	�|	f|
z   S |
S t        |	||j                  ¬«      S )aŠ  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss). If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr'  r   r   )ÚlossÚlogitsr{   )r(   rø   r  r)  r8  Úloss_functionr   r{   )rF   r  r÷   r9  rø   r*  Úoutputsr-  r<  r;  r.  s              r   rJ   z)MobileViTV2ForImageClassification.forward¯  s¿   € ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà×"Ñ" <ÐFZÐhsÐ"Ótˆá1<˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆØÐØ×%Ñ% f¨f°d·k±kÓBˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä3ØØØ!×/Ñ/ô
ð 	
r   ©NNNN)rK   rL   rM   r   r<   r   rO   rP   rN   rÛ   r   rJ   rQ   rR   s   @r   r1  r1  —  s‰   ø„ ðÐ0ð °Tõ ð" ð -1Ø,0Ø&*Ø#'ñ"
à—l‘l TÑ)ð"
ð # T™kð"
ð —‘˜tÑ#ð	"
ð
 ˜D‘[ð"
ð 
Ð5Ñ	5ò"
ó ô"
r   r1  c                   óh   ‡ — e Zd Zdedededdfˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )	ÚMobileViTV2ASPPPoolingr(   r)   r*   r   Nc           	      ó†   •— t         ‰| �  «        t        j                  d¬«      | _        t        |||dddd¬«      | _        y )Nr   )rÔ   Tr‡   r"  )r;   r<   r   ÚAdaptiveAvgPool2dÚglobal_poolr'   rÅ   )rF   r(   r)   r*   rG   s       €r   r<   zMobileViTV2ASPPPooling.__init__×  sB   ø€ Ü‰ÑÔä×/Ñ/¸AÔ>ˆÔä,ØØ#Ø%ØØØ"Ø!ô
ˆ�r   rH   c                 ó®   — |j                   dd  }| j                  |«      }| j                  |«      }t        j                  j                  ||dd¬«      }|S )Nr(  ÚbilinearF©ÚsizeÚmodeÚalign_corners)rÌ   rD  rÅ   r   r„   Úinterpolate)rF   rH   Úspatial_sizes      r   rJ   zMobileViTV2ASPPPooling.forwardæ  sS   € Ø—~‘~ b cÐ*ˆØ×#Ñ# HÓ-ˆØ—=‘= Ó*ˆÜ—=‘=×,Ñ,¨X¸LÈzÐinÐ,ÓoˆØˆr   rp   rR   s   @r   rA  rA  Ö  sB   ø„ ð
Ð0ð 
¸sð 
ÐRUð 
ÐZ^õ 
ð §¡ð °·±÷ r   rA  c                   ód   ‡ — e Zd ZdZdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚMobileViTV2ASPPzƒ
    ASPP module defined in DeepLab papers: https://huggingface.co/papers/1606.00915, https://huggingface.co/papers/1706.05587
    r(   r   Nc                 ó˜  •— t         ‰| �  «        t        d|j                  z  d¬«      }|}|j                  }t        |j                  «      dk7  rt        d«      ‚t        j                  «       | _
        t        |||dd¬«      }| j                  j                  |«       | j                  j                  |j                  D �cg c]  }t        |||d|d¬	«      ‘Œ c}«       t        |||«      }| j                  j                  |«       t        |d
|z  |dd¬«      | _        t        j                   |j"                  ¬«      | _        y c c}w )Nrå   rV   râ   r   z"Expected 3 values for atrous_ratesr   r‡   rX   )r)   r*   r+   r/   r1   é   ru   )r;   r<   r   rè   Úaspp_out_channelsÚlenÚatrous_ratesr=   r   rh   Úconvsr'   rk   ÚextendrA  Úprojectrx   Úaspp_dropout_probrŸ   )	rF   r(   Úencoder_out_channelsr)   r*   Úin_projectionÚrateÚ
pool_layerrG   s	           €r   r<   zMobileViTV2ASPP.__init__ó  s6  ø€ Ü‰ÑÔä-¨c°F×4KÑ4KÑ.KÐUVÔWÐØ*ˆØ×/Ñ/ˆäˆv×"Ñ"Ó# qÒ(ÜÐAÓBÐBä—]‘]“_ˆŒ
ä,ØØ#Ø%ØØ!ô
ˆð 	�
‰
×Ñ˜-Ô(à�
‰
×Ñð #×/Ñ/ö
ð ô %ØØ +Ø!-Ø !Ø!Ø#)öò
ô	
ô ,¨F°KÀÓNˆ
Ø�
‰
×Ñ˜*Ô%ä+Ø  LÑ 0¸|ÐYZÐkqô
ˆŒô —z‘z F×$<Ñ$<Ô=ˆ�ùò)
s   ÃErH   c                 óÌ   — g }| j                   D ]  }|j                   ||«      «       Œ t        j                  |d¬«      }| j	                  |«      }| j                  |«      }|S )Nr   r€   )rT  rk   rO   ÚcatrV  rŸ   )rF   rH   ÚpyramidÚconvÚpooled_featuress        r   rJ   zMobileViTV2ASPP.forward  s\   € ØˆØ—J‘Jò 	+ˆDØ�N‰N™4 ›>Õ*ð	+ä—)‘)˜G¨Ô+ˆàŸ,™, wÓ/ˆØŸ,™, Ó7ˆØÐr   ©
rK   rL   rM   rc   r   r<   rO   rP   rJ   rQ   rR   s   @r   rN  rN  î  s8   ø„ ñð*>Ð0ð *>°Tõ *>ðX §¡ð °·±÷ r   rN  c                   ód   ‡ — e Zd ZdZdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚMobileViTV2DeepLabV3zJ
    DeepLabv3 architecture: https://huggingface.co/papers/1706.05587
    r(   r   Nc           	      óà   •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  «      | _        t        ||j                  |j                  dddd¬«      | _        y )Nr   FT)r)   r*   r+   r0   r1   r.   )r;   r<   rN  Úasppr   Ú	Dropout2dÚclassifier_dropout_probrŸ   r'   rQ  r5  r8  ©rF   r(   rG   s     €r   r<   zMobileViTV2DeepLabV3.__init__0  s]   ø€ Ü‰ÑÔÜ# FÓ+ˆŒ	ä—|‘| F×$BÑ$BÓCˆŒä.ØØ×0Ñ0Ø×*Ñ*ØØ#Ø Øô
ˆ�r   r{   c                 ór   — | j                  |d   «      }| j                  |«      }| j                  |«      }|S )Nr   )re  rŸ   r8  )rF   r{   rH   s      r   rJ   zMobileViTV2DeepLabV3.forward@  s6   € Ø—9‘9˜]¨2Ñ.Ó/ˆØ—<‘< Ó)ˆØ—?‘? 8Ó,ˆØˆr   ra  rR   s   @r   rc  rc  +  s7   ø„ ñð
Ð0ð 
°Tõ 
ð  U§\¡\ð °e·l±l÷ r   rc  zZ
    MobileViTV2 model with a semantic segmentation head on top, e.g. for Pascal VOC.
    c                   óž   ‡ — e Zd Zdeddfˆ fd„Ze	 	 	 	 d
dej                  dz  dej                  dz  dedz  dedz  de	e
z  f
d	„«       Zˆ xZS )Ú"MobileViTV2ForSemanticSegmentationr(   r   Nc                 óª   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        |«      | _        | j                  «        y )NF)r   )r;   r<   r5  r  r  rc  Úsegmentation_headr%  rh  s     €r   r<   z+MobileViTV2ForSemanticSegmentation.__init__M  sE   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ+¨FÀ%ÔHˆÔÜ!5°fÓ!=ˆÔð 	�‰Õr   r  r9  r÷   rø   c                 óh  — |�|n| j                   j                  }|�|n| j                   j                  }|�$| j                   j                  dk(  rt	        d«      ‚| j                  |d|¬«      }|r|j                  n|d   }| j                  |«      }d}	|�Yt        j                  j                  ||j                  dd dd¬	«      }
t        | j                   j                  ¬
«      } ||
|«      }	|s|r
|f|dd z   }n	|f|dd z   }|	�|	f|z   S |S t        |	||r|j                  d¬«      S dd¬«      S )aÚ  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth semantic segmentation maps for computing the loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1`, a classification loss is computed (Cross-Entropy).

        Examples:

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

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

        >>> image_processor = AutoImageProcessor.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")
        >>> model = MobileViTV2ForSemanticSegmentation.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")

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

        >>> with torch.no_grad():
        ...     outputs = model(**inputs)

        >>> # logits are of shape (batch_size, num_labels, height, width)
        >>> logits = outputs.logits
        ```Nr   z/The number of labels should be greater than oneTr'  r(  rF  FrG  )Úignore_indexr   )r;  r<  r{   Ú
attentions)r(   r÷   rø   r5  r=   r  r{   rm  r   r„   rK  rÌ   r   Úsemantic_loss_ignore_indexr   )rF   r  r9  r÷   rø   r*  r>  Úencoder_hidden_statesr<  r;  Úupsampled_logitsÚloss_fctr.  s                r   rJ   z*MobileViTV2ForSemanticSegmentation.forwardW  ss  € ðN %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ $§+¡+×"8Ñ"8¸AÒ"=ÜÐNÓOÐOà×"Ñ"ØØ!%Ø#ð #ó 
ˆñ :E × 5Ò 5È'ÐRSÉ*Ðà×'Ñ'Ð(=Ó>ˆàˆØÐä!Ÿ}™}×8Ñ8Ø˜VŸ\™\¨"¨#Ð.°ZÈuð  9ó  Ðô (°T·[±[×5[Ñ5[Ô\ˆHÙÐ,¨fÓ5ˆDáÙ#Ø ˜ W¨Q¨R [Ñ0‘à ˜ W¨Q¨R [Ñ0�Ø)-Ð)9�T�G˜fÑ$ÐE¸vÐEä&ØØÙ3G˜'×/Ñ/Øô	
ð 	
ð NRØô	
ð 	
r   r?  )rK   rL   rM   r   r<   r   rO   rP   rN   rÛ   r   rJ   rQ   rR   s   @r   rk  rk  G  s�   ø„ ðÐ0ð °Tõ ð ð -1Ø&*Ø,0Ø#'ñL
à—l‘l TÑ)ðL
ð —‘˜tÑ#ðL
ð # T™kð	L
ð
 ˜D‘[ðL
ð 
Ð(Ñ	(òL
ó ôL
r   rk  )r1  rk  r  r  )rV   N)1rc   rO   r   Útorch.nnr   Ú r   r  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   r   r   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_mobilevitv2r   Ú
get_loggerrK   Úloggerr   r   rœ   r%   r  r'   rT   re   rr   r�   rž   r¯   r»   rÝ   r  r  r1  rA  rN  rc  rk  Ú__all__rú   r   r   ú<module>r€     sû  ðñ  !ã Ý Ý %å &Ý !Ý 9÷ó õ .ß ,Ý 8ð 
ˆ×	Ñ	˜HÓ	%€ñ
˜#ð 
¨ð 
¸CÀ$¹Jð 
ÐRUó 
ñ ).¨f«ÉÈeËñ -�ð - ð -Àð -ÐY^ó -ô
=˜2Ÿ9™9ô =ôB-F "§)¡)ô -Fôb §	¡	ô ô.< R§Y¡Yô <ô~&�R—Y‘Yô &ôR "§)¡)ô ô6˜RŸY™Yô ô0oÐ1ô oôdcp˜Ÿ™ô cpðL ô8 ó 8ó ð8ð, ôF
Ð1ó F
ó ðF
ñR ðôô5
Ð(Bó 5
óð5
ôr˜RŸY™Yô ô09�b—i‘iô 9ôz˜2Ÿ9™9ô ñ8 ðôô
X
Ð)Có X
óð
X
òv�r   