
    Ng                        d Z ddlmZ ddlmZmZ ddlmZ ddl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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dgZ%e G d d                      Z& G d dej'                  Z(d de)fdZ* G d dej'                  Z+e G d dej'                              Z,	 	 	 	 dde-de-de.dee	         d ee	         d!e/fd"Z0 e1dd#d$d%d&d'd(d)d*d+d,d-d.d/d01          Z2 G d2 dej'                  Z3	 	 	 	 	 dd5Z4dd7Z5	 	 	 	 	 	 	 dd>Z6	 	 	 dd?Z7 e1di d@ e7dAB          dC e7dDB          dE e7dFB          dG e7dHB          dI e7dJB          dK e7dLB          dM e7dNB          dO e6dAB          dP e6dDB          dQ e6dFB          dR e6dHB          dS e6dJB          dT e6dLB          dU e6dNB          dV e6dWB          dX e6dAdYdZd[ e1d[d\]          d^_          d` e6dAdYdZd[da e1            d^b          dc e6dDdddZd[da e1            d^b          de e6dFdddZd[da e1            d^b          df e6dHdddZd[da e1            d^b          dg e5dhB          di e5djB          dk e5dldmn          do e5dpdqn          dr e5dsdtn          du e5dvdwn          dx e4dyB          dz e4d{B          d| e4d}B          d~ e4dyd= e1d                    d e4d{d= e1d                    d e4d}d= e1d                    d e4dyda e1                      d e4d{da e1                      d e4d}da e1                      d e6dddYd\d[ e1d[d\]          d^          Z8ddZ9ddZ: e#i d e:ddddddd          d e:ddddddd          d e:ddddddd          d e:ddddddd          d e:ddddddd          d e:ddddddd          d e:ddddddd          dO e:dddd          dP e:dddd          dQ e:dddd          dR e:dddd          dS e:dddd          dT e:dddd          dU e:dddd          dV e:dddd          d e:dddddd          d e:dddddd          i d e:dddddd          d e:dddddd          df e:dddddǦ          dg e:dddddȬɦ          d e:ddddddȬ̦          dk e:dddddȬɦ          do e:dddddȬɦ          dr e:dddddȬɦ          du e:dddddȬɦ          dx e:ddȬѦ          d e:dddddddȬԦ          d| e:ddȬѦ          d~ e:ddȬѦ          d e:ddȬѦ          d e:ddȬѦ          d e:ddȬѦ          d e:ddȬѦ           e:ddȬѦ           e:ddddddج٦          dڜ          Z;e$dde3fd܄            Z<e$dde3fd݄            Z=e$dde3fdބ            Z>e$dde3fd߄            Z?e$dde3fd            Z@e$dde3fd            ZAe$dde3fd            ZBe$dde3fd            ZCe$dde3fd            ZDe$dde3fd            ZEe$dde3fd            ZFe$dde3fd            ZGe$dde3fd            ZHe$dde3fd            ZIe$dde3fd            ZJe$dde3fd            ZKe$dde3fd            ZLe$dde3fd            ZMe$dde3fd            ZNe$dde3fd            ZOe$dde3fd            ZPe$dde3fd            ZQe$dde3fd            ZRe$dde3fd            ZSe$dde3fd            ZTe$dde3fd            ZUe$dde3fd            ZVe$dde3fd            ZWe$dde3fd            ZXe$dde3fd            ZYe$dde3fd            ZZe$dde3fd            Z[e$dde3fd            Z\e$dde3fd            Z]e$dde3fd            Z^e$dde3fd            Z_dS (	  a   Normalization Free Nets. NFNet, NF-RegNet, NF-ResNet (pre-activation) Models

Paper: `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
    - https://arxiv.org/abs/2101.08692

Paper: `High-Performance Large-Scale Image Recognition Without Normalization`
    - https://arxiv.org/abs/2102.06171

Official Deepmind JAX code: https://github.com/deepmind/deepmind-research/tree/master/nfnets

Status:
* These models are a work in progress, experiments ongoing.
* Pretrained weights for two models so far, more to come.
* Model details updated to closer match official JAX code now that it's released
* NF-ResNet, NF-RegNet-B, and NFNet-F models supported

Hacked together by / copyright Ross Wightman, 2021.
    )OrderedDict)	dataclassreplace)partial)CallableTupleOptionalNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)	ClassifierHeadDropPathAvgPool2dSameScaledStdConv2dScaledStdConv2dSameget_act_layer
get_act_fnget_attnmake_divisible   )build_model_with_cfg)register_notrace_module)checkpoint_seq)generate_default_cfgsregister_modelNormFreeNetNfCfgc                   z   e Zd ZU eeeeef         ed<   eeeeef         ed<   dZeed<   dZe	ed<   dZ
ee         ed<   dZee         ed	<   dZee	         ed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZe	ed <   dS )!r   depthschannelsg?alpha3x3	stem_typeNstem_chs
group_size
attn_layerattn_kwargs       @	attn_gain      ?width_factor      ?bottle_ratior   num_features   ch_divFreg
extra_convgamma_in_actsame_paddinggh㈵>std_conv_epsskipinitzero_init_fcsilu	act_layer)__name__
__module____qualname__r   int__annotations__r!   floatr#   strr$   r	   r%   r&   r'   dictr)   r+   r-   r.   r0   r1   boolr2   r3   r4   r5   r6   r7   r9        M/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/nfnet.pyr   r   &   s        #sC$%%%%Cc3&''''E5Is"Hhsm""" $J$$$ $J$$$KIuL%L%L#FCOOOCJL$L$L%HdL$IsrD   c                   ,     e Zd Zddef fdZd Z xZS )GammaActrelur*   Fgammac                     t                                                       t          |          | _        || _        || _        d S N)super__init__r   act_fnrI   inplace)selfact_typerI   rO   	__class__s       rE   rM   zGammaAct.__init__@   s:     **
rD   c                 j    |                      || j                                      | j                  S )NrO   )rN   rO   mul_rI   rP   xs     rE   forwardzGammaAct.forwardF   s*    {{1dl{3388DDDrD   )rH   r*   F)r:   r;   r<   r?   rM   rX   __classcell__rR   s   @rE   rG   rG   ?   s_         u      E E E E E E ErD   rG   r*   rI   c                      d fd	}|S )NFc                 (    t          |           S )N)rI   rO   )rG   )rO   rQ   rI   s    rE   _createzact_with_gamma.<locals>._createK   s    w????rD   FrC   )rQ   rI   r]   s   `` rE   act_with_gammar_   J   s3    @ @ @ @ @ @ @NrD   c                   T     e Zd Zdddefdededededee         def fd	Zd
 Z xZ	S )DownsampleAvgr   Nin_chsout_chsstridedilationfirst_dilation
conv_layerc                 B   t          t          |                                            |dk    r|nd}|dk    s|dk    r4|dk    r|dk    rt          nt          j        } |d|dd          | _        nt	          j                    | _         |||dd          | _        dS )zF AvgPool Downsampling as in 'D' ResNet variants. Support for dilation.r      TF)	ceil_modecount_include_pad)rd   N)	rL   ra   rM   r   nn	AvgPool2dpoolIdentityconv)
rP   rb   rc   rd   re   rf   rg   
avg_strideavg_pool_fnrR   s
            rE   rM   zDownsampleAvg.__init__Q   s     	mT""++---'1}}VV!
A::A+5??x!||--QSQ]K#AzTUZ[[[DIIDIJvw!<<<			rD   c                 R    |                      |                     |                    S rK   )rp   rn   rV   s     rE   rX   zDownsampleAvg.forwardd   s    yy1&&&rD   )
r:   r;   r<   r   r=   r	   r   rM   rX   rY   rZ   s   @rE   ra   ra   P   s        
 ,0#2= == = 	=
 = %SM= != = = = = =&' ' ' ' ' ' 'rD   ra   c            %            e Zd ZdZddddddddddddddded	fd
edee         dededee         dedededee         dededededee	         dedee	         de	def$ fdZ
d Z xZS )NormFreeBlockz-Normalization-Free pre-activation block.
    Nr   r*         ?TFr(           rb   rc   rd   re   rf   r!   betar-   r%   r0   r1   r2   r6   r&   r)   r9   rg   drop_path_ratec                    t                                                       |p|}|p|}t          |r||z  n||z  |
          }|	sdn||	z  }|	r|	|
z  dk    r|	|z  }|| _        || _        || _        ||k    s|dk    s||k    rt          ||||||          | _        nd | _         |            | _         |||d          | _	         |d          | _
         |||d|||          | _        |r( |d          | _         |||dd||          | _        nd | _        d | _        |r| ||          | _        nd | _         |            | _         |||d|rdnd	
          | _        |s| ||          | _        nd | _        |dk    rt%          |          nt'          j                    | _        |r&t'          j        t/          j        d	                    nd | _        d S )Nr   r   )rd   re   rf   rg   TrT      )rd   re   groupsr*   rw   )	gain_init)rL   rM   r   r!   rx   r)   ra   
downsampleact1conv1act2conv2act2bconv2battnact3conv3	attn_lastr   rl   ro   	drop_path	Parametertorchtensorskipinit_gain)rP   rb   rc   rd   re   rf   r!   rx   r-   r%   r0   r1   r2   r6   r&   r)   r9   rg   ry   mid_chsr|   rR   s                        rE   rM   zNormFreeBlock.__init__m   s[   * 	'38#V #!Y,!6!67\CY[abb$?'Z*? 	**v-22 6)G
	"W!x>/I/I+!-%  DOO #DOIKK	Z33
Id+++	Z!F^djkkk
 	"4000DJ$*WgqX^deeeDKKDJDK 	:)"
7++DIIDIIKK	Z!X?UrrSUVVV
 	"z-'Z00DNN!DN5Ca5G5G.111R[]]?GQR\%,r*:*:;;;TrD   c                    |                      |          | j        z  }|}| j        |                     |          }|                     |          }|                     |                     |                    }| j        (|                     |                     |                    }| j        | j	        |                     |          z  }| 
                    |                     |                    }| j        | j	        |                     |          z  }|                     |          }| j        |                    | j                   || j        z  |z   }|S rK   )r   rx   r~   r   r   r   r   r   r   r)   r   r   r   r   r   rU   r!   )rP   rW   outshortcuts       rE   rX   zNormFreeBlock.forward   s%   iillTY& ?&s++H jjoojj3((;"++djjoo..C9 .499S>>1Cjj3((>%.4>>##6#66CnnS!!)HHT'(((DJ)
rD   )r:   r;   r<   __doc__r   r=   r	   r?   rB   r   rM   rX   rY   rZ   s   @rE   ru   ru   h   s         &*,0"&(,$"-1!,0#2$&'BR BRBR c]BR 	BR
 BR %SMBR BR BR  BR !BR BR BR BR BR !*BR  !BR"  )#BR$ !%BR& "'BR BR BR BR BR BRH      rD   ru    Trb   rc   r#   rg   r9   preact_featurec                    d}t          |dd          }t                      }|dv sJ d|v rd|v r/d|vsJ |dz  |d	z  |dz  |f}	d
}
d	}t          |dz  dd          }n5d|v rd|z  dz  |dz  |f}	n|dz  |dz  |f}	d}
t          |dz  dd          }t          |	          dz
  }t          t	          |	|
                    D ]=\  }\  }} || |d|          |d|dz    <   ||k    r |d          |d|dz    <   |} >n)d|v r || |dd          |d<   n || |dd          |d<   d|v rt          j        ddd          |d<   d	}t          j        |          ||fS )Nri   	stem.convnum_chs	reductionmodule)	r   deepdeep_tiered	deep_quadr"   7x7	deep_pool3x3_pool7x7_poolr   quadrn   r/      )ri   r   r   ri   z
stem.conv3tieredr{   )ri   r   r   z
stem.conv2r   )kernel_sizerd   rp   TrT   actr"      )rd   padding)rA   r   len	enumerateziprl   	MaxPool2d
Sequential)rb   rc   r#   rg   r9   r   stem_stridestem_featurestemr$   strideslast_idxicss                  rE   create_stemr      s    K1[IIIL==DsssssY****1glGqL'JH"GK1,WWWLL9$$K1,glGD#qL'Q,@G1,WWWLx==1$"3x#9#9:: 	 	IAv1#-:faQq#Q#Q#QDA H}}&/i&=&=&=]1q5]]#FF		
 
)		!z&'qKKKV "z&'qKKKV|Aa;;;V=\99rD   g   `U?g   yX?g   \9?g   `aK?g   ?g    ?g    `l?g   `i?g   |?g    7@g   -?g   @g   `?g   ?)identityceluelugelu
leaky_relulog_sigmoidlog_softmaxrH   relu6selusigmoidr8   softsignsoftplustanhc                       e Zd ZdZ	 	 	 	 	 	 ddeded	ed
edededef fdZe	j
        j        dd            Ze	j
        j        dd            Ze	j
        j        dej        fd            Zdded
ee         fdZd ZddefdZd Z xZS )r   a*   Normalization-Free Network

    As described in :
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    and
    `High-Performance Large-Scale Image Recognition Without Normalization` - https://arxiv.org/abs/2102.06171

    This model aims to cover both the NFRegNet-Bx models as detailed in the paper's code snippets and
    the (preact) ResNet models described earlier in the paper.

    There are a few differences:
        * channels are rounded to be divisible by 8 by default (keep tensor core kernels happy),
            this changes channel dim and param counts slightly from the paper models
        * activation correcting gamma constants are moved into the ScaledStdConv as it has less performance
            impact in PyTorch when done with the weight scaling there. This likely wasn't a concern in the JAX impl.
        * a config option `gamma_in_act` can be enabled to not apply gamma in StdConv as described above, but
            apply it in each activation. This is slightly slower, numerically different, but matches official impl.
        * skipinit is disabled by default, it seems to have a rather drastic impact on GPU memory use and throughput
            for what it is/does. Approx 8-10% throughput loss.
      r{   avg    rw   cfgnum_classesin_chansglobal_pooloutput_stride	drop_ratery   c                 
   t                                                       || _        || _        d| _        t          |fi |}|j        t          v sJ d|j         d            |j        rt          nt          }	|j        r=t          |j        t          |j                           }
t          |	|j                  }	n;t          |j                  }
t          |	t          |j                 |j                  }	|j        r$t          t#          |j                  fi |j        nd}t'          |j        p|j        d         |j        z  |j                  }t1          |||j        |	|
	          \  | _        }}|g| _        d
 t9          j        d|t=          |j                                                 |j                  D             }|}|}d}d}g }tC          |j                  D ]i\  }}|dk    r|dk    rdnd}||k    r|dk    r||z  }d}||z  }|dv rdnd}g }tE          |j        |                   D ]}|dk    o|dk    }t'          |j        |         |j        z  |j                  }|tG          d.i d|d|d|j$        dd|dz  z  d|dk    r|ndd|d|d|j%        d|j&        r|rdn|j'        d|j        d|j&        d|j(        d|j)        d|d|j*        d|
d |	d!||         |         gz  }|dk    rd}||j$        dz  z  }|}|}| xj        tW          ||d"| #          gz  c_        |tY          j-        | gz  }ktY          j-        | | _.        |j/        r^t'          |j        |j/        z  |j                  | _/         |	|| j/        d          | _0        tW          | j/        |d$#          | j        d%<   n|| _/        tY          j1                    | _0         |
|j/        dk    &          | _2        | j/        | _3        ti          | j/        ||| j        '          | _5        | 6                                D ]\  }}d(|v rto          |tX          j8                  r~|j9        r%tX          j:        ;                    |j<                   n&tX          j:        =                    |j<        d)d*           |j>        $tX          j:        ;                    |j>                   to          |tX          j?                  rRtX          j:        @                    |j<        d+d,-           |j>        $tX          j:        ;                    |j>                   dS )/a  
        Args:
            cfg: Model architecture configuration.
            num_classes: Number of classifier classes.
            in_chans: Number of input channels.
            global_pool: Global pooling type.
            output_stride: Output stride of network, one of (8, 16, 32).
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth drop-path rate.
            **kwargs: Extra kwargs overlayed onto cfg.
        Fz3Please add non-linearity constants for activation (z).)rI   )eps)rI   r   Nr   )rg   r9   c                 6    g | ]}|                                 S rC   )tolist).0rW   s     rE   
<listcomp>z(NormFreeNet.__init__.<locals>.<listcomp>T  s     ttt!188::tttrD   r   r*   ri   )r   ri   rb   rc   r!   rx   r,   rd   re   rf   r%   r-   r0   r1   r2   r6   r&   r)   r9   rg   ry   zstages.r   
final_convrT   )	pool_typer   fcrw   g{Gz?fan_inlinear)modenonlinearityrC   )ArL   rM   r   r   grad_checkpointingr   r9   _nonlin_gammar4   r   r   r3   r_   r   r5   r   r&   r   r'   r   r$   r    r+   r0   r   r#   r   feature_infor   linspacesumr   splitr   rangeru   r!   r%   r1   r-   r2   r6   r)   rA   rl   r   stagesr.   r   ro   	final_acthead_hidden_sizer   headnamed_modules
isinstanceLinearr7   initzeros_weightnormal_biasConv2dkaiming_normal_) rP   r   r   r   r   r   r   ry   kwargsrg   r9   r&   r$   r   	stem_featdrop_path_ratesprev_chs
net_stridere   expected_varr   	stage_idxstage_depthrd   rf   blocks	block_idxfirst_blockrc   nmrR   s                                   rE   rM   zNormFreeNet.__init__$  s   , 	&""'c$$V$$}---/veher/v/v/v---,/,<Q((/
 	g&s}M#-<XYYYI 1ABBBJJ%cm44I =3OUXUefffJMP^eWXcn55IIIIIae
!3<#B3<?cFV"VX[Xbcc,7M!-
 -
 -
)	;	 'Kttu~aQTUXU_Q`Q`/a/a/g/ghkhr/s/sttt 
&/
&;&; %	/ %	/"I{#q..[1__QQ!F]**vzzF"& J"*f"4"4QQ!NF"3:i#899 # #	'1n?a(i)@3CS)SUXU_``=   #8-4W)) lc111 &/!^^66	
 &X $2>  #~~ (+w!T;!TCDT ::   #~~ !\\  *z "mm (i   *z!" $39#=i#H#H#  & >>#%L	Q.!)"$x:Vk`iVkVk"l"l"l!mmr}f-..FFmV, 	, .s/?#BR/RTWT^ _ _D(j43DaHHDO$(1Bjan$o$o$oDb!! (D kmmDO"3+;a+?@@@ $ 1"!n	
 
 
	 &&(( 	+ 	+DAqqyyZ2955y# 7GNN18,,,,GOOAHb#6666%GNN16***Ary)) +''xh'WWW6%GNN16***	+ 	+rD   Fc                 8    t          d|rdndd fdg          }|S )Nz^stemz^stages\.(\d+)z^stages\.(\d+)\.(\d+))z^final_conv)i )r   r   )rA   )rP   coarsematchers      rE   group_matcherzNormFreeNet.group_matcher  s<    &,J""2JDQ*
 
 
 rD   Tc                     || _         d S rK   )r   )rP   enables     rE   set_grad_checkpointingz"NormFreeNet.set_grad_checkpointing  s    "(rD   returnc                     | j         j        S rK   )r   r   )rP   s    rE   get_classifierzNormFreeNet.get_classifier  s    y|rD   Nc                 <    | j                             ||           d S rK   )r   reset)rP   r   r   s      rE   reset_classifierzNormFreeNet.reset_classifier  s    	[11111rD   c                 $   |                      |          }| j        r4t          j                                        st          | j        |          }n|                     |          }|                     |          }|                     |          }|S rK   )	r   r   r   jitis_scriptingr   r   r   r   rV   s     rE   forward_featureszNormFreeNet.forward_features  sz    IIaLL" 	59+A+A+C+C 	t{A..AAAAOOANN1rD   
pre_logitsc                 ^    |r|                      ||          n|                      |          S )N)r  )r   )rP   rW   r  s      rE   forward_headzNormFreeNet.forward_head  s-    6@Rtyyzy222diiPQllRrD   c                 Z    |                      |          }|                     |          }|S rK   )r  r  rV   s     rE   rX   zNormFreeNet.forward  s-    !!!$$a  rD   )r   r{   r   r   rw   rw   r^   )TrK   )r:   r;   r<   r   r   r=   r@   r?   rM   r   r  ignorer  r  rl   Moduler  r	   r
  r  rB   r  rX   rY   rZ   s   @rE   r   r     s        0  $$!#!$&{+ {+{+ {+ 	{+
 {+ {+ {+ "{+ {+ {+ {+ {+ {+z Y    Y) ) ) ) Y	    2 2C 2hsm 2 2 2 2  S S$ S S S S      rD         i   i   rH   c                 >    |pi }t          | |ddd||||	  	        }|S )Nr   @   rv   )	r   r    r#   r$   r-   r%   r9   r&   r'   )r   )r   r    r%   r9   r&   r'   r   s          rE   
_nfres_cfgr    sD     #K

 
 
C JrD   0   h        c                 t    d|d         z  dz  }t          d          }t          | |dddd	|d
d|
  
        }|S )Ni   r   r  r,   rd_ratior"   r/   g      ?g      @Tse)
r   r    r#   r%   r+   r-   r.   r1   r&   r'   )rA   r   )r   r    r.   r'   r   s        rE   
_nfreg_cfgr$    s^    (2,&#-L$$$K
!  C JrD   r  r     r&     r,   r(   r   r#  c                     t          |d         |z            }||nt          d          }t          | |dd||d||||          }	|	S )Nr   r,   r!  r   r'  T)r   r    r#   r$   r%   r-   r2   r.   r9   r&   r'   )r=   rA   r   )
r   r    r%   r-   	feat_multr9   r&   r'   r.   r   s
             rE   
_nfnet_cfgr*    so     x|i/00L!,!8++dC>P>P>PK
!!  C JrD   c                     t          | |ddddddd|t          |d         dz            |dt          d          	          }|S )
Nr   r'  r,   Tr   r(   r#  r!  )r   r    r#   r$   r%   r-   r2   r3   r4   r6   r.   r9   r&   r'   )r   r=   rA   )r   r    r9   r6   r   s        rE   _dm_nfnet_cfgr,    se     "+,,#&&&  C  JrD   dm_nfnet_f0)r   ri      r{   )r   dm_nfnet_f1)ri   r      r.  dm_nfnet_f2)r{   r.     	   dm_nfnet_f3)r   r/      r0  dm_nfnet_f4)   
         dm_nfnet_f5)r.  r0  $   r2  dm_nfnet_f6)r      *      nfnet_f0nfnet_f1nfnet_f2nfnet_f3nfnet_f4nfnet_f5nfnet_f6nfnet_f7)r/      r  r5  nfnet_l0g      ?r  rv   r/   )r"  
rd_divisorr8   )r   r)  r%   r-   r'   r9   eca_nfnet_l0eca)r   r)  r%   r-   r&   r'   r9   eca_nfnet_l1ri   eca_nfnet_l2eca_nfnet_l3nf_regnet_b0)r   r{   r.  r.  nf_regnet_b1)ri   r   r   r   nf_regnet_b2)ri   r   r/   r/   )8   p      i  )r   r    nf_regnet_b3)ri   r7  r3  r3  )rT  r'     i  nf_regnet_b4)ri   r.     rZ  )r        ih  nf_regnet_b5)r{   r   r>  r>  )P      iP  i  nf_resnet26)ri   ri   ri   ri   nf_resnet50)r{   r   r.  r{   nf_resnet101)r{   r      r{   nf_seresnet26g      ?r!  )r   r&   r'   nf_seresnet50nf_seresnet101nf_ecaresnet26nf_ecaresnet50nf_ecaresnet101
test_nfnet)r   r   r   r   )r   r  `   r'  )r   r    r)  r%   r-   r'   r9   Fc                 j    t           |          }t          d          }t          t          | |f||d|S )NT)flatten_sequential)	model_cfgfeature_cfg)
model_cfgsrA   r   r   )variant
pretrainedr   rn  ro  s        rE   _create_normfreenetrs  i  sS    7#I$///K     rD   c                 4    | dddddt           t          ddd
|S )	Nr   r{      rv  r   r   ?bicubicz
stem.conv1zhead.fc)
urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr
   )rz  r   s     rE   _dcfgr  v  s5    =v)%.B")   rD   zdm_nfnet_f0.dm_in1kztimm/zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f0-604f9c3a.pth)r.  r.  )r{      r  )r{   r  r  rx  squash)	hf_hub_idrz  r|  r{  test_input_sizer}  	crop_modezdm_nfnet_f1.dm_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f1-fc540f82.pthrw  ru  )r{   @  r  gQ?zdm_nfnet_f2.dm_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f2-89875923.pth)r/   r/   )r{   `  r  gq=
ףp?zdm_nfnet_f3.dm_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f3-d74ab3aa.pth)r8  r8  )r{     r  gGz?zdm_nfnet_f4.dm_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f4-0ac5b10b.pth)r0  r0  )r{     r  )r{   r  r  g;On?zdm_nfnet_f5.dm_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f5-ecb20ab1.pth)   r  )r{      r  gI+?zdm_nfnet_f6.dm_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f6-e0f12116.pth)r>  r>  )r{     r  )r{   @  r  gd;O?)rz  r|  r{  r  )r:  r:  )r{     r  )r{   `  r  znfnet_l0.ra2_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nfnet_l0_ra2-45c6688d.pth)r{   r\  r\  )r  rz  r|  r{  r  test_crop_pctzeca_nfnet_l0.ra2_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecanfnet_l0_ra2-e3e9ac50.pthzeca_nfnet_l1.ra2_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecanfnet_l1_ra2-7dce93cd.pthzeca_nfnet_l2.ra3_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecanfnet_l2_ra3-da781a61.pth)rZ  rZ  )rz  r|  r{  r  r  r   )rz  r|  r{  r  r  znf_regnet_b1.ra2_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nf_regnet_b1_256_ra2-ad85cfef.pth)r  rz  r|  r{  r  r  )r{      r  )r{     r  )r3  r3  )r{     r  )rz  r  znf_resnet50.ra2_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nf_resnet50_ra2-9f236009.pth)r  rz  r|  r{  r  r}  r  )r,   r,   r,   gffffff?)r{      r  )r7  r7  )r  r  r  r}  r{  r|  )ri  ztest_nfnet.r160_in1kr  c                     t          dd| i|S )z NFNet-F0 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r-  rr  )r-  rs  rr  r   s     rE   r-  r-         NNNvNNNrD   c                     t          dd| i|S )z NFNet-F1 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r/  rr  )r/  r  r  s     rE   r/  r/    r  rD   c                     t          dd| i|S )z NFNet-F2 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r1  rr  )r1  r  r  s     rE   r1  r1    r  rD   c                     t          dd| i|S )z NFNet-F3 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r4  rr  )r4  r  r  s     rE   r4  r4    r  rD   c                     t          dd| i|S )z NFNet-F4 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r6  rr  )r6  r  r  s     rE   r6  r6    r  rD   c                     t          dd| i|S )z NFNet-F5 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r;  rr  )r;  r  r  s     rE   r;  r;    r  rD   c                     t          dd| i|S )z NFNet-F6 (DeepMind weight compatible)
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r=  rr  )r=  r  r  s     rE   r=  r=    r  rD   c                     t          dd| i|S )z NFNet-F0
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rA  rr  )rA  r  r  s     rE   rA  rA  (       KKjKFKKKrD   c                     t          dd| i|S )z NFNet-F1
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rB  rr  )rB  r  r  s     rE   rB  rB  1  r  rD   c                     t          dd| i|S )z NFNet-F2
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rC  rr  )rC  r  r  s     rE   rC  rC  :  r  rD   c                     t          dd| i|S )z NFNet-F3
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rD  rr  )rD  r  r  s     rE   rD  rD  C  r  rD   c                     t          dd| i|S )z NFNet-F4
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rE  rr  )rE  r  r  s     rE   rE  rE  L  r  rD   c                     t          dd| i|S )z NFNet-F5
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rF  rr  )rF  r  r  s     rE   rF  rF  U  r  rD   c                     t          dd| i|S )z NFNet-F6
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rG  rr  )rG  r  r  s     rE   rG  rG  ^  r  rD   c                     t          dd| i|S )z NFNet-F7
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    rH  rr  )rH  r  r  s     rE   rH  rH  g  r  rD   c                     t          dd| i|S )z NFNet-L0b w/ SiLU
    My experimental 'light' model w/ F0 repeats, 1.5x final_conv mult, 64 group_size, .25 bottleneck & SE ratio
    rJ  rr  )rJ  r  r  s     rE   rJ  rJ  p  s    
 KKjKFKKKrD   c                     t          dd| i|S )z ECA-NFNet-L0 w/ SiLU
    My experimental 'light' model w/ F0 repeats, 1.5x final_conv mult, 64 group_size, .25 bottleneck & ECA attn
    rL  rr  )rL  r  r  s     rE   rL  rL  x      
 OO*OOOOrD   c                     t          dd| i|S )z ECA-NFNet-L1 w/ SiLU
    My experimental 'light' model w/ F1 repeats, 2.0x final_conv mult, 64 group_size, .25 bottleneck & ECA attn
    rN  rr  )rN  r  r  s     rE   rN  rN    r  rD   c                     t          dd| i|S )z ECA-NFNet-L2 w/ SiLU
    My experimental 'light' model w/ F2 repeats, 2.0x final_conv mult, 64 group_size, .25 bottleneck & ECA attn
    rO  rr  )rO  r  r  s     rE   rO  rO    r  rD   c                     t          dd| i|S )z ECA-NFNet-L3 w/ SiLU
    My experimental 'light' model w/ F3 repeats, 2.0x final_conv mult, 64 group_size, .25 bottleneck & ECA attn
    rP  rr  )rP  r  r  s     rE   rP  rP    r  rD   c                     t          dd| i|S )z Normalization-Free RegNet-B0
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    rQ  rr  )rQ  r  r  s     rE   rQ  rQ         OO*OOOOrD   c                     t          dd| i|S )z Normalization-Free RegNet-B1
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    rR  rr  )rR  r  r  s     rE   rR  rR    r  rD   c                     t          dd| i|S )z Normalization-Free RegNet-B2
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    rS  rr  )rS  r  r  s     rE   rS  rS    r  rD   c                     t          dd| i|S )z Normalization-Free RegNet-B3
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    rW  rr  )rW  r  r  s     rE   rW  rW    r  rD   c                     t          dd| i|S )z Normalization-Free RegNet-B4
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    rY  rr  )rY  r  r  s     rE   rY  rY    r  rD   c                     t          dd| i|S )z Normalization-Free RegNet-B5
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    r]  rr  )r]  r  r  s     rE   r]  r]    r  rD   c                     t          dd| i|S )z Normalization-Free ResNet-26
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    r`  rr  )r`  r  r  s     rE   r`  r`    r  rD   c                     t          dd| i|S )z Normalization-Free ResNet-50
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    ra  rr  )ra  r  r  s     rE   ra  ra    r  rD   c                     t          dd| i|S )z Normalization-Free ResNet-101
    `Characterizing signal propagation to close the performance gap in unnormalized ResNets`
        - https://arxiv.org/abs/2101.08692
    rb  rr  )rb  r  r  s     rE   rb  rb    r  rD   c                     t          dd| i|S )z$ Normalization-Free SE-ResNet26
    rd  rr  )rd  r  r  s     rE   rd  rd         PP:PPPPrD   c                     t          dd| i|S )z$ Normalization-Free SE-ResNet50
    re  rr  )re  r  r  s     rE   re  re    r  rD   c                     t          dd| i|S )z% Normalization-Free SE-ResNet101
    rf  rr  )rf  r  r  s     rE   rf  rf         QQJQ&QQQrD   c                     t          dd| i|S )z% Normalization-Free ECA-ResNet26
    rg  rr  )rg  r  r  s     rE   rg  rg    r  rD   c                     t          dd| i|S )z% Normalization-Free ECA-ResNet50
    rh  rr  )rh  r  r  s     rE   rh  rh    r  rD   c                     t          dd| i|S )z& Normalization-Free ECA-ResNet101
    ri  rr  )ri  r  r  s     rE   ri  ri    s     RRZR6RRRrD   c                     t          dd| i|S )Nrj  rr  )rj  r  r  s     rE   rj  rj    s    MM
MfMMMrD   )r*   )r   NNT)r  NrH   NN)r  )r%  r'  r,   r(   r   r#  N)r%  r   TrC   r^   )r   )`r   collectionsr   dataclassesr   r   	functoolsr   typingr   r   r	   r   torch.nnrl   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   r   _builderr   _features_fxr   _manipulater   	_registryr   r   __all__r   r  rG   r?   r_   ra   ru   r=   r@   rB   r   rA   r   r   r  r$  r*  r,  rp  rs  r  default_cfgsr-  r/  r1  r4  r6  r;  r=  rA  rB  rC  rD  rE  rF  rG  rH  rJ  rL  rN  rO  rP  rQ  rR  rS  rW  rY  r]  r`  ra  rb  rd  re  rf  rg  rh  ri  rj  rC   rD   rE   <module>r     s   $ $ # # # # # * * * * * * * *       , , , , , , , , , ,        A A A A A A A A8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 * * * * * * 1 1 1 1 1 1 ' ' ' ' ' ' < < < < < < < <'
"        0E E E E Ery E E E E    ' ' ' ' 'BI ' ' '0 _ _ _ _ _BI _ _ _J )-(,#,: ,:,:,: ,: X&	,:
 H%,: ,: ,: ,: ,:` 		""	
			  &y y y y y") y y y| (   .   ( (   < (	   2 T > > >\2222> ]3333> ]3333	>
 ^4444> _5555> _5555> _5555> Z|,,,,> Z}----> Z}----> Z~....> Z////>  Z////!>" Z////#>$ Z////%>* ZsrD$1555I I I I+>0 srddff@ @ @ @1>6 btddff@ @ @ @7>< btddff@ @ @ @=>B rddff@ @ @ @C>N <0000O>P <0000Q>R <:MNNNNS>T <:MNNNNU>V ><OPPPPW>X ><OPPPPY>^ 
,////_>` 
,////a>b =1111c>f *LTtt]aObObObccccg>h *LTtt]aObObObcccci>j :]tQUQU_cQdQdQdeeeek>n :\eQUQUQWQWXXXXo>p :\eQUQUQWQWXXXXq>r JmSWSWSYSYZZZZs>v z&73STcgD$1555I I I Iw>
B
 
 
 
    %$ e&55{]M\^jrt t te&
 55{]M\`ltv v ve& 55{]M\`ltv v ve& 55{}m^bnvx x xe&" 55{}m^cowy y y#e&* 55{}m^cowy y y+e&2 55{}m^cowy y y3e&< &]M[ [ [=e&@ &]M[ [ [Ae&D &]M[ [ [Ee&H (}m] ] ]Ie&L (}m] ] ]Me&P (}m] ] ]Qe&T (}m] ] ]Ue&X (}m] ] ]Ye&^ x]Madf f f_e&f UU{]Madf f fge& e&n UU{]Madf f foe&v UU{}mcfh h hwe&~ EE}mcfh h he&F EE&]Mfqs s sGe&J UU A]M^ik k kKe&R EE&]Mfqs s sSe&V EE&]Mfqs s sWe&Z EE(}mhsu u u[e&^ EE(}mhsu u u_e&d 55RK888ee&f EE{]M\`mxz z zge&n EEb[999oe&r UUrk:::se&t UUrk:::ue&v ee{;;;we&z ee{;;;{e&| ee{;;;}e& e&~ u<<<!E/-6C C CCe& e& e& e eP O O{ O O O O O O{ O O O O O O{ O O O O O O{ O O O O O O{ O O O O O O{ O O O O O O{ O O O O L LK L L L L L LK L L L L L LK L L L L L LK L L L L L LK L L L L L LK L L L L L LK L L L L L LK L L L L L LK L L L L P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P O O{ O O O O O O{ O O O O P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q R R+ R R R R R R+ R R R R R R+ R R R R S S; S S S S N Nk N N N N N NrD   