a
    d}                  (   @   st  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 dZ&G dd dej'Z(de)dddZ*G dd dej'Z+eG dd dej'Z,de-e-e.ee	 ee	 e/dddZ0e1dd d!d"d#d$d%d&d'd(d)d*d+d,d-d.Z2G d/d dej'Z3dd2d3Z4dd5d6Z5dd=d>Z6dd?d@Z7e1e7dAdBe7dCdBe7dDdBe7dEdBe7dFdBe7dGdBe7dHdBe6dAdBe6dCdBe6dDdBe6dEdBe6dFdBe6dGdBe6dHdBe6dIdBe6dAdJdKdLe1dLdMdNdOdPe6dAdJdKdLdQe1 dOdRe6dCdSdKdLdQe1 dOdRe6dDdSdKdLdQe1 dOdRe6dEdSdKdLdQe1 dOdRe5dTdBe5dUdBe5dVdWdXe5dYdZdXe5d[d\dXe5d]d^dXe4d_dBe4d`dBe4dadBe4d_d<e1dbdcdde4d`d<e1dbdcdde4dad<e1dbdcdde4d_dQe1 dde4d`dQe1 dde4dadQe1 ddde#Z8ddgdhZ9ddidjZ:e#e:dkdldmdndodpdqdre:dkdsdtdudvdwdqdre:dkdxdydodzd{dqdre:dkd|d}dvd~ddqdre:dkddddddqdre:dkddd~dddqdre:dkddddddqdre:ddmdndode:ddtdudvde:ddydodzde:dd}dvd~de:ddddde:ddd~dde:ddddde:ddddde:dkddtduddde:dkddtduddde:dkddydodvdde:dkdd}dvddde:dddzddde:ddmdndodde:dkddydoddde:ddydddde:ddddvdde:dd}dvddde:dddddde:ddde:dkddydodddde:ddde:ddde:ddde:ddde:ddde:ddde:dddd#Z;e$de3dddZ<e$de3dddZ=e$de3dddZ>e$de3dddZ?e$de3dddZ@e$de3dddZAe$de3dddZBe$de3dddZCe$de3dddZDe$de3dddZEe$de3dddZFe$d e3dddZGe$de3dddZHe$de3dddZIe$de3dddĄZJe$de3dddƄZKe$de3dddȄZLe$de3dddʄZMe$de3ddd̄ZNe$de3ddd΄ZOe$d	e3dddЄZPe$d
e3ddd҄ZQe$de3dddԄZRe$de3dddքZSe$de3ddd؄ZTe$de3dddڄZUe$de3ddd܄ZVe$de3dddބZWe$de3dddZXe$de3dddZYe$de3dddZZe$de3dddZ[e$de3dddZ\e$de3dddZ]e$de3ddd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                   @   s&  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,   r.   r/   boolr0   r1   r2   r3   r4   r5   r7    rA   rA   Z/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/nfnet.pyr   &   s*   
c                       s,   e Zd Zd	ed fddZdd Z  ZS )
GammaActrelur(   Fgammac                    s$   t    t|| _|| _|| _d S N)super__init__r   act_fnrF   inplace)selfact_typerF   rK   	__class__rA   rB   rI   @   s    

zGammaAct.__init__c                 C   s   | j || jd| jS )NrK   )rJ   rK   mul_rF   rL   xrA   rA   rB   forwardF   s    zGammaAct.forward)rD   r(   F)r8   r9   r:   r=   rI   rT   __classcell__rA   rA   rN   rB   rC   ?   s   rC   r(   rE   c                    s   d fdd	}|S )NFc                    s   t  | dS )N)rF   rK   )rC   rP   rM   rF   rA   rB   _createK   s    zact_with_gamma.<locals>._create)FrA   )rM   rF   rW   rA   rV   rB   act_with_gammaJ   s    rX   c                       sB   e Zd Zdddefeeeeee ed fddZdd Z  Z	S )DownsampleAvgr   N)in_chsout_chsstridedilationfirst_dilation
conv_layerc           	         s|   t t|   |dkr|nd}|dks.|dkr\|dkrB|dkrBtntj}|d|ddd| _n
t | _|||ddd| _dS )zF AvgPool Downsampling as in 'D' ResNet variants. Support for dilation.r      TF)Z	ceil_modeZcount_include_pad)r\   N)	rH   rY   rI   r   nnZ	AvgPool2dpoolIdentityconv)	rL   rZ   r[   r\   r]   r^   r_   Z
avg_strideZavg_pool_fnrN   rA   rB   rI   Q   s    

zDownsampleAvg.__init__c                 C   s   |  | |S rG   )rd   rb   rR   rA   rA   rB   rT   d   s    zDownsampleAvg.forward)
r8   r9   r:   r   r;   r   r   rI   rT   rU   rA   rA   rN   rB   rY   P   s   rY   c                       s   e Zd ZdZddddddddddddddded	feee eeee eeeee eeeeee	 eee	 e	ed
 fddZ
dd Z  ZS )NormFreeBlockz-Normalization-Free pre-activation block.
    Nr   r(         ?TFr&           )rZ   r[   r\   r]   r^   r   betar+   r#   r.   r/   r0   r4   r$   r'   r7   r_   drop_path_ratec                    s  t    |p|}|p|}t|r(|| n|| |
}|	s<dn||	 }|	r\|	|
 dkr\|	| }|| _|| _|| _||ks|dks||krt||||||d| _nd | _| | _|||d| _	|dd| _
|||d|||d| _|r|dd| _|||dd||d| _nd | _d | _|r.|d ur.||| _nd | _| | _|||d|rNdnd	d
| _|st|d urt||| _nd | _|dkrt|nt | _|rttd	nd | _d S )Nr   r   )r\   r]   r^   r_   TrP      )r\   r]   groupsr(   rg   )Z	gain_init)rH   rI   r   r   rh   r'   rY   
downsampleact1conv1act2conv2act2bconv2battnact3conv3	attn_lastr   ra   rc   	drop_path	ParametertorchZtensorskipinit_gain)rL   rZ   r[   r\   r]   r^   r   rh   r+   r#   r.   r/   r0   r4   r$   r'   r7   r_   ri   Zmid_chsrk   rN   rA   rB   rI   m   sN    

	zNormFreeBlock.__init__c                 C   s   |  || j }|}| jd ur(| |}| |}| | |}| jd ur\| | |}| jd urv| j	| | }| 
| |}| jd ur| j	| | }| |}| jd ur|| j || j | }|S rG   )rm   rh   rl   rn   rp   ro   rr   rq   rs   r'   ru   rt   rv   rw   rz   rQ   r   )rL   rS   outZshortcutrA   rA   rB   rT      s$    







zNormFreeBlock.forward)r8   r9   r:   __doc__r   r;   r   r=   r@   r   rI   rT   rU   rA   rA   rN   rB   re   h   sN   Dre    T)rZ   r[   r!   r_   r7   preact_featurec                 C   s  d}t |ddd}t }|dv s$J d|v r,d|v rvd|vsBJ |d |d	 |d |f}	d
}
d	}t |d ddd}nHd|v rd| d |d |f}	n|d |d |f}	d}
t |d ddd}t|	d }tt|	|
D ]P\}\}}|| |d|d|d|d  < ||kr$|dd|d|d  < |} qn4d|v rL|| |ddd|d< n|| |ddd|d< d|v rtjdddd|d< d	}t|||fS )Nr`   	stem.convZnum_chsZ	reductionmodule)	r}   deepZdeep_tiered	deep_quadr    Z7x7Z	deep_poolZ3x3_pool7x7_poolr   Zquadrb   r-      )r`   r   r   r`   z
stem.conv3Ztieredrj   )r`   r   r   z
stem.conv2r   )Zkernel_sizer\   rd   TrP   Zactr       )r\   padding)r?   r   len	enumeratezipra   Z	MaxPool2d
Sequential)rZ   r[   r!   r_   r7   r~   stem_strideZstem_featurestemr"   stridesZlast_idxicsrA   rA   rB   create_stem   s:    



r   g   `U?g   yX?g   \9?g   `aK?g   ?g    ?g    `l?g   `i?g   |?g    7@g   -?g   @g   `?g   ?)identityZceluZelugeluZ
leaky_reluZlog_sigmoidZlog_softmaxrD   Zrelu6ZseluZsigmoidr6   ZsoftsignZsoftplustanhc                	       s   e Zd ZdZdeeeeeeed fdd	Ze	j
jdddZe	j
jdddZe	j
jdd ZdddZdd ZdedddZdd Z  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.
      rj   avg    rg   )cfgnum_classesin_chansglobal_pooloutput_stride	drop_rateri   c                    s  t    || _|| _d| _t|fi |}|jtv sHJ d|j d|jrRt	nt
}	|jrt|jt|j d}
t|	|jd}	n t|j}
t|	t|j |jd}	|jrtt|jfi |jnd}t|jp|jd |j |j}t|||j|	|
d	\| _}}|g| _d
d td|t|j |jD }|}|}d}d}g }t!|jD ]j\}}|dkrj|dkrjdnd}||kr|dkr||9 }d}||9 }|dv rdnd}g }t"|j| D ]}|dko|dk}t|j| |j |j}|t#|||j$d|d  |dkr|nd|||j%|j&r(|r(dn|j'|j|j&|j(|j)||j*|
|	|| | dg7 }|dkrhd}||j$d 7 }|}|}q|  jt+||d| dg7  _|t,j-| g7 }qHt,j-| | _.|j/rt|j|j/ |j| _/|	|| j/d| _0t+| j/|dd| jd< n|| _/t,1 | _0|
|j/dkd| _2t3| j/||| jd| _4| 5 D ]\}}d|v rt6|t,j7r|j8rt,j9:|j; nt,j9<|j;dd |j=durt,j9:|j= n<t6|t,j>rHt,j9j?|j;ddd |j=durHt,j9:|j= qHd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).rE   )eps)rF   r   Nr   )r_   r7   c                 S   s   g | ]}|  qS rA   )tolist).0rS   rA   rA   rB   
<listcomp>T      z(NormFreeNet.__init__.<locals>.<listcomp>r   r(   r`   )r   r`   r*   )rZ   r[   r   rh   r\   r]   r^   r#   r+   r.   r/   r0   r4   r$   r'   r7   r_   ri   zstages.r   
final_convrP   )Z	pool_typer   fcrg   g{Gz?Zfan_inZlinear)modeZnonlinearity)@rH   rI   r   r   grad_checkpointingr   r7   _nonlin_gammar2   r   r   r1   rX   r   r3   r   r$   r   r%   r   r"   r   r)   r.   r   r!   r   Zfeature_infory   Zlinspacesumr   splitr   rangere   r   r#   r/   r+   r0   r4   r'   r?   ra   r   stagesr,   r   rc   	final_actr   headZnamed_modules
isinstanceZLinearr5   initZzeros_ZweightZnormal_ZbiasZConv2dZkaiming_normal_)rL   r   r   r   r   r   r   ri   kwargsr_   r7   r$   r"   r   Z	stem_featZdrop_path_ratesZprev_chsZ
net_strider]   Zexpected_varr   Z	stage_idxZstage_depthr\   r^   blocksZ	block_idxZfirst_blockr[   nmrN   rA   rB   rI   $  s    

"&



 
zNormFreeNet.__init__Fc                 C   s    t d|rdndd fdgd}|S )Nz^stemz^stages\.(\d+)z^stages\.(\d+)\.(\d+))z^final_conv)i )r   r   )r?   )rL   ZcoarseZmatcherrA   rA   rB   group_matcher  s    zNormFreeNet.group_matcherTc                 C   s
   || _ d S rG   )r   )rL   enablerA   rA   rB   set_grad_checkpointing  s    z"NormFreeNet.set_grad_checkpointingc                 C   s   | j jS rG   )r   r   )rL   rA   rA   rB   get_classifier  s    zNormFreeNet.get_classifierc                 C   s   | j || d S rG   )r   reset)rL   r   r   rA   rA   rB   reset_classifier  s    zNormFreeNet.reset_classifierc                 C   sJ   |  |}| jr(tj s(t| j|}n
| |}| |}| |}|S rG   )	r   r   ry   jitZis_scriptingr   r   r   r   rR   rA   rA   rB   forward_features  s    



zNormFreeNet.forward_features
pre_logitsc                 C   s   |r| j ||dS |  |S )Nr   )r   )rL   rS   r   rA   rA   rB   forward_head  s    zNormFreeNet.forward_headc                 C   s   |  |}| |}|S rG   )r   r   rR   rA   rA   rB   rT     s    

zNormFreeNet.forward)r   rj   r   r   rg   rg   )F)T)r   )F)r8   r9   r:   r|   r   r;   r>   r=   rI   ry   r   ignorer   r   r   r   r   r@   r   rT   rU   rA   rA   rN   rB   r     s4         |



      i   i   rD   c                 C   s&   |pi }t | |ddd||||d	}|S )Nr   @   rf   )	r   r   r!   r"   r+   r#   r7   r$   r%   )r   )r   r   r#   r7   r$   r%   r   rA   rA   rB   
_nfres_cfg  s    r   0   h        c                 C   s:   d|d  d }t dd}t| |d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,   r/   r$   r%   )r?   r   )r   r   r,   r%   r   rA   rA   rB   
_nfreg_cfg  s    
r   r   r      r      r*   r&   r   r   c           
      C   sH   t |d | }|d ur|ntdd}t| |dd||d||||d}	|	S )Nr   r*   r   r   r   T)r   r   r!   r"   r#   r+   r0   r,   r7   r$   r%   )r;   r?   r   )
r   r   r#   r+   	feat_multr7   r$   r%   r,   r   rA   rA   rB   
_nfnet_cfg  s     
r   c                 C   s:   t | |ddddddd|t|d d |dtddd	}|S )
Nr   r   r*   Tr   r&   r   r   )r   r   r!   r"   r#   r+   r0   r1   r2   r4   r,   r7   r$   r%   )r   r;   r?   )r   r   r7   r4   r   rA   rA   rB   _dm_nfnet_cfg  s"    r   )r   r`      rj   )r   )r`   r      r   )rj   r      	   )r   r-      r   )   
         )r   r   $   r   )r      *      )r-      r   r   g      ?r   rf   r-   )r   Z
rd_divisorr6   )r   r   r#   r+   r%   r7   Zeca)r   r   r#   r+   r$   r%   r7   r`   )r   rj   r   r   )r`   r   r   r   )r`   r   r-   r-   )8   p      i  )r   r   )r`   r   r   r   )r   r      i  )r`   r      r   )r         ih  )rj   r   r   r   )P      iP  i  )r`   r`   r`   r`   )rj   r   r   rj   )rj   r      rj   g      ?r   )r   r$   r%   )#dm_nfnet_f0dm_nfnet_f1dm_nfnet_f2dm_nfnet_f3dm_nfnet_f4dm_nfnet_f5dm_nfnet_f6nfnet_f0nfnet_f1nfnet_f2nfnet_f3nfnet_f4nfnet_f5nfnet_f6nfnet_f7nfnet_l0eca_nfnet_l0eca_nfnet_l1eca_nfnet_l2eca_nfnet_l3nf_regnet_b0nf_regnet_b1nf_regnet_b2nf_regnet_b3nf_regnet_b4nf_regnet_b5nf_resnet26nf_resnet50nf_resnet101nf_seresnet26nf_seresnet50nf_seresnet101nf_ecaresnet26nf_ecaresnet50nf_ecaresnet101Fc                 K   s,   t |  }tdd}tt| |f||d|S )NT)Zflatten_sequential)	model_cfgfeature_cfg)
model_cfgsr?   r   r   )variant
pretrainedr   r  r  rA   rA   rB   _create_normfreenetd  s    
r  c                 K   s   | dddddt tddd
|S )	Nr   rj      r  r   r   ?Zbicubicz
stem.conv1zhead.fc)
urlr   
input_size	pool_sizecrop_pctinterpolationmeanZstd
first_conv
classifierr	   )r  r   rA   rA   rB   _dcfgq  s    r#  ztimm/zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f0-604f9c3a.pth)r   r   )rj      r$  )rj   r   r   r  Zsquash)	hf_hub_idr  r  r  test_input_sizer  Z	crop_modezmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f1-fc540f82.pthr  r  )rj   @  r'  gQ?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f2-89875923.pth)r-   r-   )rj   `  r(  gq=
ףp?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f3-d74ab3aa.pth)r   r   )rj     r)  gGz?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f4-0ac5b10b.pth)r   r   )rj     r*  )rj   r   r   g;On?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f5-ecb20ab1.pth)   r+  )rj      r,  gI+?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f6-e0f12116.pth)r   r   )rj     r-  )rj   @  r.  gd;O?)r  r  r  r&  )r   r   )rj     r/  )rj   `  r0  zjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nfnet_l0_ra2-45c6688d.pth)rj   r   r   )r%  r  r  r  r&  test_crop_pctzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecanfnet_l0_ra2-e3e9ac50.pthzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecanfnet_l1_ra2-7dce93cd.pthzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecanfnet_l2_ra3-da781a61.pth)r   r   )r  r  r  r&  r1  r   )r  r  r  r&  r!  zrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nf_regnet_b1_256_ra2-ad85cfef.pth)r%  r  r  r  r&  r!  )rj      r2  )rj     r3  )r   r   )rj     r4  )r  r!  zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nf_resnet50_ra2-9f236009.pth)r%  r  r  r  r&  r  r!  )#zdm_nfnet_f0.dm_in1kzdm_nfnet_f1.dm_in1kzdm_nfnet_f2.dm_in1kzdm_nfnet_f3.dm_in1kzdm_nfnet_f4.dm_in1kzdm_nfnet_f5.dm_in1kzdm_nfnet_f6.dm_in1kr   r   r   r   r   r   r   r   znfnet_l0.ra2_in1kzeca_nfnet_l0.ra2_in1kzeca_nfnet_l1.ra2_in1kzeca_nfnet_l2.ra3_in1kr  r  znf_regnet_b1.ra2_in1kr  r  r  r  r  znf_resnet50.ra2_in1kr
  r  r  r  r  r  r  )returnc                 K   s   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   r  )r   r  r  r   rA   rA   rB   r     s    r   c                 K   s   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   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   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   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   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   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   t dd| i|S )z NFNet-F0
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r     s    r   c                 K   s   t dd| i|S )z NFNet-F1
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   '  s    r   c                 K   s   t dd| i|S )z NFNet-F2
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   0  s    r   c                 K   s   t dd| i|S )z NFNet-F3
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   9  s    r   c                 K   s   t dd| i|S )z NFNet-F4
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   B  s    r   c                 K   s   t dd| i|S )z NFNet-F5
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   K  s    r   c                 K   s   t dd| i|S )z NFNet-F6
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   T  s    r   c                 K   s   t dd| i|S )z NFNet-F7
    `High-Performance Large-Scale Image Recognition Without Normalization`
        - https://arxiv.org/abs/2102.06171
    r   r  )r   r6  r7  rA   rA   rB   r   ]  s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r   f  s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r   n  s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r   v  s    r   c                 K   s   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
    r   r  )r   r6  r7  rA   rA   rB   r   ~  s    r   c                 K   s   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
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   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
    r	  r  )r	  r6  r7  rA   rA   rB   r	    s    r	  c                 K   s   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
    r
  r  )r
  r6  r7  rA   rA   rB   r
    s    r
  c                 K   s   t dd| i|S )z$ Normalization-Free SE-ResNet26
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   t dd| i|S )z$ Normalization-Free SE-ResNet50
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   t dd| i|S )z% Normalization-Free SE-ResNet101
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   t dd| i|S )z% Normalization-Free ECA-ResNet26
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   t dd| i|S )z% Normalization-Free ECA-ResNet50
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  c                 K   s   t dd| i|S )z& Normalization-Free ECA-ResNet101
    r  r  )r  r6  r7  rA   rA   rB   r    s    r  )r(   )r}   NNT)r   NrD   NN)r   )r   r   r*   r&   r   r   N)r   r   T)F)r}   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)_r|   collectionsr   Zdataclassesr   r   	functoolsr   typingr   r   r   ry   Ztorch.nnra   Z	timm.datar
   r   Ztimm.layersr   r   r   r   r   r   r   r   r   Z_builderr   Z_features_fxr   Z_manipulater   	_registryr   r   __all__r   ModulerC   r=   rX   rY   re   r;   r>   r@   r   r?   r   r   r   r   r   r   r  r  r#  Zdefault_cfgsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  rA   rA   rA   rB   <module>   sp  ,e    0 >     

       
   




=






















c