
    Ng0                        d Z ddlm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e	j&                  Z' G d de	j&                  Z( G d de	j&                  Z) G d de	j&                  Z* G d de	j&                  Z+ G d de	j&                  Z,d Z-ddde eed          fdZ. G d  de	j&                  Z/dld!e	j&        d"e0fd#Z1 ej2                    dmd%e	j&        d&e0d'e0fd(            Z3dnd*Z4dnd+Z5dod,Z6 e"i d- e6d.d/d0          d1 e6d.d/d0          d2 e6d.d3d4d5d/d6          d7 e6d.d8d9d5d:          d; e6d.d8d9d5d:          d< e6d.d8d9d5d:          d= e6d.d8d9d5d:          d> e6d.d8d9d5d:          d? e6d.d@dAd5d:          dB e6d.dCdD          dE e6d.dCdD          dF e6d.dCdD          dG e6d.dCdD          dH e6d.dCdD          dI e6d.dCdD          dJ e6d/dKL          dM e6d/dKdNO           e6d/dKL           e6d/dKdNO           e6d.d/dKdPd5Q           e6d/dNR           e6d/dNR           e6d.d/dKdPd5Q           e6d/dNR           e6d/S           e6d/dNR           e6d.d/dNdKdPd5T           e6d.d/dNdKdPd5T           e6d/dNR          dU          Z7e#dndVe/fdW            Z8e#dndVe/fdX            Z9e#dndVe/fdY            Z:e#dndVe/fdZ            Z;e#dndVe/fd[            Z<e#dndVe/fd\            Z=e#dndVe/fd]            Z>e#dndVe/fd^            Z?e#dndVe/fd_            Z@e#dndVe/fd`            ZAe#dndVe/fda            ZBe#dndVe/fdb            ZCe#dndVe/fdc            ZDe#dndVe/fdd            ZEe#dndVe/fde            ZFe#dndVe/fdf            ZGe#dndVe/fdg            ZHe#dndVe/fdh            ZIe#dndVe/fdi            ZJe#dndVe/fdj            ZK e$eLd7d;d<d=d>d?dBdEdFdGdHdId-d1d2dk           dS )pa.  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)partial)OptionalN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                   F     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 d	 fd	Zd Zd Z xZS )
PreActBasiczF Pre-activation basic block (not in typical 'v2' implementations)
    N      ?r           c           
         t                                                       |p|}|	pt          }	|
pt          t          d          }
|p|}t          ||z            }|+|dk    s||k    s||k    r ||||||d|	|
          | _        nd | _         |
|          | _         |	||d|||          | _         |
|          | _	         |	||d||          | _
        |d	k    rt          |          nt          j                    | _        d S )
N    
num_groupsr   Tstridedilationfirst_dilationpreact
conv_layer
norm_layer   r(   r)   groups)r)   r0   r   )super__init__r   r   r	   r   
downsamplenorm1conv1norm2conv2r   nnIdentity	drop_pathselfin_chsout_chsbottle_ratior(   r)   r*   r0   	act_layerr,   r-   
proj_layerdrop_path_ratemid_chs	__class__s                 P/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/resnetv2.pyr2   zPreActBasic.__init__5   sF    	'38,9
G7<B#G#G#G
#V <!788!v{{n6P6PTZ^eTeTe(j!-%%	 	 	DOO #DOZ''
Z6Ncijjj
Z((
Z!hvVVV
5Ca5G5G.111R[]]    c                 X    t           j                            | j        j                   d S Nr8   initzeros_conv3weightr<   s    rE   zero_init_lastzPreActBasic.zero_init_last_   !    
tz()))))rF   c                    |                      |          }|}| j        |                     |          }|                     |          }|                     |                     |                    }|                     |          }||z   S rH   )r4   r3   r5   r7   r6   r:   r<   xx_preactshortcuts       rE   forwardzPreActBasic.forwardb   sz    ::a== ?&x00H JJx  JJtzz!}}%%NN18|rF   )Nr!   r   r   Nr   NNNNr"   __name__
__module____qualname____doc__r2   rO   rV   __classcell__rD   s   @rE   r    r    1   s          ([ ([ ([ ([ ([ ([T* * *      rF   r    c                   F     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 d	 fd	Zd Zd Z x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   r"   c           
      0   t                                                       |p|}|	pt          }	|
pt          t          d          }
|p|}t          ||z            }| ||||||d|	|
          | _        nd | _         |
|          | _         |	||d          | _         |
|          | _	         |	||d|||          | _
         |
|          | _         |	||d          | _        |dk    rt          |          nt          j                    | _        d S )	Nr$   r%   Tr'   r   r.   r/   r   )r1   r2   r   r   r	   r   r3   r4   r5   r6   r7   norm3rL   r   r8   r9   r:   r;   s                 rE   r2   zPreActBottleneck.__init__z   sG    	'38,9
G7<B#G#G#G
#V <!788!(j!-%%	 	 	DOO #DOZ''
Z33
Z((
Z!F^djkkk
Z((
Z!44
5Ca5G5G.111R[]]rF   c                 X    t           j                            | j        j                   d S rH   rI   rN   s    rE   rO   zPreActBottleneck.zero_init_last   rP   rF   c                 f   |                      |          }|}| j        |                     |          }|                     |          }|                     |                     |                    }|                     |                     |                    }|                     |          }||z   S rH   )r4   r3   r5   r7   r6   rL   rb   r:   rR   s       rE   rV   zPreActBottleneck.forward   s    ::a== ?&x00H JJx  JJtzz!}}%%JJtzz!}}%%NN18|rF   Nr`   r   r   Nr   NNNNr"   rW   r]   s   @rE   r_   r_   q   s          *[ *[ *[ *[ *[ *[X* * *      rF   r_   c                   F     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 d	 fd	Zd Zd Z xZS )

BottleneckzUNon Pre-activation bottleneck block, equiv to V1.5/V1b Bottleneck. Used for ViT.
    Nr`   r   r"   c           	      p   t                                                       |p|}|pt          j        }|	pt          }	|
pt          t          d          }
|p|}t          ||z            }| |||||d|	|
          | _        nd | _         |	||d          | _	         |
|          | _
         |	||d|||          | _         |
|          | _         |	||d          | _         |
|d          | _        |d	k    rt          |          nt          j                    | _         |d
          | _        d S )Nr$   r%   F)r(   r)   r+   r,   r-   r   r.   r/   	apply_actr   T)inplace)r1   r2   r8   ReLUr   r   r	   r   r3   r5   r4   r7   r6   rL   rb   r   r9   r:   act3r;   s                 rE   r2   zBottleneck.__init__   si    	'38(	,9
G7<B#G#G#G
#V <!788!(j!%%  DOO #DOZ33
Z((
Z!F^djkkk
Z((
Z!44
Z5999
5Ca5G5G.111R[]]Id+++			rF   c                     t          | j        dd           +t          j                            | j        j                   d S d S )NrM   )getattrrb   r8   rJ   rK   rM   rN   s    rE   rO   zBottleneck.zero_init_last   s=    4:x..:GNN4:,----- ;:rF   c                    |}| j         |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     ||z             }|S rH   )	r3   r5   r4   r7   r6   rL   rb   r:   rm   )r<   rS   rU   s      rE   rV   zBottleneck.forward   s    ?&q))H JJqMMJJqMMJJqMMJJqMMJJqMMJJqMMNN1IIa(l##rF   re   rW   r]   s   @rE   rg   rg      s         
 +, +, +, +, +, +,Z. . .      rF   rg   c                   2     e Zd Z	 	 	 	 	 	 d fd	Zd Z xZS )DownsampleConvr   NTc	                     t          t          |                                             |||d|          | _        |rt	          j                    n ||d          | _        d S )Nr   r(   Fri   )r1   rr   r2   convr8   r9   norm)
r<   r=   r>   r(   r)   r*   r+   r,   r-   rD   s
            rE   r2   zDownsampleConv.__init__   sd     	nd##,,...Jvw&AAA	%+UBKMMMGu1U1U1U			rF   c                 R    |                      |                     |                    S rH   )rv   ru   r<   rS   s     rE   rV   zDownsampleConv.forward  s    yy1&&&rF   r   r   NTNNrX   rY   rZ   r2   rV   r\   r]   s   @rE   rr   rr      sf        
 V V V V V V' ' ' ' ' ' 'rF   rr   c                   2     e Zd Z	 	 	 	 	 	 d fd	Zd Z xZS )DownsampleAvgr   NTc	                    t          t          |                                            |dk    r|nd}	|dk    s|dk    r4|	dk    r|dk    rt          nt          j        }
 |
d|	dd          | _        nt	          j                    | _         |||dd          | _        |rt	          j                    n ||d          | _	        dS )	zd AvgPool Downsampling as in 'D' ResNet variants. This is not in RegNet space but I might experiment.r      TF)	ceil_modecount_include_padrt   ri   N)
r1   r|   r2   r   r8   	AvgPool2dpoolr9   ru   rv   )r<   r=   r>   r(   r)   r*   r+   r,   r-   
avg_strideavg_pool_fnrD   s              rE   r2   zDownsampleAvg.__init__  s     	mT""++---'1}}VV!
A::A+5??x!||--QSQ]K#AzTUZ[[[DIIDIJvw!<<<	%+UBKMMMGu1U1U1U			rF   c                 x    |                      |                     |                     |                              S rH   )rv   ru   r   rx   s     rE   rV   zDownsampleAvg.forward*  s*    yy499Q<<00111rF   ry   rz   r]   s   @rE   r|   r|     sf        
 V V V V V V,2 2 2 2 2 2 2rF   r|   c                   :     e Zd ZdZddddedddf fd	Zd Z xZS )ResNetStagezResNet Stage.r`   r   FNc                    t          t          |                                            |dv rdnd}t          |||          }|rt          nt
          }|}t          j                    | _        t          |          D ]X}|	r|	|         nd}|dk    r|nd}| j        
                    t          |           |
||f|||||||d||           |}|}d }Yd S )N)r   r~   r   r~   )r@   r,   r-   r"   r   )r(   r)   r?   r0   r*   rA   rB   )r1   r   r2   dictr|   rr   r8   
Sequentialblocksrange
add_modulestr)r<   r=   r>   r(   r)   depthr?   r0   avg_down	block_dprblock_fnr@   r,   r-   block_kwargsr*   layer_kwargsrA   prev_chs	block_idxrB   rD   s                        rE   r2   zResNetStage.__init__0  s+   " 	k4  ))+++&&00aiJS]^^^&.B]]N
moou 	 	I5>FYy11BN(A~~VV1FK""3y>>884 !)-%-4 4 4 4 4    H%NJJ%	 	rF   c                 0    |                      |          }|S rH   )r   rx   s     rE   rV   zResNetStage.forward[  s    KKNNrF   )rX   rY   rZ   r[   r_   r2   rV   r\   r]   s   @rE   r   r   .  sm         %) ) ) ) ) )V      rF   r   c                 :     t           fddD                       S )Nc                     g | ]}|v S  r   ).0s	stem_types     rE   
<listcomp>z is_stem_deep.<locals>.<listcomp>a  s    ;;;1Y;;;rF   )deeptiered)any)r   s   `rE   is_stem_deepr   `  s'    ;;;;(:;;;<<<rF   @    Tr$   r%   c                    t                      }|dv sJ t          |          rd|v rd|z  dz  |dz  f}n
|dz  |dz  f} || |d         dd          |d<    ||d                   |d	<    ||d         |d
         dd
          |d<    ||d
                   |d<    ||d
         |dd
          |d<   |s ||          |d<   n" || |dd          |d<   |s ||          |d<   d|v r3t          j        d
d          |d<   t          j        ddd          |d<   n5d|v rt          dddd          |d<   nt          j        ddd
          |d<   t          j        |          S )N)r   fixedsamer   
deep_fixed	deep_samer   r   r.      r~   r   )kernel_sizer(   r5   r4   r   r7   r6   rL   rb      ru   rv   r   r"   pad)r   r(   paddingr   r   max)r   r   r8   ConstantPad2d	MaxPool2dr   r   )r=   r>   r   r+   r,   r-   stemstem_chss           rE   create_resnetv2_stemr   d  s    ==DZZZZZ I /y  Gq('Q,7HH1gl3H"
68A;AaPPPW"
8A;//W"
8A;STUUUW"
8A;//W"
8A;QqQQQW 	0&Jw//DM "z&'qKKKV 	/%:g..DL)&q"--U|!QGGGV	9		$U!VTTTV |!QGGGV=rF   c                       e Zd ZdZdddddddd	d
dd
dej         eed          eddd
f fd	Z	e
j        j        dd            Ze
j                                        d d            Ze
j        j        d!d            Ze
j        j        dd            Ze
j        j        dej        fd            Zd"dedee         fdZd Zd!defdZd Z xZS )#r   z7Implementation of Pre-activation (v2) ResNet mode.
    )      i   i     r.   avgr$   r   r   r   FTr`   r%   r"   c                    t                                                       || _        || _        |}t	          ||          }t          |          }g | _        t          ||z            }t          |||	|||          | _	        |rt          |	          rdndnd}| j                            t          |d|                     |}d}d	}d
 t          j        d|t          |                                        |          D             }|r|rt"          nt$          }n|rJ t&          }t)          j                    | _        t/          t1          |||                    D ]\  }\  }}}t          ||z            }|dk    rd	nd} ||k    r|| z  }d	} t3          ||| ||||
|||||          }!|}|| z  }| xj        t          ||d|           gz  c_        | j                            t7          |          |!           |x| _        | _        |r || j                  nt)          j                    | _        tA          | j        ||| 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~   )num_chs	reductionmodule   r   c                 6    g | ]}|                                 S r   )tolist)r   rS   s     rE   r   z%ResNetV2.__init__.<locals>.<listcomp>  s     gggQahhjjgggrF   r   )
r(   r)   r   r?   r   r@   r,   r-   r   r   zstages.T)	pool_type	drop_rateuse_convrO   FN)$r1   r2   num_classesr   r   r   feature_infor   r   r   r   appendr   torchlinspacesumsplitr    r_   rg   r8   r   stages	enumeratezipr   r   r   num_featureshead_hidden_sizer9   rv   r   headinit_weightsgrad_checkpointing)#r<   layerschannelsr   in_chansglobal_pooloutput_stridewidth_factorr   r   r   r+   basicr?   r@   r-   r,   r   rB   rO   wf	stem_featr   curr_strider)   
block_dprsr   	stage_idxdcbdprr>   r(   stagerD   s#                                     rE   r2   zResNetV2.__init__  s   T 	&"'
iHHH
!),,	!(R-00(!!
 
 
	 SYi\)%<%<M\\++^i	  h!I!V!V!VWWWgg%.NCPVKK*X*X*^*^_e*f*fggg
 	"&+A{{1AHH!Hmoo'0VXz1R1R'S'S 	: 	:#I|1d$QV,,G#q..QQaFm++F"!)!#%%!  E H6!K$x;WlajWlWl"m"m"m!nnK""3y>>599994<<D15;NJJt0111	"!n
 
 
	 	888"'rF   c                 N    t          t          t          |          |            d S )Nr   )r   r   _init_weights)r<   rO   s     rE   r   zResNetV2.init_weights  s%    GM.III4PPPPPrF   resnet/c                 (    t          | ||           d S rH   )_load_weights)r<   checkpoint_pathprefixs      rE   load_pretrainedzResNetV2.load_pretrained  s    dOV44444rF   c                 4    t          d|rdnddg          }|S )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)N)z^norm)i )r   r   )r   )r<   coarsematchers      rE   group_matcherzResNetV2.group_matcher  s9    (. $$8$5
 
 
 rF   c                     || _         d S rH   )r   )r<   enables     rE   set_grad_checkpointingzResNetV2.set_grad_checkpointing  s    "(rF   returnc                     | j         j        S rH   )r   fcrN   s    rE   get_classifierzResNetV2.get_classifier  s    y|rF   Nr   r   c                 J    || _         | j                            ||           d S rH   )r   r   reset)r<   r   r   s      rE   reset_classifierzResNetV2.reset_classifier  s&    &	[11111rF   c                     |                      |          }| j        r6t          j                                        st          | j        |d          }n|                     |          }|                     |          }|S )NT)flatten)r   r   r   jitis_scriptingr   r   rv   rx   s     rE   forward_featureszResNetV2.forward_features"  sl    IIaLL" 	59+A+A+C+C 	t{At<<<AAAAIIaLLrF   
pre_logitsc                 ^    |r|                      ||          n|                      |          S )N)r   )r   )r<   rS   r   s      rE   forward_headzResNetV2.forward_head+  s-    6@Rtyyzy222diiPQllRrF   c                 Z    |                      |          }|                     |          }|S rH   )r   r  rx   s     rE   rV   zResNetV2.forward.  s-    !!!$$a  rF   )Tr   FrH   )rX   rY   rZ   r[   r8   rl   r   r	   r   r2   r   r   ignorer   r   r   r   Moduler   intr   r   r   r   boolr  rV   r\   r]   s   @rE   r   r     s         ,gw|;;;  )l( l( l( l( l( l(\ YQ Q Q Q Y5 5 5 5 Y    Y) ) ) ) Y	    2 2C 2hsm 2 2 2 2  S S$ S S S S      rF   r   namec                 :   t          | t          j                  sd|v rgt          | t          j                  rMt          j                            | j        dd           t          j                            | j                   d S t          | t          j                  rVt          j        	                    | j        dd           | j        &t          j                            | j                   d S d S t          | t          j
        t          j        t          j        f          rJt          j                            | j                   t          j                            | j                   d S |r&t          | d          r|                                  d S d S d S )	Nhead.fcr"   g{Gz?)meanstdfan_outrelu)modenonlinearityrO   )
isinstancer8   LinearConv2drJ   normal_rM   rK   biaskaiming_normal_BatchNorm2d	LayerNorm	GroupNormones_hasattrrO   )r   r
  rO   s      rE   r   r   4  sa   &")$$  d):):z&RTR[?\?\):
CT:::
v{#####	FBI	&	&  
IFSSS;"GNN6;''''' #"	FR^R\2<H	I	I  
fm$$$
v{#####	  GF,<==         rF   r   modelr   r   c                 R   dd l }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    rl| j        j        j                             ||| d                              | j        j        j	                             ||| d
                              t!          | j                                                  D ]R\  }\  }}	t!          |	j                                                  D ]!\  }
\  }}d}| d|dz    d|
dz   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| d         }|j        j        j                             ||                     #Td S )Nr   c                 n    | j         dk    r|                     g d          } t          j        |           S )zPossibly convert HWIO to OIHW.r   )r.   r~   r   r   )ndim	transposer   
from_numpy)conv_weightss    rE   t2pz_load_weights.<locals>.t2pG  s8    !!'11,,,??L---rF   r   z%root_block/standardized_conv2d/kernelzgroup_norm/gammazgroup_norm/betar   zhead/conv2d/kernelzhead/conv2d/bias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   ru   rM   shapecopy_rv   r  r  ro   r   r8   r  r   r   r   named_childrenr   r5   r7   rL   r4   r6   rb   r3   )r  r   r   npr%  weightsstem_conv_wisnamer   jbnamer(  cnameblock_prefixws                   rE   r   r   C  sW   . . . ggo&&G"
$Q'W5e5e5e-f)g)gi iK	JO  ---	JCC6(C(C(C DEEFFF	JO##g&@&@&@ABBCCC'%*dD1129== LJM &q)W5R5R5R-S-YZ\-]]]
""33w&/L/L/L'M#N#NOOO
  W-H-H-H%I!J!JKKK&u|'B'B'D'DEE ; ;>E5!*5<+F+F+H+H!I!I 	; 	;A~u)E$CC1q5CCq1uCCCCLK$$SSL1R1RE1R1R1R)S%T%TUUUK$$SSL1R1RE1R1R1R)S%T%TUUUK$$SSL1R1RE1R1R1R)S%T%TUUUK$$SSL1T1T1T)U%V%VWWWK$$SSL1T1T1T)U%V%VWWWK$$SSL1T1T1T)U%V%VWWWK""33w,/Q/Q/Q'R#S#STTTK""33w,/Q/Q/Q'R#S#STTTK""33w,/Q/Q/Q'R#S#STTT+|BBEBBBC %,2233q66:::	;; ;rF   Fc                 N    t          d          }t          t          | |fd|i|S )NT)flatten_sequentialfeature_cfg)r   r   r   )variant
pretrainedkwargsr<  s       rE   _create_resnetv2r@  i  sB    $///K':    rF   c           	      L    t          | f|dt          t          d          d|S )Nr   g:0yE>)eps)r>  r   r,   )r@  r   r   )r=  r>  r?  s      rE   _create_resnetv2_bitrC  r  sA    9$///	 
   rF   c                 4    | dddddt           t          ddd
|S )	Nr   )r.      rE  )r   r   g      ?bilinearr   r  )
urlr   
input_size	pool_sizecrop_pctinterpolationr  r  
first_conv
classifierr   )rG  r?  s     rE   _cfgrN  |  s5    =vJ'0F!   rF   z%resnetv2_50x1_bit.goog_distilled_in1kztimm/bicubic)	hf_hub_idrK  custom_loadz-resnetv2_152x2_bit.goog_teacher_in21k_ft_in1kz1resnetv2_152x2_bit.goog_teacher_in21k_ft_in1k_384)r.     rR  )   rS  r!   )rP  rH  rI  rJ  rK  rQ  z$resnetv2_50x1_bit.goog_in21k_ft_in1k)r.     rT  )   rU  )rP  rH  rI  rJ  rQ  z$resnetv2_50x3_bit.goog_in21k_ft_in1kz%resnetv2_101x1_bit.goog_in21k_ft_in1kz%resnetv2_101x3_bit.goog_in21k_ft_in1kz%resnetv2_152x2_bit.goog_in21k_ft_in1kz%resnetv2_152x4_bit.goog_in21k_ft_in1k)r.     rV  )   rW  zresnetv2_50x1_bit.goog_in21kiSU  )rP  r   rQ  zresnetv2_50x3_bit.goog_in21kzresnetv2_101x1_bit.goog_in21kzresnetv2_101x3_bit.goog_in21kzresnetv2_152x2_bit.goog_in21kzresnetv2_152x4_bit.goog_in21kzresnetv2_18.untrainedgffffff?)rK  rJ  zresnetv2_18d.untrainedz
stem.conv1)rK  rJ  rL  )r.      rX  )rP  rK  rJ  test_input_sizetest_crop_pct)rK  rL  )rK  )rP  rK  rL  rJ  rY  rZ  )zresnetv2_34.untrainedzresnetv2_34d.untrainedz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.untrainedr   c                 (    t          	 d| g ddd|S )Nresnetv2_50x1_bitr.   r      r.   r   r>  r   r   )r\  rC  r>  r?  s     rE   r\  r\    ;    c(2<<<VWc c[ac c crF   c                 (    t          	 d| g ddd|S )Nresnetv2_50x3_bitr]  r.   r_  )rd  r`  ra  s     rE   rd  rd    rb  rF   c                 (    t          	 d| g ddd|S )Nresnetv2_101x1_bitr.   r      r.   r   r_  )rf  r`  ra  s     rE   rf  rf    ;    e)3MMMXYe e]ce e erF   c                 (    t          	 d| g ddd|S )Nresnetv2_101x3_bitrg  r.   r_  )rk  r`  ra  s     rE   rk  rk    ri  rF   c                 (    t          	 d| g ddd|S )Nresnetv2_152x2_bitr.   r   $   r.   r~   r_  )rm  r`  ra  s     rE   rm  rm    ri  rF   c                 (    t          	 d| g ddd|S )Nresnetv2_152x4_bitrn  r   r_  )rq  r`  ra  s     rE   rq  rq    ri  rF   c           	      v    t          g ddddt          t                    }t          dd| it          |fi |S )	Nr~   r~   r~   r~   r      r   r   Tr!   r   r   r   r?   r,   r-   resnetv2_18r>  )rw  r   r   r
   r@  r>  r?  
model_argss      rE   rw  rw    sV    ||&9TW ^  J __j_DD^D^W]D^D^___rF   c           
      z    t          g ddddt          t          dd          }t          d	d| it          |fi |S )
Nrs  rt  Tr!   r   r   r   r   r?   r,   r-   r   r   resnetv2_18dr>  )r}  rx  ry  s      rE   r}  r}    s[    ||&9TW ^vX\  J ``z`T*E_E_X^E_E_```rF   c           	      r    t          ddddt          t                    }t          dd| it          |fi |S )	Nr]  rt  Tr!   rv  resnetv2_34r>  )r  rx  ry  s      rE   r  r    sR    &9TW ^  J __j_DD^D^W]D^D^___rF   c           
      v    t          ddddt          t          dd          }t          d	d| it          |fi |S )
Nr]  rt  Tr!   r   r|  resnetv2_34dr>  )r  rx  ry  s      rE   r  r     sW    &9TW ^vX\  J ``z`T*E_E_X^E_E_```rF   c           	      p    t          g dt          t                    }t          dd| it          |fi |S )Nr]  r   r,   r-   resnetv2_50r>  )r  rx  ry  s      rE   r  r  )  sE    \\\mP^___J__j_DD^D^W]D^D^___rF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nr]  r   Tr   r,   r-   r   r   resnetv2_50dr>  )r  rx  ry  s      rE   r  r  /  sR    ||.4) ) )J ``z`T*E_E_X^E_E_```rF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nr]  r   Tr  resnetv2_50tr>  )r  rx  ry  s      rE   r  r  7  sR    ||.T+ + +J ``z`T*E_E_X^E_E_```rF   c           	      p    t          g dt          t                    }t          dd| it          |fi |S )Nrg  r  resnetv2_101r>  )r  rx  ry  s      rE   r  r  ?  E    ]]]}Q_```J``z`T*E_E_X^E_E_```rF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nrg  r   Tr  resnetv2_101dr>  )r  rx  ry  s      rE   r  r  E  R    }}>4) ) )J aa
ad:F`F`Y_F`F`aaarF   c           	      p    t          g dt          t                    }t          dd| it          |fi |S )Nrn  r  resnetv2_152r>  )r  rx  ry  s      rE   r  r  M  r  rF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nrn  r   Tr  resnetv2_152dr>  )r  rx  ry  s      rE   r  r  S  r  rF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nr]  r   Tr  resnetv2_50d_gnr>  )r  )r   r   r	   r@  ry  s      rE   r  r  ]  sR    ||,4) ) )J cc*cZHbHb[aHbHbcccrF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nr]  r   Tr  resnetv2_50d_evosr>  )r  )r   r   r   r@  ry  s      rE   r  r  e  sR    ||+4) ) )J eeJe$zJdJd]cJdJdeeerF   c           	      t    t          g dt          t          dd          }t          dd| it          |fi |S )Nr]  r   Tr  resnetv2_50d_frnr>  )r  )r   r   r   r@  ry  s      rE   r  r  m  sS    ||BY4) ) )J dd:djIcIc\bIcIcdddrF   )resnetv2_50x1_bitmresnetv2_50x3_bitmresnetv2_101x1_bitmresnetv2_101x3_bitmresnetv2_152x2_bitmresnetv2_152x4_bitmresnetv2_50x1_bitm_in21kresnetv2_50x3_bitm_in21kresnetv2_101x1_bitm_in21kresnetv2_101x3_bitm_in21kresnetv2_152x2_bitm_in21kresnetv2_152x4_bitm_in21kresnetv2_50x1_bit_distilledresnetv2_152x2_bit_teacherresnetv2_152x2_bit_teacher_384)r   Tr  r  )r   )Mr[   collectionsr   	functoolsr   typingr   r   torch.nnr8   	timm.datar   r   timm.layersr	   r
   r   r   r   r   r   r   r   r   r   r   r   _builderr   _manipulater   r   r   	_registryr   r   r   __all__r  r    r_   rg   rr   r|   r   r   r   r   r   r   no_gradr   r@  rC  rN  default_cfgsr\  rd  rf  rk  rm  rq  rw  r}  r  r  r  r  r  r  r  r  r  r  r  r  rX   r   rF   rE   <module>r     sn   > $ # # # # #                    E E E E E E E Ex x x x x x x x x x x x x x x x x x x x x x x x x x x x x x * * * * * * F F F F F F F F F F Y Y Y Y Y Y Y Y Y Y,= = = = =") = = =@E E E E Ery E E EPC C C C C C C CL' ' ' ' 'RY ' ' '(2 2 2 2 2BI 2 2 26/ / / / /") / / /d= = = 7<B777* * * *Z` ` ` ` `ry ` ` `F   ")  3         "; "; ";S ";# "; "; "; ";J          %$ W&+TTT.3 .3 .3W&
 4TTT63 63 63W& 8 HsR[im:o :o :oW& +DD HsPT-V -V -VW&  +DD HsPT-V -V -V!W&& ,TT HsPT.V .V .V'W&, ,TT HsPT.V .V .V-W&2 ,TT HsPT.V .V .V3W&8 ,TT HsPT.V .V .V9W&B #DDt%- %- %-CW&H #DDt%- %- %-IW&N $TTt&- &- &-OW&T $TTt&- &- &-UW&Z $TTt&- &- &-[W&` $TTt&- &- &-aW&h TT$0 0 0iW&l dd$<I I ImW&p "T$0 0 0"d$<I I I D$]`b b b #dL: : :"dL: : :!T$]`b b b  $tL :  :  :"d! ! !#tL :  :  :  $tL}C I  I  I "&L}C"I "I "I #'$L#: #: #:kW& W& W& W Wt c cX c c c c
 c cX c c c c
 e eh e e e e
 e eh e e e e
 e eh e e e e
 e eh e e e e
 ` `x ` ` ` ` a a a a a a ` `x ` ` ` ` a a a a a a ` `x ` ` ` `
 a a a a a a a a a a a a a a a a a a
 b b b b b b a a a a a a
 b b b b b b d d8 d d d d f fX f f f f e eH e e e e  H@@BBBB > >!@!@!@!@#J"Q&Y' '     rF   