Ë
    T^(hÚ•  ã            	       óÞ  — d Z ddlmZmZmZ ddlZddlZddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZ  ej:                  e«      ZdZ dZ!g d¢Z"dZ#dZ$dAde%de%dee%   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jR                  «      Z* G d„ dejR                  «      Z+ G d„ d ejR                  «      Z, G d!„ d"ejR                  «      Z- G d#„ d$ejR                  «      Z. G d%„ d&ejR                  «      Z/ G d'„ d(ejR                  «      Z0 G d)„ d*ejR                  «      Z1 G d+„ d,ejR                  «      Z2 G d-„ d.e«      Z3d/Z4d0Z5 ed1e4«       G d2„ d3e3«      «       Z6 ed4e4«       G d5„ d6e3«      «       Z7 G d7„ d8ejR                  «      Z8 G d9„ d:ejR                  «      Z9 G d;„ d<ejR                  «      Z: ed=e4«       G d>„ d?e3«      «       Z;g d@¢Z<y)BzPyTorch MobileViTV2 model.é    )ÚOptionalÚTupleÚUnionN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )ÚMobileViTV2Configr   z$apple/mobilevitv2-1.0-imagenet1k-256)r   é   é   r   ztabby, tabby catÚvalueÚdivisorÚ	min_valueÚreturnc                 ó|   — |€|}t        |t        | |dz  z   «      |z  |z  «      }|d| z  k  r||z  }t        |«      S )a  
    Ensure that all layers have a channel count that is divisible by `divisor`. This function is taken from the
    original TensorFlow repo. It can be seen here:
    https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py
    é   gÍÌÌÌÌÌì?)ÚmaxÚint)r   r   r   Ú	new_values       úr/var/www/skyplay_api_hub/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-   K   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ef   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)	r1   r2   r3   r4   Úpaddingr7   r5   r6   Ú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)Úselfr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r<   Ú	__class__s               €r#   rD   zMobileViTV2ConvLayer.__init__Q   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*   )rG   rI   rL   )rN   rP   s     r#   ÚforwardzMobileViTV2ConvLayer.forward‡   sK   € Ø×#Ñ# HÓ-ˆØ×ÑÐ)Ø×)Ñ)¨(Ó3ˆHØ�?‰?Ð&Ø—‘ xÓ0ˆHØˆr%   )r   r   Fr   TT)Ú__name__Ú
__module__Ú__qualname__r   r!   Úboolr   rK   rD   ÚtorchÚTensorrR   Ú__classcell__©rO   s   @r#   r/   r/   P   s­   ø„ ð ØØØØ"&Ø+/ñ4#à!ð4#ð ð4#ð ð	4#ð
 ð4#ð ð4#ð ð4#ð ð4#ð ð4#ð  ð4#ð ˜d C˜iÑ(ð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 )ÚMobileViTV2InvertedResidualzQ
    Inverted residual block (MobileNetv2): https://arxiv.org/abs/1801.04381
    r0   r1   r2   r4   r7   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 )Nr   )r   r   zInvalid stride ú.r   )r1   r2   r3   r
   )r1   r2   r3   r4   r5   r7   F©r1   r2   r3   r9   )rC   rD   r$   r!   ÚroundÚexpand_ratiorE   Úuse_residualr/   Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)rN   r0   r1   r2   r4   r7   Úexpanded_channelsrO   s          €r#   rD   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%   rP   c                 ó’   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  r||z   S |S r*   )rc   rd   re   rb   )rN   rP   Úresiduals      r#   rR   z#MobileViTV2InvertedResidual.forward·   sI   € Øˆà—?‘? 8Ó,ˆØ—=‘= Ó*ˆØ—?‘? 8Ó,ˆà&*×&7Ò&7ˆx˜(Ñ"ÐE¸XÐEr%   )r   ©rS   rT   rU   Ú__doc__r   r!   rD   rW   rX   rR   rY   rZ   s   @r#   r\   r\   ‘   sc   ø„ ñð
 lmñ
Ø'ð
Ø69ð
ØILð
ØVYð
Øehð
à	õ
ðBF §¡ð F°·±÷ Fr%   r\   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 )ÚMobileViTV2MobileNetLayerr0   r1   r2   r4   Ú
num_stagesr   Nc                 óÚ   •— t         ‰| �  «        t        j                  «       | _        t        |«      D ]5  }t        ||||dk(  r|nd¬«      }| j                  j                  |«       |}Œ7 y )Nr   r   )r1   r2   r4   )rC   rD   r   Ú
ModuleListÚlayerÚranger\   Úappend)	rN   r0   r1   r2   r4   rm   Úirp   rO   s	           €r#   rD   z"MobileViTV2MobileNetLayer.__init__Ã   sh   ø€ ô 	‰ÑÔä—]‘]“_ˆŒ
Ü�zÓ"ò 	'ˆAÜ/ØØ'Ø)Ø!" a¢‘v¨Qô	ˆEð �J‰J×Ñ˜eÔ$Ø&‰Kñ	'r%   rP   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r*   ©rp   )rN   rP   Úlayer_modules      r#   rR   z!MobileViTV2MobileNetLayer.forwardÓ   s$   € Ø ŸJ™Jò 	.ˆLÙ# HÓ-‰Hð	.àˆr%   )r   r   ©
rS   rT   rU   r   r!   rD   rW   rX   rR   rY   rZ   s   @r#   rl   rl   Â   sV   ø„ àqrñ'Ø'ð'Ø69ð'ØILð'ØVYð'Øknð'à	õ'ð  §¡ð °·±÷ r%   rl   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 )	ÚMobileViTV2LinearSelfAttentionaq  
    This layer applies a self-attention with linear complexity, as described in MobileViTV2 paper:
    https://arxiv.org/abs/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)`
    r0   Ú	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)r0   r1   r2   r6   r3   r8   r9   ©Úp)	rC   rD   r/   Úqkv_projr   ÚDropoutÚattn_dropoutÚout_projrz   )rN   r0   rz   rO   s      €r#   rD   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)r~   rW   Úsplitrz   r   Ú
functionalÚsoftmaxr€   ÚsumÚreluÚ	expand_asr�   )	rN   r‚   ÚqkvÚqueryÚkeyr   Úcontext_scoresÚcontext_vectorÚouts	            r#   rR   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%   ri   rZ   s   @r#   ry   ry   Ù   s>   ø„ ñ	ð#Ð0ð #¸Sð #ÀTõ #ð2 U§\¡\ð °e·l±l÷ r%   ry   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 )ÚMobileViTV2FFNr0   rz   Ú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)r0   r1   r2   r3   r4   r6   r8   r9   )	rC   rD   r/   Úconv1r   r   Údropout1Úconv2Údropout2)rN   r0   rz   r˜   r™   rO   s        €r#   rD   zMobileViTV2FFN.__init__  s|   ø€ ô 	‰ÑÔÜ)ØØ!Ø'ØØØØ#Øô	
ˆŒ
ô Ÿ
™
 ;Ó/ˆŒä)ØØ&Ø"ØØØØ#Ø ô	
ˆŒ
ô Ÿ
™
 ;Ó/ˆ�r%   r‚   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r*   )r›   rœ   r�   rž   )rN   r‚   s     r#   rR   zMobileViTV2FFN.forward9  s@   € ØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØÐr%   ©ç        ©rS   rT   rU   r   r!   ÚfloatrD   rW   rX   rR   rY   rZ   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 )ÚMobileViTV2TransformerLayerr0   rz   r˜   Údropoutr   Nc                 óP  •— t         ‰| �  «        t        j                  d||j                  ¬«      | _        t        ||«      | _        t        j                  |¬«      | _	        t        j                  d||j                  ¬«      | _
        t        ||||j                  «      | _        y )Nr   ©Ú
num_groupsÚnum_channelsr?   r|   )rC   rD   r   Ú	GroupNormÚlayer_norm_epsÚlayernorm_beforery   Ú	attentionr   rœ   Úlayernorm_afterr—   r™   Úffn)rN   r0   rz   r˜   r¦   rO   s        €r#   rD   z$MobileViTV2TransformerLayer.__init__B  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°   )rN   r‚   Úlayernorm_1_outÚattention_outputÚlayer_outputs        r#   rR   z#MobileViTV2TransformerLayer.forwardP  sY   € Ø×/Ñ/°Ó>ˆØŸ>™>¨/Ó:ÐØ(¨=Ñ8ˆà×+Ñ+¨MÓ:ˆØ—x‘x Ó-ˆà# mÑ3ˆØÐr%   r    r¢   rZ   s   @r#   r¥   r¥   A  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 )	ÚMobileViTV2Transformerr0   Ú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é   )rz   r˜   )
rC   rD   Úffn_multiplierr!   r   ro   rp   rq   r¥   rr   )
rN   r0   r·   r¸   r»   Úffn_dimsÚdÚ	block_idxÚtransformer_layerrO   s
            €r#   rD   zMobileViTV2Transformer.__init__]  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*   ru   )rN   r‚   rv   s      r#   rR   zMobileViTV2Transformer.forwardn  s%   € Ø ŸJ™Jò 	8ˆLÙ(¨Ó7‰Mð	8àÐr%   rw   rZ   s   @r#   r¶   r¶   \  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 )ÚMobileViTV2Layerz=
    MobileViTV2 layer: https://arxiv.org/abs/2206.02680
    r0   r1   r2   Úattn_unit_dimÚn_attn_blocksr7   r4   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   )r1   r2   r4   r7   )r1   r2   r3   r5   F)r1   r2   r3   r8   r9   )r¸   r·   r¨   T)rC   rD   Ú
patch_sizeÚpatch_widthÚpatch_heightr\   Údownsampling_layerr/   Úconv_kernel_sizeÚconv_kxkÚconv_1x1r¶   Útransformerr   r«   r¬   Ú	layernormÚconv_projection)
rN   r0   r1   r2   rÃ   rÄ   r7   r4   Úcnn_out_dimrO   s
            €r#   rD   zMobileViTV2Layer.__init__y  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)r3   r4   r†   )Úshaper   r‹   ÚunfoldrÈ   rÇ   Úreshape)rN   rÑ   Ú
batch_sizer1   Ú
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Û   r3   r4   )rÓ   rÕ   r   r‹   ÚfoldrÈ   rÇ   )rN   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%   rP   c                 ó6  — | j                   r| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      \  }}| j	                  |«      }| j                  |«      }| j                  ||«      }| j                  |«      }|S r*   )rÉ   rË   rÌ   rÚ   rÍ   rÎ   rà   rÏ   )rN   rP   rÙ   rÛ   s       r#   rR   zMobileViTV2Layer.forwardÎ  s•   € à×"Ò"Ø×.Ñ.¨xÓ8ˆHð —=‘= Ó*ˆØ—=‘= Ó*ˆð  $Ÿ~™~¨hÓ7Ñˆ�ð ×"Ñ" 7Ó+ˆØ—.‘. Ó)ˆð —<‘< ¨Ó5ˆà×'Ñ'¨Ó1ˆØˆr%   )r   r   r   )rS   rT   rU   rj   r   r!   rD   rW   rX   r   rÚ   rà   rR   rY   rZ   s   @r#   rÂ   rÂ   t  sÜ   ø„ ñð ØØñ;
à!ð;
ð ð;
ð ð	;
ð
 ð;
ð ð;
ð ð;
ð ð;
ð 
õ;
ðz	0 U§\¡\ð 	0°e¸E¿L¹LÈ%ÐPSÐUXÐPXÉ/Ð<YÑ6Zó 	0ð˜uŸ|™|ð ¸%ÀÀSÀ¹/ð ÈeÏlÉló ð §¡ð °·±÷ r%   rÂ   c                   ód   ‡ — e Zd Zdeddfˆ fd„Z	 	 d	dej                  dededee	e
f   fd„Zˆ xZS )
ÚMobileViTV2Encoderr0   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 )NFr   Trº   r   é    é@   r,   ©r   r   ©r   é€   é   i€  r   )r1   r2   r4   rm   r   r   )r1   r2   rÃ   rÄ   )r1   r2   rÃ   rÄ   r7   )rC   rD   r0   r   ro   rp   Úgradient_checkpointingÚoutput_strider$   r-   Úwidth_multiplierrl   rr   rÂ   Úbase_attn_unit_dimsrÄ   )rN   r0   Údilate_layer_4Údilate_layer_5r7   Ú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_5rO   s                   €r#   rD   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 ]K  \  }}| j                  r)| j                  r| j	                  |j
                  |«      }n ||«      }|sŒF||fz   }ŒM |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>M  s   è ø€ ÒX˜qÈ!É-œÑXùs   ‚Š)Úlast_hidden_stater‚   )Ú	enumeraterp   rë   ÚtrainingÚ_gradient_checkpointing_funcÚ__call__Útupler   )rN   r‚   rü   rý   Úall_hidden_statesrs   rv   s          r#   rR   zMobileViTV2Encoder.forward8  sž   € ñ #7™B¸DÐä(¨¯©Ó4ò 
	I‰OˆAˆ|Ø×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!ó!‘ñ
 !-¨]Ó ;�â#Ø$5¸Ð8HÑ$HÑ!ð
	Iñ ÜÑX ]Ð4EÐ$FÔXÓXÐXä-ÀÐ]nÔoÐor%   )FT)rS   rT   rU   r   rD   rW   rX   rV   r   r	  r   rR   rY   rZ   s   @r#   rã   rã   æ  sb   ø„ ðO#Ð0ð O#°Tõ O#ðh &+Ø ñ	pà—|‘|ðpð #ðpð ð	pð
 
ˆuÐ4Ð4Ñ	5÷pr%   rã   c                   ó~   — e Zd ZdZeZdZdZdZdgZ	de
ej                  ej                  ej                  f   ddfd	„Zy)
ÚMobileViTV2PreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úmobilevitv2Úpixel_valuesTrÂ   Úmoduler   Nc                 óú  — t        |t        j                  t        j                  f«      rm|j                  j
                  j                  d| j                  j                  ¬«       |j                  �%|j                  j
                  j                  «        yyt        |t        j                  «      rJ|j                  j
                  j                  «        |j                  j
                  j                  d«       yy)zInitialize the weightsr¡   )ÚmeanÚstdNg      ð?)rJ   r   ÚLinearrF   ÚweightÚdataÚnormal_r0   Úinitializer_ranger6   Úzero_Ú	LayerNormÚfill_)rN   r  s     r#   Ú_init_weightsz(MobileViTV2PreTrainedModel._init_weights_  s¨   € ä�fœrŸy™y¬"¯)©)Ð4Ô5ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)ð .r%   )rS   rT   rU   rj   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_no_split_modulesr   r   r  rF   r  r  rÿ   r%   r#   r  r  S  sT   „ ñð
 %€LØ%ÐØ$€OØ&*Ð#Ø+Ð,Ðð
* E¨"¯)©)°R·Y±YÀÇÁÐ*LÑ$Mð 
*ÐRVô 
*r%   r  aM  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`MobileViTV2Config`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aF  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`MobileViTImageProcessor.__call__`] for details.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zYThe bare MobileViTV2 model outputting raw hidden-states without any specific head on top.c                   ó¶   ‡ — e Zd Zddedefˆ fd„Zd„ Z ee«       e	e
eede¬«      	 	 	 ddeej                      dee   d	ee   d
eeef   fd„«       «       Zˆ xZS )ÚMobileViTV2Modelr0   Úexpand_outputc           	      ó  •— t         ‰| �  |«       || _        || _        t	        t        d|j                  z  dd¬«      dd¬«      }t        ||j                  |ddd	d	¬
«      | _	        t        |«      | _        | j                  «        y )Nrå   rº   ræ   r,   r   rç   r
   r   T©r1   r2   r3   r4   r8   r9   )rC   rD   r0   r#  r$   r-   rí   r/   rª   Ú	conv_stemrã   ÚencoderÚ	post_init)rN   r0   r#  rñ   rO   s       €r#   rD   zMobileViTV2Model.__init__‰  s‰   ø€ Ü‰Ñ˜Ô ØˆŒØ*ˆÔä$Ü�r˜F×3Ñ3Ñ3¸RÈÔLÐVWÐceô
ˆô .ØØ×+Ñ+Ø$ØØØ"Øô
ˆŒô *¨&Ó1ˆŒð 	�‰Õr%   c                 óô   — |j                  «       D ]e  \  }}| j                  j                  |   }t        |t        «      sŒ0|j
                  j                  D ]  }|j                  j                  |«       Œ Œg y)z”Prunes heads of the model.
        heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base class PreTrainedModel
        N)Úitemsr'  rp   rJ   rÂ   rÍ   r®   Úprune_heads)rN   Úheads_to_pruneÚlayer_indexÚheadsÚmobilevitv2_layerr¿   s         r#   Ú_prune_headszMobileViTV2Model._prune_heads   sv   € ð #1×"6Ñ"6Ó"8ò 	CÑˆK˜Ø $§¡× 2Ñ 2°;Ñ ?ÐÜÐ+Ô-=Õ>Ø):×)FÑ)F×)LÑ)Lò CÐ%Ø%×/Ñ/×;Ñ;¸EÕBñCñ	Cr%   Úvision)Ú
checkpointÚoutput_typer  ÚmodalityÚexpected_outputr  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‚   )r0   rü   Úuse_return_dictrE   r&  r'  r#  rW   r  r   r‚   )	rN   r  rü   rý   Úembedding_outputÚencoder_outputsr  Úpooled_outputÚoutputs	            r#   rR   zMobileViTV2Model.forwardª  sú   € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@àŸ>™>¨,Ó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)rS   rT   rU   r   rV   rD   r0  r   ÚMOBILEVITV2_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   rW   rX   r   r	  rR   rY   rZ   s   @r#   r"  r"  „  s¡   ø„ ñ
Ð0ð Àõ ò.Cñ +Ð+GÓHÙØ&Ø<Ø$ØØ.ôð 04Ø/3Ø&*ñ	'
à˜uŸ|™|Ñ,ð'
ð ' t™nð'
ð ˜d‘^ð	'
ð
 
ˆuÐ>Ð>Ñ	?ò'
óó Iô'
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.
    c                   óÌ   ‡ — e Zd Zdeddfˆ fd„Z ee«       eee	e
e¬«      	 	 	 	 ddeej                     dee   deej                     d	ee   deee	f   f
d
„«       «       Zˆ xZS )Ú!MobileViTV2ForImageClassificationr0   r   Nc                 óL  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        d|j                  z  d¬«      }|j                  dkD  r!t        j                  ||j                  ¬«      nt        j                  «       | _
        | j                  «        y )Nr   r   rè   r   )Úin_featuresÚout_features)rC   rD   Ú
num_labelsr"  r  r$   rí   r   r  ÚIdentityÚ
classifierr(  )rN   r0   r2   rO   s      €r#   rD   z*MobileViTV2ForImageClassification.__init__ä  sƒ   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ+¨FÓ3ˆÔä% c¨F×,CÑ,CÑ&CÈQÔOˆð × Ñ  1Ò$ô �I‰I ,¸V×=NÑ=NÕOä—‘“ð 	Œð 	�‰Õr%   )r2  r3  r  r5  r  rü   Úlabelsrý   c                 ó  — |�|n| j                   j                  }| j                  |||¬«      }|r|j                  n|d   }| j	                  |«      }d}|��‡| j                   j
                  €�| j                  dk(  rd| j                   _        nl| j                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                   _        nd| j                   _        | j                   j
                  dk(  rIt        «       }	| j                  dk(  r& |	|j                  «       |j                  «       «      }nŒ |	||«      }n‚| j                   j
                  dk(  r=t        «       }	 |	|j                  d| j                  «      |j                  d«      «      }n,| j                   j
                  dk(  rt        «       }	 |	||«      }|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).
        Nr7  r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr†   r   )ÚlossÚlogitsr‚   )r0   r:  r  r9  rJ  Úproblem_typerH  ÚdtyperW   Úlongr!   r	   Úsqueezer   Úviewr   r   r‚   )rN   r  rü   rK  rý   Úoutputsr=  rQ  rP  Úloss_fctr>  s              r#   rR   z)MobileViTV2ForImageClassification.forwardõ  sÄ  € ð( &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×"Ñ" <ÐFZÐhsÐ"Ótˆá1<˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�áØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä3ØØØ!×/Ñ/ô
ð 	
r%   ©NNNN)rS   rT   rU   r   rD   r   r?  r   Ú_IMAGE_CLASS_CHECKPOINTr   rA  Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   rW   rX   rV   r   r	  rR   rY   rZ   s   @r#   rD  rD  Ü  s®   ø„ ðÐ0ð °Tõ ñ" +Ð+GÓHÙØ*Ø8Ø$Ø4ô	ð 04Ø/3Ø)-Ø&*ñ4
à˜uŸ|™|Ñ,ð4
ð ' t™nð4
ð ˜Ÿ™Ñ&ð	4
ð
 ˜d‘^ð4
ð 
ˆuÐ:Ð:Ñ	;ò4
óó Iô4
r%   rD  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 )	ÚMobileViTV2ASPPPoolingr0   r1   r2   r   Nc           	      ó†   •— t         ‰| �  «        t        j                  d¬«      | _        t        |||dddd¬«      | _        y )Nr   )rÛ   TrŽ   r%  )rC   rD   r   ÚAdaptiveAvgPool2dÚglobal_poolr/   rÌ   )rN   r0   r1   r2   rO   s       €r#   rD   zMobileViTV2ASPPPooling.__init__5  sB   ø€ Ü‰ÑÔä×/Ñ/¸AÔ>ˆÔä,ØØ#Ø%ØØØ"Ø!ô
ˆ�r%   rP   c                 ó®   — |j                   dd  }| j                  |«      }| j                  |«      }t        j                  j                  ||dd¬«      }|S )Nr8  ÚbilinearF©ÚsizeÚmodeÚalign_corners)rÓ   r`  rÌ   r   r‹   Úinterpolate)rN   rP   Úspatial_sizes      r#   rR   zMobileViTV2ASPPPooling.forwardD  sS   € Ø—~‘~ b cÐ*ˆØ×#Ñ# HÓ-ˆØ—=‘= Ó*ˆÜ—=‘=×,Ñ,¨X¸LÈzÐinÐ,ÓoˆØˆr%   rw   rZ   s   @r#   r]  r]  4  sB   ø„ ð
Ð0ð 
¸sð 
ÐRUð 
ÐZ^õ 
ð §¡ð °·±÷ r%   r]  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 )ÚMobileViTV2ASPPzs
    ASPP module defined in DeepLab papers: https://arxiv.org/abs/1606.00915, https://arxiv.org/abs/1706.05587
    r0   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   r   rè   r
   z"Expected 3 values for atrous_ratesr   rŽ   r_   )r1   r2   r3   r7   r9   é   r|   )rC   rD   r$   rí   Úaspp_out_channelsÚlenÚatrous_ratesrE   r   ro   Úconvsr/   rr   Úextendr]  Úprojectr   Úaspp_dropout_probr¦   )	rN   r0   Úencoder_out_channelsr1   r2   Úin_projectionÚrateÚ
pool_layerrO   s	           €r#   rD   zMobileViTV2ASPP.__init__Q  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rP   c                 óÌ   — g }| j                   D ]  }|j                   ||«      «       Œ t        j                  |d¬«      }| j	                  |«      }| j                  |«      }|S )Nr   r‡   )rp  rr   rW   Úcatrr  r¦   )rN   rP   ÚpyramidÚconvÚpooled_featuress        r#   rR   zMobileViTV2ASPP.forward}  s\   € ØˆØ—J‘Jò 	+ˆDØ�N‰N™4 ›>Õ*ð	+ä—)‘)˜G¨Ô+ˆàŸ,™, wÓ/ˆØŸ,™, Ó7ˆØÐr%   ©
rS   rT   rU   rj   r   rD   rW   rX   rR   rY   rZ   s   @r#   rj  rj  L  s8   ø„ ñð*>Ð0ð *>°Tõ *>ðX §¡ð °·±÷ r%   rj  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 )ÚMobileViTV2DeepLabV3zB
    DeepLabv3 architecture: https://arxiv.org/abs/1706.05587
    r0   r   Nc           	      óà   •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  «      | _        t        ||j                  |j                  dddd¬«      | _        y )Nr   FT)r1   r2   r3   r8   r9   r6   )rC   rD   rj  Úasppr   Ú	Dropout2dÚclassifier_dropout_probr¦   r/   rm  rH  rJ  ©rN   r0   rO   s     €r#   rD   zMobileViTV2DeepLabV3.__init__Ž  s]   ø€ Ü‰ÑÔÜ# FÓ+ˆŒ	ä—|‘| F×$BÑ$BÓCˆŒä.ØØ×0Ñ0Ø×*Ñ*ØØ#Ø Øô
ˆ�r%   r‚   c                 ór   — | j                  |d   «      }| j                  |«      }| j                  |«      }|S )Nr†   )r�  r¦   rJ  )rN   r‚   rP   s      r#   rR   zMobileViTV2DeepLabV3.forwardž  s6   € Ø—9‘9˜]¨2Ñ.Ó/ˆØ—<‘< Ó)ˆØ—?‘? 8Ó,ˆØˆr%   r}  rZ   s   @r#   r  r  ‰  s7   ø„ ñð
Ð0ð 
°Tõ 
ð  U§\¡\ð °e·l±l÷ r%   r  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e«       eee	¬«      	 	 	 	 dde
ej                     de
ej                     de
e   d	e
e   deeef   f
d
„«       «       Zˆ xZS )Ú"MobileViTV2ForSemanticSegmentationr0   r   Nc                 óª   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        |«      | _        | j                  «        y )NF)r#  )rC   rD   rH  r"  r  r  Úsegmentation_headr(  r„  s     €r#   rD   z+MobileViTV2ForSemanticSegmentation.__init__¬  sE   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ+¨FÀ%ÔHˆÔÜ!5°fÓ!=ˆÔð 	�‰Õr%   )r3  r  r  rK  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).

        Returns:

        Examples:

        ```python
        >>> import requests
        >>> import torch
        >>> from PIL import Image
        >>> from transformers import AutoImageProcessor, MobileViTV2ForSemanticSegmentation

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> 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 oneTr7  r8  rb  Frc  )Úignore_indexr   )rP  rQ  r‚   Ú
attentions)r0   rü   r:  rH  rE   r  r‚   r‰  r   r‹   rg  rÓ   r   Úsemantic_loss_ignore_indexr   )rN   r  rK  rü   rý   rW  Úencoder_hidden_statesrQ  rP  Úupsampled_logitsrX  r>  s               r#   rR   z*MobileViTV2ForSemanticSegmentation.forward¶  ss  € ðN %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ $§+¡+×"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%   rY  )rS   rT   rU   r   rD   r   r?  r   r   rA  r   rW   rX   rV   r   r	  rR   rY   rZ   s   @r#   r‡  r‡  ¥  s®   ø„ ðÐ0ð °Tõ ñ +Ð+GÓHÙÐ+BÐQ`Ôað 04Ø)-Ø/3Ø&*ñK
à˜uŸ|™|Ñ,ðK
ð ˜Ÿ™Ñ&ðK
ð ' t™nð	K
ð
 ˜d‘^ðK
ð 
ˆuÐ-Ð-Ñ	.òK
ó bó IôK
r%   r‡  )rD  r‡  r"  r  )r   N)=rj   Útypingr   r   r   rW   Útorch.utils.checkpointr   Útorch.nnr   r   r	   Úactivationsr   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   r   r   Úconfiguration_mobilevitv2r   Ú
get_loggerrS   ÚloggerrA  r@  rB  rZ  r[  r!   r$   r£   r-   ÚModuler/   r\   rl   ry   r—   r¥   r¶   rÂ   rã   r  ÚMOBILEVITV2_START_DOCSTRINGr?  r"  rD  r]  rj  r  r‡  Ú__all__rÿ   r%   r#   ú<module>r�     sJ  ðñ" !ç )Ñ )ã Û Ý ß AÑ Aå !÷ó õ .÷õ õ 9ð 
ˆ×	Ñ	˜HÓ	%€ð &€ð =Ð Ú'Ð ð AÐ Ø1Ð ñ˜#ð ¨ð ¸HÀS¹Mð ÐUXó ñ ).¨f«ÉÈeËñ -�ð - ð -Àð -ÐY^ó -ô
=˜2Ÿ9™9ô =ôB-F "§)¡)ô -Fôb §	¡	ô ô.< R§Y¡Yô <ô~&�R—Y‘Yô &ôR "§)¡)ô ô6˜RŸY™Yô ô0o�r—y‘yô oôdip˜Ÿ™ô ipôZ* ô *ð2	Ð ð
 Ð ñ Ø_ØóôQ
Ð1ó Q
ó	ðQ
ñh ðð  óôM
Ð(Bó M
óðM
ôb˜RŸY™Yô ô09�b—i‘iô 9ôz˜2Ÿ9™9ô ñ8 ðð  ó	ôX
Ð)Có X
óðX
òv�r%   