a
    d                     @   s,  d Z ddlZddlmZmZmZmZ ddlZddlm	Z	 ddl
m	  mZ ddlm  mZ ddlmZmZ ddlmZmZmZmZmZmZmZ ddlmZ ddlmZ dd	lm Z m!Z!m"Z" d
gZ#ee$ee$e$f f Z%ee$e$f dddZ&eee$e$f ee$e$f ddd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-dd Z.dYddZ/dZd d!Z0e e0d"d#d$e0d"d%d&d'd(d)e0d"d*d$e0d"d+d&d'd(d)e0d"d,d$e0d"d-d$e0d"d.d$e0d"d/d$e0d"d0d$e0d"d1d$e0d"d2d3d4d5d6e0d"d7d3d4d5d6d8Z1e!d[e-d9d:d;Z2e!d\e-d9d<d=Z3e!d]e-d9d>d?Z4e!d^e-d9d@dAZ5e!d_e-d9dBdCZ6e!d`e-d9dDdEZ7e!dae-d9dFdGZ8e!dbe-d9dHdIZ9e!dce-d9dJdKZ:e!dde-d9dLdMZ;e!dee-d9dNdOZ<e!dfe-d9dPdQZ=e"e>dRdSdTdUdVdWdX dS )gaK   Swin Transformer V2
A PyTorch impl of : `Swin Transformer V2: Scaling Up Capacity and Resolution`
    - https://arxiv.org/abs/2111.09883

Code/weights from https://github.com/microsoft/Swin-Transformer, original copyright/license info below

Modifications and additions for timm hacked together by / Copyright 2022, Ross Wightman
    N)CallableOptionalTupleUnionIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)
PatchEmbedMlpDropPath	to_2tupletrunc_normal__assertClassifierHead   )build_model_with_cfg)register_notrace_function)generate_default_cfgsregister_modelregister_model_deprecationsSwinTransformerV2)window_sizec                 C   sj   | j \}}}}| |||d  |d ||d  |d |} | dddddd d|d |d |}|S )z
    Args:
        x: (B, H, W, C)
        window_size (int): window size

    Returns:
        windows: (num_windows*B, window_size, window_size, C)
    r   r               shapeviewpermute
contiguous)xr   BHWCwindows r(   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/swin_transformer_v2.pywindow_partition"   s    	,,r*   )r   img_sizec                 C   sf   |\}}| j d }| d||d  ||d  |d |d |}|dddddd d|||}|S )z
    Args:
        windows: (num_windows * B, window_size[0], window_size[1], C)
        window_size (Tuple[int, int]): Window size
        img_size (Tuple[int, int]): Image size

    Returns:
        x: (B, H, W, C)
    r   r   r   r   r   r   r   r   )r'   r   r+   r$   r%   r&   r"   r(   r(   r)   window_reverse1   s
    
,$r,   c                       sD   e Zd ZdZdddddgf fdd	Zdeej dd	d
Z  Z	S )WindowAttentiona   Window based multi-head self attention (W-MSA) module with relative position bias.
    It supports both of shifted and non-shifted window.

    Args:
        dim (int): Number of input channels.
        window_size (tuple[int]): The height and width of the window.
        num_heads (int): Number of attention heads.
        qkv_bias (bool, optional):  If True, add a learnable bias to query, key, value. Default: True
        attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0
        proj_drop (float, optional): Dropout ratio of output. Default: 0.0
        pretrained_window_size (tuple[int]): The height and width of the window in pre-training.
    T        r   c              
      s  t    || _|| _|| _|| _tt	dt
|ddf | _ttjddddtjddtjd|dd| _tj| jd	 d  | jd	 tjd
}tj| jd d  | jd tjd
}	tt||	gddd	 d	}
|d	 d	krL|
d d d d d d d	f  |d	 d   < |
d d d d d d df  |d d   < n\|
d d d d d d d	f  | jd	 d   < |
d d d d d d df  | jd d   < |
d9 }
t|
tt|
d  td }
| jd|
dd t| jd	 }t| jd }tt||g}t|d}|d d d d d f |d d d d d f  }|ddd	 }|d d d d d	f  | jd	 d 7  < |d d d d df  | jd d 7  < |d d d d d	f  d| jd  d 9  < |d}| jd|dd tj||d dd| _|rTtt|| _ | jdt|dd tt|| _!nd | _ d | _"d | _!t#|| _$t||| _%t#|| _&tj'dd| _(d S )N
   r   r   i   Tbias)ZinplaceFr   )Zdtype         ?relative_coords_table
persistentr   relative_position_indexr   k_biasdim))super__init__r:   r   pretrained_window_size	num_headsnn	ParametertorchlogZoneslogit_scale
SequentialLinearZReLUcpb_mlpZarangefloat32stackZmeshgridr    r!   	unsqueezesignlog2absmathregister_bufferflattensumqkvzerosq_biasv_biasr8   ZDropout	attn_dropproj	proj_dropZSoftmaxsoftmax)selfr:   r   r>   qkv_biasrU   rW   r=   Zrelative_coords_hZrelative_coords_wr4   Zcoords_hZcoords_wZcoordsZcoords_flattenZrelative_coordsr7   	__class__r(   r)   r<   Q   sp    

"
$$,...,((,
zWindowAttention.__init__Nmaskc                 C   s  |j \}}}d}| jdur0t| j| j| jf}tj|| jj	|d}|
||d| jdddddd}|d\}}	}
tj|dd	tj|	dd	d
d }tj| jtdd }|| }| | jd| j}|| jd | jd | jd  | jd | jd  d}|ddd }dt| }||d }|dur|j d }|d|| j|||dd }|d| j||}| |}n
| |}| |}||
 dd
|||}| |}|  |}|S )z
        Args:
            x: input features with shape of (num_windows*B, N, C)
            mask: (0/-inf) mask with shape of (num_windows, Wh*Ww, Wh*Ww) or None
        N)inputweightr1   r   r   r   r   r   r   r9   g      Y@)max   )!r   rS   rA   catr8   rT   FZlinearrQ   r`   reshaper>   r    Zunbind	normalizeZ	transposeclamprC   rM   rB   exprF   r4   r   r7   r   r!   ZsigmoidrI   rX   rU   rV   rW   )rY   r"   r^   ZB_Nr&   rZ   rQ   qkvattnrC   relative_position_bias_tableZrelative_position_biasZnum_winr(   r(   r)   forward   s8    
"$&

$



zWindowAttention.forward)N)
__name__
__module____qualname____doc__r<   r   rA   ZTensorrp   __classcell__r(   r(   r[   r)   r-   C   s   Fr-   c                
       sp   e Zd ZdZdddddddejejdf
 fdd	Zeee	e	f ee	e	f f d	d
dZ
dd Zdd Z  ZS )SwinTransformerV2Blockz Swin Transformer Block.
       r         @Tr.   c              	      s  t    || _t|| _|| _| ||\}}|| _|| _| jd | jd  | _	|| _
t|t| j|||	|t|d| _||| _|
dkrt|
nt | _t|t|| ||d| _||| _|
dkrt|
nt | _t| jr| j\}}td||df}d}td| jd  t| jd  | jd  t| jd  dfD ]j}td| jd  t| jd  | jd  t| jd  dfD ]&}||dd||ddf< |d7 }qqDt|| j}|d| j	}|d|d }||dktd	|dktd}nd}| j d
|dd dS )a  
        Args:
            dim: Number of input channels.
            input_resolution: Input resolution.
            num_heads: Number of attention heads.
            window_size: Window size.
            shift_size: Shift size for SW-MSA.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            qkv_bias: If True, add a learnable bias to query, key, value.
            proj_drop: Dropout rate.
            attn_drop: Attention dropout rate.
            drop_path: Stochastic depth rate.
            act_layer: Activation layer.
            norm_layer: Normalization layer.
            pretrained_window_size: Window size in pretraining.
        r   r   )r   r>   rZ   rU   rW   r=   r.   )Zin_featuresZhidden_features	act_layerZdropNr   r   g      Y	attn_maskFr5   )!r;   r<   r:   r   input_resolutionr>   _calc_window_shiftr   
shift_sizewindow_area	mlp_ratior-   rn   norm1r   r?   Identity
drop_path1r
   intmlpnorm2
drop_path2anyrA   rR   slicer*   r   rI   Zmasked_fillfloatrN   )rY   r:   r{   r>   r   r}   r   rZ   rW   rU   	drop_pathry   
norm_layerr=   wsssr$   r%   Zimg_maskZcnthwZmask_windowsrz   r[   r(   r)   r<      s`     

	



&zSwinTransformerV2Block.__init__returnc                 C   sN   t |}t |}dd t| j|D }dd t| j||D }t|t|fS )Nc                 S   s    g | ]\}}||kr|n|qS r(   r(   ).0rr   r(   r(   r)   
<listcomp>      z=SwinTransformerV2Block._calc_window_shift.<locals>.<listcomp>c                 S   s"   g | ]\}}}||krd n|qS r   r(   )r   r   r   sr(   r(   r)   r      r   )r   zipr{   tuple)rY   Ztarget_window_sizeZtarget_shift_sizer   r}   r(   r(   r)   r|     s
    z)SwinTransformerV2Block._calc_window_shiftc           
      C   s   |j \}}}}t| j}|rBtj|| jd  | jd  fdd}n|}t|| j}|d| j|}| j	|| j
d}	|	d| jd | jd |}	t|	| j| j}|rtj|| jdd}n|}|S )Nr   r   )r   r   )Zshiftsdimsr   r]   )r   r   r}   rA   Zrollr*   r   r   r~   rn   rz   r,   r{   )
rY   r"   r#   r$   r%   r&   Z	has_shiftZ	shifted_xZ	x_windowsZattn_windowsr(   r(   r)   _attn#  s    
&zSwinTransformerV2Block._attnc                 C   sd   |j \}}}}|| | | | }||d|}|| | | | }|||||}|S )Nr   )r   r   r   r   rf   r   r   r   rY   r"   r#   r$   r%   r&   r(   r(   r)   rp   ?  s    zSwinTransformerV2Block.forward)rq   rr   rs   rt   r?   ZGELU	LayerNormr<   r   r   r|   r   rp   ru   r(   r(   r[   r)   rv      s   W&rv   c                       s0   e Zd ZdZdejf fdd	Zdd Z  ZS )PatchMergingz Patch Merging Layer.
    Nc                    sF   t    || _|pd| | _tjd| | jdd| _|| j| _dS )z
        Args:
            dim (int): Number of input channels.
            out_dim (int): Number of output channels (or 2 * dim if None)
            norm_layer (nn.Module, optional): Normalization layer.  Default: nn.LayerNorm
        r   r   Fr0   N)r;   r<   r:   out_dimr?   rE   	reductionnorm)rY   r:   r   r   r[   r(   r)   r<   L  s
    
zPatchMerging.__init__c                 C   s   |j \}}}}t|d dkd| d t|d dkd| d |||d d|d d|dddddd	d}| |}| |}|S )
Nr   r   z
x height (z) is not even.z	x width (r   r   r   r   )r   r   rf   r    rO   r   r   r   r(   r(   r)   rp   Y  s    2

zPatchMerging.forward)	rq   rr   rs   rt   r?   r   r<   rp   ru   r(   r(   r[   r)   r   H  s   r   c                	       sF   e Zd ZdZddddddejddf	 fdd	Zd	d
 Zdd Z  Z	S )SwinTransformerV2Stagez" A Swin Transformer V2 Stage.
    Frx   Tr.   r   c                    s   t    |	_|	_|r,tdd |D n|	_|	_|	_d	_|rZt	|d	_
n|ksfJ t 	_
t 	
fddt|D 	_dS )a  
        Args:
            dim: Number of input channels.
            input_resolution: Input resolution.
            depth: Number of blocks.
            num_heads: Number of attention heads.
            window_size: Local window size.
            downsample: Use downsample layer at start of the block.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            qkv_bias: If True, add a learnable bias to query, key, value.
            proj_drop: Projection dropout rate
            attn_drop: Attention dropout rate.
            drop_path: Stochastic depth rate.
            norm_layer: Normalization layer.
            pretrained_window_size: Local window size in pretraining.
            output_nchw: Output tensors on NCHW format instead of NHWC.
        c                 s   s   | ]}|d  V  qdS )r   Nr(   r   ir(   r(   r)   	<genexpr>  r   z2SwinTransformerV2Stage.__init__.<locals>.<genexpr>F)r:   r   r   c                    sT   g | ]L}t 	j
|d  dkr$dn
d   ttrD| ndqS )r   r   )r:   r{   r>   r   r}   r   rZ   rW   rU   r   r   r=   )rv   output_resolution
isinstancelistr   rU   r   r   r   r>   r   r=   rW   rZ   rY   r   r(   r)   r     s   z3SwinTransformerV2Stage.__init__.<locals>.<listcomp>N)r;   r<   r:   r{   r   r   depthoutput_nchwgrad_checkpointingr   
downsampler?   r   Z
ModuleListrangeblocks)rY   r:   r   r{   r   r>   r   r   r   rZ   rW   rU   r   r   r=   r   r[   r   r)   r<   g  s    #

"zSwinTransformerV2Stage.__init__c                 C   s@   |  |}| jD ]*}| jr2tj s2t||}q||}q|S N)r   r   r   rA   jitZis_scripting
checkpoint)rY   r"   blkr(   r(   r)   rp     s    


zSwinTransformerV2Stage.forwardc                 C   sX   | j D ]L}tj|jjd tj|jjd tj|jjd tj|jjd qd S )Nr   )r   r?   init	constant_r   r1   r`   r   )rY   r   r(   r(   r)   _init_respostnorm  s
    
z(SwinTransformerV2Stage._init_respostnorm)
rq   rr   rs   rt   r?   r   r<   rp   r   ru   r(   r(   r[   r)   r   c  s   D
r   c                       s   e Zd ZdZdddddddd	d
ddddddejdfeeeeeee	edf e	edf ee
ee
e
e
e
ee	edf d fddZdd Zejj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   z Swin Transformer V2

    A PyTorch impl of : `Swin Transformer V2: Scaling Up Capacity and Resolution`
        - https://arxiv.org/abs/2111.09883
       r   r     avg`   r   r      r   r   r         rw   rx   Tr.   g?)r   r   r   r   .)r+   
patch_sizein_chansnum_classesglobal_pool	embed_dimdepthsr>   r   r   rZ   	drop_rateproj_drop_rateattn_drop_ratedrop_path_rater   pretrained_window_sizesc                    s  t    || _|dv sJ || _d| _t|| _ | _t d| jd   | _	g | _
t ttfs| fddt| jD  t||| d |dd| _d	d td|t||D }g } d }d}t| jD ]} | }|t||| jjd | | jjd | f|| |dk|| |	|
||||| ||| d
g7 }|}|dkrN|d9 }|  j
t|d| d| dg7  _
qtj| | _|| j	| _t| j	|||| jd| _| | j | jD ]}|   qdS )a/  
        Args:
            img_size: Input image size.
            patch_size: Patch size.
            in_chans: Number of input image channels.
            num_classes: Number of classes for classification head.
            embed_dim: Patch embedding dimension.
            depths: Depth of each Swin Transformer stage (layer).
            num_heads: Number of attention heads in different layers.
            window_size: Window size.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            qkv_bias: If True, add a learnable bias to query, key, value.
            drop_rate: Head dropout rate.
            proj_drop_rate: Projection dropout rate.
            attn_drop_rate: Attention dropout rate.
            drop_path_rate: Stochastic depth rate.
            norm_layer: Normalization layer.
            patch_norm: If True, add normalization after patch embedding.
            pretrained_window_sizes: Pretrained window sizes of each layer.
            output_fmt: Output tensor format if not None, otherwise output 'NHWC' by default.
        ) r   ZNHWCr   r   c                    s   g | ]}t  d |  qS )r   )r   r   r   r(   r)   r     r   z.SwinTransformerV2.__init__.<locals>.<listcomp>r   )r+   r   r   r   r   
output_fmtc                 S   s   g | ]}|  qS r(   )tolist)r   r"   r(   r(   r)   r     r   )r:   r   r{   r   r   r>   r   r   rZ   rW   rU   r   r   r=   r   layers.)Znum_chsr   module)Z	pool_typer   Z	input_fmtN)!r;   r<   r   r   r   lenZ
num_layersr   r   Znum_featuresZfeature_infor   r   r   r   r	   patch_embedrA   ZlinspacerP   splitr   Z	grid_sizedictr?   rD   layersr   r   headapply_init_weightsr   )rY   r+   r   r   r   r   r   r   r>   r   r   rZ   r   r   r   r   r   r   kwargsZdprr   Zin_dimZscaler   r   Zblyr[   r   r)   r<     sv    *

	"

&
zSwinTransformerV2.__init__c                 C   sD   t |tjr@t|jdd t |tjr@|jd ur@tj|jd d S )Ng{Gz?)stdr   )r   r?   rE   r   r`   r1   r   r   )rY   mr(   r(   r)   r   1  s    zSwinTransformerV2._init_weightsc                    s<   t  }|  D ](\ }t fdddD r|  q|S )Nc                    s   g | ]}| v qS r(   r(   )r   kwnr(   r)   r   ;  r   z5SwinTransformerV2.no_weight_decay.<locals>.<listcomp>)rF   rC   ro   )setZnamed_modulesr   add)rY   Znodr   r(   r   r)   no_weight_decay7  s
    z!SwinTransformerV2.no_weight_decayFc                 C   s   t d|rdng ddS )Nz^absolute_pos_embed|patch_embedz^layers\.(\d+)))z^layers\.(\d+).downsampler   )z^layers\.(\d+)\.\w+\.(\d+)N)z^norm)i )stemr   )r   )rY   Zcoarser(   r(   r)   group_matcher?  s    zSwinTransformerV2.group_matcherc                 C   s   | j D ]
}||_qd S r   )r   r   )rY   enablelr(   r(   r)   set_grad_checkpointingJ  s    
z(SwinTransformerV2.set_grad_checkpointingc                 C   s   | j jS r   )r   Zfc)rY   r(   r(   r)   get_classifierO  s    z SwinTransformerV2.get_classifierNc                 C   s   || _ | j|| d S r   )r   r   reset)rY   r   r   r(   r(   r)   reset_classifierS  s    z"SwinTransformerV2.reset_classifierc                 C   s"   |  |}| |}| |}|S r   )r   r   r   rY   r"   r(   r(   r)   forward_featuresW  s    


z"SwinTransformerV2.forward_features
pre_logitsc                 C   s   |r| j |ddS |  |S )NTr   )r   )rY   r"   r   r(   r(   r)   forward_head]  s    zSwinTransformerV2.forward_headc                 C   s   |  |}| |}|S r   )r   r   r   r(   r(   r)   rp   `  s    

zSwinTransformerV2.forward)F)T)N)F)rq   rr   rs   rt   r?   r   _int_or_tuple_2_tr   strr   r   boolr   r<   r   rA   r   ignorer   r   r   r   r   r   r   rp   ru   r(   r(   r[   r)   r     sd   


m



c                    s   |  d| } |  d| } d| v }i }dd l}|  D ]J\ }t fdddD rTq4|sv|dd	d
    dd || < q4|S )Nmodel
state_dictzhead.fc.weightr   c                    s   g | ]}| v qS r(   r(   )r   r   rl   r(   r)   r   m  r   z(checkpoint_filter_fn.<locals>.<listcomp>)r7   r4   rz   zlayers.(\d+).downsamplec                 S   s   dt | dd  dS )Nr   r   z.downsample)r   group)r"   r(   r(   r)   <lambda>q  r   z&checkpoint_filter_fn.<locals>.<lambda>zhead.zhead.fc.)getreitemsr   subreplace)r   r   Znative_checkpointZout_dictr   rm   r(   r   r)   checkpoint_filter_fnf  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)   r   y  r   z._create_swin_transformer_v2.<locals>.<genexpr>r   )r   r   r   r   out_indicesT)Zflatten_sequentialr   )Zpretrained_filter_fnZfeature_cfg)r   	enumerater   popr   r   r   r   )variant
pretrainedr   Zdefault_out_indicesr   r   r(   r(   r)   _create_swin_transformer_v2x  s    
r  r   c                 K   s"   | ddddddt tddd	d
|S )Nr   )r      r  )r2   r2   g?ZbicubicTzpatch_embed.projzhead.fcZmit)urlr   
input_size	pool_sizecrop_pctinterpolationZfixed_input_sizemeanr   Z
first_conv
classifierlicenser   )r  r   r(   r(   r)   _cfg  s    r  ztimm/z{https://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_base_patch4_window12to16_192to256_22kto1k_ft.pth)	hf_hub_idr  z{https://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_base_patch4_window12to24_192to384_22kto1k_ft.pth)r     r  )r   r   r3   )r  r  r  r  r	  z|https://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_large_patch4_window12to16_192to256_22kto1k_ft.pthz|https://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_large_patch4_window12to24_192to384_22kto1k_ft.pthzfhttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_tiny_patch4_window8_256.pthzghttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_tiny_patch4_window16_256.pthzghttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_small_patch4_window8_256.pthzhhttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_small_patch4_window16_256.pthzfhttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_base_patch4_window8_256.pthzghttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_base_patch4_window16_256.pthzkhttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_base_patch4_window12_192_22k.pthiQU  )r      r  )r   r   )r  r  r   r  r  zlhttps://github.com/SwinTransformer/storage/releases/download/v2.0.0/swinv2_large_patch4_window12_192_22k.pth)2swinv2_base_window12to16_192to256.ms_in22k_ft_in1k2swinv2_base_window12to24_192to384.ms_in22k_ft_in1k3swinv2_large_window12to16_192to256.ms_in22k_ft_in1k3swinv2_large_window12to24_192to384.ms_in22k_ft_in1kzswinv2_tiny_window8_256.ms_in1kz swinv2_tiny_window16_256.ms_in1kz swinv2_small_window8_256.ms_in1kz!swinv2_small_window16_256.ms_in1kzswinv2_base_window8_256.ms_in1kz swinv2_base_window16_256.ms_in1k!swinv2_base_window12_192.ms_in22k"swinv2_large_window12_192.ms_in22kr   c                 K   s.   t ddddd}tdd| it |fi |S )	
    rc   r   r   r   r   r   r   r>   swinv2_tiny_window16_256r  )r  r   r  r  r   Z
model_argsr(   r(   r)   r    s     r  c                 K   s.   t ddddd}tdd| it |fi |S )	r  r2   r   r   r   r  swinv2_tiny_window8_256r  )r  r  r  r(   r(   r)   r    s     r  c                 K   s.   t ddddd}tdd| it |fi |S )	r  rc   r   r   r      r   r   r  swinv2_small_window16_256r  )r   r  r  r(   r(   r)   r     s     r   c                 K   s.   t ddddd}tdd| it |fi |S )	r  r2   r   r  r   r  swinv2_small_window8_256r  )r!  r  r  r(   r(   r)   r!    s     r!  c                 K   s.   t ddddd}tdd| it |fi |S )	r  rc      r  r   r2   rc       r  swinv2_base_window16_256r  )r%  r  r  r(   r(   r)   r%    s     r%  c                 K   s.   t ddddd}tdd| it |fi |S )	r  r2   r"  r  r#  r  swinv2_base_window8_256r  )r&  r  r  r(   r(   r)   r&    s     r&  c                 K   s.   t ddddd}tdd| it |fi |S )	r  r   r"  r  r#  r  swinv2_base_window12_192r  )r'  r  r  r(   r(   r)   r'    s     r'  c                 K   s0   t dddddd}td	d| it |fi |S )
r  rc   r"  r  r#  r   r   r   r   r   r   r   r>   r   !swinv2_base_window12to16_192to256r  )r*  r  r  r(   r(   r)   r*    s     r*  c                 K   s0   t dddddd}td	d| it |fi |S )
r  r   r"  r  r#  r(  r)  !swinv2_base_window12to24_192to384r  )r+  r  r  r(   r(   r)   r+    s     r+  c                 K   s.   t ddddd}tdd| it |fi |S )	r  r   r  r  r   r   r   0   r  swinv2_large_window12_192r  )r.  r  r  r(   r(   r)   r.    s     r.  c                 K   s0   t dddddd}td	d| it |fi |S )
r  rc   r  r  r,  r(  r)  "swinv2_large_window12to16_192to256r  )r/  r  r  r(   r(   r)   r/  '  s     r/  c                 K   s0   t dddddd}td	d| it |fi |S )
r  r   r  r  r,  r(  r)  "swinv2_large_window12to24_192to384r  )r0  r  r  r(   r(   r)   r0  2  s     r0  r  r  r  r  r  r  )Zswinv2_base_window12_192_22kZ)swinv2_base_window12to16_192to256_22kft1kZ)swinv2_base_window12to24_192to384_22kft1kZswinv2_large_window12_192_22kZ*swinv2_large_window12to16_192to256_22kft1kZ*swinv2_large_window12to24_192to384_22kft1k)F)r   )F)F)F)F)F)F)F)F)F)F)F)F)?rt   rM   typingr   r   r   r   rA   Ztorch.nnr?   Ztorch.nn.functionalZ
functionalre   Ztorch.utils.checkpointutilsr   Z	timm.datar   r   Ztimm.layersr	   r
   r   r   r   r   r   Z_builderr   Z_features_fxr   	_registryr   r   r   __all__r   r   r*   r,   Moduler-   rv   r   r   r   r   r  r  Zdefault_cfgsr  r  r   r!  r%  r&  r'  r*  r+  r.  r/  r0  rq   r(   r(   r(   r)   <module>   s   $"~ Z *

:



