Ë
    éÓ^jÛI  ã                   ó¼  — d Z ddlZddlm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mZ ddl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mZ dgZ d*dejB                  de"de#fd„Z$ G d„ dejB                  «      Z% G d„ dejB                  «      Z& G d„ de&«      Z' G d„ dejB                  «      Z( G d„ dejB                  «      Z) G d„ dejB                  «      Z* G d„ dejB                  «      Z+ G d„ dejB                  «      Z,d „ Z-d+d!„Z.d,d"„Z/ e e/d#¬$«       e/d#¬$«       e/d#¬$«      d%œ«      Z0ed+d&e,fd'„«       Z1ed+d&e,fd(„«       Z2ed+d&e,fd)„«       Z3y)-zk Sequencer

Paper: `Sequencer: Deep LSTM for Image Classification` - https://arxiv.org/pdf/2205.01972.pdf

é    N)Úpartial)Ú
accumulate)ÚListÚOptionalÚTupleÚTypeÚUnion)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚDEFAULT_CROP_PCT)Úlecun_normal_ÚDropPathÚMlpÚ
PatchEmbedÚClassifierHeadé   )Úbuild_model_with_cfg)Únamed_apply)Úregister_modelÚgenerate_default_cfgsÚSequencer2dÚmoduleÚnameÚ	head_biasc                 ó  — t        | t        j                  «      �rC|j                  d«      rTt        j                  j                  | j                  «       t        j                  j                  | j                  |«       y |rKt        | j                  «       | j                  �ºt        j                  j                  | j                  «       y t        j                  j                  | j                  «       | j                  �Zd|v r,t        j                  j                  | j                  d¬«       y t        j                  j                  | j                  «       y y y t        | t        j                  «      rLt        | j                  «       | j                  �*t        j                  j                  | j                  «       y y t        | t        j                  t        j                  t        j                  f«      rSt        j                  j!                  | j                  «       t        j                  j                  | j                  «       y t        | t        j"                  t        j$                  t        j&                  f«      rZdt)        j*                  | j,                  «      z  }| j/                  «       D ]$  }t        j                  j1                  || |«       Œ& y t3        | d«      r| j5                  «        y y )NÚheadÚmlpç�íµ ÷Æ°>)Ústdg      ð?Úinit_weights)Ú
isinstanceÚnnÚLinearÚ
startswithÚinitÚzeros_ÚweightÚ	constant_Úbiasr   Úxavier_uniform_Únormal_ÚConv2dÚ	LayerNormÚBatchNorm2dÚ	GroupNormÚones_ÚRNNÚGRUÚLSTMÚmathÚsqrtÚhidden_sizeÚ
parametersÚuniform_Úhasattrr    )r   r   r   ÚflaxÚstdvr'   s         ú`/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/sequencer.pyÚ_init_weightsr=      s×  € Ü�&œ"Ÿ)™)Õ$Ø�?‰?˜6Ô"Ü�G‰G�N‰N˜6Ÿ=™=Ô)Ü�G‰G×Ñ˜fŸk™k¨9Õ5áä˜fŸm™mÔ,Ø—;‘;Ð*Ü—G‘G—N‘N 6§;¡;Õ/ä—‘×'Ñ'¨¯©Ô6Ø—;‘;Ð*Ø ‘}ÜŸ™Ÿ™¨¯©¸˜Õ>äŸ™Ÿ™ v§{¡{Õ3ð	 +ð	 +ô 
�FœBŸI™IÔ	&Ü�f—m‘mÔ$Ø�;‰;Ð"Ü�G‰G�N‰N˜6Ÿ;™;Õ'ð #ä	�FœRŸ\™\¬2¯>©>¼2¿<¹<ÐHÔ	IÜ
�‰�‰�f—m‘mÔ$Ü
�‰�‰�v—{‘{Õ#Ü	�FœRŸV™V¤R§V¡V¬R¯W©WÐ5Ô	6Ø”T—Y‘Y˜v×1Ñ1Ó2Ñ2ˆØ×'Ñ'Ó)ò 	2ˆFÜ�G‰G×Ñ˜V d U¨DÕ1ñ	2ä	�˜Ô	(Ø×ÑÕð 
)ó    c                   ó`   ‡ — e Zd Zˆ fd„Zdej
                  deej
                  df   fd„Zˆ xZS )ÚRNNIdentityc                 ó"   •— t         ‰| �  «        y ©N©ÚsuperÚ__init__)ÚselfÚargsÚkwargsÚ	__class__s      €r<   rE   zRNNIdentity.__init__<   ó   ø€ Ü‰ÑÕr>   ÚxÚreturnNc                 ó
   — |d fS rB   © ©rF   rK   s     r<   ÚforwardzRNNIdentity.forward?   s   € Ø�$ˆwˆr>   )	Ú__name__Ú
__module__Ú__qualname__rE   ÚtorchÚTensorr   rP   Ú__classcell__©rI   s   @r<   r@   r@   ;   s-   ø„ ôð˜Ÿ™ð ¨%°·±¸dÐ0BÑ*C÷ r>   r@   c                   óR   ‡ — e Zd Z	 	 	 	 	 	 	 d
dededededededefˆ fd„Zd	„ Zˆ xZS )Ú	RNN2dBaseÚ
input_sizer6   Ú
num_layersr)   ÚbidirectionalÚunionÚwith_fcc
                 óZ  •— ||	dœ}
t         ‰| �  «        || _        || _        |rd|z  n|| _        || _        d| _        d| _        || _        d | _	        |rÒ|dk(  r+t        j                  d| j                  z  |fi |
¤Ž| _	        �nˆ|dk(  r(t        j                  | j                  |fi |
¤Ž| _	        �n[|dk(  r/t        j                  | j                  |fi |
¤Ž| _	        d| _        �n'|dk(  r.t        j                  | j                  |fi |
¤Ž| _	        d| _        nôt        d	|z   «      ‚|dk(  r2	 d| j                  z  |k7  rÎt        d
d| j                  z  › d|› d�«      ‚|dk(  r,	 | j                  |k7  ršt        d
| j                  › d|› d�«      ‚|dk(  r3| j                  |k7  rt        d
| j                  › d|› d�«      ‚d| _        nF|dk(  r3| j                  |k7  rt        d
| j                  › d|› d�«      ‚d| _        nt        d	|z   «      ‚t        «       | _        t        «       | _        y )N©ÚdeviceÚdtypeé   TÚcatÚaddÚverticalFÚ
horizontalzUnrecognized union: zThe output channel z% is different from the input channel ú.)rD   rE   rZ   r6   Úoutput_sizer]   Úwith_verticalÚwith_horizontalr^   Úfcr"   r#   Ú
ValueErrorr@   Úrnn_vÚrnn_h©rF   rZ   r6   r[   r)   r\   r]   r^   ra   rb   ÚddrI   s              €r<   rE   zRNN2dBase.__init__E   sP  ø€ ð ¨Ñ/ˆÜ‰ÑÔà$ˆŒØ&ˆÔÙ.;˜1˜{š?ÀˆÔØˆŒ
à!ˆÔØ#ˆÔØˆŒàˆŒÙØ˜Š~ÜŸ)™) A¨×(8Ñ(8Ñ$8¸*ÑKÈÑK�–Ø˜%’ÜŸ)™) D×$4Ñ$4°jÑGÀBÑG�–Ø˜*Ò$ÜŸ)™) D×$4Ñ$4°jÑGÀBÑG�”Ø',�Ö$Ø˜,Ò&ÜŸ)™) D×$4Ñ$4°jÑGÀBÑG�”Ø%*�Õ"ä Ð!7¸%Ñ!?Ó@Ð@Ø�eŠ^ØØ�4×#Ñ#Ñ# zÒ1Ü Ð#6°q¸4×;KÑ;KÑ7KÐ6LÐLqÐr|Ðq}Ð}~Ð!ó  Að  AØ�eŠ^ØØ×Ñ :Ò-Ü Ð#6°t×7GÑ7GÐ6HÐHmÐnxÐmyÐyzÐ!{Ó|Ð|Ø�jÒ Ø×Ñ :Ò-Ü Ð#6°t×7GÑ7GÐ6HÐHmÐnxÐmyÐyzÐ!{Ó|Ð|Ø#(ˆDÕ Ø�lÒ"Ø×Ñ :Ò-Ü Ð#6°t×7GÑ7GÐ6HÐHmÐnxÐmyÐyzÐ!{Ó|Ð|Ø!&ˆDÕäÐ3°eÑ;Ó<Ð<ä “]ˆŒ
Ü “]ˆ�
r>   c                 óR  — |j                   \  }}}}| j                  rd|j                  dddd«      }|j                  d||«      }| j	                  |«      \  }}|j                  |||d«      }|j                  dddd«      }nd }| j
                  r<|j                  d||«      }| j                  |«      \  }}|j                  |||d«      }nd }|�1|�/| j                  dk(  rt        j                  ||gd¬«      }n||z   }n	|�|}n|�|}| j                  �| j                  |«      }|S )Nr   rc   r   é   éÿÿÿÿrd   )Údim)Úshaperj   ÚpermuteÚreshapern   rk   ro   r]   rT   rd   rl   )	rF   rK   ÚBÚHÚWÚCÚvÚ_Úhs	            r<   rP   zRNN2dBase.forward�   s'  € Ø—W‘W‰
ˆˆ1ˆa�à×ÒØ—	‘	˜!˜Q  1Ó%ˆAØ—	‘	˜"˜a Ó#ˆAØ—:‘:˜a“=‰DˆAˆqØ—	‘	˜!˜Q  2Ó&ˆAØ—	‘	˜!˜Q  1Ó%‰AàˆAà×ÒØ—	‘	˜"˜a Ó#ˆAØ—:‘:˜a“=‰DˆAˆqØ—	‘	˜!˜Q  2Ó&‰AàˆAàˆ=˜Q˜]Ø�z‰z˜UÒ"Ü—I‘I˜q !˜f¨"Ô-‘à˜‘E‘Øˆ]Ø‰AØˆ]ØˆAà�7‰7ÐØ—‘˜“
ˆAàˆr>   ©r   TTrd   TNN)	rQ   rR   rS   ÚintÚboolÚstrrE   rP   rV   rW   s   @r<   rY   rY   C   si   ø„ ð  ØØ"&ØØ ØØñ:#àð:#ð ð:#ð ð	:#ð
 ð:#ð  ð:#ð ð:#ð õ:#öx r>   rY   c                   óL   ‡ — e Zd Z	 	 	 	 	 	 	 d	dededededededefˆ fd„Zˆ xZS )
ÚLSTM2drZ   r6   r[   r)   r\   r]   r^   c
                 óô   •— ||	dœ}
t         ‰| �  |||||||||	«	       | j                  r!t        j                  |||fd||dœ|
¤Ž| _        | j                  r"t        j                  |||fd||dœ|
¤Ž| _        y y )Nr`   T)Úbatch_firstr)   r\   )rD   rE   rj   r"   r3   rn   rk   ro   rp   s              €r<   rE   zLSTM2d.__init__¦   s¯   ø€ ð ¨Ñ/ˆÜ‰Ñ˜ [°*¸dÀMÐSXÐZaÐciÐkpÔqØ×ÒÜŸ™ØØØðð !ØØ+ñð ñˆDŒJð ×ÒÜŸ™ØØØðð !ØØ+ñð ñˆD�Jð  r>   r€   )rQ   rR   rS   r�   r‚   rƒ   rE   rV   rW   s   @r<   r…   r…   ¤   sh   ø„ ð  ØØ"&ØØ ØØñ!àð!ð ð!ð ð	!ð
 ð!ð  ð!ð ð!ð ÷!ñ !r>   r…   c                   ó  ‡ — e Zd Zdee eej                  d¬«      ej                  ddddddddfd	e	d
e	de
deej                     deej                     deej                     deej                     de	dededede
de
fˆ fd„Zd„ Zˆ xZS )ÚSequencer2dBlockç      @r   ©Úepsr   Trd   ç        Nru   r6   Ú	mlp_ratioÚ	rnn_layerÚ	mlp_layerÚ
norm_layerÚ	act_layerr[   r\   r]   r^   ÚdropÚ	drop_pathc                 ó  •— ||dœ}t         ‰| �  «        t        ||z  «      } ||fi |¤Ž| _         |||f||	|
|dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _         ||fi |¤Ž| _	         |||f||dœ|¤Ž| _
        y )Nr`   )r[   r\   r]   r^   r�   )r’   r“   )rD   rE   r�   Únorm1Ú
rnn_tokensr   r"   ÚIdentityr”   Únorm2Úmlp_channels)rF   ru   r6   rŽ   r�   r�   r‘   r’   r[   r\   r]   r^   r“   r”   ra   rb   rq   Úchannels_dimrI   s                     €r<   rE   zSequencer2dBlock.__init__Ë   s²   ø€ ð$ ¨Ñ/ˆÜ‰ÑÔÜ˜9 s™?Ó+ˆÙ Ñ* rÑ*ˆŒ
Ù#ØØð
ð "Ø'ØØñ
ð ñ
ˆŒð 1:¸B²œ )Ô,ÄBÇKÁKÃMˆŒÙ Ñ* rÑ*ˆŒ
Ù% c¨<Ð^À9ÐSWÑ^Ð[]Ñ^ˆÕr>   c                 óÎ   — || j                  | j                  | j                  |«      «      «      z   }|| j                  | j                  | j	                  |«      «      «      z   }|S rB   )r”   r—   r–   rš   r™   rO   s     r<   rP   zSequencer2dBlock.forwardî   sQ   € Ø�—‘˜tŸ™¨t¯z©z¸!«}Ó=Ó>Ñ>ˆØ�—‘˜t×0Ñ0°·±¸A³Ó?Ó@Ñ@ˆØˆr>   )rQ   rR   rS   r…   r   r   r"   r-   ÚGELUr�   Úfloatr   ÚModuler‚   rƒ   rE   rP   rV   rW   s   @r<   r‰   r‰   Ê   sô   ø„ ð
  #Ø)/Ø),Ù*1°"·,±,ÀDÔ*IØ)+¯©ØØ"&ØØ ØØ!ØØñ!!_àð!_ð ð!_ð ð	!_ð
 ˜BŸI™I‘ð!_ð ˜BŸI™I‘ð!_ð ˜RŸY™Y™ð!_ð ˜BŸI™I‘ð!_ð ð!_ð  ð!_ð ð!_ð ð!_ð ð!_ð õ!_öFr>   r‰   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚShufflec                 ó"   •— t         ‰| �  «        y rB   rC   )rF   rI   s    €r<   rE   zShuffle.__init__õ   rJ   r>   c                 óÒ   — | j                   rZ|j                  \  }}}}t        j                  ||z  «      }|j	                  |d|«      }|d d …|d d …f   j	                  |||d«      }|S )Nrt   )Útrainingrv   rT   Úrandpermrx   )rF   rK   ry   rz   r{   r|   Úrs          r<   rP   zShuffle.forwardø   sc   € Ø�=Š=ØŸ™‰JˆAˆq�!�QÜ—‘˜q 1™uÓ%ˆAØ—	‘	˜!˜R Ó#ˆAØ’!�Qš�'‘
×"Ñ" 1 a¨¨BÓ/ˆAØˆr>   )rQ   rR   rS   rE   rP   rV   rW   s   @r<   r¡   r¡   ô   s   ø„ ôör>   r¡   c                   ó8   ‡ — e Zd Z	 	 ddededefˆ fd„Zd„ Zˆ xZS )ÚDownsample2dÚ	input_dimÚ
output_dimÚ
patch_sizec                 ój   •— ||dœ}t         ‰| �  «        t        j                  ||f||dœ|¤Ž| _        y )Nr`   )Úkernel_sizeÚstride)rD   rE   r"   r,   Údown)rF   r©   rª   r«   ra   rb   rq   rI   s          €r<   rE   zDownsample2d.__init__  s:   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—I‘I˜i¨ÐeÀÐT^ÑeÐbdÑeˆ�	r>   c                 óx   — |j                  dddd«      }| j                  |«      }|j                  dddd«      }|S )Nr   rs   r   rc   )rw   r¯   rO   s     r<   rP   zDownsample2d.forward  s<   € Ø�I‰I�a˜˜A˜qÓ!ˆØ�I‰I�a‹LˆØ�I‰I�a˜˜A˜qÓ!ˆØˆr>   )NN)rQ   rR   rS   r�   rE   rP   rV   rW   s   @r<   r¨   r¨     s5   ø„ ð Øñ
fàð
fð ð
fð õ	
för>   r¨   c            (       óV  ‡ — e Zd Zdeee eej                  d¬«      ej                  ddddddddfd	e
d
e
de
de
de
dededeej                     deej                     deej                     deej                     deej                     de
dededededeeee   f   f$ˆ fd„Zd„ Zˆ xZS )ÚSequencer2dStageFr   r‹   r   Trd   r�   Nru   Údim_outÚdepthr«   r6   rŽ   Ú
downsampleÚblock_layerr�   r�   r‘   r’   r[   r\   r]   r^   r“   r”   c                 ój  •— t         ‰| �  «        ||dœ}|rt        |||fi |¤Ž| _        n ||k(  sJ ‚t	        j
                  «       | _        g }t        |«      D ]B  }|j                   |||f||	|
|||||||t        |t        t        f«      r||   n|dœ|¤Ž«       ŒD t	        j                  |Ž | _        y )Nr`   )rŽ   r�   r�   r‘   r’   r[   r\   r]   r^   r“   r”   )rD   rE   r¨   rµ   r"   r˜   ÚrangeÚappendr!   ÚlistÚtupleÚ
SequentialÚblocks)rF   ru   r³   r´   r«   r6   rŽ   rµ   r¶   r�   r�   r‘   r’   r[   r\   r]   r^   r“   r”   ra   rb   rq   r½   Ú	block_idxrI   s                           €r<   rE   zSequencer2dStage.__init__  sÕ   ø€ ô. 	‰ÑÔØ¨Ñ/ˆÙÜ*¨3°¸ÑJÀrÑJˆD�Oà˜'’>Ð!�>Ü Ÿk™k›mˆDŒOàˆÜ˜u›ò 	ˆIØ�M‰M™+ØØðð $Ø#Ø#Ø%Ø#Ø%Ø+ØØØÜ2<¸YÌÌuÈÔ2V˜) IÒ.Ð\eñð ñõ ð	ô" —m‘m VÐ,ˆ�r>   c                 óJ   — | j                  |«      }| j                  |«      }|S rB   )rµ   r½   rO   s     r<   rP   zSequencer2dStage.forwardI  s"   € Ø�O‰O˜AÓˆØ�K‰K˜‹NˆØˆr>   )rQ   rR   rS   r‰   r…   r   r   r"   r-   r�   r�   rž   r‚   r   rŸ   rƒ   r	   r   rE   rP   rV   rW   s   @r<   r²   r²     s1  ø„ ð  %Ø+;Ø)/Ø),Ù*1°"·,±,ÀDÔ*IØ)+¯©ØØ"&ØØ ØØ35ØØñ+1-àð1-ð ð1-ð ð	1-ð
 ð1-ð ð1-ð ð1-ð ð1-ð ˜bŸi™i™ð1-ð ˜BŸI™I‘ð1-ð ˜BŸI™I‘ð1-ð ˜RŸY™Y™ð1-ð ˜BŸI™I‘ð1-ð ð1-ð  ð1-ð  ð!1-ð" ð#1-ð$ ð%1-ð& ˜U D¨¡KÐ/Ñ0õ'1-öfr>   r²   c            -       ó–  ‡ — e Zd Zddddddddd	eee eej                  d
¬«      ej                  dddd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
df   dee
df   deedf   deej                     deej                     deej                     deej                     d eej                     d!e
d"ed#ed$ed%ed&ed'ed(ef,ˆ fd)„Zd4d*„Zej(                  j*                  d4d+„«       Zej(                  j*                  d5d,„«       Zej(                  j*                  d-ej                  fd.„«       Zd6de
dee   fd/„Zd0„ Zd4d1efd2„Zd3„ Zˆ xZS )7r   éè  éà   rs   Úavg©é   rs   é   rs   )é   rc   rc   r   ©éÀ   é€  rÊ   rÊ   ©é0   é`   rÍ   rÍ   ©rŠ   rŠ   rŠ   rŠ   r   r‹   r   Trd   r�   FNÚnum_classesÚimg_sizeÚin_chansÚglobal_poolÚlayers.Úpatch_sizesÚ
embed_dimsÚhidden_sizesÚ
mlp_ratiosr¶   r�   r�   r‘   r’   Únum_rnn_layersr\   r]   r^   Ú	drop_rateÚdrop_path_rateÚnlhbÚ	stem_normc                 ó¬  •— t         ‰| �  «        ||dœ}|dv sJ ‚|| _        || _        || _        |d   x| _        | _        d| _        d| _        g | _	        t        dd |d   ||d   |r|nd dddœ|¤Ž| _        t        |«      t        |«      cxk(  r-t        |«      cxk(  rt        |«      cxk(  rt        |	«      k(  sJ ‚ J ‚t        t        |d„ «      «      }g }|d   }t        |«      D ]…  \  }}|t!        |||   fi d	||   “d
|dkD  “d||   “d||   “d|	|   “d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“|¤Žgz  }||   }| xj                  t#        |||   d|› �¬«      gz  c_	        Œ‡ t%        j&                  |Ž | _         ||d   fi |¤Ž| _        t-        | j
                  |f||| j                  dœ|¤Ž| _        | j1                  |¬«       y )Nr`   )Ú rÃ   rt   ÚNHWCr   F)rÐ   r«   rÑ   Ú	embed_dimr‘   ÚflattenÚ
output_fmtc                 ó   — | |z  S rB   rN   )rK   Úys     r<   ú<lambda>z&Sequencer2d.__init__.<locals>.<lambda>‚  s
   € ¸qÀ1¹u€ r>   r´   rµ   r«   r6   rŽ   r¶   r�   r�   r‘   r’   r[   r\   r]   r^   r“   r”   ústages.)Únum_chsÚ	reductionr   )Ú	pool_typerÙ   Ú	input_fmt)rÛ   rN   )rD   rE   rÏ   rÑ   rÒ   Únum_featuresÚhead_hidden_sizeÚfeature_dimrâ   Úfeature_infor   ÚstemÚlenrº   r   Ú	enumerater²   Údictr"   r¼   ÚstagesÚnormr   r   r    ) rF   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   r¶   r�   r�   r‘   r’   rØ   r\   r]   r^   rÙ   rÚ   rÛ   rÜ   ra   rb   rq   Ú
reductionsró   Úprev_dimÚir~   rI   s                                   €r<   rE   zSequencer2d.__init__P  sœ  ø€ ô6 	‰ÑÔØ¨Ñ/ˆØ˜kÑ)Ð)Ð)Ø&ˆÔØ ˆŒØ&ˆÔØ4>¸r±NÐBˆÔ˜DÔ1ØˆÔØ ˆŒØˆÔäð 	
ØØ" 1‘~ØØ  ‘mÙ%.‘z°DØØñ	
ð ñ	
ˆŒ	ô �6‹{œc +Ó.Ôi´#°j³/ÔiÄSÈÓEVÔiÔZ]Ð^hÓZiÒiÐiÑiÐiÐiÜœ* [Ñ2DÓEÓFˆ
ØˆØ˜a‘=ˆÜ˜jÓ)ò 	i‰DˆAˆqØÔ'ØØ˜1‘òð ˜Q’iðð ˜qš5ð	ð
 ' qš>ðð )¨šOðð % Qš-ðñ (ðñ $ðñ $ðñ &ðñ $ðñ *ðñ ,ðñ ðñ   ð!ñ" ð#ñ$ )Øñ'ð ñ ˆFð* " !‘}ˆHØ×Ò¤$¨xÀ:ÈaÁ=Ð[bÐcdÐbeÐYfÔ"gÐ!hÑhÖð/	iô2 —m‘m VÐ,ˆŒÙ˜z¨"™~Ñ4°Ñ4ˆŒ	Ü"Ø×ÑØð
ð "ØØ—o‘oñ
ð ñ
ˆŒ	ð 	×Ñ˜tÐÕ$r>   c                 ó„   — |r t        j                  | j                  «       nd}t        t	        t
        |¬«      | ¬«       y )Nr�   )r   )r   )r4   ÚlogrÏ   r   r   r=   )rF   rÛ   r   s      r<   r    zSequencer2d.init_weights«  s.   € Ù37”T—X‘X˜d×.Ñ.Ó/Ñ/¸Rˆ	Ü”GœM°YÔ?ÈÖMr>   c                 ó6   — t        d|r	ddg¬«      S g d¢¬«      S )Nz^stem)z^stages\.(\d+)N©z^norm)iŸ† ))z^stages\.(\d+)\.blocks\.(\d+)N)z^stages\.(\d+)\.downsample)r   rû   )rï   r½   )rò   )rF   Úcoarses     r<   Úgroup_matcherzSequencer2d.group_matcher¯  s3   € äØñ ð *Ø$ðô

ð 
	
ò
ô

ð 
	
r>   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedrN   )rF   Úenables     r<   Úset_grad_checkpointingz"Sequencer2d.set_grad_checkpointing½  s   € áÐAÐAÓAˆz�6r>   rL   c                 ó   — | j                   S rB   ©r   )rF   s    r<   Úget_classifierzSequencer2d.get_classifierÁ  s   € à�y‰yÐr>   c                 óL   — || _         | j                  j                  ||¬«       y )N)ré   )rÏ   r   Úreset)rF   rÏ   rÒ   s      r<   Úreset_classifierzSequencer2d.reset_classifierÅ  s   € Ø&ˆÔØ�	‰	�‰˜¨{ˆÕ;r>   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rB   )rï   ró   rô   rO   s     r<   Úforward_featureszSequencer2d.forward_featuresÉ  s.   € Ø�I‰I�a‹LˆØ�K‰K˜‹NˆØ�I‰I�a‹LˆØˆr>   Ú
pre_logitsc                 óN   — |r| j                  |d¬«      S | j                  |«      S )NT)r	  r  )rF   rK   r	  s      r<   Úforward_headzSequencer2d.forward_headÏ  s$   € Ù0:ˆt�y‰y˜ tˆyÓ,ÐLÀÇ	Á	È!ÃÐLr>   c                 óJ   — | j                  |«      }| j                  |«      }|S rB   )r  r  rO   s     r<   rP   zSequencer2d.forwardÒ  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr>   ©F)TrB   )rQ   rR   rS   r‰   r…   r   r   r"   r-   r�   r�   rƒ   r   rž   r   rŸ   r‚   rE   r    rT   ÚjitÚignorerý   r   r  r   r  r  r  rP   rV   rW   s   @r<   r   r   O  s@  ø„ ð  $ØØØ$Ø&2Ø+7Ø*>Ø,<Ø,@Ø+;Ø)/Ø),Ù*1°"·,±,ÀDÔ*IØ)+¯©Ø"#Ø"&ØØ Ø!Ø$&ØØ#ØØñ3Y%àðY%ð ðY%ð ð	Y%ð
 ðY%ð ˜#˜s˜(‘OðY%ð ˜s C˜x™ðY%ð ˜c 3˜h™ðY%ð    S ™/ðY%ð ˜e S˜jÑ)ðY%ð ˜bŸi™i™ðY%ð ˜BŸI™I‘ðY%ð ˜BŸI™I‘ðY%ð ˜RŸY™Y™ðY%ð ˜BŸI™I‘ðY%ð   ð!Y%ð"  ð#Y%ð$ ð%Y%ð& ð'Y%ð( ð)Y%ð* "ð+Y%ð, ð-Y%ð. õ/Y%óvNð ‡Y�Y×Ñò
ó ð
ð ‡Y�Y×ÑòBó ðBð ‡Y�Y×Ñð §	¡	ò ó ðñ<¨Cð <¸hÀs¹mó <òñM¨$ó Mör>   c                 óÜ   — d| v r| S d| v r| d   } ddl }i }| j                  «       D ]C  \  }}|j                  dd„ |«      }|j                  dd|«      }|j                  d	d
«      }|||<   ŒE |S )z$ Remap original checkpoints -> timm zstages.0.blocks.0.norm1.weightÚmodelr   Nzblocks.([0-9]+).([0-9]+).downc                 óD   — dt        | j                  d«      «      dz   › d�S )Nræ   r   z.downsample.down)r�   Úgroup)rK   s    r<   rå   z&checkpoint_filter_fn.<locals>.<lambda>â  s$   € ÀÌÈQÏWÉWÐUVËZËÐ[\ÑI\ÐH]Ð]mÐ?n€ r>   zblocks.([0-9]+).([0-9]+)zstages.\1.blocks.\2zhead.zhead.fc.)ÚreÚitemsÚsubÚreplace)Ú
state_dictr  r  Úout_dictÚkr}   s         r<   Úcheckpoint_filter_fnr  Ø  s�   € à'¨:Ñ5ØÐØ�*ÑØ Ñ(ˆ
ãØ€HØ× Ñ Ó"ò ‰ˆˆ1Ø�F‰FÐ3Ñ5nÐpqÓrˆØ�F‰FÐ.Ð0FÈÓJˆØ�I‰I�g˜zÓ*ˆØˆ�Šð	ð €Or>   c                 óš   — t        t        d«      «      }|j                  d|«      }t        t        | |ft
        t        d|¬«      dœ|¤Ž}|S )Nrs   Úout_indicesT)Úflatten_sequentialr  )Úpretrained_filter_fnÚfeature_cfg)r»   r¸   Úpopr   r   r  rò   )ÚvariantÚ
pretrainedrH   Údefault_out_indicesr  r  s         r<   Ú_create_sequencer2dr%  ê  sY   € Ü¤ a£›/ÐØ—*‘*˜]Ð,?Ó@€Kä ÜØØðô 2Ü¨D¸kÔJñð ñ€Eð €Lr>   c                 ó<   — | ddd t         ddt        t        ddddœ|¥S )	NrÁ   )rs   rÂ   rÂ   ÚbicubicTz	stem.projzhead.fcz
apache-2.0)ÚurlrÏ   rZ   Ú	pool_sizeÚcrop_pctÚinterpolationÚfixed_input_sizeÚmeanr   Ú
first_convÚ
classifierÚlicense)r   r
   r   )r(  rH   s     r<   Ú_cfgr1  ù  s6   € àØ¨=ÀtÜ$°yÐVZÜ%Ô.BØ!°Øñð ðð r>   ztimm/)Ú	hf_hub_id)zsequencer2d_s.in1kzsequencer2d_m.in1kzsequencer2d_l.in1krL   c                 óx   — t        g d¢g d¢g d¢g d¢g d¢t        ddd¬«	      }t        d
d	| it        |fi |¤Ž¤Ž}|S )NrÄ   ©rÇ   rc   r   r   rÈ   rË   rÎ   Trd   ©	rÓ   rÔ   rÕ   rÖ   r×   r�   r\   r]   r^   r#  )Úsequencer2d_s©rò   r…   r%  ©r#  rH   Ú
model_argsr  s       r<   r6  r6    sK   € äÚÚ Ú'Ú%Ú'ÜØØØô
€Jô  Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr>   c                 óz   — t        d
g d¢g d¢g d¢g d¢g d¢t        ddddœ	|¤Ž}t        dd	| it        |fi |¤Ž¤Ž}|S )N)rÅ   rs   é   rs   r4  rÈ   rË   rÎ   Trd   r5  r#  rN   )Úsequencer2d_mr7  r8  s       r<   r<  r<    óZ   € äð 
ÚÚ Ú'Ú%Ú'ÜØØØñ
ð ñ
€Jô  Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr>   c                 óz   — t        d
g d¢g d¢g d¢g d¢g d¢t        ddddœ	|¤Ž}t        dd	| it        |fi |¤Ž¤Ž}|S )N)rÆ   rÆ   é   rÅ   r4  rÈ   rË   rÎ   Trd   r5  r#  rN   )Úsequencer2d_lr7  r8  s       r<   r@  r@  .  r=  r>   )r�   Fr  )rÞ   )4Ú__doc__r4   Ú	functoolsr   Ú	itertoolsr   Útypingr   r   r   r   r	   rT   Útorch.nnr"   Ú	timm.datar
   r   r   Útimm.layersr   r   r   r   r   Ú_builderr   Ú_manipulater   Ú	_registryr   r   Ú__all__rŸ   rƒ   rž   r=   r@   rY   r…   r‰   r¡   r¨   r²   r   r  r%  r1  Údefault_cfgsr6  r<  r@  rN   r>   r<   ú<module>rM     sj  ðñó Ý Ý  ß 5Õ 5ã Ý ç SÑ Sß PÕ PÝ *Ý $ß <àˆ/€ñ˜"Ÿ)™)ð ¨3ð ¸5ó ôB�"—)‘)ô ô^�—	‘	ô ^ôB#ˆYô #ôL'�r—y‘yô 'ôT
ˆb�i‰iô 
ô�2—9‘9ô ô(7�r—y‘yô 7ôtF�"—)‘)ô FòRó$ó	ñ %Ù¨Ô1Ù¨Ô1Ù¨Ô1ñ&ó €ð ñ°ò ó ðð  ñ°ò ó ðð  ñ°ò ó ñr>   