U
    ¯Ê¹jñv  ã                    @   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	Z	m
Z
 ddlmZmZmZmZ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mZmZ dd
lm Z 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)dd„ Z*dddeeedd�fdd„Z+G dd„ dej$ƒZ,duej$e-d œd!d"„Z.e /¡ dvej$e-e-d$œd%d&„ƒZ0dwd(d)„Z1dxd*d+„Z2dyd,d-„Z3e e3d.d/dd0�e3d.d/dd0�e3d.d1d2d3d/dd4�e3d.d5d6d3dd7�e3d.d5d6d3dd7�e3d.d5d6d3dd7�e3d.d5d6d3dd7�e3d.d5d6d3dd7�e3d.d8d9d3dd7�e3d.d:dd;�e3d.d:dd;�e3d.d:dd;�e3d.d:dd;�e3d.d:dd;�e3d.d:dd;�e3d.d/d<d=d3d>�e3d/d?d@�e3d/d?d@�e3d.d/d<d=d3d>�e3d/d?d@�e3d/dA�e3d/d?d@�e3d.d/d?d<d=d3dB�e3d.d/d?d<d=d3dB�e3d/d?d@�dCœƒZ4e!dze,dDœdEdF„ƒZ5e!d{e,dDœdGdH„ƒZ6e!d|e,dDœdIdJ„ƒZ7e!d}e,dDœdKdL„ƒZ8e!d~e,dDœdMdN„ƒZ9e!de,dDœdOdP„ƒZ:e!d€e,dDœdQdR„ƒZ;e!d�e,dDœdSdT„ƒZ<e!d‚e,dDœdUdV„ƒZ=e!dƒe,dDœdWdX„ƒZ>e!d„e,dDœdYdZ„ƒZ?e!d…e,dDœd[d\„ƒZ@e!d†e,dDœd]d^„ƒZAe!d‡e,dDœd_d`„ƒZBe!dˆe,dDœdadb„ƒZCe!d‰e,dDœdcdd„ƒZDe"eEdedfdgdhdidjdkdldmdndodpdqdrdsdtœƒ dS )Ša.  Pre-Activation ResNet v2 with GroupNorm and Weight Standardization.

A PyTorch implementation of ResNetV2 adapted from the Google Big-Transfer (BiT) source code
at https://github.com/google-research/big_transfer to match timm interfaces. The BiT weights have
been included here as pretrained models from their original .NPZ checkpoints.

Additionally, supports non pre-activation bottleneck for use as a backbone for Vision Transfomers (ViT) and
extra padding support to allow porting of official Hybrid ResNet pretrained weights from
https://github.com/google-research/vision_transformer

Thanks to the Google team for the above two repositories and associated papers:
* Big Transfer (BiT): General Visual Representation Learning - https://arxiv.org/abs/1912.11370
* An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale - https://arxiv.org/abs/2010.11929
* Knowledge distillation: A good teacher is patient and consistent - https://arxiv.org/abs/2106.05237

Original copyright of Google code below, modifications by Ross Wightman, Copyright 2020.
é    )ÚOrderedDict)ÚpartialN©ÚIMAGENET_INCEPTION_MEANÚIMAGENET_INCEPTION_STD)ÚGroupNormActÚBatchNormAct2dÚEvoNorm2dS0ÚFilterResponseNormTlu2dÚClassifierHeadÚDropPathÚAvgPool2dSameÚcreate_pool2dÚ	StdConv2dÚcreate_conv2dÚget_act_layerÚget_norm_act_layerÚmake_divisibleé   )Úbuild_model_with_cfg)Úcheckpoint_seqÚnamed_applyÚadapt_input_conv)Úgenerate_default_cfgsÚregister_modelÚregister_model_deprecationsÚResNetV2c                       s2   e Zd ZdZd‡ fdd„	Zdd	„ Zd
d„ Z‡  ZS )ÚPreActBottlenecka  Pre-activation (v2) bottleneck block.

    Follows the implementation of "Identity Mappings in Deep Residual Networks":
    https://github.com/KaimingHe/resnet-1k-layers/blob/master/resnet-pre-act.lua

    Except it puts the stride on 3x3 conv when available.
    Nç      Ð?r   ç        c              
      sÖ   t ƒ  ¡  |p|}|	pt}	|
p(ttdd�}
|p0|}t|| ƒ}|d k	rb||||||d|	|
d�| _nd | _|
|ƒ| _|	||dƒ| _|
|ƒ| _	|	||d|||d�| _
|
|ƒ| _|	||dƒ| _|dkrÈt|ƒnt ¡ | _d S )	Né    ©Z
num_groupsT)ÚstrideÚdilationÚfirst_dilationÚpreactÚ
conv_layerÚ
norm_layerr   é   ©r"   r#   Úgroupsr   )ÚsuperÚ__init__r   r   r   r   Ú
downsampleÚnorm1Úconv1Únorm2Úconv2Únorm3Úconv3r   ÚnnÚIdentityÚ	drop_path©ÚselfÚin_chsÚout_chsÚbottle_ratior"   r#   r$   r*   Ú	act_layerr&   r'   Ú
proj_layerÚdrop_path_rateZmid_chs©Ú	__class__© úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/resnetv2.pyr,   :   s2    
      þ



zPreActBottleneck.__init__c                 C   s   t j | jj¡ d S ©N)r4   ÚinitÚzeros_r3   Úweight©r8   rA   rA   rB   Úzero_init_last_   s    zPreActBottleneck.zero_init_lastc                 C   s^   |   |¡}|}| jd k	r"|  |¡}|  |¡}|  |  |¡¡}|  |  |¡¡}|  |¡}|| S rC   )r.   r-   r/   r1   r0   r3   r2   r6   )r8   ÚxZx_preactÚshortcutrA   rA   rB   Úforwardb   s    




zPreActBottleneck.forward)Nr   r   r   Nr   NNNNr   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   rH   rK   Ú__classcell__rA   rA   r?   rB   r   1   s              ó%r   c                       s2   e Zd ZdZd‡ fdd„	Zdd	„ Zd
d„ Z‡  ZS )Ú
BottleneckzUNon Pre-activation bottleneck block, equiv to V1.5/V1b Bottleneck. Used for ViT.
    Nr   r   r   c              	      sî   t ƒ  ¡  |p|}|ptj}|	p"t}	|
p2ttdd�}
|p:|}t|| ƒ}|d k	rj|||||d|	|
d�| _nd | _|	||dƒ| _	|
|ƒ| _
|	||d|||d�| _|
|ƒ| _|	||dƒ| _|
|dd�| _|d	krÔt|ƒnt ¡ | _|d
d�| _d S )Nr    r!   F)r"   r#   r%   r&   r'   r   r(   r)   ©Z	apply_actr   T)Zinplace)r+   r,   r4   ÚReLUr   r   r   r   r-   r/   r.   r1   r0   r3   r2   r   r5   r6   Úact3r7   r?   rA   rB   r,   u   s4    

     þ


zBottleneck.__init__c                 C   s&   t | jdd ƒd k	r"tj | jj¡ d S )NrF   )Úgetattrr2   r4   rD   rE   rF   rG   rA   rA   rB   rH   œ   s    zBottleneck.zero_init_lastc                 C   sp   |}| j d k	r|   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  || ¡}|S rC   )	r-   r/   r.   r1   r0   r3   r2   r6   rU   )r8   rI   rJ   rA   rA   rB   rK       s    








zBottleneck.forward)Nr   r   r   Nr   NNNNr   rL   rA   rA   r?   rB   rR   r   s              ó'rR   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )	ÚDownsampleConvr   NTc	           	         s>   t t| ƒ ¡  |||d|d�| _|r,t ¡ n
||dd�| _d S )Nr   ©r"   FrS   )r+   rW   r,   Úconvr4   r5   Únorm)	r8   r9   r:   r"   r#   r$   r%   r&   r'   r?   rA   rB   r,   ³   s    zDownsampleConv.__init__c                 C   s   |   |  |¡¡S rC   )rZ   rY   ©r8   rI   rA   rA   rB   rK   Â   s    zDownsampleConv.forward)r   r   NTNN©rM   rN   rO   r,   rK   rQ   rA   rA   r?   rB   rW   ²   s         ÷rW   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )	ÚDownsampleAvgr   NTc	                    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�| _|r„t ¡ n
||dd�| _	dS )	zd AvgPool Downsampling as in 'D' ResNet variants. This is not in RegNet space but I might experiment.r   é   TF)Z	ceil_modeZcount_include_padrX   rS   N)
r+   r]   r,   r   r4   Z	AvgPool2dÚpoolr5   rY   rZ   )r8   r9   r:   r"   r#   r$   r%   r&   r'   Z
avg_strideZavg_pool_fnr?   rA   rB   r,   Ç   s    
zDownsampleAvg.__init__c                 C   s   |   |  |  |¡¡¡S rC   )rZ   rY   r_   r[   rA   rA   rB   rK   Ý   s    zDownsampleAvg.forward)r   r   NTNNr\   rA   rA   r?   rB   r]   Æ   s         ÷r]   c                       s:   e Zd ZdZddddedddf‡ fdd„	Zdd	„ Z‡  ZS )
ÚResNetStagezResNet Stage.r   r   FNc                    s¶   t t| ƒ ¡  |dkrdnd}t|||d�}|r4tnt}|}t ¡ | _t	|ƒD ]b}|	r^|	| nd}|dkrn|nd}| j 
t|ƒ|
||f|||||||dœ||—Ž¡ |}|}d }qNd S )N)r   r^   r   r^   )r<   r&   r'   r   r   )r"   r#   r;   r*   r$   r=   r>   )r+   r`   r,   Údictr]   rW   r4   Ú
SequentialÚblocksÚrangeÚ
add_moduleÚstr)r8   r9   r:   r"   r#   Údepthr;   r*   Úavg_downÚ	block_dprÚblock_fnr<   r&   r'   Zblock_kwargsr$   Zlayer_kwargsr=   Úprev_chsZ	block_idxr>   r?   rA   rB   r,   ã   s6    
þ÷
õzResNetStage.__init__c                 C   s   |   |¡}|S rC   )rc   r[   rA   rA   rB   rK     s    
zResNetStage.forward)rM   rN   rO   rP   r   r,   rK   rQ   rA   rA   r?   rB   r`   á   s   ò+r`   c                    s   t ‡ fdd„dD ƒƒS )Nc                    s   g | ]}|ˆ k‘qS rA   rA   )Ú.0Ús©Ú	stem_typerA   rB   Ú
<listcomp>  s     z is_stem_deep.<locals>.<listcomp>)ÚdeepÚtiered)Úanyrn   rA   rn   rB   Úis_stem_deep  s    rt   é@   Ú Tr    r!   c                 C   sX  t ƒ }|dkst‚t|ƒrÆd|kr8d| d |d f}n|d |d f}|| |d ddd�|d< ||d ƒ|d	< ||d |d
 dd
d�|d< ||d
 ƒ|d< ||d
 |dd
d�|d< |sê||ƒ|d< n$|| |ddd�|d< |sê||ƒ|d< d|k�rt d
d¡|d< tjdddd�|d< n4d|k�r:tddddd�|d< ntjddd
d�|d< t |¡S )N)rv   ÚfixedÚsamerq   Z
deep_fixedZ	deep_samerr   rr   r(   é   r^   r   )Úkernel_sizer"   r/   r.   r   r1   r0   r3   r2   é   rY   rZ   rw   r   Úpad)rz   r"   Úpaddingr_   rx   Úmax)r   ÚAssertionErrorrt   r4   ZConstantPad2dZ	MaxPool2dr   rb   )r9   r:   ro   r%   r&   r'   ÚstemÚstem_chsrA   rA   rB   Úcreate_resnetv2_stem  s.    

r‚   c                       sÐ   e Zd ZdZdddddddd	d
dejeedd�eddd
f‡ fdd„	Z	e
jjd$dd„ƒZe
j ¡ d%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   z7Implementation of Pre-activation (v2) ResNet mode.
    )é   i   i   i   éè  r(   Úavgr    r   ru   rv   FTr!   r   c                     sÄ  t ƒ  ¡  || _|| _|}t||d�}t|ƒ}g | _t|| ƒ}t|||	|||d�| _	|rjt
|	ƒrfdqldnd}| j t|d|d�¡ |}d}d	}d
d„ t d|t|ƒ¡ |¡D ƒ}|rºtnt}t ¡ | _tt|||ƒƒD ]œ\}\}}}t|| ƒ}|dkrþd	nd}||k�r||9 }d	}t||||||
|||||d�}|}||9 }|  jt||d|› �d�g7  _| j t|ƒ|¡ qØ|| _|�rŒ|| jƒnt ¡ | _t| j||| jdd�| _| j |d� d| _!dS )aÓ  
        Args:
            layers (List[int]) : number of layers in each block
            channels (List[int]) : number of channels in each block:
            num_classes (int): number of classification classes (default 1000)
            in_chans (int): number of input (color) channels. (default 3)
            global_pool (str): Global pooling type. One of 'avg', 'max', 'avgmax', 'catavgmax' (default 'avg')
            output_stride (int): output stride of the network, 32, 16, or 8. (default 32)
            width_factor (int): channel (width) multiplication factor
            stem_chs (int): stem width (default: 64)
            stem_type (str): stem type (default: '' == 7x7)
            avg_down (bool): average pooling in residual downsampling (default: False)
            preact (bool): pre-activiation (default: True)
            act_layer (Union[str, nn.Module]): activation layer
            norm_layer (Union[str, nn.Module]): normalization layer
            conv_layer (nn.Module): convolution module
            drop_rate: classifier dropout rate (default: 0.)
            drop_path_rate: stochastic depth rate (default: 0.)
            zero_init_last: zero-init last weight in residual path (default: False)
        )r<   )r&   r'   z
stem.conv3ú	stem.convz	stem.normr^   )Znum_chsZ	reductionÚmoduleé   r   c                 S   s   g | ]}|  ¡ ‘qS rA   )Útolist)rl   rI   rA   rA   rB   rp   ‡  s     z%ResNetV2.__init__.<locals>.<listcomp>r   )	r"   r#   rg   rh   r<   r&   r'   ri   rj   zstages.T)Z	pool_typeÚ	drop_rateZuse_conv©rH   FN)"r+   r,   Únum_classesrŠ   r   r   Zfeature_infor   r‚   r€   rt   Úappendra   ÚtorchZlinspaceÚsumÚsplitr   rR   r4   rb   ÚstagesÚ	enumerateÚzipr`   re   rf   Znum_featuresr5   rZ   r   ÚheadÚinit_weightsÚgrad_checkpointing) r8   ÚlayersZchannelsrŒ   Zin_chansÚglobal_poolZoutput_strideÚwidth_factorr�   ro   rh   r%   r<   r'   r&   rŠ   r>   rH   ZwfZ	stem_featrk   Zcurr_strider#   Z
block_dprsrj   Z	stage_idxÚdÚcZbdprr:   r"   Ústager?   rA   rB   r,   H  st    (
ú"

õ ûzResNetV2.__init__c                 C   s   t tt|d�| ƒ d S )Nr‹   )r   r   Ú_init_weights)r8   rH   rA   rA   rB   r•   ¯  s    zResNetV2.init_weightsúresnet/c                 C   s   t | ||ƒ d S rC   )Ú_load_weights)r8   Úcheckpoint_pathÚprefixrA   rA   rB   Úload_pretrained³  s    zResNetV2.load_pretrainedc                 C   s   t d|rdnddgd�}|S )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)N)z^norm)iŸ† )r€   rc   )ra   )r8   ZcoarseZmatcherrA   rA   rB   Úgroup_matcher·  s    þþzResNetV2.group_matcherc                 C   s
   || _ d S rC   )r–   )r8   ÚenablerA   rA   rB   Úset_grad_checkpointingÂ  s    zResNetV2.set_grad_checkpointingc                 C   s   | j jS rC   )r”   ÚfcrG   rA   rA   rB   Úget_classifierÆ  s    zResNetV2.get_classifierc                 C   s   || _ | j ||¡ d S rC   )rŒ   r”   Úreset)r8   rŒ   r˜   rA   rA   rB   Úreset_classifierÊ  s    zResNetV2.reset_classifierc                 C   sD   |   |¡}| jr,tj ¡ s,t| j|dd�}n
|  |¡}|  |¡}|S )NT)Úflatten)r€   r–   rŽ   ÚjitZis_scriptingr   r‘   rZ   r[   rA   rA   rB   Úforward_featuresÎ  s    


zResNetV2.forward_features©Ú
pre_logitsc                 C   s   | j ||d�S )Nr­   )r”   )r8   rI   r®   rA   rA   rB   Úforward_head×  s    zResNetV2.forward_headc                 C   s   |   |¡}|  |¡}|S rC   )r¬   r¯   r[   rA   rA   rB   rK   Ú  s    

zResNetV2.forward)T)rž   )F)T)r…   )F)rM   rN   rO   rP   r4   rT   r   r   r   r,   rŽ   r«   Úignorer•   r¢   r£   r¥   r§   r©   r¬   Úboolr¯   rK   rQ   rA   rA   r?   rB   r   D  s@   
îg


	)r‡   Únamec                 C   sÌ   t | tjƒs d|krDt | tjƒrDtjj| jddd� tj | j¡ n„t | tjƒr~tjj	| jddd� | jd k	rÈtj | j¡ nJt | tj
tjtjfƒr²tj | j¡ tj | j¡ n|rÈt| dƒrÈ|  ¡  d S )	Núhead.fcr   g{®Gáz„?)ÚmeanÚstdZfan_outZrelu)ÚmodeZnonlinearityrH   )Ú
isinstancer4   ZLinearÚConv2drD   Znormal_rF   rE   ÚbiasZkaiming_normal_ZBatchNorm2dZ	LayerNormZ	GroupNormZones_ÚhasattrrH   )r‡   r²   rH   rA   rA   rB   r�   à  s     
r�   rž   )Úmodelr    r¡   c              
   C   s¦  dd l }dd„ }| |¡}t| jjjjd |||› d� ƒƒ}| jjj |¡ | jj |||› d� ƒ¡ | jj	 |||› d� ƒ¡ t
t| jdd ƒtjƒrü| jjjjd ||› d	� jd
 krü| jjj |||› d	� ƒ¡ | jjj	 |||› d� ƒ¡ t| j ¡ ƒD �]”\}\}}	t|	j ¡ ƒD �]t\}
\}}d}|› d|d › d|
d d›d�}|jj |||› d|› d� ƒ¡ |jj |||› d|› d� ƒ¡ |jj |||› d|› d� ƒ¡ |jj |||› d� ƒ¡ |jj |||› d� ƒ¡ |jj |||› d� ƒ¡ |jj	 |||› d� ƒ¡ |jj	 |||› d� ƒ¡ |jj	 |||› d� ƒ¡ |jd k	�r&||› d|› d� }|jjj ||ƒ¡ �q&�q
d S )Nr   c                 S   s&   | j dkr|  ddddg¡} t | ¡S )zPossibly convert HWIO to OIHW.rˆ   r(   r^   r   r   )ÚndimZ	transposerŽ   Z
from_numpy)Zconv_weightsrA   rA   rB   Út2pó  s    
z_load_weights.<locals>.t2pr   z%root_block/standardized_conv2d/kernelzgroup_norm/gammazgroup_norm/betar¦   zhead/conv2d/kerneléÿÿÿÿzhead/conv2d/biasZstandardized_conv2dÚblockz/unitÚ02dú/za/z/kernelzb/zc/za/group_norm/gammazb/group_norm/gammazc/group_norm/gammaza/group_norm/betazb/group_norm/betazc/group_norm/betaza/proj/)ÚnumpyÚloadr   r€   rY   rF   ÚshapeZcopy_rZ   r¹   r·   rV   r”   r4   r¸   r¦   r’   r‘   Znamed_childrenrc   r/   r1   r3   r.   r0   r2   r-   )r»   r    r¡   Únpr½   ÚweightsZstem_conv_wÚiZsnamerœ   ÚjZbnamer¿   ÚcnameZblock_prefixÚwrA   rA   rB   rŸ   ï  s>    
 ÿ"ÿ """rŸ   Fc                 K   s"   t dd�}tt| |fd|i|—ŽS )NT)Zflatten_sequentialÚfeature_cfg)ra   r   r   )ÚvariantÚ
pretrainedÚkwargsrË   rA   rA   rB   Ú_create_resnetv2  s    
  ÿþýrÏ   c                 K   s    t | f|dttdd�dœ|—ŽS )Nrw   g:Œ0âŽyE>)Úeps)rÍ   ro   r&   )rÏ   r   r   )rÌ   rÍ   rÎ   rA   rA   rB   Ú_create_resnetv2_bit  s    ÿ
üûrÑ   c                 K   s   | dddddt tdddœ
|–S )	Nr„   )r(   éà   rÒ   )r{   r{   g      ì?Zbilinearr†   r³   )
ÚurlrŒ   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationr´   rµ   Ú
first_convÚ
classifierr   )rÓ   rÎ   rA   rA   rB   Ú_cfg(  s         ûúrÚ   ztimm/Zbicubic)Ú	hf_hub_idr×   Úcustom_load)r(   é€  rÝ   )é   rÞ   g      ð?)rÛ   rÔ   rÕ   rÖ   r×   rÜ   )r(   éÀ  rß   )é   rà   )rÛ   rÔ   rÕ   rÖ   rÜ   )r(   éà  rá   )é   râ   iSU  )rÛ   rŒ   rÜ   gffffffî?)r(   é   rã   )rÛ   r×   rÖ   Útest_input_sizeÚtest_crop_pctz
stem.conv1)r×   rØ   )r×   )rÛ   r×   rØ   rÖ   rä   rå   )ú%resnetv2_50x1_bit.goog_distilled_in1kú-resnetv2_152x2_bit.goog_teacher_in21k_ft_in1kú1resnetv2_152x2_bit.goog_teacher_in21k_ft_in1k_384ú$resnetv2_50x1_bit.goog_in21k_ft_in1kú$resnetv2_50x3_bit.goog_in21k_ft_in1kú%resnetv2_101x1_bit.goog_in21k_ft_in1kú%resnetv2_101x3_bit.goog_in21k_ft_in1kú%resnetv2_152x2_bit.goog_in21k_ft_in1kú%resnetv2_152x4_bit.goog_in21k_ft_in1kúresnetv2_50x1_bit.goog_in21kúresnetv2_50x3_bit.goog_in21kúresnetv2_101x1_bit.goog_in21kúresnetv2_101x3_bit.goog_in21kúresnetv2_152x2_bit.goog_in21kúresnetv2_152x4_bit.goog_in21kzresnetv2_50.a1h_in1kzresnetv2_50d.untrainedzresnetv2_50t.untrainedzresnetv2_101.a1h_in1kzresnetv2_101d.untrainedzresnetv2_152.untrainedzresnetv2_152d.untrainedzresnetv2_50d_gn.ah_in1kzresnetv2_50d_evos.ah_in1kzresnetv2_50d_frn.untrained)Úreturnc                 K   s   t d| ddddgddœ|—ŽS )NÚresnetv2_50x1_bitr(   rˆ   é   r   ©rÍ   r—   r™   )rö   ©rÑ   ©rÍ   rÎ   rA   rA   rB   rö   …  s     ÿ 
 ÿÿrö   c                 K   s   t d| ddddgddœ|—ŽS )NÚresnetv2_50x3_bitr(   rˆ   r÷   rø   )rû   rù   rú   rA   rA   rB   rû   ‹  s     ÿ 
 ÿÿrû   c                 K   s   t d| ddddgddœ|—ŽS )NÚresnetv2_101x1_bitr(   rˆ   é   r   rø   )rü   rù   rú   rA   rA   rB   rü   ‘  s     ÿ 
 ÿÿrü   c                 K   s   t d| ddddgddœ|—ŽS )NÚresnetv2_101x3_bitr(   rˆ   rý   rø   )rþ   rù   rú   rA   rA   rB   rþ   —  s     ÿ 
 ÿÿrþ   c                 K   s   t d| ddddgddœ|—ŽS )NÚresnetv2_152x2_bitr(   ry   é$   r^   rø   )rÿ   rù   rú   rA   rA   rB   rÿ   �  s     ÿ 
 ÿÿrÿ   c                 K   s   t d| ddddgddœ|—ŽS )NÚresnetv2_152x4_bitr(   ry   r   rˆ   rø   )r  rù   rú   rA   rA   rB   r  £  s     ÿ 
 ÿÿr  c                 K   s0   t ddddgttd�}tdd| it |f|Ž—ŽS )Nr(   rˆ   r÷   ©r—   r&   r'   Úresnetv2_50rÍ   )r  ©ra   r   r   rÏ   ©rÍ   rÎ   Z
model_argsrA   rA   rB   r  ©  s    r  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   rˆ   r÷   rq   T©r—   r&   r'   ro   rh   Úresnetv2_50drÍ   )r  r  r  rA   rA   rB   r  ¯  s    
   þr  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   rˆ   r÷   rr   Tr  Úresnetv2_50trÍ   )r  r  r  rA   rA   rB   r  ·  s    
   þr  c                 K   s0   t ddddgttd�}tdd| it |f|Ž—ŽS )Nr(   rˆ   rý   r  Úresnetv2_101rÍ   )r	  r  r  rA   rA   rB   r	  ¿  s    r	  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   rˆ   rý   rq   Tr  Úresnetv2_101drÍ   )r
  r  r  rA   rA   rB   r
  Å  s    
   þr
  c                 K   s0   t ddddgttd�}tdd| it |f|Ž—ŽS )Nr(   ry   r   r  Úresnetv2_152rÍ   )r  r  r  rA   rA   rB   r  Í  s    r  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   ry   r   rq   Tr  Úresnetv2_152drÍ   )r  r  r  rA   rA   rB   r  Ó  s    
   þr  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   rˆ   r÷   rq   Tr  Úresnetv2_50d_gnrÍ   )r  )ra   r   r   rÏ   r  rA   rA   rB   r  Ý  s    
   þr  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   rˆ   r÷   rq   Tr  Úresnetv2_50d_evosrÍ   )r  )ra   r   r	   rÏ   r  rA   rA   rB   r  å  s    
   þr  c                 K   s4   t ddddgttddd�}td	d| it |f|Ž—ŽS )
Nr(   rˆ   r÷   rq   Tr  Úresnetv2_50d_frnrÍ   )r  )ra   r   r
   rÏ   r  rA   rA   rB   r  í  s    
   þr  ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   ró   rô   ræ   rç   rè   )Zresnetv2_50x1_bitmZresnetv2_50x3_bitmZresnetv2_101x1_bitmZresnetv2_101x3_bitmZresnetv2_152x2_bitmZresnetv2_152x4_bitmZresnetv2_50x1_bitm_in21kZresnetv2_50x3_bitm_in21kZresnetv2_101x1_bitm_in21kZresnetv2_101x3_bitm_in21kZresnetv2_152x2_bitm_in21kZresnetv2_152x4_bitm_in21kZresnetv2_50x1_bit_distilledZresnetv2_152x2_bit_teacherZresnetv2_152x2_bit_teacher_384)rv   T)rž   )F)F)rv   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)FrP   Úcollectionsr   Ú	functoolsr   rŽ   Ztorch.nnr4   Z	timm.datar   r   Ztimm.layersr   r   r	   r
   r   r   r   r   r   r   r   r   r   Z_builderr   Z_manipulater   r   r   Ú	_registryr   r   r   Ú__all__ÚModuler   rR   rW   r]   r`   rt   r‚   r   rf   r�   Zno_gradrŸ   rÏ   rÑ   rÚ   Zdefault_cfgsrö   rû   rü   rþ   rÿ   r  r  r  r  r	  r
  r  r  r  r  r  rM   rA   rA   rA   rB   Ú<module>   sÀ  <A@2
ú
- %
	


 þ þ    þ   þ   þ   þ   þ   þ   þ þ þ þ þ þ þ   þ ÿ ÿ   þ ÿÿ ÿ   ý   ý ÿ³R	ñ