Ë
    éÓ^j´I  ã                   ól  — d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mZ ddlmZmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ dg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&d'd„Z' e e'd¬«       e'd¬«       e'd¬«       e'dd¬«       e'dddd¬ «      d!œ«      Z(d(d"„Z)ed(d#„«       Z*ed(d$„«       Z+ed(d%„«       Z,ed(d&„«       Z-y))zˆ
InceptionNeXt paper: https://arxiv.org/abs/2303.16900
Original implementation & weights from: https://github.com/sail-sg/inceptionnext
é    )Úpartial)ÚListÚOptionalÚTupleÚUnionÚTypeN©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Útrunc_normal_ÚDropPathÚcalculate_drop_path_ratesÚ	to_2tupleÚget_paddingÚSelectAdaptivePool2dé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úcheckpoint_seq)Úregister_modelÚgenerate_default_cfgsÚMetaNeXtc                   óL   ‡ — e Zd ZdZ	 	 	 	 	 	 d	dededededef
ˆ fd„Zd„ Zˆ xZS )
ÚInceptionDWConv2dz% Inception depthwise convolution
    Úin_chsÚsquare_kernel_sizeÚband_kernel_sizeÚbranch_ratioÚdilationc                 ó|  •— ||dœ}t         ‰| �  «        t        ||z  «      }	t        ||¬«      }
t        ||¬«      }t	        j
                  |	|	|f|
||	dœ|¤Ž| _        t	        j
                  |	|	d|ffd|fd|f|	dœ|¤Ž| _        t	        j
                  |	|	|dff|df|df|	dœ|¤Ž| _        |d|	z  z
  |	|	|	f| _	        y )N©ÚdeviceÚdtype)r   )Úpaddingr   Úgroupsr   r   é   )
ÚsuperÚ__init__Úintr   ÚnnÚConv2dÚ	dwconv_hwÚdwconv_wÚdwconv_hÚsplit_indexes)Úselfr   r   r   r   r   r"   r#   ÚddÚgcÚsquare_paddingÚband_paddingÚ	__class__s               €úe/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/inception_next.pyr(   zInceptionDWConv2d.__init__   s  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ�˜,Ñ&Ó'ˆÜ$Ð%7À(ÔKˆÜ"Ð#3¸hÔGˆÜŸ™Ø�Ð&ðHà"¨X¸bñHàDFñHˆŒô Ÿ	™	Ø��QÐ(Ð)ðPà˜Ð%°°H°ÀbñPàLNñPˆŒô Ÿ	™	Ø�Ð% qÐ)ðPà! 1Ð%°¸1°ÀbñPàLNñPˆŒð % q¨2¡v™o¨r°2°rÐ:ˆÕó    c                 óà   — t        j                  || j                  d¬«      \  }}}}t        j                  || j	                  |«      | j                  |«      | j                  |«      fd¬«      S )Nr   )Údim)ÚtorchÚsplitr/   Úcatr,   r-   r.   )r0   ÚxÚx_idÚx_hwÚx_wÚx_hs         r6   ÚforwardzInceptionDWConv2d.forward4   se   € Ü$Ÿ{™{¨1¨d×.@Ñ.@ÀaÔHÑˆˆd�C˜Ü�y‰yØØ�N‰N˜4Ó Ø�M‰M˜#ÓØ�M‰M˜#Óð	ð
 ô
ð 	
r7   )r&   é   g      À?r   NN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   Úfloatr(   rB   Ú__classcell__©r5   s   @r6   r   r      sV   ø„ ñð '(Ø$&Ø"'ØØØñ;àð;ð !$ð;ð "ð	;ð
  ð;ð õ;ö4
r7   r   c                   ó²   ‡ — e Zd ZdZddej
                  dddddfdedee   dee   deej                     d	eeej                        d
e
defˆ fd„Zd„ Zˆ xZS )ÚConvMlpz¢ MLP using 1x1 convs that keeps spatial dims
    copied from timm: https://github.com/huggingface/pytorch-image-models/blob/v0.6.11/timm/models/layers/mlp.py
    NTç        Úin_featuresÚhidden_featuresÚout_featuresÚ	act_layerÚ
norm_layerÚbiasÚdropc
                 óv  •— ||	dœ}
t         ‰| �  «        |xs |}|xs |}t        |«      }t        j                  ||fd|d   dœ|
¤Ž| _        |r	 ||fi |
¤Žnt        j                  «       | _         |«       | _        t        j                  |«      | _
        t        j                  ||fd|d   dœ|
¤Ž| _        y )Nr!   r   r   )Úkernel_sizerS   )r'   r(   r   r*   r+   Úfc1ÚIdentityÚnormÚactÚDropoutrT   Úfc2)r0   rN   rO   rP   rQ   rR   rS   rT   r"   r#   r1   r5   s              €r6   r(   zConvMlp.__init__D   sµ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ#Ò2 {ˆØ)Ò8¨[ˆÜ˜‹ˆä—9‘9˜[¨/Ð]ÀqÈtÐTUÉwÑ]ÐZ\Ñ]ˆŒÙ9C‘J˜Ñ5°"Ò5ÌÏÉËˆŒ	Ù“;ˆŒÜ—J‘J˜tÓ$ˆŒ	Ü—9‘9˜_¨lÐ^ÈÐPTÐUVÑPWÑ^Ð[]Ñ^ˆ�r7   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S ©N)rW   rY   rZ   rT   r\   ©r0   r=   s     r6   rB   zConvMlp.forward\   sH   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆr7   )rD   rE   rF   rG   r*   ÚReLUr)   r   r   ÚModuleÚboolrH   r(   rB   rI   rJ   s   @r6   rL   rL   ?   s™   ø„ ñð .2Ø*.Ø)+¯©Ø48ØØØØñ_àð_ð & c™]ð_ð # 3™-ð	_ð
 ˜BŸI™I‘ð_ð !  b§i¡i¡Ñ1ð_ð ð_ð õ_ö0r7   rL   c                   óê   ‡ — e Zd ZdZdddej
                   eej                  d¬«      ddd	d	f	d
edede	de
deej                     deej                     de
defˆ fd„Zddedee	   fd„Zddefd„Zˆ xZS )ÚMlpClassifierHeadz MLP classification head
    éè  Úavgr&   ç�íµ ÷Æ°>)ÚepsrM   TNrN   Únum_classesÚ	pool_typeÚ	mlp_ratiorQ   rR   rT   rS   c                 ó¾  •— |	|
dœ}t         ‰| �  «        d| _        || _        t	        ||z  «      x| _        }|sJ d«       ‚t        |d¬«      | _        t        j                  || j                  j                  «       z  |fd|i|¤Ž| _         |«       | _         ||fi |¤Ž| _        t        j                  ||fd|i|¤Ž| _        t        j                  |«      | _        y )Nr!   FúCannot disable poolingT©rj   ÚflattenrS   )r'   r(   Úuse_convrN   r)   Únum_featuresr   Úglobal_poolr*   ÚLinearÚ	feat_multrW   rZ   rY   r\   r[   rT   )r0   rN   ri   rj   rk   rQ   rR   rT   rS   r"   r#   r1   rO   r5   s                €r6   r(   zMlpClassifierHead.__init__i   sÕ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ&ˆÔÜ.1°)¸kÑ2IÓ.JÐJˆÔ˜OáÐ2Ð2Ó2ˆyÜ/¸)ÈTÔRˆÔä—9‘9˜[¨4×+;Ñ+;×+EÑ+EÓ+GÑGÈÑjÐ_cÐjÐgiÑjˆŒÙ“;ˆŒÙ˜Ñ5°"Ñ5ˆŒ	Ü—9‘9˜_¨kÑKÀÐKÈÑKˆŒÜ—J‘J˜tÓ$ˆ�	r7   c                 óÆ   — |�|sJ d«       ‚t        |d¬«      | _        |dkD  r&t        j                  | j                  |«      | _        y t        j
                  «       | _        y )Nrm   Trn   r   )r   rr   r*   rs   rq   rX   r\   )r0   ri   rj   s      r6   ÚresetzMlpClassifierHead.reset…   sT   € ØÐ ÙÐ6Ð6Ó6�9Ü3¸iÐQUÔVˆDÔà@KÈaÂ”2—9‘9˜T×.Ñ.°Ó<ˆ�ÔUW×U`ÑU`ÓUbˆ�r7   Ú
pre_logitsc                 óÖ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|r|S | j                  |«      S r^   )rr   rW   rZ   rY   rT   r\   ©r0   r=   rw   s      r6   rB   zMlpClassifierHead.forwardŒ   s[   € Ø×Ñ˜QÓˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�I‰I�a‹LˆÙˆqÐ/ D§H¡H¨Q£KÐ/r7   r^   ©F)rD   rE   rF   rG   r*   ÚGELUr   Ú	LayerNormr)   ÚstrrH   r   ra   rb   r(   r   rv   rB   rI   rJ   s   @r6   rd   rd   e   s½   ø„ ñð  $Ø"Ø Ø)+¯©Ù*1°"·,±,ÀDÔ*IØØØØñ%àð%ð ð%ð ð	%ð
 ð%ð ˜BŸI™I‘ð%ð ˜RŸY™Y™ð%ð ð%ð õ%ñ8c ð c°¸#±ó cñ0 T÷ 0r7   rd   c                   óô   ‡ — e Zd ZdZdeej                  edej                  ddddf
de	de	d	e
ej                     d
e
ej                     de
ej                     dede
ej                     dedefˆ fd„Zd„ Zˆ xZS )ÚMetaNeXtBlockzÙ MetaNeXtBlock Block
    Args:
        dim (int): Number of input channels.
        drop_path (float): Stochastic depth rate. Default: 0.0
        ls_init_value (float): Init value for Layer Scale. Default: 1e-6.
    r   é   rg   rM   Nr9   r   Útoken_mixerrR   Ú	mlp_layerrk   rQ   Úls_init_valueÚ	drop_pathc                 ój  •— |
|dœ}t         ‰| �  «         ||fd|i|¤Ž| _         ||fi |¤Ž| _         ||t	        ||z  «      fd|i|¤Ž| _        |r,t        j                  |t        j                  |fi |¤Žz  «      nd | _
        |	dkD  rt        |	«      | _        y t        j                  «       | _        y )Nr!   r   rQ   rM   )r'   r(   r�   rY   r)   Úmlpr*   Ú	Parameterr:   ÚonesÚgammar   rX   r„   )r0   r9   r   r�   rR   r‚   rk   rQ   rƒ   r„   r"   r#   r1   r5   s                €r6   r(   zMetaNeXtBlock.__init__�   s©   ø€ ð ¨Ñ/ˆÜ‰ÑÔÙ& sÑD°XÐDÀÑDˆÔÙ˜sÑ) bÑ)ˆŒ	Ù˜S¤# i°#¡oÓ"6ÑRÀ)ÐRÈrÑRˆŒÙLY”R—\‘\ -´%·*±*¸SÑ2GÀBÑ2GÑ"GÔHÐ_cˆŒ
Ø09¸B²œ )Ó,ˆ�ÄBÇKÁKÃMˆ�r7   c                 ó
  — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  �-|j	                  | j                  j                  dddd«      «      }| j                  |«      |z   }|S )Nr   éÿÿÿÿ)r�   rY   r†   r‰   ÚmulÚreshaper„   )r0   r=   Úshortcuts      r6   rB   zMetaNeXtBlock.forward³   sv   € ØˆØ×Ñ˜QÓˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�:‰:Ð!Ø—‘�d—j‘j×(Ñ(¨¨B°°1Ó5Ó6ˆAØ�N‰N˜1Ó Ñ(ˆØˆr7   )rD   rE   rF   rG   r   r*   ÚBatchNorm2drL   r{   r)   r   ra   rH   r(   rB   rI   rJ   s   @r6   r   r   •   s¼   ø„ ñð Ø+<Ø*,¯.©.Ø)0Ø Ø)+¯©Ø#'Ø!ØØñRàðRð ðRð ˜bŸi™i™ð	Rð
 ˜RŸY™Y™ðRð ˜BŸI™I‘ðRð ðRð ˜BŸI™I‘ðRð !ðRð õRö,r7   r   c                   óè   ‡ — e Zd Zdddddeej
                  ddddfdededed	ed
eeef   dee	e
      de
deej                     deej                     deeej                        de
fˆ fd„Zd„ Zˆ xZS )ÚMetaNeXtStageé   )r   r   Nç      ð?r€   r   Úout_chsÚstrideÚdepthr   Údrop_path_ratesrƒ   r�   rQ   rR   rk   c                 óÂ  •— ||dœ}t         ‰| �  «        d| _        |dkD  s|d   |d   k7  r?t        j                   |
|fi |¤Žt        j
                  ||fd||d   dœ|¤Ž«      | _        nt        j                  «       | _        |xs dg|z  }g }t        |«      D ]+  }|j                  t        d	||d   ||   |||	|
|dœ|¤Ž«       Œ- t        j                  |Ž | _        y )
Nr!   Fr   r   r’   )rV   r•   r   rM   )r9   r   r„   rƒ   r�   rQ   rR   rk   © )r'   r(   Úgrad_checkpointingr*   Ú
Sequentialr+   Ú
downsamplerX   ÚrangeÚappendr   Úblocks)r0   r   r”   r•   r–   r   r—   rƒ   r�   rQ   rR   rk   r"   r#   r1   Ústage_blocksÚir5   s                    €r6   r(   zMetaNeXtStage.__init__¿   s  ø€ ð  ¨Ñ/ˆÜ‰ÑÔØ"'ˆÔØ�AŠ:˜ !™¨°©Ò3Ü Ÿm™mÙ˜6Ñ( RÑ(Ü—	‘	ØØðð !"Ø!Ø% a™[ñð ñó
ˆD�Oô !Ÿk™k›mˆDŒOà)Ò9¨b¨T°E©\ˆØˆÜ�u“ò 	ˆAØ×Ñ¤ð 
!ØØ! !™Ø)¨!Ñ,Ø+Ø'Ø#Ø%Ø#ñ
!ð ñ
!õ 
ð	ô —m‘m \Ð2ˆ�r7   c                 óÎ   — | j                  |«      }| j                  r6t        j                  j	                  «       st        | j                  |«      }|S | j                  |«      }|S r^   )rœ   rš   r:   ÚjitÚis_scriptingr   rŸ   r_   s     r6   rB   zMetaNeXtStage.forwardñ   sS   € Ø�O‰O˜AÓˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.ˆAð ˆð —‘˜A“ˆAØˆr7   )rD   rE   rF   r   r*   r{   r)   r   r   r   rH   r   ra   r(   rB   rI   rJ   s   @r6   r‘   r‘   ¾   sÏ   ø„ ð
 ØØ(.Ø59Ø#&Ø+<Ø)+¯©Ø48Ø ØØñ03àð03ð ð03ð ð	03ð
 ð03ð ˜C ˜H‘oð03ð & d¨5¡kÑ2ð03ð !ð03ð ˜bŸi™i™ð03ð ˜BŸI™I‘ð03ð !  b§i¡i¡Ñ1ð03ð õ03ödr7   r‘   c                   óX  ‡ — e Zd ZdZddddddeej                  ej                  dd	d	d
ddfdedede	dede
edf   de
edf   deeej                     eeej                        f   deej                     deej                     deee
edf   f   dededefˆ fd„Zd„ Zej&                  j(                  d0d„«       Zej&                  j(                  dej                  fd„«       Zd1dedee	   fd„Zej&                  j(                  d2d „«       Zej&                  j(                  d!„ «       Z	 	 	 	 	 d3d"ej6                  d#eeeee   f      d$ed%ed&e	d'edeeej6                     e
ej6                  eej6                     f   f   fd(„Z	 	 	 d4d#eeee   f   d)ed*efd+„Zd,„ Zd0d-efd.„Z d/„ Z!ˆ xZ"S )5r   a‘   MetaNeXt
        A PyTorch impl of : `InceptionNeXt: When Inception Meets ConvNeXt` - https://arxiv.org/abs/2303.16900

    Args:
        in_chans (int): Number of input image channels. Default: 3
        num_classes (int): Number of classes for classification head. Default: 1000
        depths (tuple(int)): Number of blocks at each stage. Default: (3, 3, 9, 3)
        dims (tuple(int)): Feature dimension at each stage. Default: (96, 192, 384, 768)
        token_mixers: Token mixer function. Default: nn.Identity
        norm_layer: Normalization layer. Default: nn.BatchNorm2d
        act_layer: Activation function for MLP. Default: nn.GELU
        mlp_ratios (int or tuple(int)): MLP ratios. Default: (4, 4, 4, 3)
        drop_rate (float): Head dropout rate
        drop_path_rate (float): Stochastic depth rate. Default: 0.
        ls_init_value (float): Init value for Layer Scale. Default: 1e-6.
    r&   re   rf   é    ©r&   r&   é	   r&   ©é`   éÀ   é€  i   )r€   r€   r€   r&   rM   rg   NÚin_chansri   rr   Úoutput_strideÚdepths.ÚdimsÚtoken_mixersrR   rQ   Ú
mlp_ratiosÚ	drop_rateÚdrop_path_raterƒ   c                 óþ  •— t         ‰| �  «        ||dœ}t        |«      }t        |t        t
        f«      s|g|z  }t        |
t        t
        f«      s|
g|z  }
|| _        || _        || _        || _	        g | _
        t        j                  t        j                  ||d   fdddœ|¤Ž ||d   fi |¤Ž«      | _        t        ||d¬«      }|d   }d}d}t        j                  «       | _        t#        |«      D ]Ÿ  }|dk(  s|dkD  rdnd}||k\  r|dkD  r||z  }d}||z  }|d	v rdnd}||   }| j                   j%                  t'        ||f|dkD  r|nd||f||   ||   ||	||   ||
|   d
œ	|¤Ž«       |}| xj                  t)        ||d|› �¬«      gz  c_
        Œ¡ || _        t-        | j*                  |f| j                  |dœ|¤Ž| _        | j.                  j*                  | _        | j3                  | j4                  «       y )Nr!   r   r€   )rV   r•   T)Ú	stagewiser   r’   )r   r’   )	r•   r   r–   r—   rƒ   rQ   r�   rR   rk   zstages.)Únum_chsÚ	reductionÚmodule)rj   rT   )r'   r(   ÚlenÚ
isinstanceÚlistÚtupleri   r­   rr   r³   Úfeature_infor*   r›   r+   Ústemr   Ústagesr�   rž   r‘   Údictrq   rd   ÚheadÚhead_hidden_sizeÚapplyÚ_init_weights)r0   r­   ri   rr   r®   r¯   r°   r±   rR   rQ   r²   r³   r´   rƒ   r"   r#   r1   Ú	num_stageÚdp_ratesÚprev_chsÚcurr_strider   r¡   r•   Úfirst_dilationr”   r5   s                             €r6   r(   zMetaNeXt.__init__  sA  ø€ ô$ 	‰ÑÔØ¨Ñ/ˆÜ˜“Kˆ	Ü˜,¬¬u¨Ô6Ø(˜>¨IÑ5ˆLÜ˜*¤t¬U mÔ4Ø$˜¨	Ñ1ˆJØ&ˆÔØ ˆŒØ&ˆÔØ"ˆŒØˆÔä—M‘MÜ�I‰I�h  Q¡ÐG°Q¸qÑGÀBÑGÙ�t˜A‘wÑ% "Ñ%ó
ˆŒ	ô
 -¨^¸VÈtÔTˆØ˜‘7ˆØˆØˆä—m‘m“oˆŒÜ�yÓ!ò 	gˆAØ%¨Ò*¨a°!ªe‘Q¸ˆFØ˜mÒ+°¸²
Ø˜FÑ"�Ø�Ø˜6Ñ!ˆKØ"*¨fÑ"4™Q¸!ˆNØ˜1‘gˆGØ�K‰K×Ñœ}ØØð ð "# Q¢‘v¨AØ(¨(Ð3Ø˜Q‘iØ (¨¡Ø+Ø#Ø(¨™OØ%Ø$ Q™-ñ ð ñ ô ð ˆHØ×Ò¤$¨xÀ;ÐY`ÐabÐ`cÐWdÔ"eÐ!fÑfÖð/	gð0 %ˆÔÜ% d×&7Ñ&7¸ÐwÐPT×P`ÑP`ÐgpÑwÐtvÑwˆŒ	Ø $§	¡	× 6Ñ 6ˆÔØ�
‰
�4×%Ñ%Õ&r7   c                 óö   — t        |t        j                  t        j                  f«      rOt	        |j
                  d¬«       |j                  �+t        j                  j                  |j                  d«       y y y )Ng{®Gáz”?)Ústdr   )	r»   r*   r+   rs   r   ÚweightrS   ÚinitÚ	constant_)r0   Úms     r6   rÅ   zMetaNeXt._init_weightsS  sS   € Ü�aœ"Ÿ)™)¤R§Y¡YÐ/Ô0Ü˜!Ÿ(™(¨Õ,Ø�v‰vÐ!Ü—‘×!Ñ! !§&¡&¨!Õ,ð "ð 1r7   c                 ó2   — t        d|rd¬«      S ddg¬«      S )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)r¿   rŸ   )rÁ   )r0   Úcoarses     r6   Úgroup_matcherzMetaNeXt.group_matcherY  s/   € äØÙ(.Ð$ô
ð 	
ð 6Ø8ð5ô
ð 	
r7   Úreturnc                 ó.   — | j                   j                  S r^   )rÂ   r\   ©r0   s    r6   Úget_classifierzMetaNeXt.get_classifierc  s   € à�y‰y�}‰}Ðr7   c                 óJ   — || _         | j                  j                  ||«       y r^   )ri   rÂ   rv   )r0   ri   rr   s      r6   Úreset_classifierzMetaNeXt.reset_classifierg  s   € Ø&ˆÔØ�	‰	�‰˜ [Õ1r7   c                 ó4   — | j                   D ]	  }||_        Œ y r^   )rÀ   rš   )r0   ÚenableÚss      r6   Úset_grad_checkpointingzMetaNeXt.set_grad_checkpointingk  s   € à—‘ò 	*ˆAØ#)ˆAÕ ñ	*r7   c                 ó   — t        «       S r^   )ÚsetrÖ   s    r6   Úno_weight_decayzMetaNeXt.no_weight_decayp  s	   € ä‹uˆr7   r=   ÚindicesrY   Ú
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ór  — |dv sJ d«       ‚g }t        t        | j                  «      |«      \  }}	| j                  |«      }t        j
                  j                  «       s|s| j                  }
n| j                  d|	dz    }
t        |
«      D ]#  \  }} ||«      }||v sŒ|j                  |«       Œ% |r|S ||fS )aï   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )ÚNCHWzOutput shape must be NCHW.Nr   )	r   rº   rÀ   r¿   r:   r£   r¤   Ú	enumeraterž   )r0   r=   rá   rY   râ   rã   rä   ÚintermediatesÚtake_indicesÚ	max_indexrÀ   Úfeat_idxÚstages                r6   Úforward_intermediateszMetaNeXt.forward_intermediatest  sÂ   € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6´s¸4¿;¹;Ó7GÈÓ"QÑˆ�ið �I‰I�a‹LˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFä(¨Ó0ò 	(‰OˆH�eÙ�a“ˆAØ˜<Ò'Ø×$Ñ$ QÕ'ð	(ñ
 Ø Ð à�-ÐÐr7   Ú
prune_normÚ
prune_headc                 ó    — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |r| j                  dd«       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   rf   )r   rº   rÀ   rÙ   )r0   rá   rî   rï   ré   rê   s         r6   Úprune_intermediate_layersz"MetaNeXt.prune_intermediate_layersž  sM   € ô #7´s¸4¿;¹;Ó7GÈÓ"QÑˆ�iØ—k‘k . 9¨q¡=Ð1ˆŒÙØ×!Ñ! ! UÔ+ØÐr7   c                 óJ   — | j                  |«      }| j                  |«      }|S r^   )r¿   rÀ   r_   s     r6   Úforward_featureszMetaNeXt.forward_features¬  s!   € Ø�I‰I�a‹LˆØ�K‰K˜‹NˆØˆr7   rw   c                 óN   — |r| j                  ||¬«      S | j                  |«      S )N)rw   )rÂ   ry   s      r6   Úforward_headzMetaNeXt.forward_head±  s%   € Ù6@ˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRr7   c                 óJ   — | j                  |«      }| j                  |«      }|S r^   )ró   rõ   r_   s     r6   rB   zMetaNeXt.forward´  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr7   rz   r^   )T)NFFræ   F)r   FT)#rD   rE   rF   rG   r   r*   r�   r{   r)   r}   r   r   r   ra   r   rH   r(   rÅ   r:   r£   ÚignorerÓ   r×   r   rÙ   rÝ   rà   ÚTensorrb   rí   rñ   ró   rõ   rB   rI   rJ   s   @r6   r   r   ú   s¯  ø„ ñð& Ø#Ø$Ø!#Ø&2Ø$7ØJ[Ø*,¯.©.Ø)+¯©Ø6BØ!Ø$&Ø#'ØØñ!E'àðE'ð ðE'ð ð	E'ð
 ðE'ð ˜#˜s˜(‘OðE'ð ˜˜S˜‘/ðE'ð    R§Y¡Y¡°°d¸2¿9¹9±oÑ1FÐ FÑGðE'ð ˜RŸY™Y™ðE'ð ˜BŸI™I‘ðE'ð ˜c 5¨¨c¨¡?Ð2Ñ3ðE'ð ðE'ð "ðE'ð !õE'òN-ð ‡Y�Y×Ñò
ó ð
ð ‡Y�Y×Ñð §	¡	ò ó ðñ2¨Cð 2¸hÀs¹mó 2ð ‡Y�Y×Ñò*ó ð*ð ‡Y�Y×Ññó ðð 8<ØØ$Ø$Ø',ñ( à�|‰|ð( ð ˜e C¨¨c© NÑ3Ñ4ð( ð ð	( ð
 ð( ð ð( ð !%ð( ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó( ðX ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	òñ
S¨$ó Sör7   c                 ó2   — | dddddt         t        dddd	œ|¥S )
Nre   )r&   éà   rú   )é   rû   g      ì?Úbicubiczstem.0zhead.fc2z
apache-2.0)Úurlri   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanrÌ   Ú
first_convÚ
classifierÚlicenser	   )rý   Úkwargss     r6   Ú_cfgr  º  s3   € àØ¨=ÀvØ¨IÜ%Ô.BØ¨jØñð ðð r7   ztimm/)Ú	hf_hub_idgffffffî?)r  r   )r&   r¬   r¬   )é   r	  r“   )r  rþ   rÿ   r   )zinception_next_atto.sail_in1kzinception_next_tiny.sail_in1kzinception_next_small.sail_in1kzinception_next_base.sail_in1kz!inception_next_base.sail_in1k_384c                 óD   — t        t        | |fdt        dd¬«      i|¤Ž}|S )NÚfeature_cfg)r   r   r’   r&   T)Úout_indicesÚflatten_sequential)r   r   rÁ   )ÚvariantÚ
pretrainedr  Úmodels       r6   Ú_create_inception_nextr  à  s3   € Ü Ü�'˜:ñä \ÀdÔKðð ñ€Eð
 €Lr7   c           	      ól   — t        ddt        t        dd¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )	N)r’   r’   é   r’   )é(   éP   é    i@  r¨   g      Ð?)r   r   ©r¯   r°   r±   r  )Úinception_next_atto)rÁ   r   r   r  ©r  r  Ú
model_argss      r6   r  r  é  sB   € äØÐ"4ÜÔ.ÀÐQUÔVô€Jô "ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑmÐmr7   c           	      óT   — t        ddt        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr§   r©   r  r  )Úinception_next_tiny©rÁ   r   r  r  s      r6   r  r  ò  s7   € äØÐ"5Ü&ô€Jô "ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑmÐmr7   c           	      óT   — t        ddt        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )N©r&   r&   é   r&   r©   r  r  )Úinception_next_smallr  r  s      r6   r!  r!  û  s7   € äØÐ#6Ü&ô€Jô "ÑnÀZÐnÔSWÐXbÑSmÐflÑSmÑnÐnr7   c           	      óT   — t        ddt        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr  )é€   é   i   i   r  r  )Úinception_next_baser  r  s      r6   r%  r%    s7   € äØÐ#8Ü&ô€Jô "ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑmÐmr7   )Ú rz   ).rG   Ú	functoolsr   Útypingr   r   r   r   r   r:   Útorch.nnr*   Ú	timm.datar
   r   Útimm.layersr   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_manipulater   Ú	_registryr   r   Ú__all__ra   r   rL   rd   r   r‘   r   r  Údefault_cfgsr  r  r  r!  r%  r™   r7   r6   ú<module>r2     s[  ðñõ
 ß 5Õ 5ã Ý ç Aß x× xÝ *Ý +Ý 'ß <àˆ,€ô&
˜Ÿ	™	ô &
ôR#ˆb�i‰iô #ôL-0˜Ÿ	™	ô -0ô`&�B—I‘Iô &ôR9�B—I‘Iô 9ôx}ˆr�y‰yô }ó@	ñ %Ù%)Øô&ñ &*Øô&ñ '+Øô'ñ &*Øàô&ñ
 *.Øà ¨H¸sô*ñ%&ó €ó4ð ònó ðnð ònó ðnð òoó ðoð ònó ñnr7   