Ë
    ÜÓ^jÕ‡  ã            	       óâ  — d 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
 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 ddlmZ  ej4                  e«      Zd=dedededz  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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/¬0«       G d1„ d2e,«      «       Z. G d3„ d4ej>                  «      Z/ G d5„ d6ej>                  «      Z0 G d7„ d8ej>                  «      Z1 ed9¬0«       G d:„ d;e,«      «       Z2g d<¢Z3y)>zPyTorch MobileViT model.é    N)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úauto_docstringÚloggingÚ	torch_inté   )ÚMobileViTConfigÚ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/mobilevit/modeling_mobilevit.pyÚmake_divisibler   )   sS   € ð ÐØˆ	Ü�Iœs 5¨7°Q©;Ñ#6Ó7¸7ÑBÀWÑLÓM€Ià�3˜‘;ÒØ�WÑˆ	Üˆy‹>Ðó    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 )ÚMobileViTConvLayerÚ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(   r)   r*   r-   Ú	__class__s               €r   r5   zMobileViTConvLayer.__init__7   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 ©N)r8   r:   r=   )r?   rA   s     r   ÚforwardzMobileViTConvLayer.forwardm   sK   € Ø×#Ñ# HÓ-ˆØ×ÑÐ)Ø×)Ñ)¨(Ó3ˆHØ�?‰?Ð&Ø—‘ xÓ0ˆHØˆr   )r   r   Fr   TT)Ú__name__Ú
__module__Ú__qualname__r   r   Úboolr<   r5   ÚtorchÚTensorrD   Ú__classcell__©r@   s   @r   r    r    6   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 )ÚMobileViTInvertedResidualzY
    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$   r*   )r4   r5   r   r   ÚroundÚexpand_ratior6   Úuse_residualr    Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)r?   r!   r"   r#   r%   r(   Úexpanded_channelsr@   s          €r   r5   z"MobileViTInvertedResidual.__init__{   s¼   ø€ ô 	‰ÑÔÜ*¬3¬u°[À6×CVÑCVÑ5VÓ/WÓ+XÐZ[Ó\Ðà˜ÑÜ˜¨v¨h°aÐ8Ó9Ð9à# q™[ÒK¨{¸lÑ/JˆÔä,Ø Ð:KÐYZô
ˆŒô +ØØ)Ø*ØØØ$Øô
ˆŒô -ØØ)Ø%ØØ ô
ˆ�r   rA   c                 ó’   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  r||z   S |S rC   )rW   rX   rY   rV   )r?   rA   Úresiduals      r   rD   z!MobileViTInvertedResidual.forwardœ   sI   € Øˆà—?‘? 8Ó,ˆØ—=‘= Ó*ˆØ—?‘? 8Ó,ˆà&*×&7Ò&7ˆx˜(Ñ"ÐE¸XÐEr   ©r   )rE   rF   rG   Ú__doc__r   r   r5   rI   rJ   rD   rK   rL   s   @r   rN   rN   v   sc   ø„ ñð
 jkñ
Ø%ð
Ø47ð
ØGJð
ØTWð
Øcfð
à	õ
ðBF §¡ð F°·±÷ Fr   rN   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 )ÚMobileViTMobileNetLayerr!   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%   )r4   r5   r   Ú
ModuleListÚlayerÚrangerN   Úappend)	r?   r!   r"   r#   r%   ra   Úird   r@   s	           €r   r5   z MobileViTMobileNetLayer.__init__§   sh   ø€ ô 	‰ÑÔä—]‘]“_ˆŒ
Ü�zÓ"ò 	'ˆAÜ-ØØ'Ø)Ø!" a¢‘v¨Qô	ˆEð �J‰J×Ñ˜eÔ$Ø&‰Kñ	'r   rA   c                 ó8   — | j                   D ]
  } ||«      }Œ |S rC   ©rd   )r?   rA   Úlayer_modules      r   rD   zMobileViTMobileNetLayer.forward·   s$   € Ø ŸJ™Jò 	.ˆLÙ# HÓ-‰Hð	.àˆr   )r   r   ©
rE   rF   rG   r   r   r5   rI   rJ   rD   rK   rL   s   @r   r`   r`   ¦   sV   ø„ àopñ'Ø%ð'Ø47ð'ØGJð'ØTWð'Øilð'à	õ'ð  §¡ð °·±÷ 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 )ÚMobileViTSelfAttentionr!   Úhidden_sizer   Nc                 ó„  •— t         ‰| �  «        ||j                  z  dk7  rt        d|› d|j                  › d�«      ‚|j                  | _        t	        ||j                  z  «      | _        | j                  | j
                  z  | _        t        j                  || j                  |j                  ¬«      | _
        t        j                  || j                  |j                  ¬«      | _        t        j                  || j                  |j                  ¬«      | _        t        j                  |j                  «      | _        y )Nr   zThe hidden size z4 is not a multiple of the number of attention heads rQ   )r'   )r4   r5   Únum_attention_headsr6   r   Úattention_head_sizeÚall_head_sizer   ÚLinearÚqkv_biasÚqueryÚkeyr   ÚDropoutÚattention_probs_dropout_probÚdropout©r?   r!   rn   r@   s      €r   r5   zMobileViTSelfAttention.__init__¾   sþ   ø€ Ü‰ÑÔà˜×3Ñ3Ñ3°qÒ8ÜØ" ; -ð 0Ø×3Ñ3Ð4°Að7óð ð
 $*×#=Ñ#=ˆÔ Ü#& {°V×5OÑ5OÑ'OÓ#PˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜{¨D×,>Ñ,>ÀVÇ_Á_ÔUˆŒ
Ü—9‘9˜[¨$×*<Ñ*<À6Ç?Á?ÔSˆŒÜ—Y‘Y˜{¨D×,>Ñ,>ÀVÇ_Á_ÔUˆŒ
ä—z‘z &×"EÑ"EÓFˆ�r   Úhidden_statesc                 ó.  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  ||j	                  dd«      «      }|t        j                  | j                  «      z  }t        j                  j                  |d¬«      }| j                  |«      }t        j                  ||«      }	|	j                  dddd«      j!                  «       }	|	j#                  «       d d | j$                  fz   }
 |	j                  |
Ž }	|	S )Néÿÿÿÿr   r   éþÿÿÿ©Údimr   r   )Úshaperq   ru   ÚviewÚ	transposerv   r   rI   ÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxry   ÚpermuteÚ
contiguousÚsizerr   )r?   r{   Úinput_shapeÚhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes              r   rD   zMobileViTSelfAttention.forwardÑ   st  € Ø#×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØ—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐØ+¬d¯i©i¸×8PÑ8PÓ.QÑQÐô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆØÐr   rk   rL   s   @r   rm   rm   ½   s<   ø„ ðG˜ð G¸Sð GÀTõ Gð& U§\¡\ð °e·l±l÷ r   rm   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 )ÚMobileViTSelfOutputr!   rn   r   Nc                 ó    •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |j                  «      | _        y rC   ©r4   r5   r   rs   Údenserw   Úhidden_dropout_probry   rz   s      €r   r5   zMobileViTSelfOutput.__init__ì   s6   ø€ Ü‰ÑÔÜ—Y‘Y˜{¨KÓ8ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r   r{   c                 óJ   — | j                  |«      }| j                  |«      }|S rC   ©r™   ry   ©r?   r{   s     r   rD   zMobileViTSelfOutput.forwardñ   s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr   rk   rL   s   @r   r–   r–   ë   s8   ø„ ð>˜ð >¸Sð >ÀTõ >ð
 U§\¡\ð °e·l±l÷ 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 )ÚMobileViTAttentionr!   rn   r   Nc                 óf   •— t         ‰| �  «        t        ||«      | _        t	        ||«      | _        y rC   )r4   r5   rm   Ú	attentionr–   Úoutputrz   s      €r   r5   zMobileViTAttention.__init__ø   s*   ø€ Ü‰ÑÔÜ/°¸ÓDˆŒÜ)¨&°+Ó>ˆ�r   r{   c                 óJ   — | j                  |«      }| j                  |«      }|S rC   )r¡   r¢   )r?   r{   Úself_outputsÚattention_outputs       r   rD   zMobileViTAttention.forwardý   s%   € Ø—~‘~ mÓ4ˆØŸ;™; |Ó4ÐØÐr   rk   rL   s   @r   rŸ   rŸ   ÷   s8   ø„ ð?˜ð ?¸Sð ?ÀTõ ?ð
  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 )	ÚMobileViTIntermediater!   rn   Úintermediate_sizer   Nc                 óà   •— t         ‰| �  «        t        j                  ||«      | _        t        |j                  t        «      rt        |j                     | _	        y |j                  | _	        y rC   )
r4   r5   r   rs   r™   r;   r>   r<   r   Úintermediate_act_fn©r?   r!   rn   r¨   r@   s       €r   r5   zMobileViTIntermediate.__init__  sR   ø€ Ü‰ÑÔÜ—Y‘Y˜{Ð,=Ó>ˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r   r{   c                 óJ   — | j                  |«      }| j                  |«      }|S rC   )r™   rª   r�   s     r   rD   zMobileViTIntermediate.forward  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr   rk   rL   s   @r   r§   r§     sA   ø„ ð9˜ð 9¸Sð 9ÐUXð 9Ð]aõ 9ð U§\¡\ð °e·l±l÷ r   r§   c                   ó€   ‡ — e Zd Zdedededdfˆ fd„Zdej                  dej                  dej                  fd	„Zˆ xZ	S )
ÚMobileViTOutputr!   rn   r¨   r   Nc                 ó    •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |j                  «      | _        y rC   r˜   r«   s       €r   r5   zMobileViTOutput.__init__  s7   ø€ Ü‰ÑÔÜ—Y‘YÐ0°+Ó>ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r   r{   Úinput_tensorc                 óT   — | j                  |«      }| j                  |«      }||z   }|S rC   rœ   )r?   r{   r°   s      r   rD   zMobileViTOutput.forward  s.   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØ%¨Ñ4ˆØÐr   rk   rL   s   @r   r®   r®     sO   ø„ ð>˜ð >¸Sð >ÐUXð >Ð]aõ >ð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ 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 )	ÚMobileViTTransformerLayerr!   rn   r¨   r   Nc                 ó$  •— t         ‰| �  «        t        ||«      | _        t	        |||«      | _        t        |||«      | _        t        j                  ||j                  ¬«      | _        t        j                  ||j                  ¬«      | _        y )N©r0   )r4   r5   rŸ   r¡   r§   Úintermediater®   r¢   r   Ú	LayerNormÚlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr«   s       €r   r5   z"MobileViTTransformerLayer.__init__   sq   ø€ Ü‰ÑÔÜ+¨F°KÓ@ˆŒÜ1°&¸+ÐGXÓYˆÔÜ% f¨kÐ;LÓMˆŒÜ "§¡¨[¸f×>SÑ>SÔ TˆÔÜ!Ÿ|™|¨K¸V×=RÑ=RÔSˆÕr   r{   c                 ó¸   — | j                  | j                  |«      «      }||z   }| j                  |«      }| j                  |«      }| j	                  ||«      }|S rC   )r¡   r¹   rº   r¶   r¢   )r?   r{   r¥   Úlayer_outputs       r   rD   z!MobileViTTransformerLayer.forward(  s\   € ØŸ>™>¨$×*?Ñ*?ÀÓ*NÓOÐØ(¨=Ñ8ˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ—{‘{ <°Ó?ˆØÐr   rk   rL   s   @r   r³   r³     sF   ø„ ðT˜ð T¸Sð TÐUXð TÐ]aõ Tð 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 )	ÚMobileViTTransformerr!   rn   ra   r   Nc           	      óò   •— t         ‰| �  «        t        j                  «       | _        t        |«      D ]A  }t        ||t        ||j                  z  «      ¬«      }| j                  j                  |«       ŒC y )N)rn   r¨   )
r4   r5   r   rc   rd   re   r³   r   Ú	mlp_ratiorf   )r?   r!   rn   ra   Ú_Útransformer_layerr@   s         €r   r5   zMobileViTTransformer.__init__3  sh   ø€ Ü‰ÑÔä—]‘]“_ˆŒ
Ü�zÓ"ò 	1ˆAÜ 9ØØ'Ü"% k°F×4DÑ4DÑ&DÓ"Eô!Ðð
 �J‰J×ÑÐ/Õ0ñ	1r   r{   c                 ó8   — | j                   D ]
  } ||«      }Œ |S rC   ri   )r?   r{   rj   s      r   rD   zMobileViTTransformer.forward?  s%   € Ø ŸJ™Jò 	8ˆLÙ(¨Ó7‰Mð	8àÐr   rk   rL   s   @r   r¾   r¾   2  s@   ø„ ð
1˜ð 
1¸Sð 
1Ècð 
1ÐVZõ 
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
f   fd„Zdej                  de
d	ej                  fd„Zdej                  d	ej                  fd„Zˆ xZS )ÚMobileViTLayerzC
    MobileViT block: https://huggingface.co/papers/2110.02178
    r!   r"   r#   r%   rn   ra   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                  ||j                  ¬«      | _        t        |||d¬«      | _        t        |d|z  ||j                  ¬«      | _        y )	Nr   r   )r"   r#   r%   r(   rR   F)r"   r#   r$   r)   r*   )rn   ra   rµ   )r4   r5   Ú
patch_sizeÚpatch_widthÚpatch_heightrN   Údownsampling_layerr    Úconv_kernel_sizeÚconv_kxkÚconv_1x1r¾   Útransformerr   r·   r¸   Ú	layernormÚconv_projectionÚfusion)	r?   r!   r"   r#   r%   rn   ra   r(   r@   s	           €r   r5   zMobileViTLayer.__init__J  s  ø€ ô 	‰ÑÔØ!×,Ñ,ˆÔØ"×-Ñ-ˆÔà�QŠ;Ü&?ØØ'Ø)Ø!)¨Q¢‘v°AØ*2°Qª,˜ Qš¸Aô'ˆDÔ#ð '‰Kà&*ˆDÔ#ä*ØØ#Ø$Ø×/Ñ/ô	
ˆŒô +ØØ#Ø$ØØ#Ø ô
ˆŒô 0ØØ#Ø!ô
ˆÔô Ÿ™ k°v×7LÑ7LÔMˆŒä1Ø ¸+ÐSTô 
ˆÔô )Ø  K¡¸kÐW]×WnÑWnô
ˆ�r   rA   c                 ó|  — | j                   | j                  }}t        ||z  «      }|j                  \  }}}}t        j
                  j                  «       r$t        t	        j                  ||z  «      |z  «      n#t        t        j                  ||z  «      |z  «      }	t        j
                  j                  «       r$t        t	        j                  ||z  «      |z  «      n#t        t        j                  ||z  «      |z  «      }
d}|
|k7  s|	|k7  r't        j                  j                  ||	|
fdd¬«      }d}|
|z  }|	|z  }||z  }|j                  ||z  |z  |||«      }|j                  dd«      }|j                  ||||«      }|j                  dd«      }|j                  ||z  |d«      }||f||||||d	œ}||fS )
NFÚbilinear©r‹   ÚmodeÚalign_cornersTr   r   r   r}   )Ú	orig_sizeÚ
batch_sizeÚchannelsÚinterpolateÚnum_patchesÚnum_patches_widthÚnum_patches_height)rÈ   rÉ   r   r�   rI   ÚjitÚ
is_tracingr   Úceilr…   r   r‡   rÚ   Úreshaperƒ   )r?   rA   rÈ   rÉ   Ú
patch_arearØ   rÙ   Úorig_heightÚ
orig_widthÚ
new_heightÚ	new_widthrÚ   Únum_patch_widthÚnum_patch_heightrÛ   ÚpatchesÚ	info_dicts                    r   Ú	unfoldingzMobileViTLayer.unfolding„  sä  € Ø$(×$4Ñ$4°d×6GÑ6G�\ˆÜ˜ |Ñ3Ó4ˆ
à8@¿¹Ñ5ˆ
�H˜k¨:ô �y‰y×#Ñ#Ô%ô ”e—j‘j ¨|Ñ!;Ó<¸|ÑKÔLä”T—Y‘Y˜{¨\Ñ9Ó:¸\ÑIÓJð 	ô �y‰y×#Ñ#Ô%ô ”e—j‘j ¨kÑ!9Ó:¸[ÑHÔIä”T—Y‘Y˜z¨KÑ7Ó8¸;ÑFÓGð 	ð ˆØ˜
Ò" j°KÒ&?ä—}‘}×0Ñ0Ø 
¨IÐ6¸ZÐW\ð 1ó ˆHð ˆKð $ {Ñ2ˆØ%¨Ñ5ÐØ&¨Ñ8ˆð ×"Ñ"Ø˜Ñ!Ð$4Ñ4°lÀOÐU`ó
ˆð ×#Ñ# A qÓ)ˆØ—/‘/ *¨h¸ÀZÓPˆØ×#Ñ# A qÓ)ˆØ—/‘/ *¨zÑ"9¸;ÈÓKˆð & zÐ2Ø$Ø Ø&Ø&Ø!0Ø"2ñ
ˆ	ð ˜	Ð!Ð!r   ré   rê   c                 óÎ  — | j                   | j                  }}t        ||z  «      }|d   }|d   }|d   }|d   }	|d   }
|j                  «       j	                  |||d«      }|j                  dd«      }|j                  ||z  |	z  |
||«      }|j                  dd	«      }|j                  |||	|z  |
|z  «      }|d
   r&t        j                  j                  ||d   dd¬«      }|S )NrØ   rÙ   rÛ   rÝ   rÜ   r}   r   r   r   rÚ   r×   rÓ   FrÔ   )
rÈ   rÉ   r   rŠ   r‚   rƒ   rá   r   r‡   rÚ   )r?   ré   rê   rÈ   rÉ   râ   rØ   rÙ   rÛ   rè   rç   rA   s               r   ÚfoldingzMobileViTLayer.folding·  s&  € Ø$(×$4Ñ$4°d×6GÑ6G�\ˆÜ˜ |Ñ3Ó4ˆ
à˜|Ñ,ˆ
Ø˜ZÑ(ˆØ Ñ.ˆØ$Ð%9Ñ:ÐØ#Ð$7Ñ8ˆð ×%Ñ%Ó'×,Ñ,¨Z¸À[ÐRTÓUˆØ×%Ñ% a¨Ó+ˆØ×#Ñ#Ø˜Ñ!Ð$4Ñ4°oÀ|ÐU`ó
ˆð ×%Ñ% a¨Ó+ˆØ×#Ñ#Ø˜Ð"2°\Ñ"AÀ?ÐU`ÑC`ó
ˆð �]Ò#Ü—}‘}×0Ñ0Ø˜y¨Ñ5¸JÐV[ð 1ó ˆHð ˆr   c                 óŠ  — | j                   r| j                  |«      }|}| j                  |«      }| j                  |«      }| j                  |«      \  }}| j	                  |«      }| j                  |«      }| j                  ||«      }| j                  |«      }| j                  t        j                  ||fd¬«      «      }|S ©Nr   r   )rÊ   rÌ   rÍ   rë   rÎ   rÏ   rí   rÐ   rÑ   rI   Úcat)r?   rA   r\   ré   rê   s        r   rD   zMobileViTLayer.forwardÔ  s¸   € à×"Ò"Ø×.Ñ.¨xÓ8ˆHàˆð —=‘= Ó*ˆØ—=‘= Ó*ˆð "Ÿ^™^¨HÓ5Ñˆ�ð ×"Ñ" 7Ó+ˆØ—.‘. Ó)ˆð —<‘< ¨Ó3ˆà×'Ñ'¨Ó1ˆØ—;‘;œuŸy™y¨(°HÐ)=À1ÔEÓFˆØˆr   r]   )rE   rF   rG   r^   r   r   r5   rI   rJ   ÚtupleÚdictrë   rí   rD   rK   rL   s   @r   rÅ   rÅ   E  sÄ   ø„ ñð ñ8
àð8
ð ð8
ð ð	8
ð
 ð8
ð ð8
ð ð8
ð ð8
ð 
õ8
ðt1" %§,¡,ð 1"°5¸¿¹ÀtÐ9KÑ3Ló 1"ðf˜uŸ|™|ð ¸ð ÀÇÁó ð: §¡ð °·±÷ 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 )
ÚMobileViTEncoderr!   r   Nc           	      óì  •— t         ‰
| �  «        || _        t        j                  «       | _        d| _        dx}}|j                  dk(  rd}d}n|j                  dk(  rd}d}t        ||j                  d   |j                  d   dd¬«      }| j
                  j                  |«       t        ||j                  d   |j                  d   dd	¬«      }| j
                  j                  |«       t        ||j                  d   |j                  d	   d|j                  d   d¬
«      }| j
                  j                  |«       |r|dz  }t        ||j                  d	   |j                  d   d|j                  d   d|¬«      }| j
                  j                  |«       |r|dz  }t        ||j                  d   |j                  d   d|j                  d   d	|¬«      }	| j
                  j                  |	«       y )NFrP   Té   r   r   )r"   r#   r%   ra   r   r   )r"   r#   r%   rn   ra   é   )r"   r#   r%   rn   ra   r(   é   )r4   r5   r!   r   rc   rd   Úgradient_checkpointingÚoutput_strider`   Úneck_hidden_sizesrf   rÅ   Úhidden_sizes)r?   r!   Údilate_layer_4Údilate_layer_5r(   Úlayer_1Úlayer_2Úlayer_3Úlayer_4Úlayer_5r@   s             €r   r5   zMobileViTEncoder.__init__ï  sý  ø€ Ü‰ÑÔØˆŒä—]‘]“_ˆŒ
Ø&+ˆÔ#ð +0Ð/ˆ˜Ø×Ñ 1Ò$Ø!ˆNØ!‰NØ×!Ñ! RÒ'Ø!ˆNàˆä)ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØô
ˆð 	�
‰
×Ñ˜'Ô"ä)ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØô
ˆð 	�
‰
×Ñ˜'Ô"ä ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØ×+Ñ+¨AÑ.Øô
ˆð 	�
‰
×Ñ˜'Ô"áØ˜‰MˆHä ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØ×+Ñ+¨AÑ.ØØô
ˆð 	�
‰
×Ñ˜'Ô"áØ˜‰MˆHä ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØ×+Ñ+¨AÑ.ØØô
ˆð 	�
‰
×Ñ˜'Õ"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rC   r  )Ú.0Úvs     r   ú	<genexpr>z+MobileViTEncoder.forward.<locals>.<genexpr>H  s   è ø€ ÒX˜qÈ!É-œÑXùs   ‚Š)Úlast_hidden_stater{   )Ú	enumeraterd   rñ   r	   )r?   r{   r  r  Úall_hidden_statesrg   rj   s          r   rD   zMobileViTEncoder.forward9  sq   € ñ #7™B¸DÐä(¨¯©Ó4ò 	I‰OˆAˆ|Ù(¨Ó7ˆMâ#Ø$5¸Ð8HÑ$HÑ!ð		Iñ ÜÑX ]Ð4EÐ$FÔXÓXÐXä-ÀÐ]nÔoÐor   )FT)rE   rF   rG   r   r5   rI   rJ   rH   rñ   r	   rD   rK   rL   s   @r   rô   rô   î  s\   ø„ ðH#˜ð H#°4õ H#ðZ &+Ø ñ	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 )ÚMobileViTPreTrainedModelr!   Ú	mobilevitÚ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 weightsg        )ÚmeanÚstdNÚrunning_mean)r4   Ú_init_weightsr;   r   r9   ÚinitÚnormal_Úweightr!   Úinitializer_ranger'   Úzeros_Úgetattrr  Úones_Úrunning_varÚnum_batches_tracked)r?   r  r@   s     €r   r  z&MobileViTPreTrainedModel._init_weightsV  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   )rE   rF   rG   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrI   Úno_gradr   ÚModuler  rK   rL   s   @r   r  r  M  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 )ÚMobileViTModelr!   Úexpand_outputc                 óL  •— t         ‰| �  |«       || _        || _        t	        ||j
                  |j                  d   dd¬«      | _        t        |«      | _	        | j                  r.t	        ||j                  d   |j                  d   d¬«      | _
        | j                  «        y	)
aE  
        expand_output (`bool`, *optional*, defaults to `True`):
            Whether to expand the output of the model using a 1x1 convolution. If `True`, the model will apply an additional
            1x1 convolution to expand the output channels from `config.neck_hidden_sizes[5]` to `config.neck_hidden_sizes[6]`.
        r   r   r   )r"   r#   r$   r%   rø   é   r   rR   N)r4   r5   r!   r-  r    Únum_channelsrû   Ú	conv_stemrô   ÚencoderÚconv_1x1_expÚ	post_init)r?   r!   r-  r@   s      €r   r5   zMobileViTModel.__init__f  sŸ   ø€ ô 	‰Ñ˜Ô ØˆŒØ*ˆÔä+ØØ×+Ñ+Ø×1Ñ1°!Ñ4ØØô
ˆŒô (¨Ó/ˆŒà×ÒÜ 2ØØ"×4Ñ4°QÑ7Ø#×5Ñ5°aÑ8Øô	!ˆDÔð 	�‰Õr   Nr  r  r  r   c                 ó¨  — |�|n| j                   j                  }|�|n| j                   j                  }|€t        d«      ‚| j	                  |«      }| j                  |||¬«      }| j                  r/| j                  |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~   r}   F)r€   Úkeepdimr   )r  Úpooler_outputr{   )r!   r  r  r6   r1  r2  r-  r3  rI   r  r
   r{   )
r?   r  r  r  ÚkwargsÚembedding_outputÚencoder_outputsr  Úpooled_outputr¢   s
             r   rD   zMobileViTModel.forward…  s  € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÜÐ?Ó@Ð@àŸ>™>¨,Ó7ÐàŸ,™,ØØ!5Ø#ð 'ó 
ˆð ×ÒØ $× 1Ñ 1°/À!Ñ2DÓ EÐô "Ÿ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)rE   rF   rG   r   rH   r5   r   rI   rJ   rñ   r
   rD   rK   rL   s   @r   r,  r,  d  sr   ø„ ñ˜ð ¸tõ ð> ð -1Ø,0Ø#'ñ	(
à—l‘l TÑ)ð(
ð # T™kð(
ð ˜D‘[ð	(
ð 
Ð9Ñ	9ò(
ó ô(
r   r,  z‰
    MobileViT 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 )ÚMobileViTForImageClassificationr!   r   Nc                 ó|  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  d¬«      | _        |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       | _        | j                  «        y )NT)Úinplacer   r}   )r4   r5   Ú
num_labelsr,  r  r   rw   Úclassifier_dropout_probry   rs   rû   ÚIdentityÚ
classifierr4  ©r?   r!   r@   s     €r   r5   z(MobileViTForImageClassification.__init__¸  s�   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ'¨Ó/ˆŒô —z‘z &×"@Ñ"@È$ÔOˆŒàJP×J[ÑJ[Ð^_ÒJ_ŒB�I‰I�f×.Ñ.¨rÑ2°F×4EÑ4EÔFÔeg×epÑepÓerð 	Œð
 	�‰Õr   r  r  Úlabelsr  c                 ó`  — |�|n| j                   j                  }| j                  |||¬«      }|r|j                  n|d   }| j	                  | 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).
        Nr6  r   r   )ÚlossÚlogitsr{   )	r!   r  r  r8  rE  ry   Úloss_functionr   r{   )r?   r  r  rG  r  r9  Úoutputsr<  rJ  rI  r¢   s              r   rD   z'MobileViTForImageClassification.forwardÇ  sÅ   € ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—.‘. ÐDXÐfq�.Órˆá1<˜×-Ò-À'È!Á*ˆà—‘ §¡¨mÓ!<Ó=ˆàˆØÐØ×%Ñ% f¨f°d·k±kÓBˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä3ØØØ!×/Ñ/ô
ð 	
r   ©NNNN)rE   rF   rG   r   r5   r   rI   rJ   rH   rñ   r   rD   rK   rL   s   @r   r?  r?  ±  sˆ   ø„ ð˜ð °4õ ð ð -1Ø,0Ø&*Ø#'ñ"
à—l‘l TÑ)ð"
ð # T™kð"
ð —‘˜tÑ#ð	"
ð
 ˜D‘[ð"
ð 
Ð5Ñ	5ò"
ó ô"
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 )	ÚMobileViTASPPPoolingr!   r"   r#   r   Nc           	      ó†   •— t         ‰| �  «        t        j                  d¬«      | _        t        |||dddd¬«      | _        y )Nr   )Úoutput_sizeTÚrelu)r"   r#   r$   r%   r)   r*   )r4   r5   r   ÚAdaptiveAvgPool2dÚglobal_poolr    rÍ   )r?   r!   r"   r#   r@   s       €r   r5   zMobileViTASPPPooling.__init__î  sB   ø€ Ü‰ÑÔä×/Ñ/¸AÔ>ˆÔä*ØØ#Ø%ØØØ"Ø!ô
ˆ�r   rA   c                 ó®   — |j                   dd  }| j                  |«      }| j                  |«      }t        j                  j                  ||dd¬«      }|S )Nr~   rÓ   FrÔ   )r�   rT  rÍ   r   r‡   rÚ   )r?   rA   Úspatial_sizes      r   rD   zMobileViTASPPPooling.forwardý  sS   € Ø—~‘~ b cÐ*ˆØ×#Ñ# HÓ-ˆØ—=‘= Ó*ˆÜ—=‘=×,Ñ,¨X¸LÈzÐinÐ,ÓoˆØˆr   rk   rL   s   @r   rO  rO  í  sA   ø„ ð
˜ð 
¸Sð 
ÐPSð 
ÐX\õ 
ð §¡ð °·±÷ r   rO  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 )ÚMobileViTASPPzƒ
    ASPP module defined in DeepLab papers: https://huggingface.co/papers/1606.00915, https://huggingface.co/papers/1706.05587
    r!   r   Nc                 ó~  •— t         ‰| �  «        |j                  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   z"Expected 3 values for atrous_ratesr   rR  rS   )r"   r#   r$   r(   r*   rø   )Úp)r4   r5   rû   Úaspp_out_channelsÚlenÚatrous_ratesr6   r   rc   Úconvsr    rf   ÚextendrO  Úprojectrw   Úaspp_dropout_probry   )r?   r!   r"   r#   Úin_projectionÚrateÚ
pool_layerr@   s          €r   r5   zMobileViTASPP.__init__
  s(  ø€ Ü‰ÑÔà×.Ñ.¨rÑ2ˆØ×/Ñ/ˆäˆv×"Ñ"Ó# qÒ(ÜÐAÓBÐBä—]‘]“_ˆŒ
ä*ØØ#Ø%ØØ!ô
ˆð 	�
‰
×Ñ˜-Ô(à�
‰
×Ñð #×/Ñ/ö
ð ô #ØØ +Ø!-Ø !Ø!Ø#)öò
ô	
ô *¨&°+¸|ÓLˆ
Ø�
‰
×Ñ˜*Ô%ä)Ø  LÑ 0¸|ÐYZÐkqô
ˆŒô —z‘z F×$<Ñ$<Ô=ˆ�ùò)
s   Â5D:rA   c                 óÌ   — g }| j                   D ]  }|j                   ||«      «       Œ t        j                  |d¬«      }| j	                  |«      }| j                  |«      }|S rï   )r^  rf   rI   rð   r`  ry   )r?   rA   ÚpyramidÚconvÚpooled_featuress        r   rD   zMobileViTASPP.forward5  s\   € ØˆØ—J‘Jò 	+ˆDØ�N‰N™4 ›>Õ*ð	+ä—)‘)˜G¨Ô+ˆàŸ,™, wÓ/ˆØŸ,™, Ó7ˆØÐr   ©
rE   rF   rG   r^   r   r5   rI   rJ   rD   rK   rL   s   @r   rX  rX    s7   ø„ ñð)>˜ð )>°4õ )>ðV §¡ð °·±÷ r   rX  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 )ÚMobileViTDeepLabV3zJ
    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$   r)   r*   r'   )r4   r5   rX  Úasppr   Ú	Dropout2drC  ry   r    r[  rB  rE  rF  s     €r   r5   zMobileViTDeepLabV3.__init__E  s]   ø€ Ü‰ÑÔÜ! &Ó)ˆŒ	ä—|‘| F×$BÑ$BÓCˆŒä,ØØ×0Ñ0Ø×*Ñ*ØØ#Ø Øô
ˆ�r   r{   c                 ór   — | j                  |d   «      }| j                  |«      }| j                  |«      }|S )Nr}   )rm  ry   rE  )r?   r{   rA   s      r   rD   zMobileViTDeepLabV3.forwardU  s6   € Ø—9‘9˜]¨2Ñ.Ó/ˆØ—<‘< Ó)ˆØ—?‘? 8Ó,ˆØˆr   ri  rL   s   @r   rk  rk  @  s6   ø„ ñð
˜ð 
°4õ 
ð  U§\¡\ð °e·l±l÷ r   rk  zX
    MobileViT 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 )Ú MobileViTForSemanticSegmentationr!   r   Nc                 óª   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        |«      | _        | j                  «        y )NF)r-  )r4   r5   rB  r,  r  rk  Úsegmentation_headr4  rF  s     €r   r5   z)MobileViTForSemanticSegmentation.__init__b  sD   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ'¨¸eÔDˆŒÜ!3°FÓ!;ˆÔð 	�‰Õr   r  rG  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, MobileViTForSemanticSegmentation

        >>> 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/deeplabv3-mobilevit-small")
        >>> model = MobileViTForSemanticSegmentation.from_pretrained("apple/deeplabv3-mobilevit-small")

        >>> 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 oneTr6  r~   rÓ   FrÔ   )Úignore_indexr   )rI  rJ  r{   Ú
attentions)r!   r  r  rB  r6   r  r{   rs  r   r‡   rÚ   r�   r   Úsemantic_loss_ignore_indexr   )r?   r  rG  r  r  r9  rL  Úencoder_hidden_statesrJ  rI  Úupsampled_logitsÚloss_fctr¢   s                r   rD   z(MobileViTForSemanticSegmentation.forwardl  sq  € ð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   rM  )rE   rF   rG   r   r5   r   rI   rJ   rH   rñ   r   rD   rK   rL   s   @r   rq  rq  \  s�   ø„ ð˜ð °4õ ð ð -1Ø&*Ø,0Ø#'ñL
à—l‘l TÑ)ðL
ð —‘˜tÑ#ðL
ð # T™kð	L
ð
 ˜D‘[ðL
ð 
Ð(Ñ	(òL
ó ôL
r   rq  )r?  rq  r,  r  )rP   N)4r^   r…   rI   r   Útorch.nnr   Ú r   r  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   r   r   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_mobilevitr   Ú
get_loggerrE   Úloggerr   r   r*  r    rN   r`   rm   r–   rŸ   r§   r®   r³   r¾   rÅ   rô   r  r,  r?  rO  rX  rk  rq  Ú__all__r  r   r   ú<module>r†     sÿ  ðñ  ã ã Ý Ý %å &Ý !Ý 9÷ó õ .ß 7Ñ 7Ý 4ð 
ˆ×	Ñ	˜HÓ	%€ñ
˜#ð 
¨ð 
¸CÀ$¹Jð 
ÐRUó 
ô=˜Ÿ™ô =ô@-F §	¡	ô -Fô`˜bŸi™iô ô.+˜RŸY™Yô +ô\	˜"Ÿ)™)ô 	ô	 ˜Ÿ™ô 	 ô˜BŸI™Iô ô
�b—i‘iô 
ô §	¡	ô ô&˜2Ÿ9™9ô ô&fÐ/ô fôR\p�r—y‘yô \pð~ ô8˜ó 8ó ð8ð, ôI
Ð-ó I
ó ðI
ñX ðôô3
Ð&>ó 3
óð3
ôl˜2Ÿ9™9ô ô08�B—I‘Iô 8ôv˜Ÿ™ô ñ8 ðôô
X
Ð'?ó X
óð
X
òv�r   