a
    dԈ                  7   @   s  d Z ddlmZ ddlmZ ddlZddlmZ ddlm  m	Z
 ddlm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 d	d
lmZ d	dlmZ d	dlmZm Z  dgZ!G dd dej"Z#G dd dej"Z$G dd dej"Z%G dd dej"Z&G dd dej"Z'G dd dej"Z(G dd deZ)G dd deZ*G dd dejZ+G d d! d!ej"Z,G d"d# d#ej"Z-G d$d% d%ej"Z.G d&d' d'ej"Z/G d(d) d)ej"Z0G d*d dej"Z1d+d, Z2ded.d/Z3dfd1d2Z4ee4d3d4d5e4d3d4d5e4d3d4d5e4d3d6d5e4d3d6d5e4d3d7e4d3d7e4d3d7e4d3d7e4d3d7e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>e4d3d8d9e4d3d8d:d;d<e4d3d8d9e4d3d8d:d;d<e4d3d8d=d>d?2Z5e dge1d@dAdBZ6e dhe1d@dCdDZ7e die1d@dEdFZ8e dje1d@dGdHZ9e dke1d@dIdJZ:e dle1d@dKdLZ;e dme1d@dMdNZ<e dne1d@dOdPZ=e doe1d@dQdRZ>e dpe1d@dSdTZ?e dqe1d@dUdVZ@e dre1d@dWdXZAe dse1d@dYdZZBe dte1d@d[d\ZCe due1d@d]d^ZDe dve1d@d_d`ZEe dwe1d@dadbZFe dxe1d@dcddZGdS )ya  
Poolformer from MetaFormer is Actually What You Need for Vision https://arxiv.org/abs/2111.11418

IdentityFormer, RandFormer, PoolFormerV2, ConvFormer, and CAFormer
from MetaFormer Baselines for Vision https://arxiv.org/abs/2210.13452

All implemented models support feature extraction and variable input resolution.

Original implementation by Weihao Yu et al.,
adapted for timm by Fredo Guan and Ross Wightman.

Adapted from https://github.com/sail-sg/metaformer, original copyright below
    )OrderedDict)partialN)Tensor)FinalIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)trunc_normal_DropPathSelectAdaptivePool2d
GroupNorm1	LayerNormLayerNorm2dMlpuse_fused_attn   )build_model_with_cfg)checkpoint_seq)generate_default_cfgsregister_model
MetaFormerc                       s*   e Zd ZdZd fdd	Zdd Z  ZS )Stemzc
    Stem implemented by a layer of convolution.
    Conv2d params constant across all models.
    Nc                    s:   t    tj||dddd| _|r,||nt | _d S )N         kernel_sizestridepadding)super__init__nnConv2dconvIdentitynorm)selfin_channelsout_channels
norm_layer	__class__ _/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/metaformer.pyr    7   s    
zStem.__init__c                 C   s   |  |}| |}|S N)r#   r%   r&   xr,   r,   r-   forwardG   s    

zStem.forward)N__name__
__module____qualname____doc__r    r1   __classcell__r,   r,   r*   r-   r   1   s   	 r   c                       s*   e Zd ZdZd	 fdd	Zdd Z  ZS )
Downsamplingz=
    Downsampling implemented by a layer of convolution.
    r   r   Nc                    s:   t    |r||nt | _tj|||||d| _d S )Nr   )r   r    r!   r$   r%   r"   r#   )r&   r'   r(   r   r   r   r)   r*   r,   r-   r    R   s    	
zDownsampling.__init__c                 C   s   |  |}| |}|S r.   )r%   r#   r/   r,   r,   r-   r1   e   s    

zDownsampling.forward)r   r   Nr2   r,   r,   r*   r-   r8   M   s   	   r8   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )	Scalez2
    Scale vector by element multiplications.
          ?Tc                    s>   t    |r|ddfn|f| _tj|t| |d| _d S )Nr   Zrequires_grad)r   r    shaper!   	Parametertorchonesscale)r&   dim
init_valueZ	trainableuse_nchwr*   r,   r-   r    p   s    
zScale.__init__c                 C   s   || j | j S r.   )r@   viewr<   r/   r,   r,   r-   r1   u   s    zScale.forward)r:   TTr2   r,   r,   r*   r-   r9   k   s   r9   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )SquaredReLUz<
        Squared ReLU: https://arxiv.org/abs/2109.08668
    Fc                    s   t    tj|d| _d S )Ninplace)r   r    r!   ReLUrelu)r&   rG   r*   r,   r-   r    ~   s    
zSquaredReLU.__init__c                 C   s   t | |S r.   )r>   ZsquarerI   r/   r,   r,   r-   r1      s    zSquaredReLU.forward)Fr2   r,   r,   r*   r-   rE   y   s   rE   c                       s*   e Zd ZdZd fdd	Zd	d
 Z  ZS )StarReLUz(
    StarReLU: s * relu(x) ** 2 + b
    r:           TNFc                    sV   t    || _tj|d| _tj|td |d| _	tj|td |d| _
d S )NrF   r   r;   )r   r    rG   r!   rH   rI   r=   r>   r?   r@   bias)r&   Zscale_valueZ
bias_valueZscale_learnableZbias_learnablemoderG   r*   r,   r-   r       s
    	
zStarReLU.__init__c                 C   s   | j | |d  | j S )Nr   )r@   rI   rL   r/   r,   r,   r-   r1      s    zStarReLU.forward)r:   rK   TTNFr2   r,   r,   r*   r-   rJ      s         rJ   c                       s8   e Zd ZU dZee ed< d fdd	Zd	d
 Z  Z	S )	Attentionzl
    Vanilla self-attention from Transformer: https://arxiv.org/abs/1706.03762.
    Modified from timm.
    
fused_attn    NFrK   c           	         s   t    || _|d | _t | _|r*|n|| | _| jdkrDd| _| j| j | _tj	|| jd |d| _
t|| _tj	| j||d| _t|| _d S )Ng      r   r      rL   )r   r    head_dimr@   r   rO   	num_headsZattention_dimr!   LinearqkvDropout	attn_dropproj	proj_drop)	r&   rA   rS   rT   Zqkv_biasrX   rZ   Z	proj_biaskwargsr*   r,   r-   r       s    


zAttention.__init__c           
      C   s   |j \}}}| |||d| j| jddddd}|d\}}}| jrdtj	|||| j
jd}n4||dd | j }	|	jdd	}	| 
|	}	|	| }|dd|||}| |}| |}|S )
NrQ   r   r   r   r   )Z	dropout_p)rA   )r<   rV   reshaperT   rS   ZpermuteZunbindrO   FZscaled_dot_product_attentionrX   p	transposer@   ZsoftmaxrY   rZ   )
r&   r0   BNCrV   qkvZattnr,   r,   r-   r1      s     *


zAttention.forward)rP   NFrK   rK   F)
r3   r4   r5   r6   r   bool__annotations__r    r1   r7   r,   r,   r*   r-   rN      s   
      rN   c                       s   e Zd Z fddZ  ZS )GroupNorm1NoBiasc                    s,   t  j|fi | |dd| _d | _d S Nepsư>r   r    getrl   rL   r&   Znum_channelsr[   r*   r,   r-   r       s    zGroupNorm1NoBias.__init__r3   r4   r5   r    r7   r,   r,   r*   r-   rj      s   rj   c                       s   e Zd Z fddZ  ZS )LayerNorm2dNoBiasc                    s,   t  j|fi | |dd| _d | _d S rk   rn   rp   r*   r,   r-   r       s    zLayerNorm2dNoBias.__init__rq   r,   r,   r*   r-   rr      s   rr   c                       s   e Zd Z fddZ  ZS )LayerNormNoBiasc                    s,   t  j|fi | |dd| _d | _d S rk   rn   rp   r*   r,   r-   r       s    zLayerNormNoBias.__init__rq   r,   r,   r*   r-   rs      s   rs   c                       s8   e Zd ZdZdeejdddf fdd	Zdd	 Z  Z	S )
SepConvz\
    Inverted separable convolution from MobileNetV2: https://arxiv.org/abs/1801.04381.
    r   Fr   rQ   c           
         sj   t    t|| }	tj||	d|d| _| | _tj|	|	|||	|d| _| | _tj|	|d|d| _	d S )Nr   )r   rL   )r   r   groupsrL   )
r   r    intr!   r"   pwconv1act1dwconvact2pwconv2)
r&   rA   Zexpansion_ratioZ
act1_layerZ
act2_layerrL   r   r   r[   Zmid_channelsr*   r,   r-   r       s    
zSepConv.__init__c                 C   s6   |  |}| |}| |}| |}| |}|S r.   )rw   rx   ry   rz   r{   r/   r,   r,   r-   r1   	  s    




zSepConv.forward)
r3   r4   r5   r6   rJ   r!   r$   r    r1   r7   r,   r,   r*   r-   rt      s   rt   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )PoolingzT
    Implementation of pooling for PoolFormer: https://arxiv.org/abs/2111.11418
    rQ   c                    s&   t    tj|d|d dd| _d S )Nr   r   F)r   r   Zcount_include_pad)r   r    r!   Z	AvgPool2dpool)r&   	pool_sizer[   r*   r,   r-   r      s    
zPooling.__init__c                 C   s   |  |}|| S r.   )r}   )r&   r0   yr,   r,   r-   r1     s    
zPooling.forward)rQ   r2   r,   r,   r*   r-   r|     s   r|   c                       s6   e Zd ZdZddeeddf fdd	Zdd	 Z  ZS )
MlpHeadz MLP classification head
      r   rK   Tc           	         s\   t    t|| }tj|||d| _| | _||| _tj|||d| _t	|| _
d S )NrR   )r   r    rv   r!   rU   fc1actr%   fc2rW   	head_drop)	r&   rA   num_classesZ	mlp_ratio	act_layerr)   	drop_raterL   Zhidden_featuresr*   r,   r-   r    %  s    


zMlpHead.__init__c                 C   s6   |  |}| |}| |}| |}| |}|S r.   )r   r   r%   r   r   r/   r,   r,   r-   r1   7  s    




zMlpHead.forward)	r3   r4   r5   r6   rE   r   r    r1   r7   r,   r,   r*   r-   r   !  s   r   c                	       s<   e Zd ZdZeededddddf	 fdd	Zdd	 Z  Z	S )
MetaFormerBlockz1
    Implementation of one MetaFormer block.
    FrK   TNc                    s
  t    tt||	|d}tt||
|d}||| _|f ||d|| _|dkrZt|nt | _	|	d urr| nt | _
|
d ur| nt | _||| _t|td| ||||d| _|dkrt|nt | _|	d ur| nt | _|
d ur| nt | _d S )N)rA   rB   rC   )rA   rZ   rK   r   )r   rL   dropZuse_conv)r   r    r   r9   norm1token_mixerr
   r!   r$   
drop_path1layer_scale1
res_scale1norm2r   rv   mlp
drop_path2layer_scale2
res_scale2)r&   rA   r   mlp_actmlp_biasr)   rZ   	drop_pathrC   layer_scale_init_valueres_scale_init_valuer[   Zls_layerZrs_layerr*   r,   r-   r    E  s(    



zMetaFormerBlock.__init__c              
   C   sP   |  || | | | | }| || | | | 	| }|S r.   )
r   r   r   r   r   r   r   r   r   r   r/   r,   r,   r-   r1   j  s    zMetaFormerBlock.forward)
r3   r4   r5   r6   r|   rJ   r   r    r1   r7   r,   r,   r*   r-   r   @  s   %r   c                
       sZ   e Zd Zdejedeeddgd ddf
 fdd	Zej	j
ddd	Zed
ddZ  ZS )MetaFormerStager   FrK   Nc                    sz   t    d	_t
t 	_|kr.t nt|ddd|d	_	tj
 	
fddt|D  	_d S )NFrQ   r   r   )r   r   r   r)   c                    s6   g | ].}t f 
 | 	jd 
qS ))
rA   r   r   r   r)   rZ   r   r   r   rC   )r   rC   ).0idp_ratesr[   r   r   r   r)   out_chsrZ   r   r&   r   r,   r-   
<listcomp>  s   z,MetaFormerStage.__init__.<locals>.<listcomp>)r   r    grad_checkpointing
issubclassrN   rC   r!   r$   r8   
downsample
Sequentialrangeblocks)r&   Zin_chsr   depthr   r   r   downsample_normr)   rZ   r   r   r   r[   r*   r   r-   r    |  s    
	"zMetaFormerStage.__init__Tc                 C   s
   || _ d S r.   )r   )r&   enabler,   r,   r-   set_grad_checkpointing  s    z&MetaFormerStage.set_grad_checkpointingr0   c                 C   s~   |  |}|j\}}}}| js4|||ddd}| jrRtj sRt	| j
|}n
| 
|}| jsz|dd||||}|S )Nr]   r   r   )r   r<   rC   r^   ra   r   r>   jitis_scriptingr   r   )r&   r0   rb   rd   HWr,   r,   r-   r1     s    

zMetaFormerStage.forward)T)r3   r4   r5   r!   r$   rJ   r   r    r>   r   ignorer   r   r1   r7   r,   r,   r*   r-   r   z  s   -r   c                       s   e Zd ZdZdddddeeddddd	d
eeedf fdd	Zdd Z	e
jjdddZe
jjdd Zd ddZd!eedddZedddZedddZ  ZS )"r   aM   MetaFormer
        A PyTorch impl of : `MetaFormer Baselines for Vision`  -
          https://arxiv.org/abs/2210.13452

    Args:
        in_chans (int): Number of input image channels.
        num_classes (int): Number of classes for classification head.
        global_pool: Pooling for classifier head.
        depths (list or tuple): Number of blocks at each stage.
        dims (list or tuple): Feature dimension at each stage.
        token_mixers (list, tuple or token_fcn): Token mixer for each stage.
        mlp_act: Activation layer for MLP.
        mlp_bias (boolean): Enable or disable mlp bias term.
        drop_path_rate (float): Stochastic depth rate.
        drop_rate (float): Dropout rate.
        layer_scale_init_values (list, tuple, float or None): Init value for Layer Scale.
            None means not use the layer scale. Form: https://arxiv.org/abs/2103.17239.
        res_scale_init_values (list, tuple, float or None): Init value for res Scale on residual connections.
            None means not use the res scale. From: https://arxiv.org/abs/2110.09456.
        downsample_norm (nn.Module): Norm layer used in stem and downsampling layers.
        norm_layers (list, tuple or norm_fcn): Norm layers for each stage.
        output_norm: Norm layer before classifier head.
        use_mlp_head: Use MLP classification head.
    rQ   r   avgr   r      r   @      i@     FrK   N)NNr:   r:   Tc                    sT  t    || _|d | _|| _|| _t|| _t|t	t
fsD|g}t|t	t
fsX|g}t|t	t
fsr|g| j }t|t	t
fs|g| j }t|t	t
fs|g| j }t|t	t
fs|g| j }d| _g | _t||d |d| _g }|d }dd td|	t||D }t| jD ]|}|t||| f|| || |||
|| || || ||| d
|g7 }|| }|  jt|| dd	| d
g7  _qtj| | _|dkr| jrt| j|| jd}nt| j|}nt }ttdt|dfd|| jfd|rtdnt fd| jr,t|nt fd|fg| _ | !| j" d S )Nr]   Fr   )r)   c                 S   s   g | ]}|  qS r,   )tolist)r   r0   r,   r,   r-   r         z'MetaFormer.__init__.<locals>.<listcomp>)
r   r   r   r   rZ   r   r   r   r   r)   r   zstages.)Znum_chsZ	reductionmoduler   global_poolZ	pool_typer%   flattenr   r   fc)#r   r    r   num_featuresr   use_mlp_headlenZ
num_stages
isinstancelisttupler   Zfeature_infor   stemr>   Zlinspacesumsplitr   r   dictr!   r   stagesr   rU   r$   r   r   FlattenrW   headapply_init_weights)r&   Zin_chansr   r   depthsdimstoken_mixersr   r   Zdrop_path_rateZproj_drop_rater   layer_scale_init_valuesres_scale_init_valuesr   norm_layersZoutput_normr   r[   r   Zprev_dimr   r   finalr*   r,   r-   r      s|    


"
(

zMetaFormer.__init__c                 C   s>   t |tjtjfr:t|jdd |jd ur:tj|jd d S )Ng{Gz?)stdr   )	r   r!   r"   rU   r	   ZweightrL   initZ	constant_)r&   mr,   r,   r-   r   7  s    
zMetaFormer._init_weightsc                 C   s"   || _ | jD ]}|j|d qd S )N)r   )r   r   r   )r&   r   Zstager,   r,   r-   r   =  s    
z!MetaFormer.set_grad_checkpointingc                 C   s   | j jS r.   )r   r   )r&   r,   r,   r-   get_classifierC  s    zMetaFormer.get_classifierr   c                 C   sv   |d ur0t |d| j_|r$tdnt | j_|dkrb| jrRt| j	|| j
d}qjt| j	|}nt }|| j_d S )Nr   r   r   r   )r   r   r   r!   r   r$   r   r   r   r   r   rU   r   )r&   r   r   r   r,   r,   r-   reset_classifierG  s    zMetaFormer.reset_classifier)r0   
pre_logitsc                 C   sD   | j |}| j |}| j |}| j |}|r8|S | j |S r.   )r   r   r%   r   r   r   )r&   r0   r   r,   r,   r-   forward_headT  s
    zMetaFormer.forward_headr   c                 C   s6   |  |}| jr(tj s(t| j|}n
| |}|S r.   )r   r   r>   r   r   r   r   r/   r,   r,   r-   forward_features\  s
    

zMetaFormer.forward_featuresc                 C   s   |  |}| |}|S r.   )r   r   r/   r,   r,   r-   r1   d  s    

zMetaFormer.forward)T)r   N)F)r3   r4   r5   r6   r|   rJ   rr   r   r    r   r>   r   r   r   r   r   r   rh   r   r   r1   r7   r,   r,   r*   r-   r     s8   ^

c                 C   sd  d| v r| S dd l }i }d| v }| }|  D ],\}}|r|dd|}|dd}|dd	}|d
d}|dd}|dd}|dd}|dd}|dd|}|dd}|dd}|dd|}|dd}|dd}|dd}|dd}|dd |}|d!d"|}|j|| krV| ||  krV||| j}|||< q0|S )#Nzstem.conv.weightr   znetwork.0.0.mlp.fc1.weightzlayer_scale_([0-9]+)zlayer_scale\1.scalez	network.1zdownsample_layers.1z	network.3zdownsample_layers.2z	network.5zdownsample_layers.3z	network.2z	network.4z	network.6networkr   zdownsample_layers.([0-9]+)zstages.\1.downsamplezdownsample.projzdownsample.convzpatch_embed.projzpatch_embed.convz([0-9]+).([0-9]+)z\1.blocks.\2zstages.0.downsampleZpatch_embedr   Z	post_normr%   Zpre_normz^headhead.fcz^normz	head.norm)re
state_dictitemssubreplacer<   Znumelr^   )r   modelr   Zout_dictZis_poolformerv1Zmodel_state_dictrf   rg   r,   r,   r-   checkpoint_filter_fnk  s<    &
r   Fc                 K   sP   t dd t|ddD }|d|}tt| |fttd|dd|}|S )	Nc                 s   s   | ]\}}|V  qd S r.   r,   )r   r   _r,   r,   r-   	<genexpr>  r   z%_create_metaformer.<locals>.<genexpr>r   r   out_indicesT)Zflatten_sequentialr   )Zpretrained_filter_fnZfeature_cfg)r   	enumeratero   popr   r   r   r   )variant
pretrainedr[   Zdefault_out_indicesr   r   r,   r,   r-   _create_metaformer  s    
	r    c                 K   s   | dddddt tddd
|S )	Nr   )rQ      r   )r   r   r:   Zbicubicr   z	stem.conv)
urlr   
input_sizer~   crop_pctinterpolationmeanr   
classifierZ
first_convr   )r   r[   r,   r,   r-   _cfg  s    r   ztimm/g?)	hf_hub_idr   gffffff?)r   zhead.fc.fc2)r   r   )rQ     r   )   r   )r   r   r   r~   iQU  )r   r   r   )2zpoolformer_s12.sail_in1kzpoolformer_s24.sail_in1kzpoolformer_s36.sail_in1kzpoolformer_m36.sail_in1kzpoolformer_m48.sail_in1kzpoolformerv2_s12.sail_in1kzpoolformerv2_s24.sail_in1kzpoolformerv2_s36.sail_in1kzpoolformerv2_m36.sail_in1kzpoolformerv2_m48.sail_in1kzconvformer_s18.sail_in1kzconvformer_s18.sail_in1k_384z!convformer_s18.sail_in22k_ft_in1kz%convformer_s18.sail_in22k_ft_in1k_384zconvformer_s18.sail_in22kzconvformer_s36.sail_in1kzconvformer_s36.sail_in1k_384z!convformer_s36.sail_in22k_ft_in1kz%convformer_s36.sail_in22k_ft_in1k_384zconvformer_s36.sail_in22kzconvformer_m36.sail_in1kzconvformer_m36.sail_in1k_384z!convformer_m36.sail_in22k_ft_in1kz%convformer_m36.sail_in22k_ft_in1k_384zconvformer_m36.sail_in22kzconvformer_b36.sail_in1kzconvformer_b36.sail_in1k_384z!convformer_b36.sail_in22k_ft_in1kz%convformer_b36.sail_in22k_ft_in1k_384zconvformer_b36.sail_in22kzcaformer_s18.sail_in1kzcaformer_s18.sail_in1k_384zcaformer_s18.sail_in22k_ft_in1kz#caformer_s18.sail_in22k_ft_in1k_384zcaformer_s18.sail_in22kzcaformer_s36.sail_in1kzcaformer_s36.sail_in1k_384zcaformer_s36.sail_in22k_ft_in1kz#caformer_s36.sail_in22k_ft_in1k_384zcaformer_s36.sail_in22kzcaformer_m36.sail_in1kzcaformer_m36.sail_in1k_384zcaformer_m36.sail_in22k_ft_in1kz#caformer_m36.sail_in22k_ft_in1k_384zcaformer_m36.sail_in22kzcaformer_b36.sail_in1kzcaformer_b36.sail_in1k_384zcaformer_b36.sail_in22k_ft_in1kz#caformer_b36.sail_in22k_ft_in1k_384zcaformer_b36.sail_in22k)returnc                 K   s>   t f g dg dd tjdtdd dd	|}td	d| i|S )
Nr   r   Th㈵>F	r   r   r   r   r   r   r   r   r   poolformer_s12r   )r   r   r!   ZGELUr   r   r   r[   Zmodel_kwargsr,   r,   r-   r   D  s    
r   c                 K   s>   t f g dg dd tjdtdd dd	|}td	d| i|S )
Nr   r   r   r   r   Tr   Fr   poolformer_s24r   )r  r   r   r,   r,   r-   r  T  s    
r  c                 K   s>   t f g dg dd tjdtdd dd	|}td	d| i|S )
Nr   r      r   r   Trm   Fr   poolformer_s36r   )r  r   r   r,   r,   r-   r  d  s    
r  c                 K   s>   t f g dg dd tjdtdd dd	|}td	d| i|S )
Nr  `      r      Trm   Fr   poolformer_m36r   )r
  r   r   r,   r,   r-   r
  t  s    
r
  c                 K   s>   t f g dg dd tjdtdd dd	|}td	d| i|S )
N   r     r  r  Trm   Fr   poolformer_m48r   )r  r   r   r,   r,   r-   r    s    
r  c                 K   s2   t f g dg dtdd|}tdd| i|S )Nr   r   Fr   r   r   r   poolformerv2_s12r   )r  r   rj   r   r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dtdd|}tdd| i|S )Nr  r   Fr  poolformerv2_s24r   )r  r  r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dtdd|}tdd| i|S )Nr  r   Fr  poolformerv2_s36r   )r  r  r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dtdd|}tdd| i|S )Nr  r  Fr  poolformerv2_m36r   )r  r  r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dtdd|}tdd| i|S )Nr  r  Fr  poolformerv2_m48r   )r  r  r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dttd|}tdd| i|S )NrQ   rQ   	   rQ   r   r   r   r   r   convformer_s18r   )r  r   rt   rr   r   r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dttd|}tdd| i|S )NrQ   r   r  rQ   r   r  convformer_s36r   )r  r  r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dttd|}tdd| i|S )Nr  r  r  r   i@  r  convformer_m36r   )r  r  r   r,   r,   r-   r    s    r  c                 K   s2   t f g dg dttd|}tdd| i|S )Nr  r      r   r	  r  convformer_b36r   )r!  r  r   r,   r,   r-   r!    s    r!  c                 K   sJ   t f g dg dttttgtgd tgd  d|}tdd| i|S )Nr  r   r   r  caformer_s18r   )r"  r   rt   rN   rr   rs   r   r   r,   r,   r-   r"    s    
r"  c                 K   sJ   t f g dg dttttgtgd tgd  d|}tdd| i|S )Nr  r   r   r  caformer_s36r   )r$  r#  r   r,   r,   r-   r$    s    
r$  c                 K   sJ   t f g dg dttttgtgd tgd  d|}tdd| i|S )Nr  r  r   r  caformer_m36r   )r%  r#  r   r,   r,   r-   r%    s    
r%  c                 K   sJ   t f g dg dttttgtgd tgd  d|}tdd| i|S )Nr  r  r   r  caformer_b36r   )r&  r#  r   r,   r,   r-   r&    s    
r&  )F)r   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)Hr6   collectionsr   	functoolsr   r>   Ztorch.nnr!   Ztorch.nn.functionalZ
functionalr_   r   Z	torch.jitr   Z	timm.datar   r   Ztimm.layersr	   r
   r   r   r   r   r   r   Z_builderr   Z_manipulater   	_registryr   r   __all__Moduler   r8   r9   rE   rJ   rN   rj   rr   rs   rt   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-   <module>   s  (<#:E -%

  











