U
    ¯Ê¹j}   ã                (   @   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(díe)dœdd„Z*G dd„ dej'ƒZ+eG dd„ dej'ƒƒZ,dîe-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'ƒZ3dïd2d3„Z4dðd5d6„Z5dñd=d>„Z6dòd?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�#Z8dódgdh„Z9dôdidj„Z:e#e:dkdldmdndodpdqdr�e:dkdsdtdudvdwdqdr�e:dkdxdydodzd{dqdr�e:dkd|d}dvd~ddqdr�e:dkd€d�d‚dƒd„dqdr�e:dkd…d†d~d‡dˆdqdr�e:dkd‰dŠd‹dŒd�dqdr�e:ddmdndodŽ�e:ddtdudvdŽ�e:ddydodzdŽ�e:dd}dvd~dŽ�e:dd�d‚dƒdŽ�e:dd†d~d‡dŽ�e:ddŠd‹dŒdŽ�e:dd�d�d‘dŽ�e:dkd’dtdud“dd”�e:dkd•dtdud“dd”�e:dkd–dydodvdd”�e:dkd—d}dvd‚dd”�e:dd˜dzd‹dd™�e:ddmdndodšd›�e:dkdœdydod“dšd��e:ddydždŸdšd›�e:dd d“dvdšd›�e:dd}dvd‚dšd›�e:dd�d‚d¡dšd›�e:ddšd¢�e:dkd£dydod“ddšd¤�e:ddšd¢�e:ddšd¢�e:ddšd¢�e:ddšd¢�e:ddšd¢�e:ddšd¢�e:ddšd¢�d¥œ#ƒZ;e$dõe3d¦œd§d¨„ƒZ<e$döe3d¦œd©dª„ƒZ=e$d÷e3d¦œd«d¬„ƒZ>e$døe3d¦œd­d®„ƒZ?e$dùe3d¦œd¯d°„ƒZ@e$dúe3d¦œd±d²„ƒZAe$dûe3d¦œd³d´„ƒZBe$düe3d¦œdµd¶„ƒZCe$dýe3d¦œd·d¸„ƒZDe$dþe3d¦œd¹dº„ƒZEe$dÿe3d¦œd»d¼„ƒZFe$�d e3d¦œd½d¾„ƒZGe$�de3d¦œd¿dÀ„ƒZHe$�de3d¦œdÁdÂ„ƒZIe$�de3d¦œdÃdÄ„ƒZJe$�de3d¦œdÅdÆ„ƒZKe$�de3d¦œdÇdÈ„ƒZLe$�de3d¦œdÉdÊ„ƒZMe$�de3d¦œdËdÌ„ƒZNe$�de3d¦œdÍdÎ„ƒZOe$�d	e3d¦œdÏdÐ„ƒZPe$�d
e3d¦œdÑdÒ„ƒZQe$�de3d¦œdÓdÔ„ƒZRe$�de3d¦œdÕdÖ„ƒZSe$�de3d¦œd×dØ„ƒZTe$�de3d¦œdÙdÚ„ƒZUe$�de3d¦œdÛdÜ„ƒZVe$�de3d¦œdÝdÞ„ƒZWe$�de3d¦œdßdà„ƒZXe$�de3d¦œdádâ„ƒZYe$�de3d¦œdãdä„ƒZZe$�de3d¦œdådæ„ƒZ[e$�de3d¦œdçdè„ƒZ\e$�de3d¦œdédê„ƒZ]e$�de3d¦œdë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                   @   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_paddinggñhãˆµøä>Ú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   úP/var/www/html/bwave/python/venv/lib/python3.8/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ržt||||||d�| _nd | _|ƒ | _|||dƒ| _	|dd�| _
|||d|||d�| _|�r|dd�| _|||dd||d�| _nd | _d | _|�r.|d k	�r.||ƒ| _nd | _|ƒ | _|||d|�rNdnd	d
�| _|�st|d k	�rt||ƒ| _nd | _|dk�rŒt|ƒnt ¡ | _|�r¬t 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 k	r(|  |¡}|  |¡}|  |  |¡¡}| jd k	r\|  |  |¡¡}| jd k	rv| j	|  |¡ }|  
|  |¡¡}| jd k	r | j	|  |¡ }|  |¡}| jd k	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ks$t‚d|k�r,d|krvd|ksBt‚|d |d	 |d |f}	d
}
d	}t |d ddd�}nHd|kr–d| 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 › �< |} qØn4d|k�rL|| |ddd�|d< n|| |ddd�|d< d|k�r‚t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   ÚAssertionErrorÚ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|Ž}|jtksDtd|j› d�ƒ‚|j	rNt
nt}	|jr|t|jt|j d�}
t|	|jd�}	n t|jƒ}
t|	t|j |jd�}	|jr¶tt|jƒf|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�rb|dk�rbdnd}||k�r†|dk�r†||9 }d}||9 }|dk�rœd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�r`d}||j%d 7 }|}|}�q²|  jt,||d|› �d�g7  _|t-j.|Ž g7 }�q@t-j.|Ž | _/|j0�r t|j|j0 |jƒ| _0|	|| j0dƒ| _1t,| j0|dd�| jd< n|| _0t- 2¡ | _1|
|j0dkd�| _3t4| j0||| jd�| _5|  6¡ D ]¤\}}d|k�r¦t7|t-j8ƒ�r¦|j9�rxt-j: ;|j<¡ nt-j: =|j<dd¡ |j>dk	�rât-j: ;|j>¡ n<t7|t-j?ƒ�r@t-j:j@|j<ddd� |j>dk	�r@t-j: ;|j>¡ �q@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).rE   )Úeps)rF   r    Nr   )r_   r7   c                 S   s   g | ]}|  ¡ ‘qS rA   )Útolist)Ú.0rS   rA   rA   rB   Ú
<listcomp>T  s     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_convéÿÿÿÿrP   )Z	pool_typerŸ   Úfcrg   g{®Gáz„?Zfan_inZlinear)ÚmodeZnonlinearity)ArH   rI   r›   rŸ   Úgrad_checkpointingr   r7   Ú_nonlin_gammarˆ   r2   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_Ú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 k	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ÚinterpolationZ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®Gázî?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;ßO�—nî?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-dnf-weights/dm_nfnet_f5-ecb20ab1.pth)é   r+  )rj   é   r,  gºI+‡î?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   Ú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>   s\  ,e    úú0ñ >     ú

       ø
   ü
   
 þ     þ     þ     þ     þ



Ç=

    ý    ý    ý    ý    ý    ý    ý   ÿ   ÿ   ÿ   ÿ   ÿ   ÿ   ÿ   ÿ   ý   ý   ý   ý   þ    ÿ   ý    ÿ    ÿ    ÿ    ÿ
    ý






¡c