U
    ­Ê¹j©™  ã                   @   sÐ  d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	m
  mZ d dlm
Z
mZ ddlmZm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mZ d
dlmZm Z  dddddddddddddgZ!ejejdœdd„Z"ej# $d¡ ejejee% ejdœdd „Z&ej# $d ¡ G d!d"„ d"e
j'ƒZ(G d#d$„ d$e
j'ƒZ)dGeeeeee% e%ee% e*e*ee ee eej e+ed'œd(d)„Z,ej# $d)¡ G d*d+„ d+e
j'ƒZ-G d,d-„ d-e-ƒZ.G d.d/„ d/e
j'ƒZ/G d0d1„ d1e/ƒZ0G d2d„ de
j'ƒZ1ee% e%ee% ee% ee% e*ee e+ee1d3œ
d4d5„Z2d6eiZ3G d7d„ deƒZ4G d8d„ deƒZ5G d9d„ deƒZ6G d:d„ deƒZ7G d;d„ deƒZ8G d<d„ deƒZ9eƒ e d=e4j:fd>�dd&d?œee4 e+ee1d@œdAd„ƒƒZ;eƒ e d=e5j:fd>�dd&d?œee5 e+ee1d@œdBd„ƒƒZ<eƒ e d=e6j:fd>�dd&d?œee6 e+ee1d@œdCd„ƒƒZ=eƒ e d=e7j:fd>�dd&d?œee7 e+ee1d@œdDd„ƒƒZ>eƒ e d=e8j:fd>�dd&d?œee8 e+ee1d@œdEd„ƒƒZ?eƒ e d=e9j:fd>�dd&d?œee9 e+ee1d@œdFd„ƒƒZ@dS )Hé    N)Úpartial)ÚAnyÚCallableÚListÚOptional)ÚnnÚTensoré   )ÚMLPÚPermute)ÚStochasticDepth)ÚImageClassificationÚInterpolationMode)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceÚSwinTransformerÚSwin_T_WeightsÚSwin_S_WeightsÚSwin_B_WeightsÚSwin_V2_T_WeightsÚSwin_V2_S_WeightsÚSwin_V2_B_WeightsÚswin_tÚswin_sÚswin_bÚ	swin_v2_tÚ	swin_v2_sÚ	swin_v2_b©ÚxÚreturnc              
   C   sÌ   | j dd … \}}}t | ddd|d d|d f¡} | ddd d…dd d…d d …f }| ddd d…dd d…d d …f }| ddd d…dd d…d d …f }| ddd d…dd d…d d …f }t ||||gd¡} | S )Néýÿÿÿr   r	   .r   éÿÿÿÿ)ÚshapeÚFÚpadÚtorchÚcat)r%   ÚHÚWÚ_Zx0Úx1Zx2Zx3© r2   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchvision/models/swin_transformer.pyÚ_patch_merging_pad#   s         r4   )Úrelative_position_bias_tableÚrelative_position_indexÚwindow_sizer&   c                 C   sB   |d |d  }| | }|  ||d¡}| ddd¡ ¡  d¡}|S )Nr   r   r(   r	   )ÚviewÚpermuteÚ
contiguousÚ	unsqueeze)r5   r6   r7   ÚNÚrelative_position_biasr2   r2   r3   Ú_get_relative_position_bias1   s
    r>   c                       sF   e Zd ZdZejfeedejf dœ‡ fdd„Z	e
dœdd„Z‡  ZS )	ÚPatchMergingzœPatch Merging Layer.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    .©ÚdimÚ
norm_layerc                    sD   t ƒ  ¡  t| ƒ || _tjd| d| dd�| _|d| ƒ| _d S ©Né   r	   F©Úbias©ÚsuperÚ__init__r   rA   r   ÚLinearÚ	reductionÚnorm©ÚselfrA   rB   ©Ú	__class__r2   r3   rI   E   s
    
zPatchMerging.__init__©r%   c                 C   s    t |ƒ}|  |¡}|  |¡}|S ©z«
        Args:
            x (Tensor): input tensor with expected layout of [..., H, W, C]
        Returns:
            Tensor with layout of [..., H/2, W/2, 2*C]
        )r4   rL   rK   ©rN   r%   r2   r2   r3   ÚforwardL   s    

zPatchMerging.forward©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú	LayerNormÚintr   ÚModulerI   r   rT   Ú__classcell__r2   r2   rO   r3   r?   >   s   $r?   c                       sF   e Zd ZdZejfeedejf dœ‡ fdd„Z	e
dœdd„Z‡  ZS )	ÚPatchMergingV2z´Patch Merging Layer for Swin Transformer V2.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    .r@   c                    sD   t ƒ  ¡  t| ƒ || _tjd| d| dd�| _|d| ƒ| _d S rC   rG   rM   rO   r2   r3   rI   `   s
    
zPatchMergingV2.__init__rQ   c                 C   s    t |ƒ}|  |¡}|  |¡}|S rR   )r4   rK   rL   rS   r2   r2   r3   rT   g   s    

zPatchMergingV2.forwardrU   r2   r2   rO   r3   r^   Y   s   $r^   ç        T)ÚinputÚ
qkv_weightÚproj_weightr=   r7   Ú	num_headsÚ
shift_sizeÚattention_dropoutÚdropoutÚqkv_biasÚ	proj_biasÚlogit_scaleÚtrainingr&   c           $   	   C   sè  | j \}}}}|d ||d   |d  }|d ||d   |d  }t | ddd|d|f¡}|j \}}}}| ¡ }|d |krˆd|d< |d |krœd|d< t|ƒdkrÈtj||d  |d  fdd�}||d  ||d   }| |||d  |d ||d  |d |¡}| dddddd¡ 	|| |d |d  |¡}|d	k	�rv|	d	k	�rv|	 
¡ }	|	 ¡ d }|	|d| …  ¡  t |||	¡}| 	| d¡| d¡d||| ¡ ddddd¡}|d |d |d   }}}|d	k	�r tj|d
d�tj|d
d� dd
¡ }tj|t d¡d� ¡ }|| }n"||| d  }| | dd
¡¡}|| }t|ƒdk�ræ| ||f¡}d|d  f|d  |d  f|d  d	ff}d|d  f|d  |d  f|d  d	ff} d}!|D ]>}"| D ]2}#|!||"d |"d …|#d |#d …f< |!d7 }!�qÒ�qÊ| ||d  |d ||d  |d ¡}| dddd¡ 	||d |d  ¡}| d¡| d¡ }| |dktdƒ¡ |dktdƒ¡}| | d¡| ||| d¡| d¡¡}|| d¡ d¡ }| d
|| d¡| d¡¡}tj|d
d�}tj|||d�}| |¡ dd¡ 	| d¡| d¡|¡}t |||
¡}tj|||d�}| |||d  ||d  |d |d |¡}| dddddd¡ 	||||¡}t|ƒdk�rÀtj||d |d fdd�}|d	d	…d	|…d	|…d	d	…f  ¡ }|S )a  
    Window based multi-head self attention (W-MSA) module with relative position bias.
    It supports both of shifted and non-shifted window.
    Args:
        input (Tensor[N, H, W, C]): The input tensor or 4-dimensions.
        qkv_weight (Tensor[in_dim, out_dim]): The weight tensor of query, key, value.
        proj_weight (Tensor[out_dim, out_dim]): The weight tensor of projection.
        relative_position_bias (Tensor): The learned relative position bias added to attention.
        window_size (List[int]): Window size.
        num_heads (int): Number of attention heads.
        shift_size (List[int]): Shift size for shifted window attention.
        attention_dropout (float): Dropout ratio of attention weight. Default: 0.0.
        dropout (float): Dropout ratio of output. Default: 0.0.
        qkv_bias (Tensor[out_dim], optional): The bias tensor of query, key, value. Default: None.
        proj_bias (Tensor[out_dim], optional): The bias tensor of projection. Default: None.
        logit_scale (Tensor[out_dim], optional): Logit scale of cosine attention for Swin Transformer V2. Default: None.
        training (bool, optional): Training flag used by the dropout parameters. Default: True.
    Returns:
        Tensor[N, H, W, C]: The output tensor after shifted window attention.
    r   r   )r   r	   )ZshiftsZdimsé   r	   rD   é   Nr(   )rA   éþÿÿÿg      Y@)Úmaxg      à¿g      YÀr_   )Úprj   )r)   r*   r+   ÚcopyÚsumr,   Zrollr8   r9   ZreshapeÚcloneÚnumelÚzero_ZlinearÚsizeÚ	normalizeZ	transposeÚclampÚmathÚlogÚexpÚmatmulZ	new_zerosr;   Zmasked_fillÚfloatZsoftmaxrf   r:   )$r`   ra   rb   r=   r7   rc   rd   re   rf   rg   rh   ri   rj   ÚBr.   r/   ÚCZpad_rZpad_br%   r0   Zpad_HZpad_WZnum_windowsÚlengthÚqkvÚqÚkÚvÚattnZ	attn_maskZh_slicesZw_slicesÚcountÚhÚwr2   r2   r3   Úshifted_window_attentiont   sp    # ,.0
$
..$($$((, $rˆ   c                
       sn   e Zd ZdZdeee ee eeeeedœ‡ fdd„Zdd„ Z	d	d
„ Z
ejdœdd„Zeedœdd„Z‡  ZS )ÚShiftedWindowAttentionz/
    See :func:`shifted_window_attention`.
    Tr_   ©rA   r7   rd   rc   rg   rh   re   rf   c	           	         s„   t ƒ  ¡  t|ƒdks"t|ƒdkr*tdƒ‚|| _|| _|| _|| _|| _t	j
||d |d�| _t	j
|||d�| _|  ¡  |  ¡  d S )Nr	   z.window_size and shift_size must be of length 2rk   rE   )rH   rI   ÚlenÚ
ValueErrorr7   rd   rc   re   rf   r   rJ   r€   ÚprojÚ#define_relative_position_bias_tableÚdefine_relative_position_index)	rN   rA   r7   rd   rc   rg   rh   re   rf   rO   r2   r3   rI   ï   s    
zShiftedWindowAttention.__init__c                 C   sL   t  t d| jd  d d| jd  d  | j¡¡| _t jj| jdd� d S )Nr	   r   r   ç{®Gáz”?©Zstd)	r   Ú	Parameterr,   Zzerosr7   rc   r5   ÚinitÚtrunc_normal_©rN   r2   r2   r3   rŽ   	  s    ,ÿz:ShiftedWindowAttention.define_relative_position_bias_tablec                 C   s  t  | jd ¡}t  | jd ¡}t  t j||dd�¡}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¡ ¡ }|  	d|¡ d S )Nr   r   Úij©Zindexingr	   r(   r6   )
r,   Úaranger7   ÚstackÚmeshgridÚflattenr9   r:   rq   Úregister_buffer)rN   Zcoords_hZcoords_wZcoordsZcoords_flattenZrelative_coordsr6   r2   r2   r3   r�     s    ,((,z5ShiftedWindowAttention.define_relative_position_index©r&   c                 C   s   t | j| j| jƒS ©N)r>   r5   r6   r7   r•   r2   r2   r3   Úget_relative_position_bias  s
      ÿz1ShiftedWindowAttention.get_relative_position_biasr$   c                 C   sD   |   ¡ }t|| jj| jj|| j| j| j| j| j	| jj
| jj
| jd�S )ú£
        Args:
            x (Tensor): Tensor with layout of [B, H, W, C]
        Returns:
            Tensor with same layout as input, i.e. [B, H, W, C]
        )rd   re   rf   rg   rh   rj   )rŸ   rˆ   r€   Úweightr�   r7   rc   rd   re   rf   rF   rj   ©rN   r%   r=   r2   r2   r3   rT   #  s    ôzShiftedWindowAttention.forward)TTr_   r_   )rV   rW   rX   rY   r[   r   Úboolr|   rI   rŽ   r�   r,   r   rŸ   rT   r]   r2   r2   rO   r3   r‰   ê   s&   
    ÷÷r‰   c                
       sd   e Zd ZdZdeee ee eeeeedœ‡ fdd„Zdd„ Z	e
jd	œd
d„Zedœdd„Z‡  ZS )ÚShiftedWindowAttentionV2z2
    See :func:`shifted_window_attention_v2`.
    Tr_   rŠ   c	           
   
      s    t ƒ j||||||||d� t t dt |ddf¡ ¡¡| _t tj	dddd�tj
dd�tj	d|d	d�¡| _|rœ| jj ¡ d
 }	| jj|	d|	 … j ¡  d S )N)rg   rh   re   rf   é
   r   r	   i   TrE   )ÚinplaceFrk   )rH   rI   r   r’   r,   ry   Zonesri   Ú
SequentialrJ   ZReLUÚcpb_mlpr€   rF   rs   Údatart   )
rN   rA   r7   rd   rc   rg   rh   re   rf   r   rO   r2   r3   rI   @  s&    ø" 
 ÿz!ShiftedWindowAttentionV2.__init__c                 C   s  t j| jd d  | jd t jd�}t j| jd d  | jd t jd�}t  t j||gdd�¡}| ddd¡ ¡  d¡}|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 ¡ d	 }|  d
|¡ d S )Nr   r   )Zdtyper–   r—   r	   é   g      ð?g      @Úrelative_coords_table)r,   r˜   r7   Zfloat32r™   rš   r9   r:   r;   ÚsignÚlog2Úabsrœ   )rN   Zrelative_coords_hZrelative_coords_wr«   r2   r2   r3   rŽ   _  s    $$.. ÿz<ShiftedWindowAttentionV2.define_relative_position_bias_tabler�   c                 C   s4   t |  | j¡ d| j¡| j| jƒ}dt |¡ }|S )Nr(   é   )	r>   r¨   r«   r8   rc   r6   r7   r,   Zsigmoid)rN   r=   r2   r2   r3   rŸ   o  s    ýz3ShiftedWindowAttentionV2.get_relative_position_biasrQ   c                 C   sH   |   ¡ }t|| jj| jj|| j| j| j| j| j	| jj
| jj
| j| jd�S )r    )rd   re   rf   rg   rh   ri   rj   )rŸ   rˆ   r€   r¡   r�   r7   rc   rd   re   rf   rF   ri   rj   r¢   r2   r2   r3   rT   x  s     óz ShiftedWindowAttentionV2.forward)TTr_   r_   )rV   rW   rX   rY   r[   r   r£   r|   rI   rŽ   r,   r   rŸ   rT   r]   r2   r2   rO   r3   r¤   ;  s$   
    ÷÷	r¤   c                       sr   e Zd ZdZddddejefeeee ee e	e	e	e	e
dejf e
dejf dœ
‡ fdd„Zedœd	d
„Z‡  ZS )ÚSwinTransformerBlocka¿  
    Swin Transformer Block.
    Args:
        dim (int): Number of input channels.
        num_heads (int): Number of attention heads.
        window_size (List[int]): Window size.
        shift_size (List[int]): Shift size for shifted window attention.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4.0.
        dropout (float): Dropout rate. Default: 0.0.
        attention_dropout (float): Attention dropout rate. Default: 0.0.
        stochastic_depth_prob: (float): Stochastic depth rate. Default: 0.0.
        norm_layer (nn.Module): Normalization layer.  Default: nn.LayerNorm.
        attn_layer (nn.Module): Attention layer. Default: ShiftedWindowAttention
    ç      @r_   .©
rA   rc   r7   rd   Ú	mlp_ratiorf   re   Ústochastic_depth_probrB   Ú
attn_layerc                    s´   t ƒ  ¡  t| ƒ |	|ƒ| _|
||||||d�| _t|dƒ| _|	|ƒ| _t|t	|| ƒ|gt
jd |d�| _| j ¡ D ]:}t|t
jƒrtt
j |j¡ |jd k	rtt
jj|jdd� qtd S )N)re   rf   Úrow)Zactivation_layerr¦   rf   g�íµ ÷Æ°>r‘   )rH   rI   r   Únorm1r„   r   Ústochastic_depthÚnorm2r
   r[   r   ZGELUÚmlpÚmodulesÚ
isinstancerJ   r“   Zxavier_uniform_r¡   rF   Znormal_)rN   rA   rc   r7   rd   r³   rf   re   r´   rB   rµ   ÚmrO   r2   r3   rI   ¡  s&    

ú
"
zSwinTransformerBlock.__init__rQ   c                 C   s8   ||   |  |  |¡¡¡ }||   |  |  |¡¡¡ }|S rž   )r¸   r„   r·   rº   r¹   rS   r2   r2   r3   rT   Ä  s    zSwinTransformerBlock.forward)rV   rW   rX   rY   r   rZ   r‰   r[   r   r|   r   r\   rI   r   rT   r]   r2   r2   rO   r3   r°   ‘  s(   õõ#r°   c                       sr   e Zd ZdZddddejefeeee ee e	e	e	e	e
dejf e
dejf dœ
‡ fdd„Zedœd	d
„Z‡  ZS )ÚSwinTransformerBlockV2aÅ  
    Swin Transformer V2 Block.
    Args:
        dim (int): Number of input channels.
        num_heads (int): Number of attention heads.
        window_size (List[int]): Window size.
        shift_size (List[int]): Shift size for shifted window attention.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4.0.
        dropout (float): Dropout rate. Default: 0.0.
        attention_dropout (float): Attention dropout rate. Default: 0.0.
        stochastic_depth_prob: (float): Stochastic depth rate. Default: 0.0.
        norm_layer (nn.Module): Normalization layer.  Default: nn.LayerNorm.
        attn_layer (nn.Module): Attention layer. Default: ShiftedWindowAttentionV2.
    r±   r_   .r²   c                    s$   t ƒ j|||||||||	|
d�
 d S )N)r³   rf   re   r´   rB   rµ   )rH   rI   )rN   rA   rc   r7   rd   r³   rf   re   r´   rB   rµ   rO   r2   r3   rI   Ú  s    özSwinTransformerBlockV2.__init__rQ   c                 C   s8   ||   |  |  |¡¡¡ }||   |  |  |¡¡¡ }|S rž   )r¸   r·   r„   r¹   rº   rS   r2   r2   r3   rT   ô  s    zSwinTransformerBlockV2.forward)rV   rW   rX   rY   r   rZ   r¤   r[   r   r|   r   r\   rI   r   rT   r]   r2   r2   rO   r3   r¾   Ê  s(   õõr¾   c                       sŽ   e Zd ZdZdddddddefee eee ee ee eeeeeee	de
jf  ee	de
jf  e	de
jf dœ‡ fd	d
„Zdd„ Z‡  ZS )r   a;  
    Implements Swin Transformer from the `"Swin Transformer: Hierarchical Vision Transformer using
    Shifted Windows" <https://arxiv.org/abs/2103.14030>`_ paper.
    Args:
        patch_size (List[int]): Patch size.
        embed_dim (int): Patch embedding dimension.
        depths (List(int)): Depth of each Swin Transformer layer.
        num_heads (List(int)): Number of attention heads in different layers.
        window_size (List[int]): Window size.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4.0.
        dropout (float): Dropout rate. Default: 0.0.
        attention_dropout (float): Attention dropout rate. Default: 0.0.
        stochastic_depth_prob (float): Stochastic depth rate. Default: 0.1.
        num_classes (int): Number of classes for classification head. Default: 1000.
        block (nn.Module, optional): SwinTransformer Block. Default: None.
        norm_layer (nn.Module, optional): Normalization layer. Default: None.
        downsample_layer (nn.Module): Downsample layer (patch merging). Default: PatchMerging.
    r±   r_   gš™™™™™¹?iè  N.)Ú
patch_sizeÚ	embed_dimÚdepthsrc   r7   r³   rf   re   r´   Únum_classesrB   ÚblockÚdownsample_layerc                    sö  t ƒ  ¡  t| ƒ |
| _|d kr$t}|d kr:ttjdd�}g }| t 	tj
d||d |d f|d |d fd�tddddgƒ||ƒ¡¡ t|ƒ}d}tt|ƒƒD ]¤}g }|d|  }t|| ƒD ]R‰ |	t|ƒ |d  }| |||| |‡ fdd	„|D ƒ|||||d
�	¡ |d7 }qÀ| tj	|Ž ¡ |t|ƒd k r | |||ƒ¡ q tj	|Ž | _|dt|ƒd   }||ƒ| _tddddgƒ| _t d¡| _t d¡| _t ||
¡| _|  ¡ D ]@}t|tjƒ�r°tjj|jdd� |jd k	�r°tj |j¡ �q°d S )Ngñhãˆµøä>)Úepsrk   r   r   )Zkernel_sizeZstrider	   c                    s$   g | ]}ˆ d  dkrdn|d  ‘qS )r	   r   r2   )Ú.0r‡   ©Zi_layerr2   r3   Ú
<listcomp>C  s     z,SwinTransformer.__init__.<locals>.<listcomp>)r7   rd   r³   rf   re   r´   rB   r�   r‘   ) rH   rI   r   rÂ   r°   r   r   rZ   Úappendr§   ZConv2dr   rq   Úranger‹   r|   ÚfeaturesrL   r9   ZAdaptiveAvgPool2dÚavgpoolZFlattenr›   rJ   Úheadr»   r¼   r“   r”   r¡   rF   Zzeros_)rN   r¿   rÀ   rÁ   rc   r7   r³   rf   re   r´   rÂ   rB   rÃ   rÄ   ZlayersZtotal_stage_blocksZstage_block_idZi_stageZstagerA   Zsd_probZnum_featuresr½   rO   rÇ   r3   rI     sp    
   ÿûÿ
÷ÿ

zSwinTransformer.__init__c                 C   s@   |   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|S rž   )rË   rL   r9   rÌ   r›   rÍ   rS   r2   r2   r3   rT   _  s    





zSwinTransformer.forward)rV   rW   rX   rY   r?   r   r[   r|   r   r   r   r\   rI   rT   r]   r2   r2   rO   r3   r   ü  s2   òòO)
r¿   rÀ   rÁ   rc   r7   r´   ÚweightsÚprogressÚkwargsr&   c           
   	   K   sZ   |d k	rt |dt|jd ƒƒ tf | |||||dœ|—Ž}	|d k	rV|	 |j|dd�¡ |	S )NrÂ   Ú
categories)r¿   rÀ   rÁ   rc   r7   r´   T)rÏ   Z
check_hash)r   r‹   Úmetar   Zload_state_dictZget_state_dict)
r¿   rÀ   rÁ   rc   r7   r´   rÎ   rÏ   rÐ   Úmodelr2   r2   r3   Ú_swin_transformeri  s    úù
rÔ   rÑ   c                   @   sJ   e Zd Zedeeddejd�eddddd	d
dœiddddœ–d�Z	e	Z
dS )r   z7https://download.pytorch.org/models/swin_t-704ceda3.pthéà   éè   ©Z	crop_sizeZresize_sizeÚinterpolationib¥¯©rÕ   rÕ   úUhttps://github.com/pytorch/vision/tree/main/references/classification#swintransformerúImageNet-1Kgu“V^T@g‹lçû©ñW@©zacc@1zacc@5gX9´Èö@g\�Âõ([@úYThese weights reproduce closely the results of the paper using a similar training recipe.©Z
num_paramsZmin_sizeZrecipeZ_metricsZ_opsÚ
_file_sizeZ_docs©ÚurlZ
transformsrÒ   N©rV   rW   rX   r   r   r   r   ZBICUBICÚ_COMMON_METAÚIMAGENET1K_V1ÚDEFAULTr2   r2   r2   r3   r   Œ  s.      ÿþÿóûc                   @   sJ   e Zd Zedeeddejd�eddddd	d
dœiddddœ–d�Z	e	Z
dS )r   z7https://download.pytorch.org/models/swin_s-5e29d889.pthrÕ   éö   r×   irîôrÙ   rÚ   rÛ   g�•C‹ÌT@g×£p=
X@rÜ   g¬Zd{!@gþÔxé&¹g@rÝ   rÞ   rà   Nrâ   r2   r2   r2   r3   r   ¥  s.      ÿþÿóûc                   @   sJ   e Zd Zedeeddejd�eddddd	d
dœiddddœ–d�Z	e	Z
dS )r   z7https://download.pytorch.org/models/swin_b-68c6b09e.pthrÕ   éî   r×   i <;rÙ   rÚ   rÛ   gh‘í|?åT@g)\�Âõ(X@rÜ   gé&1¬Ü.@gçû©ñÒõt@rÝ   rÞ   rà   Nrâ   r2   r2   r2   r3   r   ¾  s.      ÿþÿóûc                   @   sJ   e Zd Zedeeddejd�eddddd	d
dœiddddœ–d�Z	e	Z
dS )r   z:https://download.pytorch.org/models/swin_v2_t-b137f0e2.pthé   é  r×   iRœ°©rè   rè   úXhttps://github.com/pytorch/vision/tree/main/references/classification#swintransformer-v2rÛ   gøSã¥›„T@gœÄ °rX@rÜ   gÃõ(\�Â@gòÒMb([@rÝ   rÞ   rà   Nrâ   r2   r2   r2   r3   r   ×  s.      ÿþÿóûc                   @   sJ   e Zd Zedeeddejd�eddddd	d
dœiddddœ–d�Z	e	Z
dS )r   z:https://download.pytorch.org/models/swin_v2_s-637d8ceb.pthrè   ré   r×   iâîörê   rë   rÛ   g!°rh‘íT@gNbX94X@rÜ   gd;ßO�'@gš™™™™Õg@rÝ   rÞ   rà   Nrâ   r2   r2   r2   r3   r   ð  s.      ÿþÿóûc                   @   sJ   e Zd Zedeeddejd�eddddd	d
dœiddddœ–d�Z	e	Z
dS )r   z:https://download.pytorch.org/models/swin_v2_b-781e5279.pthrè   i  r×   ià·=rê   rë   rÛ   gºI+U@gžï§ÆK7X@rÜ   g33333S4@gË¡E¶óu@rÝ   rÞ   rà   Nrâ   r2   r2   r2   r3   r   	  s.      ÿþÿóûZ
pretrained)rÎ   )rÎ   rÏ   )rÎ   rÏ   rÐ   r&   c                 K   sB   t  | ¡} tf ddgdddddgddddgddgd	| |d
œ|—ŽS )aÄ  
    Constructs a swin_tiny architecture from
    `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows <https://arxiv.org/abs/2103.14030>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_T_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_T_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_T_Weights
        :members:
    rD   é`   r	   é   rk   é   é   é   çš™™™™™É?©r¿   rÀ   rÁ   rc   r7   r´   rÎ   rÏ   )r   ÚverifyrÔ   ©rÎ   rÏ   rÐ   r2   r2   r3   r   "  s    


ø	÷c                 K   sB   t  | ¡} tf ddgdddddgddddgd	d	gd
| |dœ|—ŽS )aÅ  
    Constructs a swin_small architecture from
    `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows <https://arxiv.org/abs/2103.14030>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_S_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_S_Weights
        :members:
    rD   rì   r	   é   rk   rí   rî   rï   rð   ç333333Ó?rò   )r   ró   rÔ   rô   r2   r2   r3   r   H  s    


ø	÷c                 K   sB   t  | ¡} tf ddgdddddgddddgddgd	| |d
œ|—ŽS )aÄ  
    Constructs a swin_base architecture from
    `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows <https://arxiv.org/abs/2103.14030>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_B_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_B_Weights
        :members:
    rD   é€   r	   rõ   rª   r¯   é    rð   ç      à?rò   )r   ró   rÔ   rô   r2   r2   r3   r    n  s    


ø	÷c                 K   sF   t  | ¡} tf ddgdddddgddddgddgd	| |ttd
œ
|—ŽS )aÀ  
    Constructs a swin_v2_tiny architecture from
    `Swin Transformer V2: Scaling Up Capacity and Resolution <https://arxiv.org/abs/2111.09883>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_V2_T_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_V2_T_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_V2_T_Weights
        :members:
    rD   rì   r	   rí   rk   rî   rï   rª   rñ   ©
r¿   rÀ   rÁ   rc   r7   r´   rÎ   rÏ   rÃ   rÄ   )r   ró   rÔ   r¾   r^   rô   r2   r2   r3   r!   ”  s    


öõc                 K   sF   t  | ¡} tf ddgdddddgddddgd	d	gd
| |ttdœ
|—ŽS )aÁ  
    Constructs a swin_v2_small architecture from
    `Swin Transformer V2: Scaling Up Capacity and Resolution <https://arxiv.org/abs/2111.09883>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_V2_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_V2_S_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_V2_S_Weights
        :members:
    rD   rì   r	   rõ   rk   rí   rî   rï   rª   rö   rú   )r   ró   rÔ   r¾   r^   rô   r2   r2   r3   r"   ¼  s    


öõc                 K   sF   t  | ¡} tf ddgdddddgddddgddgd| |ttd	œ
|—ŽS )
aÀ  
    Constructs a swin_v2_base architecture from
    `Swin Transformer V2: Scaling Up Capacity and Resolution <https://arxiv.org/abs/2111.09883>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_V2_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_V2_B_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_V2_B_Weights
        :members:
    rD   r÷   r	   rõ   rª   r¯   rø   rù   rú   )r   ró   rÔ   r¾   r^   rô   r2   r2   r3   r#   ä  s    


öõ)r_   r_   NNNT)Arx   Ú	functoolsr   Útypingr   r   r   r   r,   Ztorch.nn.functionalr   Z
functionalr*   r   Zops.miscr
   r   Zops.stochastic_depthr   Ztransforms._presetsr   r   Úutilsr   Z_apir   r   r   Ú_metar   Z_utilsr   r   Ú__all__r4   ZfxÚwrapr[   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#   r2   r2   r2   r3   Ú<module>   sÌ   ó  þ
#      óòsQV92nö ÿ$$$$$$$&$&