Ë
    éÓ^jþ{  ã                   ó  — d Z ddlmZmZmZmZmZmZ ddlZddl	m
Z
 ddlm
c mZ ddlmZmZ ddlmZmZmZmZmZmZ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„ Z&d„ Z'd„ Z(d*d„Z)d+d„Z* e e*d¬«       e*d¬«       e*d¬«       e*d¬«       e*d¬«       e*d¬«       e*d¬«       e*dddd¬«      d œ«      Z+ed,d!e%fd"„«       Z,ed,d!e%fd#„«       Z-ed,d!e%fd$„«       Z.ed,d!e%fd%„«       Z/ed,d!e%fd&„«       Z0ed,d!e%fd'„«       Z1ed,d!e%fd(„«       Z2ed,d!e%fd)„«       Z3y)-z×
CoaT architecture.

Paper: Co-Scale Conv-Attentional Image Transformers - https://arxiv.org/abs/2104.06399

Official CoaT code at: https://github.com/mlpc-ucsd/CoaT

Modified from timm/models/vision_transformer.py
é    )ÚListÚOptionalÚTupleÚUnionÚTypeÚAnyN©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Ú
PatchEmbedÚMlpÚDropPathÚ	to_2tupleÚtrunc_normal_Ú_assertÚ	LayerNormé   )Úbuild_model_with_cfg)Úregister_modelÚgenerate_default_cfgsÚCoaTc            	       óV   ‡ — e Zd ZdZ	 	 ddededeeef   fˆ fd„Zdeeef   fd„Z	ˆ xZ
S )	ÚConvRelPosEncz+ Convolutional relative position encoding. Úhead_chsÚ	num_headsÚwindowc           	      óN  •— ||dœ}t         ‰| �  «        t        |t        «      r||i}|| _        n"t        |t
        «      r|| _        n
t        «       ‚t        j                  «       | _	        g | _
        |j                  «       D ]y  \  }}d}	||dz
  |	dz
  z  z   dz  }
t        j                  ||z  ||z  f||f|
|
f|	|	f||z  dœ|¤Ž}| j                  j                  |«       | j                  j                  |«       Œ{ | j                  D �cg c]  }||z  ‘Œ	 c}| _        yc c}w )aj  
        Initialization.
            Ch: Channels per head.
            h: Number of heads.
            window: Window size(s) in convolutional relative positional encoding. It can have two forms:
                1. An integer of window size, which assigns all attention heads with the same window s
                    size in ConvRelPosEnc.
                2. A dict mapping window size to #attention head splits (
                    e.g. {window size 1: #attention head split 1, window size 2: #attention head split 2})
                    It will apply different window size to the attention head splits.
        ©ÚdeviceÚdtyper   é   )Úkernel_sizeÚpaddingÚdilationÚgroupsN)ÚsuperÚ__init__Ú
isinstanceÚintr   ÚdictÚ
ValueErrorÚnnÚ
ModuleListÚ	conv_listÚhead_splitsÚitemsÚConv2dÚappendÚchannel_splits)Úselfr   r   r   r   r    ÚddÚ
cur_windowÚcur_head_splitr$   Úpadding_sizeÚcur_convÚxÚ	__class__s                €ú[/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/coat.pyr'   zConvRelPosEnc.__init__   s9  ø€ ð& ¨Ñ/ˆÜ‰ÑÔä�fœcÔ"à˜iÐ(ˆFØ ˆD�KÜ˜¤Ô%Ø ˆD�Kä“,ÐäŸ™›ˆŒØˆÔØ*0¯,©,«.ò 	4Ñ&ˆJ˜ØˆHð '¨*°q©.¸XÈ¹\Ñ)JÑJÈqÑPˆLÜ—y‘yØ Ñ)Ø Ñ)ðð (¨Ð4Ø% |Ð4Ø" HÐ-Ø%¨Ñ0ñð ñˆHð �N‰N×!Ñ! (Ô+Ø×Ñ×#Ñ# NÕ3ð	4ð  6:×5EÑ5EÖF°˜q 8›|ÒFˆÕùÒFs   ÄD"Úsizec                 óV  — |j                   \  }}}}|\  }}	t        |d||	z  z   k(  d«       |d d …d d …dd …d d …f   }
|d d …d d …dd …d d …f   }|j                  dd«      j                  |||z  ||	«      }t	        j
                  || j                  d¬«      }g }t        | j                  «      D ]  \  }}|j                   |||   «      «       Œ! t	        j                  |d¬«      }|j                  |||||	z  «      j                  dd«      }|
|z  }t        j                  |d«      }|S )Nr   Ú éÿÿÿÿéþÿÿÿ©Údim)r   r   r   r   r   r   )Úshaper   Ú	transposeÚreshapeÚtorchÚsplitr3   Ú	enumerater.   r2   ÚcatÚFÚpad)r4   ÚqÚvr=   ÚBr   ÚNÚCÚHÚWÚq_imgÚv_imgÚ
v_img_listÚconv_v_img_listÚiÚconvÚ
conv_v_imgÚEV_hats                     r<   ÚforwardzConvRelPosEnc.forwardM   s'  € ØŸW™WÑˆˆ9�a˜Ø‰ˆˆ1Ü��Q˜˜Q™‘Y‘ Ô#ð ’!’Q˜™šA�+‘ˆØ’!’Q˜™šA�+‘ˆà—‘  BÓ'×/Ñ/°°9¸q±=À!ÀQÓGˆÜ—[‘[ ¨×(;Ñ(;ÀÔCˆ
ØˆÜ  §¡Ó0ò 	8‰GˆAˆtØ×"Ñ"¡4¨
°1©Ó#6Õ7ð	8ä—Y‘Y˜°AÔ6ˆ
Ø×'Ñ'¨¨9°a¸¸Q¹Ó?×IÑIÈ"ÈbÓQˆ
à˜Ñ#ˆÜ—‘�vÐ1Ó2ˆØˆó    )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r   r*   r'   r   r\   Ú__classcell__©r;   s   @r<   r   r      sQ   ø„ Ù5ð Øñ1Gàð1Gð ð1Gð ˜#˜t˜)Ñ$õ	1Gðf %¨¨S¨¡/÷ r]   r   c                   óh   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddedededededee   fˆ fd„Z	d	e
eef   fd
„Zˆ xZS )ÚFactorAttnConvRelPosEnczK Factorized attention with convolutional relative position encoding class. rC   r   Úqkv_biasÚ	attn_dropÚ	proj_dropÚshared_crpec	                 óH  •— ||dœ}	t         ‰| �  «        || _        ||z  }
|
dz  | _        t	        j
                  ||dz  fd|i|	¤Ž| _        t	        j                  |«      | _        t	        j
                  ||fi |	¤Ž| _	        t	        j                  |«      | _
        || _        y )Nr   g      à¿é   Úbias)r&   r'   r   Úscaler,   ÚLinearÚqkvÚDropoutrg   Úprojrh   Úcrpe)r4   rC   r   rf   rg   rh   ri   r   r    r5   Úhead_dimr;   s              €r<   r'   z FactorAttnConvRelPosEnc.__init__e   s—   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ"ˆŒØ˜)Ñ#ˆØ Ñ%ˆŒ
ä—9‘9˜S #¨¡'Ñ?°Ð?¸BÑ?ˆŒÜŸ™ IÓ.ˆŒÜ—I‘I˜c 3Ñ-¨"Ñ-ˆŒ	ÜŸ™ IÓ.ˆŒð  ˆ�	r]   r=   c                 ó  — |j                   \  }}}| j                  |«      j                  ||d| j                  || j                  z  «      j	                  ddddd«      }|j                  d«      \  }}}	|j                  d¬«      }
|
j                  dd«      |	z  }||z  }| j                  ||	|¬	«      }| j                  |z  |z   }|j                  dd«      j                  |||«      }| j                  |«      }| j                  |«      }|S )
Nrk   r!   r   r   é   rB   r@   rA   ©r=   )rD   ro   rF   r   ÚpermuteÚunbindÚsoftmaxrE   rr   rm   rq   rh   )r4   r:   r=   rO   rP   rQ   ro   rM   ÚkrN   Ú	k_softmaxÚ
factor_attrr   s                r<   r\   zFactorAttnConvRelPosEnc.forward~   s	  € Ø—'‘'‰ˆˆ1ˆað �h‰h�q‹k×!Ñ! ! Q¨¨4¯>©>¸1ÀÇÁÑ;NÓO×WÑWÐXYÐ[\Ð^_ÐabÐdeÓfˆØ—*‘*˜Q“-‰ˆˆ1ˆað —I‘I !�IÓ$ˆ	Ø×(Ñ(¨¨RÓ0°1Ñ4ˆ
Ø˜‘^ˆ
ð �y‰y˜˜A DˆyÓ)ˆð �J‰J˜Ñ# dÑ*ˆØ�K‰K˜˜1Ó×%Ñ% a¨¨AÓ.ˆð �I‰I�a‹LˆØ�N‰N˜1Óˆàˆr]   )é   Fç        r~   NNN)r^   r_   r`   ra   r)   ÚboolÚfloatr   r   r'   r   r\   rb   rc   s   @r<   re   re   c   st   ø„ ÙUð Ø"Ø!Ø!Ø)-ØØñ àð ð ð ð ð	 ð
 ð ð ð ð " #™õ ð2˜u S¨# X™÷ r]   re   c                   óJ   ‡ — e Zd ZdZ	 	 	 ddedefˆ fd„Zdeeef   fd„Zˆ xZS )Ú
ConvPosEnczy Convolutional Position Encoding.
        Note: This module is similar to the conditional position encoding in CPVT.
    rC   rz   c                 ót   •— ||dœ}t         ‰| �  «        t        j                  |||d|dz  fd|i|¤Ž| _        y )Nr   r   r!   r%   )r&   r'   r,   r1   rq   )r4   rC   rz   r   r    r5   r;   s         €r<   r'   zConvPosEnc.__init__œ   s@   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—I‘I˜c 3¨¨1¨a°©dÑE¸3ÐEÀ"ÑEˆ�	r]   r=   c                 ój  — |j                   \  }}}|\  }}t        |d||z  z   k(  d«       |d d …d d…f   |d d …dd …f   }	}|	j                  dd«      j                  ||||«      }
| j	                  |
«      |
z   }|j                  d«      j                  dd«      }t        j                  ||fd¬«      }|S )Nr   r?   r!   rB   )rD   r   rE   Úviewrq   ÚflattenrG   rJ   )r4   r:   r=   rO   rP   rQ   rR   rS   Ú	cls_tokenÚ
img_tokensÚfeats              r<   r\   zConvPosEnc.forward§   s½   € Ø—'‘'‰ˆˆ1ˆaØ‰ˆˆ1Ü��Q˜˜Q™‘Y‘ Ô#ð !"¢! R a R %¡¨!ªA¨q©r¨E©(�:ˆ	ð ×#Ñ# A qÓ)×.Ñ.¨q°!°Q¸Ó:ˆØ�I‰I�d‹O˜dÑ"ˆØ�I‰I�a‹L×"Ñ" 1 aÓ(ˆô �I‰I�y !�n¨!Ô,ˆàˆr]   )rk   NN)	r^   r_   r`   ra   r)   r'   r   r\   rb   rc   s   @r<   r‚   r‚   ˜   sA   ø„ ñð ØØñ	Fàð	Fð õ	Fð˜u S¨# X™÷ r]   r‚   c                   óæ   ‡ — e Zd ZdZdddddej
                  ej                  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   dee   fˆ fd„Zdeeef   fd„Zˆ xZS )ÚSerialBlockz„ Serial block class.
        Note: In this implementation, each serial block only contains a conv-attention and a FFN (MLP) module. ç      @Fr~   NrC   r   Ú	mlp_ratiorf   rh   rg   Ú	drop_pathÚ	act_layerÚ
norm_layerÚ
shared_cperi   c           	      ó8  •— ||dœ}t         ‰| �  «        |
| _         |	|fi |¤Ž| _        t	        |f|||||dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _	         |	|fi |¤Ž| _
        t        ||z  «      }t        d||||dœ|¤Ž| _        y )Nr   ©r   rf   rg   rh   ri   r~   ©Úin_featuresÚhidden_featuresr�   Údrop© )r&   r'   ÚcpeÚnorm1re   Úfactoratt_crper   r,   ÚIdentityrŽ   Únorm2r)   r   Úmlp)r4   rC   r   r�   rf   rh   rg   rŽ   r�   r�   r‘   ri   r   r    r5   Úmlp_hidden_dimr;   s                   €r<   r'   zSerialBlock.__init__½   sÆ   ø€ ð  ¨Ñ/ˆÜ‰ÑÔð ˆŒá Ñ* rÑ*ˆŒ
Ü5Øð
àØØØØ#ñ
ð ñ
ˆÔð 1:¸B²œ )Ô,ÄBÇKÁKÃMˆŒñ   Ñ* rÑ*ˆŒ
Ü˜S 9™_Ó-ˆÜð 
ØØ*ØØñ	
ð
 ñ
ˆ�r]   r=   c                 ó  — | j                  ||«      }| j                  |«      }| j                  ||«      }|| j                  |«      z   }| j	                  |«      }| j                  |«      }|| j                  |«      z   }|S ©N)r™   rš   r›   rŽ   r�   rž   )r4   r:   r=   Úcurs       r<   r\   zSerialBlock.forwardê   sx   € à�H‰H�Q˜ÓˆØ�j‰j˜‹mˆØ×!Ñ! # tÓ,ˆØ�—‘˜sÓ#Ñ#ˆð �j‰j˜‹mˆØ�h‰h�s‹mˆØ�—‘˜sÓ#Ñ#ˆàˆr]   )r^   r_   r`   ra   r,   ÚGELUr   r)   r€   r   r   ÚModuler   r   r'   r   r\   rb   rc   s   @r<   r‹   r‹   º   sÒ   ø„ ñsð  "Ø"Ø!Ø!Ø!Ø)+¯©Ø*,¯,©,Ø(,Ø)-ØØñ+
àð+
ð ð+
ð ð	+
ð
 ð+
ð ð+
ð ð+
ð ð+
ð ˜BŸI™I‘ð+
ð ˜RŸY™Y™ð+
ð ! ™ð+
ð " #™õ+
ðZ˜u S¨# X™÷ r]   r‹   c                   ó@  ‡ — e Zd ZdZdddddej
                  ej                  dddf
dee   dedee	   de
d	e	d
e	de	deej                     deej                     deee      fˆ fd„Zde	deeef   fd„Zde	deeef   fd„Zde	deeef   fd„Zdeeeef      fd„Zˆ xZS )ÚParallelBlockz Parallel block class. NFr~   Údimsr   Ú
mlp_ratiosrf   rh   rg   rŽ   r�   r�   Úshared_crpesc           	      óØ  •— ||dœ}t         ‰| �  «        |€g } |	|d   fi |¤Ž| _         |	|d   fi |¤Ž| _         |	|d   fi |¤Ž| _        t        |d   f|||||
d   dœ|¤Ž| _        t        |d   f|||||
d   dœ|¤Ž| _        t        |d   f|||||
d   dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _         |	|d   fi |¤Ž| _         |	|d   fi |¤Ž| _         |	|d   fi |¤Ž| _        |d   |d   cxk(  r	|d   k(  sJ ‚ J ‚|d   |d   cxk(  r	|d   k(  sJ ‚ J ‚t!        |d   |d   z  «      }t#        d|d   |||dœ|¤Žx| _        x| _        | _        y )	Nr   r   r!   rk   r“   r~   r”   r˜   )r&   r'   Únorm12Únorm13Únorm14re   Úfactoratt_crpe2Úfactoratt_crpe3Úfactoratt_crpe4r   r,   rœ   rŽ   Únorm22Únorm23Únorm24r)   r   Úmlp2Úmlp3Úmlp4)r4   r§   r   r¨   rf   rh   rg   rŽ   r�   r�   r©   r   r    r5   rŸ   r;   s                  €r<   r'   zParallelBlock.__init__û   s  ø€ ð ¨Ñ/ˆÜ‰ÑÔØÐØˆJñ !  a¡Ñ/¨BÑ/ˆŒÙ   a¡Ñ/¨BÑ/ˆŒÙ   a¡Ñ/¨BÑ/ˆŒÜ6Ø�‰Gð 
àØØØØ$ Q™ñ 
ð ñ 
ˆÔô  7Ø�‰Gð 
àØØØØ$ Q™ñ 
ð ñ 
ˆÔô  7Ø�‰Gð 
àØØØØ$ Q™ñ 
ð ñ 
ˆÔð 1:¸B²œ )Ô,ÄBÇKÁKÃMˆŒñ !  a¡Ñ/¨BÑ/ˆŒÙ   a¡Ñ/¨BÑ/ˆŒÙ   a¡Ñ/¨BÑ/ˆŒà�A‰w˜$˜q™'Ô, T¨!¡WÒ,Ð,Ñ,Ð,Ð,Ø˜!‰} 
¨1¡Ô>°¸A±Ò>Ð>Ñ>Ð>Ð>Ü˜T !™W z°!¡}Ñ4Ó5ˆÜ,/ð -
Ø˜Q™Ø*ØØñ	-
ð
 ñ-
ð 	
ˆŒ	ð 	
�D”I ¥	r]   Úfactorr=   c                 ó*   — | j                  |||¬«      S )z Feature map up-sampling. ©Úscale_factorr=   ©Úinterpolate©r4   r:   r·   r=   s       r<   ÚupsamplezParallelBlock.upsample@  s   € à×Ñ °¸TÐÓBÐBr]   c                 ó0   — | j                  |d|z  |¬«      S )z Feature map down-sampling. ç      ð?r¹   r»   r½   s       r<   Ú
downsamplezParallelBlock.downsampleD  s   € à×Ñ °°F±
ÀÐÓFÐFr]   rº   c                 ó†  — |j                   \  }}}|\  }}t        |d||z  z   k(  d«       |dd…dd…dd…f   }	|dd…dd…dd…f   }
|
j                  dd«      j                  ||||«      }
t	        j
                  |
|ddd¬«      }
|
j                  ||d«      j                  dd«      }
t        j                  |	|
fd¬	«      }|S )
z Feature map interpolation. r   r?   Nr!   FÚbilinear)rº   Úrecompute_scale_factorÚmodeÚalign_cornersr@   rB   )rD   r   rE   rF   rK   r¼   rG   rJ   )r4   r:   rº   r=   rO   rP   rQ   rR   rS   r‡   rˆ   Úouts               r<   r¼   zParallelBlock.interpolateH  sÑ   € à—'‘'‰ˆˆ1ˆaØ‰ˆˆ1Ü��Q˜˜Q™‘Y‘ Ô#à’a˜˜!˜šQ�h‘Kˆ	Ø’q˜!™"ša�x‘[ˆ
à×)Ñ)¨!¨QÓ/×7Ñ7¸¸1¸aÀÓCˆ
Ü—]‘]ØØ%Ø#(ØØô
ˆ
ð  ×'Ñ'¨¨1¨bÓ1×;Ñ;¸A¸qÓAˆ
ä�i‰i˜ JÐ/°QÔ7ˆàˆ
r]   Úsizesc                 óÐ  — |\  }}}}	| j                  |«      }
| j                  |«      }| j                  |«      }| j                  |
|¬«      }
| j	                  ||¬«      }| j                  ||	¬«      }| j                  |d|¬«      }| j                  |d|	¬«      }| j                  |d|	¬«      }| j                  |
d|¬«      }| j                  |d|¬«      }| j                  |
d|¬«      }|
|z   |z   }
||z   |z   }||z   |z   }|| j                  |
«      z   }|| j                  |«      z   }|| j                  |«      z   }| j                  |«      }
| j                  |«      }| j                  |«      }| j                  |
«      }
| j                  |«      }| j                  |«      }|| j                  |
«      z   }|| j                  |«      z   }|| j                  |«      z   }||||fS )Nrv   g       @)r·   r=   rŒ   )r«   r¬   r­   r®   r¯   r°   r¾   rÁ   rŽ   r±   r²   r³   r´   rµ   r¶   )r4   Úx1Úx2Úx3Úx4rÈ   Ú_ÚS2ÚS3ÚS4Úcur2Úcur3Úcur4Úupsample3_2Úupsample4_3Úupsample4_2Údownsample2_3Údownsample3_4Údownsample2_4s                      r<   r\   zParallelBlock.forward_  sê  € Ø‰ˆˆ2ˆr�2Ø�{‰{˜2‹ˆØ�{‰{˜2‹ˆØ�{‰{˜2‹ˆØ×#Ñ# D¨rÐ#Ó2ˆØ×#Ñ# D¨rÐ#Ó2ˆØ×#Ñ# D¨rÐ#Ó2ˆØ—m‘m D°¸"�mÓ=ˆØ—m‘m D°¸"�mÓ=ˆØ—m‘m D°¸"�mÓ=ˆØŸ™¨°R¸b˜ÓAˆØŸ™¨°R¸b˜ÓAˆØŸ™¨°R¸b˜ÓAˆØ�kÑ! KÑ/ˆØ�kÑ! MÑ1ˆØ�mÑ# mÑ3ˆØ�$—.‘. Ó&Ñ&ˆØ�$—.‘. Ó&Ñ&ˆØ�$—.‘. Ó&Ñ&ˆð �{‰{˜2‹ˆØ�{‰{˜2‹ˆØ�{‰{˜2‹ˆØ�y‰y˜‹ˆØ�y‰y˜‹ˆØ�y‰y˜‹ˆØ�$—.‘. Ó&Ñ&ˆØ�$—.‘. Ó&Ñ&ˆØ�$—.‘. Ó&Ñ&ˆà�2�r˜2ˆ~Ðr]   )r^   r_   r`   ra   r,   r£   r   r   r)   r€   r   r   r¤   r   r   r'   r   r¾   rÁ   r¼   r\   rb   rc   s   @r<   r¦   r¦   ù   s2  ø„ Ù!ð
 '+Ø"Ø!Ø!Ø!Ø)+¯©Ø*,¯,©,Ø04ØØñC
à�s‘)ðC
ð ðC
ð ˜U™ð	C
ð
 ðC
ð ðC
ð ðC
ð ðC
ð ˜BŸI™I‘ðC
ð ˜RŸY™Y™ðC
ð # 4¨¡9Ñ-õC
ðJC %ð C¨u°S¸#°X©ó CðG Eð G°°s¸C°x±ó Gð¨5ð ¸¸cÀ3¸h¹ó ð. ¨T°%¸¸S¸±/Ñ-B÷  r]   r¦   c            '       ó~  ‡ — e Zd ZdZdddddddd	d
dddddeddddddfdededededeeeeef   deeeeef   dededeeeeef   dededededede	e
j                     ded eee      d!ee   d"ef&ˆ fd#„Zd$„ Zej&                  j(                  d%„ «       Zej&                  j(                  d0d&„«       Zej&                  j(                  d1d'„«       Zej&                  j(                  d(e
j                  fd)„«       Zd2ded"ee   fd*„Zd+„ Zd1d,eej8                  eej8                     f   d-efd.„Zd(ej8                  fd/„Zˆ xZS )3r   z CoaT class. éà   é   rk   éè  ©é@   é€   é@  é   ©rk   ru   é   rk   r   r}   )ru   ru   ru   ru   Tr~   FNÚtokenÚimg_sizeÚ
patch_sizeÚin_chansÚnum_classesÚ
embed_dimsÚserial_depthsÚparallel_depthr   r¨   rf   Ú	drop_rateÚproj_drop_rateÚattn_drop_rateÚdrop_path_rater�   Úreturn_interm_layersÚout_featuresÚcrpe_windowÚglobal_poolc                 óÒ  •— t         ‰| �  «        ||dœ}|dv sJ ‚|xs ddddœ}|| _        || _        || _        |d   x| _        | _        || _        || _        || _	        t        |«      }t        d||||d   t        j                  dœ|¤Ž| _        t        d|D �cg c]  }|d	z  ‘Œ	 c}d|d   |d
   t        j                  dœ|¤Ž| _        t        d|D �cg c]  }|dz  ‘Œ	 c}d|d
   |d   t        j                  dœ|¤Ž| _        t        d|D �cg c]  }|dz  ‘Œ	 c}d|d   |d   t        j                  dœ|¤Ž| _        t        j$                  t'        j(                  d
d
|d   fi |¤Ž«      | _        t        j$                  t'        j(                  d
d
|d
   fi |¤Ž«      | _        t        j$                  t'        j(                  d
d
|d   fi |¤Ž«      | _        t        j$                  t'        j(                  d
d
|d   fi |¤Ž«      | _        t3        d|d   ddœ|¤Ž| _        t3        d|d
   ddœ|¤Ž| _        t3        d|d   ddœ|¤Ž| _        t3        d|d   ddœ|¤Ž| _        t=        d|d   |z  ||dœ|¤Ž| _        t=        d|d
   |z  ||dœ|¤Ž| _         t=        d|d   |z  ||dœ|¤Ž| _!        t=        d|d   |z  ||dœ|¤Ž| _"        |}tG        ||
||||¬«      }t        jH                  tK        |d   «      D �cg c].  }tM        d|d   |	d   | j4                  | j>                  dœ|¤|¤Ž‘Œ0 c}«      | _'        t        jH                  tK        |d
   «      D �cg c].  }tM        d|d
   |	d
   | j6                  | j@                  dœ|¤|¤Ž‘Œ0 c}«      | _(        t        jH                  tK        |d   «      D �cg c].  }tM        d|d   |	d   | j8                  | jB                  dœ|¤|¤Ž‘Œ0 c}«      | _)        t        jH                  tK        |d   «      D �cg c].  }tM        d|d   |	d   | j:                  | jD                  dœ|¤|¤Ž‘Œ0 c}«      | _*        || _+        | jV                  dkD  rmt        jH                  tK        |«      D �cg c]?  }tY        d||	| j>                  | j@                  | jB                  | jD                  fdœ|¤|¤Ž‘ŒA c}«      | _-        nd | _-        | j                  �sX| jZ                  �# ||d
   fi |¤Ž| _.         ||d   fi |¤Ž| _/        nd x| _.        | _/         ||d   fi |¤Ž| _0        | jV                  dkD  r›|d
   |d   cxk(  r	|d   k(  sJ ‚ J ‚t'        j                  jb                  ddd
d
dœ|¤Ž| _2        t        jf                  |«      | _4        |dkD  r!t        jj                  | j
                  |fi |¤Žnt        jl                  «       | _7        n`d | _2        t        jf                  |«      | _4        |dkD  r!t        jj                  | j
                  |fi |¤Žnt        jl                  «       | _7        tq        | j*                  d¬«       tq        | j,                  d¬«       tq        | j.                  d¬«       tq        | j0                  d¬«       | js                  | jt                  «       y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nr   ©ræ   Úavgr!   rk   )rk   é   é   r@   r   )rç   rè   ré   Ú	embed_dimr�   ru   r   r}   rÝ   )rC   rz   )r   r   r   )r   rf   rh   rg   rŽ   r�   )rC   r�   r‘   ri   )r§   r¨   r©   )Úin_channelsÚout_channelsr"   ç{®Gáz”?©Ústdr˜   );r&   r'   rò   ró   rë   Únum_featuresÚhead_hidden_sizerê   ré   rõ   r   r   r,   r   Úpatch_embed1Úpatch_embed2Úpatch_embed3Úpatch_embed4Ú	ParameterrG   ÚzerosÚ
cls_token1Ú
cls_token2Ú
cls_token3Ú
cls_token4r‚   Úcpe1Úcpe2Úcpe3Úcpe4r   Úcrpe1Úcrpe2Úcrpe3Úcrpe4r*   r-   Úranger‹   Úserial_blocks1Úserial_blocks2Úserial_blocks3Úserial_blocks4rí   r¦   Úparallel_blocksr�   Únorm3Únorm4ÚConv1dÚ	aggregaterp   Ú	head_droprn   rœ   Úheadr   ÚapplyÚ_init_weights)r4   rç   rè   ré   rê   rë   rì   rí   r   r¨   rf   rî   rï   rð   rñ   r�   rò   ró   rô   rõ   r   r    r5   r:   ÚdprÚskwargsrÎ   r;   s                              €r<   r'   zCoaT.__init__„  sS  ø€ ô0 	‰ÑÔØ¨Ñ/ˆØÐ.Ñ.Ð.Ð.Ø!Ò7¨¨q°QÑ%7ˆØ$8ˆÔ!Ø(ˆÔØ$ˆŒØ4>¸r±NÐBˆÔ˜DÔ1Ø&ˆÔØ ˆŒØ&ˆÔô ˜XÓ&ˆÜ&ð DØ¨*¸xØ  ‘m´·±ñDà@BñDˆÔô 'ð DØ&.Ö/ �a˜1“fÒ/¸AÈ
ÐSTÉØ  ‘m´·±ñDà@BñDˆÔô 'ð DØ&.Ö/ �a˜1“fÒ/¸AÈ
ÐSTÉØ  ‘m´·±ñDà@BñDˆÔô 'ð DØ'/Ö0 !�a˜2“gÒ0¸QÈÐTUÉØ  ‘m´·±ñDà@BñDˆÔô
 Ÿ,™,¤u§{¡{°1°a¸ÀA¹Ñ'MÈ"Ñ'MÓNˆŒÜŸ,™,¤u§{¡{°1°a¸ÀA¹Ñ'MÈ"Ñ'MÓNˆŒÜŸ,™,¤u§{¡{°1°a¸ÀA¹Ñ'MÈ"Ñ'MÓNˆŒÜŸ,™,¤u§{¡{°1°a¸ÀA¹Ñ'MÈ"Ñ'MÓNˆŒô Ð< :¨a¡=°AÑ<¸Ñ<ˆŒ	ÜÐ< :¨a¡=°AÑ<¸Ñ<ˆŒ	ÜÐ< :¨a¡=°AÑ<¸Ñ<ˆŒ	ÜÐ< :¨a¡=°AÑ<¸Ñ<ˆŒ	ô #Ðv¨J°q©M¸YÑ,FÐR[ÐdoÑvÐsuÑvˆŒ
Ü"Ðv¨J°q©M¸YÑ,FÐR[ÐdoÑvÐsuÑvˆŒ
Ü"Ðv¨J°q©M¸YÑ,FÐR[ÐdoÑvÐsuÑvˆŒ
Ü"Ðv¨J°q©M¸YÑ,FÐR[ÐdoÑvÐsuÑvˆŒ
àˆÜØØØ$Ø$ØØ!ô
ˆô !Ÿm™mô ˜=¨Ñ+Ó,ö	-.ð ô ð Ø˜q‘MØ$ Q™-ØŸ9™9Ø ŸJ™Jñ	ð
 ðð óò	-.ó 

ˆÔô !Ÿm™mô ˜=¨Ñ+Ó,ö	-.ð ô ð Ø˜q‘MØ$ Q™-ØŸ9™9Ø ŸJ™Jñ	ð
 ðð óò	-.ó 

ˆÔô !Ÿm™mô ˜=¨Ñ+Ó,ö	-.ð ô ð Ø˜q‘MØ$ Q™-ØŸ9™9Ø ŸJ™Jñ	ð
 ðð óò	-.ó 

ˆÔô !Ÿm™mô ˜=¨Ñ+Ó,ö	-.ð ô ð Ø˜q‘MØ$ Q™-ØŸ9™9Ø ŸJ™Jñ	ð
 ðð óò	-.ó 

ˆÔð -ˆÔØ×Ñ Ò"Ü#%§=¡=ô ˜~Ó.ö20ð ô ð Ø#Ø)Ø"&§*¡*¨d¯j©j¸$¿*¹*ÀdÇjÁjÐ!Qñð ð	ð
 óò20ó 	$ˆDÕ ð $(ˆDÔ ð ×(Ó(Ø×#Ñ#Ð/Ù'¨
°1©Ñ<¸Ñ<�”
Ù'¨
°1©Ñ<¸Ñ<�•
à*.Ð.�”
˜TœZÙ# J¨q¡MÑ8°RÑ8ˆDŒJà×"Ñ" QÒ&à! !‘}¨
°1©ÔF¸ÀA¹ÒFÐFÑFÐFÐFÜ!&§¡§¡Ð!d¸QÈQÐ\]Ñ!dÐacÑ!d�”Ü!#§¡¨IÓ!6�”ØOZÐ]^ÊœBŸI™I d×&7Ñ&7¸ÑKÈÒKÔdf×doÑdoÓdq�•	ð "&�”Ü!#§¡¨IÓ!6�”ØOZÐ]^ÊœBŸI™I d×&7Ñ&7¸ÑKÈÒKÔdf×doÑdoÓdq�”	ô 	�d—o‘o¨3Õ/Ü�d—o‘o¨3Õ/Ü�d—o‘o¨3Õ/Ü�d—o‘o¨3Õ/Ø�
‰
�4×%Ñ%Õ&ùòG 0ùò 0ùò 1ùò@	-.ùò	-.ùò	-.ùò	-.ùò20s1   Â[
Ã[
Ä[
Ì3[Í3[Î=3[Ð3[ÒA[$c                 óê  — t        |t        j                  «      rjt        |j                  d¬«       t        |t        j                  «      r8|j
                  �+t        j                  j                  |j
                  d«       y y y t        |t        j                  «      rUt        j                  j                  |j
                  d«       t        j                  j                  |j                  d«       y y )Nrþ   rÿ   r   rÀ   )	r(   r,   rn   r   Úweightrl   ÚinitÚ	constant_r   )r4   Úms     r<   r"  zCoaT._init_weights3  s˜   € Ü�aœŸ™Ô#Ü˜!Ÿ(™(¨Õ,Ü˜!œRŸY™YÔ'¨A¯F©FÐ,>Ü—‘×!Ñ! !§&¡&¨!Õ,ð -?Ð'ä˜œ2Ÿ<™<Ô(Ü�G‰G×Ñ˜aŸf™f aÔ(Ü�G‰G×Ñ˜aŸh™h¨Õ,ð )r]   c                 ó
   — h d£S )N>   r	  r
  r  r  r˜   ©r4   s    r<   Úno_weight_decayzCoaT.no_weight_decay<  s   € âGÐGr]   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedr˜   )r4   Úenables     r<   Úset_grad_checkpointingzCoaT.set_grad_checkpointing@  s   € áÐAÐAÓAˆz�6r]   c                 ó2   — t        ddddddddd	d
g¬«	      }|S )Nz#^cls_token1|patch_embed1|crpe1|cpe1z^serial_blocks1\.(\d+)z#^cls_token2|patch_embed2|crpe2|cpe2z^serial_blocks2\.(\d+)z#^cls_token3|patch_embed3|crpe3|cpe3z^serial_blocks3\.(\d+)z#^cls_token4|patch_embed4|crpe4|cpe4z^serial_blocks4\.(\d+))z^parallel_blocks\.(\d+)N)z^norm|aggregate)iŸ† )	Ústem1r  Ústem2r  Ústem3r  Ústem4r  r  )r*   )r4   ÚcoarseÚmatchers      r<   Úgroup_matcherzCoaT.group_matcherD  s6   € äØ8Ø4Ø8Ø4Ø8Ø4Ø8Ø4à2Ø.ðô
ˆð ˆr]   Úreturnc                 ó   — | j                   S r¡   )r   r+  s    r<   Úget_classifierzCoaT.get_classifierV  s   € à�y‰yÐr]   c                 ó¸   — || _         |�|dv sJ ‚|| _        |dkD  r&t        j                  | j                  |«      | _        y t        j
                  «       | _        y )Nr÷   r   )rê   rõ   r,   rn   r  rœ   r   )r4   rê   rõ   s      r<   Úreset_classifierzCoaT.reset_classifierZ  sU   € Ø&ˆÔØÐ"ØÐ"2Ñ2Ð2Ð2Ø*ˆDÔØALÈqÂ”B—I‘I˜d×/Ñ/°Ó=ˆ�	ÔVX×VaÑVaÓVcˆ�	r]   c                 óH
  — |j                   d   }| j                  |«      }| j                  j                  \  }}t        || j                  «      }| j
                  D ]  } ||||f¬«      }Œ t        |«      j                  |||d«      j                  dddd«      j                  «       }| j                  |«      }| j                  j                  \  }	}
t        || j                  «      }| j                  D ]  } |||	|
f¬«      }Œ t        |«      j                  ||	|
d«      j                  dddd«      j                  «       }| j                  |«      }| j                  j                  \  }}t        || j                  «      }| j                  D ]  } ||||f¬«      }Œ t        |«      j                  |||d«      j                  dddd«      j                  «       }| j!                  |«      }| j                   j                  \  }}t        || j"                  «      }| j$                  D ]  } ||||f¬«      }Œ t        |«      j                  |||d«      j                  dddd«      j                  «       }| j&                  €�t(        j*                  j-                  «       s\| j.                  rPi }d| j0                  v r||d<   d| j0                  v r||d<   d	| j0                  v r||d	<   d
| j0                  v r||d
<   |S | j3                  |«      }|S | j&                  D ]\  }| j5                  ||	|
f«      | j7                  |||f«      | j9                  |||f«      }}} |||||||f|	|
f||f||fg¬«      \  }}}}Œ^ t(        j*                  j-                  «       �sQ| j.                  �rDi }d| j0                  v rBt        |«      j                  |||d«      j                  dddd«      j                  «       }||d<   d| j0                  v rBt        |«      j                  ||	|
d«      j                  dddd«      j                  «       }||d<   d	| j0                  v rBt        |«      j                  |||d«      j                  dddd«      j                  «       }||d	<   d
| j0                  v rBt        |«      j                  |||d«      j                  dddd«      j                  «       }||d
<   |S | j;                  |«      }| j=                  |«      }| j3                  |«      }|||gS )Nr   rv   r@   rk   r   r!   Úx1_noclsÚx2_noclsÚx3_noclsÚx4_nocls)rÈ   )rD   r  Ú	grid_sizeÚ
insert_clsr	  r  Ú
remove_clsrF   rw   Ú
contiguousr  r
  r  r  r  r  r  r  r  r  rG   ÚjitÚis_scriptingrò   ró   r  r  r  r  r�   r  )r4   Úx0rO   rÊ   ÚH1ÚW1Úblkr>  rË   ÚH2ÚW2r?  rÌ   ÚH3ÚW3r@  rÍ   ÚH4ÚW4rA  Úfeat_outs                        r<   Úforward_featureszCoaT.forward_featuresa  s  € Ø�H‰H�Q‰Kˆð ×Ñ˜rÓ"ˆØ×"Ñ"×,Ñ,‰ˆˆBÜ˜˜DŸO™OÓ,ˆØ×&Ñ&ò 	(ˆCÙ�R˜r 2˜hÔ'‰Bð	(ä˜b“>×)Ñ)¨!¨R°°RÓ8×@Ñ@ÀÀAÀqÈ!ÓL×WÑWÓYˆð ×Ñ˜xÓ(ˆØ×"Ñ"×,Ñ,‰ˆˆBÜ˜˜DŸO™OÓ,ˆØ×&Ñ&ò 	(ˆCÙ�R˜r 2˜hÔ'‰Bð	(ä˜b“>×)Ñ)¨!¨R°°RÓ8×@Ñ@ÀÀAÀqÈ!ÓL×WÑWÓYˆð ×Ñ˜xÓ(ˆØ×"Ñ"×,Ñ,‰ˆˆBÜ˜˜DŸO™OÓ,ˆØ×&Ñ&ò 	(ˆCÙ�R˜r 2˜hÔ'‰Bð	(ä˜b“>×)Ñ)¨!¨R°°RÓ8×@Ñ@ÀÀAÀqÈ!ÓL×WÑWÓYˆð ×Ñ˜xÓ(ˆØ×"Ñ"×,Ñ,‰ˆˆBÜ˜˜DŸO™OÓ,ˆØ×&Ñ&ò 	(ˆCÙ�R˜r 2˜hÔ'‰Bð	(ä˜b“>×)Ñ)¨!¨R°°RÓ8×@Ñ@ÀÀAÀqÈ!ÓL×WÑWÓYˆð ×ÑÐ'Ü—9‘9×)Ñ)Ô+°×0IÒ0Ià�Ø ×!2Ñ!2Ñ2Ø+3�H˜ZÑ(Ø ×!2Ñ!2Ñ2Ø+3�H˜ZÑ(Ø ×!2Ñ!2Ñ2Ø+3�H˜ZÑ(Ø ×!2Ñ!2Ñ2Ø+3�H˜ZÑ(Ø�ð —Z‘Z “^�Ø�	ð ×'Ñ'ò 	aˆCØŸ™ 2¨¨B xÓ0°$·)±)¸BÀÀRÀÓ2IÈ4Ï9É9ÐUWÐZ\Ð^`ÐYaÓKb�B�ˆBÙ   R¨¨R¸¸R¸À2ÀrÀ(ÈRÐQSÈHÐWYÐ[]ÐV^Ð7_Ô`‰NˆB��B™ð	aô �y‰y×%Ñ%Õ'¨D×,EÓ,EàˆHØ˜T×.Ñ.Ñ.Ü% b›>×1Ñ1°!°R¸¸RÓ@×HÑHÈÈAÈqÐRSÓT×_Ñ_Óa�Ø'/�˜Ñ$Ø˜T×.Ñ.Ñ.Ü% b›>×1Ñ1°!°R¸¸RÓ@×HÑHÈÈAÈqÐRSÓT×_Ñ_Óa�Ø'/�˜Ñ$Ø˜T×.Ñ.Ñ.Ü% b›>×1Ñ1°!°R¸¸RÓ@×HÑHÈÈAÈqÐRSÓT×_Ñ_Óa�Ø'/�˜Ñ$Ø˜T×.Ñ.Ñ.Ü% b›>×1Ñ1°!°R¸¸RÓ@×HÑHÈÈAÈqÐRSÓT×_Ñ_Óa�Ø'/�˜Ñ$ØˆOà—‘˜B“ˆBØ—‘˜B“ˆBØ—‘˜B“ˆBØ˜˜B�<Ðr]   Úx_featÚ
pre_logitsc           	      ó>  — t        |t        «      r«| j                  €J ‚| j                  dk(  r@t	        j
                  |D �cg c]  }|d d …dd …f   j                  dd¬«      ‘Œ  c}d¬«      }n,t	        j                  |D �cg c]  }|d d …df   ‘Œ c}d¬«      }| j                  |«      j                  d¬«      }n3| j                  dk(  r|d d …dd …f   j                  d¬«      n|d d …df   }| j                  |«      }|r|S | j                  |«      S c c}w c c}w )Nrø   r   T)rC   ÚkeepdimrB   r   )r(   Úlistr  rõ   rG   rJ   ÚmeanÚstackÚsqueezer  r   )r4   rT  rU  Úxlr:   s        r<   Úforward_headzCoaT.forward_head²  sÿ   € Ü�fœdÔ#Ø—>‘>Ð-Ð-Ð-Ø×Ñ 5Ò(Ü—I‘IÈVÖTÀr˜r¢! Q¡R %™yŸ~™~°!¸T˜~ÕBÒTÐZ[Ô\‘ä—K‘K°FÖ ;¨b ¢A q D£Ò ;ÀÔC�Ø—‘˜qÓ!×)Ñ)¨aÐ)Ó0‰Aà-1×-=Ñ-=ÀÒ-F�’q˜!™"�u‘×"Ñ" qÐ"Ô)ÈFÒSTÐVWÐSWÉLˆAØ�N‰N˜1ÓˆÙˆqÐ0 D§I¡I¨a£LÐ0ùò Uùâ ;s   Á#DÂDc                 óÀ   — t         j                  j                  «       s| j                  r| j	                  |«      S | j	                  |«      }| j                  |«      }|S r¡   )rG   rF  rG  rò   rS  r]  )r4   r:   rT  s      r<   r\   zCoaT.forward¿  sR   € Ü�y‰y×%Ñ%Ô'¨D×,EÒ,Eà×(Ñ(¨Ó+Ð+ð ×*Ñ*¨1Ó-ˆFØ×!Ñ! &Ó)ˆAØˆHr]   )T©Fr¡   ) r^   r_   r`   ra   r   r)   r   r€   r   r   r,   r¤   r   r   Ústrr*   r'   r"  rG   rF  Úignorer,  r/  r7  r:  r<  rS  r   ÚTensorr]  r\   rb   rc   s   @r<   r   r   ‚  sD  ø„ Ùð  Ø ØØ#Ø4GØ7CØ"#ØØ<HØ!Ø!Ø$&Ø$&Ø$&Ø*3Ø).Ø04Ø*.Ø&ØØñ-m'àðm'ð ðm'ð ð	m'ð
 ðm'ð ˜c 3¨¨SÐ0Ñ1ðm'ð !  c¨3°Ð!3Ñ4ðm'ð  ðm'ð ðm'ð ˜e U¨E°5Ð8Ñ9ðm'ð ðm'ð ðm'ð "ðm'ð "ðm'ð "ðm'ð  ˜RŸY™Y™ð!m'ð" #'ð#m'ð$ # 4¨¡9Ñ-ð%m'ð& " $™ð'm'ð( õ)m'ò^-ð ‡Y�Y×ÑñHó ðHð ‡Y�Y×ÑòBó ðBð ‡Y�Y×Ñòó ðð" ‡Y�Y×Ñð §	¡	ò ó ðñd¨Cð d¸hÀs¹mó dòO ñb1 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#Jð 1ÐX\ó 1ð˜EŸL™L÷ r]   c                 óx   — |j                  | j                  d   dd«      }t        j                  || fd¬«      } | S )z Insert CLS token. r   r@   r   rB   )ÚexpandrD   rG   rJ   )r:   r‡   Ú
cls_tokenss      r<   rC  rC  Ê  s7   € à×!Ñ! !§'¡'¨!¡*¨b°"Ó5€JÜ�	‰	�:˜q�/ qÔ)€AØ€Hr]   c                 ó   — | dd…dd…dd…f   S )z Remove CLS token. Nr   r˜   )r:   s    r<   rD  rD  Ñ  s   € àŠQ�‘’AˆX‰;Ðr]   c                 ó¸  — i }| j                  d| «      } | j                  «       D ]²  \  }}|j                  d«      s–|j                  d«      rt        |dd «      �x|j                  d«      rt        |dd «      �Z|j                  d«      rt        |dd «      �<|j                  d«      rt        |dd «      �|j                  d«      rt        |dd «      €Œ®|||<   Œ´ |S )NÚmodelrš   r�   r  r  r  r   )Úgetr0   Ú
startswithÚgetattr)Ú
state_dictrh  Úout_dictrz   rN   s        r<   Úcheckpoint_filter_fnrn  Ö  sÔ   € Ø€HØ—‘ ¨Ó4€JØ× Ñ Ó"ò 	‰ˆˆ1à�<‰<˜Ô Ø—‘˜gÔ&¬7°5¸'À4Ó+HÐ+PØ—‘˜gÔ&¬7°5¸'À4Ó+HÐ+PØ—‘˜gÔ&¬7°5¸'À4Ó+HÐ+PØ—‘˜kÔ*¬w°u¸kÈ4Ó/PÐ/XØ—‘˜fÔ%¬'°%¸ÀÓ*FÐ*NØØˆ�Šð	ð €Or]   c                 óp   — |j                  dd «      rt        d«      ‚t        t        | |fdt        i|¤Ž}|S )NÚfeatures_onlyz<features_only not implemented for Vision Transformer models.Úpretrained_filter_fn)ri  ÚRuntimeErrorr   r   rn  )ÚvariantÚ
pretrainedÚdefault_cfgÚkwargsrh  s        r<   Ú_create_coatrw  æ  sJ   € Ø‡z�z�/ 4Ô(ÜÐYÓZÐZä ÜØØñô 2ð	ð
 ñ€Eð €Lr]   c                 ó4   — | ddd dddt         t        dddd	œ|¥S )
NrÞ   )rk   rÜ   rÜ   gÍÌÌÌÌÌì?ÚbicubicTzpatch_embed1.projr   z
apache-2.0)Úurlrê   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚfixed_input_sizerY  r   Ú
first_convÚ
classifierÚlicenser	   )rz  rv  s     r<   Ú	_cfg_coatrƒ  ô  s5   € àØ¨=ÀtØ¨ÈÜ%Ô.BØ)¸Øñð ðð r]   ztimm/)Ú	hf_hub_id)rk   é€  r…  rÀ   Úsquash)r„  r{  r}  Ú	crop_mode)zcoat_tiny.in1kzcoat_mini.in1kzcoat_small.in1kzcoat_lite_tiny.in1kzcoat_lite_mini.in1kzcoat_lite_small.in1kzcoat_lite_medium.in1kzcoat_lite_medium_384.in1kr8  c           	      óZ   — t        dg d¢g d¢d¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nru   )é˜   r‰  r‰  r‰  ©r!   r!   r!   r!   rå   ©rè   rë   rì   rí   rt  )Ú	coat_tiny©r*   rw  ©rt  rv  Ú	model_cfgrh  s       r<   rŒ  rŒ    ó:   € äØÒ!5Â\Ðbcôe€IäÑY°ÐY¼tÀIÑ?XÐQWÑ?XÑY€EØ€Lr]   c           	      óZ   — t        dg d¢g d¢d¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nru   )r‰  éØ   r’  r’  rŠ  rå   r‹  rt  )Ú	coat_minir�  rŽ  s       r<   r“  r“    r�  r]   c           	      ó\   — t        ddg d¢g d¢ddœ|¤Ž}t        dd| it        |fi |¤Ž¤Ž}|S )	Nru   )r‰  râ   râ   râ   rŠ  rå   r‹  rt  r˜   )Ú
coat_smallr�  rŽ  s       r<   r•  r•    sI   € äð oØÒ!5Â\ÐbcñoØgmño€IäÑZ°*ÐZÄÀYÑ@YÐRXÑ@YÑZ€EØ€Lr]   c           	      ó^   — t        dg d¢g d¢g d¢¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nru   )rà   rá   é   râ   rŠ  ©r}   r}   ru   ru   ©rè   rë   rì   r¨   rt  )Úcoat_lite_tinyr�  rŽ  s       r<   rš  rš  '  ó:   € äØÒ!4ÂLÒ]iôk€IäÑ^°jÐ^ÄDÈÑD]ÐV\ÑD]Ñ^€EØ€Lr]   c           	      ó^   — t        dg d¢g d¢g d¢¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nru   rß   rŠ  r˜  r™  rt  )Úcoat_lite_minir�  rŽ  s       r<   r�  r�  /  r›  r]   c           	      ó^   — t        dg d¢g d¢g d¢¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nru   rß   rä   r˜  r™  rt  )Úcoat_lite_smallr�  rŽ  s       r<   rŸ  rŸ  7  s:   € äØÒ!4ÂLÒ]iôk€IäÑ_°zÐ_ÄTÈ)ÑE^ÐW]ÑE^Ñ_€EØ€Lr]   c           	      óX   — t        dg d¢g d¢¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nru   ©rá   r—  râ   rã   ©rk   rå   é
   r}   )rè   rë   rì   rt  )Úcoat_lite_mediumr�  rŽ  s       r<   r¤  r¤  ?  s7   € äØÒ!5Â]ôT€IäÑ`¸
Ð`ÄdÈ9ÑF_ÐX^ÑF_Ñ`€EØ€Lr]   c           	      óZ   — t        ddg d¢g d¢¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )Nr…  ru   r¡  r¢  )rç   rè   rë   rì   rt  )Úcoat_lite_medium_384r�  rŽ  s       r<   r¦  r¦  G  s:   € äØ Ò/CÒS`ôb€IäÑd¸JÐdÌ$ÈyÑJcÐ\bÑJcÑd€EØ€Lr]   )FN)r?   r_  )4ra   Útypingr   r   r   r   r   r   rG   Útorch.nnr,   Útorch.nn.functionalÚ
functionalrK   Ú	timm.datar
   r   Útimm.layersr   r   r   r   r   r   r   Ú_builderr   Ú	_registryr   r   Ú__all__r¤   r   re   r‚   r‹   r¦   r   rC  rD  rn  rw  rƒ  Údefault_cfgsrŒ  r“  r•  rš  r�  rŸ  r¤  r¦  r˜   r]   r<   ú<module>r±     sï  ðñ÷ ;× :ã Ý ß Ð ç Aß _× _Ñ _Ý *ß <àˆ(€ôH�B—I‘Iô HôV2˜bŸi™iô 2ôj�—‘ô ôD<�"—)‘)ô <ô~F�B—I‘Iô FôREˆ2�9‰9ô EòP
òò
ó ó	ñ %Ù¨'Ô2Ù¨'Ô2Ù ¨7Ô3Ù$¨wÔ7Ù$¨wÔ7Ù%°Ô8Ù&°Ô9Ù!*ØØ ¨3¸(ô"ñ&ó €ð ñ¨Tò ó ðð ñ¨Tò ó ðð ñ¨dò ó ðð ñ°$ò ó ðð ñ°$ò ó ðð ñ°4ò ó ðð ñ°Dò ó ðð ñ¸ò ó ñr]   