
    RЦi                        S r SSKrSSKJrJr  SSKJr  SSKJrJ	r	J
r
JrJrJrJrJr  SSKrSSKJr  SSKJrJr  SSKJrJrJrJrJrJrJr  SSKJrJrJ r J!r!  S	S
K"J#r#  S	SK$J%r%  S	SK&J'r'J(r(  S	SK)J*r*J+r+J,r,  SS/r-\ " S S5      5       r.S\/S\0S\04S jr1 GSsS\\0   S\\/   S\\0   S\/S\\\0   \\0   4   4
S jjr2 GStS\/S\0S\/S\0S\0S \0S\\\0   \0\\0   4   4S! jjr3       GSuS"\0S#\0S$\0S%\0S&\0S'\\\Rh                        S(\5S\Rh                  4S) jjr6       GSuS"\0S#\0S$\0S%\0S&\0S'\\\Rh                        S(\5S\Rn                  4S* jjr8     GSvS+\\9   S"\0S#\0S$\0S%\0S&\\0\04   S'\\\Rh                        S(\5S\\Rh                     4S, jjr: " S- S.\Rh                  5      r; " S/ S0\Rh                  5      r< " S1 S2\Rh                  5      r= " S3 S\Rh                  5      r>GSwS5\Rh                  S6\9S7\5SS4S8 jjr?S9\
\9\4   S\
\9\4   4S: jr@\A" GSx0 S;\." S<S=S>SS?S@9_SA\." S<SBSCSDSES@9_SF\." S<SBSCSDSESGSH9_SI\." SJSKSLS<SDS@9_SM\." SNSOSPSDSDS@9_SQ\." SRSSSTS<SUS@9_SV\." SWSXSTSJSYS@9_SZ\." S[S\S]S^S_S@9_S`\." SaSbScSNSdS@9_Se\." SRSfSgShS_S@9_Si\." SjSkSlSmSnS@9_So\." SpSqSrSsSES@9_St\." SuSvSwSjS_S@9_Sx\." S<S=S>SS?SySz9_S{\." SJS|S}SSDSySz9_S~\." SJSSSDSSySz9_S\." SNSSSDSSySz9_S\." SNSSSDSSySGS9_S\." SJSSS<SSySz9_S\." SRSSS<SSySz9_S\." S[SSLSSESySz9_S\." SmSSSSYSySz9_S\." SSSSNSdSySz9_S\." SSSSNSdSySGS9_S\." SjSkSlSmSnSySz9_S\." SSSSmSUSySz9_S\." SSSSSSySz9_S\." SSSSSSySz9_S\." SSSSSSySz9_S\." SSSSSSySz9_S\." S[SSLSSESyS\" \SDS9S9_S\." SES[SSLSSySSS9_S\." SYSmSSSSySSSS9	_S\." SSDSSSSSySSSSS9_S\." SSJSSSSSySSSSS9_S\." SSJSSSSSySSSSS9_6rBS\9S\5S\>4S jrCGSyS\9S\
\9\4   4S jjrDGSyS\9S\
\9\4   4S jjrEGSyS\9S\
\9\4   4S jjrF\*" 0 S\D" SSS9_S\D" SSS9_S\D" SSS9_S\D" SSS9_S\D" SS9_S\D" SS9_S\D" SS9_S\D" SSS9_S\D" SSS9_S\D" S4S9_S\D" SSSS9_S\D" SSSS9_S\D" S4S9_S\D" SSSSSSS9_S\D" SSSSSSS9_S\D" SSS9_S\F" SSS9_0 S\F" SSS9_S\F" SSS9_S\F" SSS9_S\F" SGS S9_GS\F" SGSS9_GS\F" SGSS9_GS\F" SGSS9_GS\F" SGSS9_GS	\F" SGS
S9_GS\F" SGSS9_GS\F" SGSS9_GS\F" SGSS9_GS\F" SGSS9_GS\F" SGSGSGSGSSGS9_GS\F" SGSGSGSGSSGS9_GS\F" SGSGSGSGSSGS9_GS\F" SGSGSGS9_E0 GS \F" SGS!GSGS9_GS"\F" SGS#GSGS9_GS$\F" SGS%GS&GS'GSGSSGS(9_GS)\F" SGS%GS&GS*GSGSSGS(9_GS+\F" SGS%GS&GS,GSGSSGS(9_GS-\F" SGS%GS&GS.GSGSSGS(9_GS/\F" SGS0SGS%GS&GS19_GS2\F" SGS3SGS%GS&GS19_GS4\F" SGS5SGS%GS&GS19_GS6\E" SS9_GS7\E" SS9_GS8\E" SS9_GS9\E" SS9_GS:\E" SS9_GS;\E" SS9_GS<\E" SS9_GS=\E" SS9_E0 GS>\E" SS9_GS?\E" SS9_GS@\E" SS9_GSA\E" SS9_GSB\E" SS9_GSC\E" SS9_GSD\E" SS9_GSE\E" SS9_GSF\E" SS9_GSG\E" SS9_GSH\E" SS9_GSI\E" SS9_GSJ\E" SS9_GSK\E" SS9_GSL\E" SS9_GSM\E" SS9_E5      rG\+GSzS\5S\>4GSN jj5       rH\+GSzS\5S\>4GSO jj5       rI\+GSzS\5S\>4GSP jj5       rJ\+GSzS\5S\>4GSQ jj5       rK\+GSzS\5S\>4GSR jj5       rL\+GSzS\5S\>4GSS jj5       rM\+GSzS\5S\>4GST jj5       rN\+GSzS\5S\>4GSU jj5       rO\+GSzS\5S\>4GSV jj5       rP\+GSzS\5S\>4GSW jj5       rQ\+GSzS\5S\>4GSX jj5       rR\+GSzS\5S\>4GSY jj5       rS\+GSzS\5S\>4GSZ jj5       rT\+GSzS\5S\>4GS[ jj5       rU\+GSzS\5S\>4GS\ jj5       rV\+GSzS\5S\>4GS] jj5       rW\+GSzS\5S\>4GS^ jj5       rX\+GSzS\5S\>4GS_ jj5       rY\+GSzS\5S\>4GS` jj5       rZ\+GSzS\5S\>4GSa jj5       r[\+GSzS\5S\>4GSb jj5       r\\+GSzS\5S\>4GSc jj5       r]\+GSzS\5S\>4GSd jj5       r^\+GSzS\5S\>4GSe jj5       r_\+GSzS\5S\>4GSf jj5       r`\+GSzS\5S\>4GSg jj5       ra\+GSzS\5S\>4GSh jj5       rb\+GSzS\5S\>4GSi jj5       rc\+GSzS\5S\>4GSj jj5       rd\+GSzS\5S\>4GSk jj5       re\+GSzS\5S\>4GSl jj5       rf\+GSzS\5S\>4GSm jj5       rg\+GSzS\5S\>4GSn jj5       rh\+GSzS\5S\>4GSo jj5       ri\+GSzS\5S\>4GSp jj5       rj\+GSzS\5S\>4GSq jj5       rk\," \lGSrS05        g({  a  RegNet X, Y, Z, and more

Paper: `Designing Network Design Spaces` - https://arxiv.org/abs/2003.13678
Original Impl: https://github.com/facebookresearch/pycls/blob/master/pycls/models/regnet.py

Paper: `Fast and Accurate Model Scaling` - https://arxiv.org/abs/2103.06877
Original Impl: None

Based on original PyTorch impl linked above, but re-wrote to use my own blocks (adapted from ResNet here)
and cleaned up with more descriptive variable names.

Weights from original pycls impl have been modified:
* first layer from BGR -> RGB as most PyTorch models are
* removed training specific dict entries from checkpoints and keep model state_dict only
* remap names to match the ones here

Supports weight loading from torchvision and classy-vision (incl VISSL SEER)

A number of custom timm model definitions additions including:
* stochastic depth, gradient checkpointing, layer-decay, configurable dilation
* a pre-activation 'V' variant
* only known RegNet-Z model definitions with pretrained weights

Hacked together by / Copyright 2020 Ross Wightman
    N)	dataclassreplace)partial)AnyCallableDictListOptionalUnionTupleTypeIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)ClassifierHeadAvgPool2dSameConvNormActSEModuleDropPathGroupNormActcalculate_drop_path_rates)get_act_layerget_norm_act_layercreate_conv2dmake_divisible   )build_model_with_cfg)feature_take_indices)checkpoint_seqnamed_apply)generate_default_cfgsregister_modelregister_model_deprecationsRegNet	RegNetCfgc                      \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\
\S'   S	r\
\S
'   Sr\\S'   Sr\
\S'   Sr\
\S'   Sr\
\S'   Sr\\S'   Sr\\   \S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\\4   \S'   Sr\\\4   \S'   Srg )!r%   -   z"RegNet architecture configuration.   depthP   w0q=
ףPE@waHzG@wm   
group_size      ?bottle_ratio        se_ratiogroup_min_ratio    
stem_widthconv1x1
downsampleF
linear_outpreactr   num_featuresrelu	act_layer	batchnorm
norm_layer N)__name__
__module____qualname____firstlineno____doc__r)   int__annotations__r+   r-   floatr/   r1   r3   r5   r6   r8   r:   r
   strr;   boolr<   r=   r?   r   r   rA   __static_attributes__rB       Q/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/regnet.pyr%   r%   -   s    ,E3OBLBBJL%HeOUJ )J)JFDL#&,IuS(]#,'2Jc8m$2rN   fqreturnc                 4    [        [        X-  5      U-  5      $ )zConverts a float to the closest non-zero int divisible by q.

Args:
    f: Input float value.
    q: Quantization divisor.

Returns:
    Quantized integer value.
)rH   round)rP   rQ   s     rO   quantize_floatrU   A   s     uQU|a  rN   widthsbottle_ratiosgroups	min_ratioc           	         [        X5       VVs/ s H  u  pE[        XE-  5      PM     nnn[        X&5       VVs/ s H  u  px[        Xx5      PM     nnnU(       a*  [        Xb5       VVs/ s H  u  p[        XU5      PM     nnnO([        Xb5       VVs/ s H  u  p[	        X5      PM     nnn[        Xa5       VVs/ s H  u  p[        X-  5      PM     n nnX4$ s  snnf s  snnf s  snnf s  snnf s  snnf )a  Adjusts the compatibility of widths and groups.

Args:
    widths: List of channel widths.
    bottle_ratios: List of bottleneck ratios.
    groups: List of group sizes.
    min_ratio: Minimum ratio for divisibility.

Returns:
    Tuple of adjusted widths and groups.
)ziprH   minr   rU   )	rV   rW   rX   rY   wbbottleneck_widthsgw_bots	            rO   adjust_widths_groups_comprb   N   s    " 14F0JK0JQU0JK,/,JK,Jc!m,JFKQTUfQopQoXU^Ei@QopFIJ[FdeFd(%^E5Fde-01B-RS-Rc%)n-RFS> LK qeSs   CC(C%C+:C1   width_slopewidth_initial
width_multr)   r1   quantc                    U S:  a  US:  a  US:  a  X-  S:X  d   e[         R                  " U[         R                  S9U -  U-   n[         R                  " [         R                  " Xa-  5      [
        R                  " U5      -  5      n[         R                  " U[         R                  " X'5      -  U-  5      U-  n[        [         R                  " U5      5      [        UR                  5       R                  5       5      S-   p[         R                  " [        U	5       Vs/ s H  oPM     sn[         R                  S9nUR                  5       R                  5       XR                  5       4$ s  snf )aM  Generates per block widths from RegNet parameters.

Args:
    width_slope: Slope parameter for width progression.
    width_initial: Initial width.
    width_mult: Width multiplier.
    depth: Network depth.
    group_size: Group convolution size.
    quant: Quantization factor.

Returns:
    Tuple of (widths, num_stages, groups).
r   r   )dtype)torcharangefloat32rT   logmathpowlenuniquerH   maxitemtensorrangeint32tolist)rd   re   rf   r)   r1   rg   widths_cont
width_expsrV   
num_stages	max_stage_rX   s                rO   generate_regnetr}   j   s   * ! 1j1nI^bcIccc ,,uEMM:[H=XKUYY{'BCdhhzFZZ[J[[-%))J*KKuTUX]]FV 45s:>>;K;P;P;R7SVW7W	\\uZ/@A/@!:/@AUF::< *mmo== Bs   !E.in_chsout_chskernel_sizestridedilationrA   r<   c	                     XxS.n	U=(       d    [         R                  nUS:X  a  US:X  a  SOUnUS:  a  UOSnU(       a  [        U UU4UUS.U	D6$ [        U UU4UUUSS.U	D6$ )aA  Create convolutional downsampling module.

Args:
    in_chs: Input channels.
    out_chs: Output channels.
    kernel_size: Convolution kernel size.
    stride: Convolution stride.
    dilation: Convolution dilation.
    norm_layer: Normalization layer.
    preact: Use pre-activation.

Returns:
    Downsampling module.
deviceri   r   )r   r   F)r   r   rA   	apply_act)nnBatchNorm2dr   r   )
r~   r   r   r   r   rA   r<   r   ri   dds
             rO   downsample_convr      s    2 	+B-r~~J{x1}!+K&?xH
 
 
 	
 	
 !	
 	
 		
rN   c	                 `   XxS.n	U=(       d    [         R                  nUS:X  a  UOSn
[         R                  " 5       nUS:  d  US:  a+  U
S:X  a  US:  a  [        O[         R                  nU" SU
SSS9nU(       a  [        XS4SS0U	D6nO[        XS4SUSS.U	D6n[         R                  " X/6 $ )	a  Create average pool downsampling module.

AvgPool Downsampling as in 'D' ResNet variants. This is not in RegNet space but I might experiment.

Args:
    in_chs: Input channels.
    out_chs: Output channels.
    kernel_size: Convolution kernel size.
    stride: Convolution stride.
    dilation: Convolution dilation.
    norm_layer: Normalization layer.
    preact: Use pre-activation.

Returns:
    Sequential downsampling module.
r   r      TF)	ceil_modecount_include_padr   )r   rA   r   )r   r   Identityr   	AvgPool2dr   r   
Sequential)r~   r   r   r   r   rA   r<   r   ri   r   
avg_stridepoolavg_pool_fnconvs                 rO   downsample_avgr      s    6 	+B-r~~J#q=aJ;;=DzX\'1Q8a<mR\\1jDERVa@@R@6AfaJZ_fcef==4,''rN   downsample_typec
                     XS.n
U S;   d   eX:w  d  US:w  d  US   US   :w  a9  [        S	XES   XgS.U
D6nU (       d  gU S:X  a  [        X40 UD6$ [        X4SU0UD6$ [        R                  " 5       $ )
a  Create shortcut connection for residual blocks.

Args:
    downsample_type: Type of downsampling ('avg', 'conv1x1', or None).
    in_chs: Input channels.
    out_chs: Output channels.
    kernel_size: Kernel size for conv downsampling.
    stride: Stride for downsampling.
    dilation: Dilation rates.
    norm_layer: Normalization layer.
    preact: Use pre-activation.

Returns:
    Shortcut module or None.
r   )avgr9    Nr   r   )r   r   rA   r<   Nr   r   rB   )dictr   r   r   r   )r   r~   r   r   r   r   rA   r<   r   ri   r   dargss               rO   create_shortcutr      s    6 	+B::::FaK8A;(1++EeFa[Zebde%!&;U;;"6UUuUU{{}rN   c                   L  ^  \ rS rSrSrSSSSSSS\R                  \R                  SS	SS4S
\S\S\S\	\\4   S\
S\S\
S\S\S\\R                     S\\R                     S\\\R                        S\
4U 4S jjjrSS jrS\R&                  S\R&                  4S jrSrU =r$ )
Bottlenecki  zRegNet Bottleneck block.

This is almost exactly the same as a ResNet Bottleneck. The main difference is the SE block is moved from
after conv3 to after conv2. Otherwise, it's just redefining the arguments for groups/bottleneck channels.
r   r   r         ?r9   FNr4   r~   r   r   r   r3   r1   r5   r:   r;   r?   rA   
drop_blockdrop_path_ratec           	        > XS.n[         TU ]  5         [        U
5      n
[        [	        X%-  5      5      nUU-  n[        XS9n[        UU4SS0UDUD6U l        [        UU4SUUS   UUS.UDUD6U l        U(       a+  [        [	        X-  5      5      n[        U4UU
S.UD6U l
        O[        R                  " 5       U l
        [        UU4SS	S
.UDUD6U l        U	(       a  [        R                  " 5       OU
" 5       U l        [        UUU4SUUUS.UD6U l        US:  a  [#        U5      U l        g[        R                  " 5       U l        g)a;  Initialize RegNet Bottleneck block.

Args:
    in_chs: Input channels.
    out_chs: Output channels.
    stride: Convolution stride.
    dilation: Dilation rates for conv2 and shortcut.
    bottle_ratio: Bottleneck ratio (reduction factor).
    group_size: Group convolution size.
    se_ratio: Squeeze-and-excitation ratio.
    downsample: Shortcut downsampling type.
    linear_out: Use linear activation for output.
    act_layer: Activation layer.
    norm_layer: Normalization layer.
    drop_block: Drop block layer.
    drop_path_rate: Stochastic depth drop rate.
r   r?   rA   r   r      r   )r   r   r   rX   
drop_layerrd_channelsr?   F)r   r   )r   r   r   rA   N)super__init__r   rH   rT   r   r   conv1conv2r   ser   r   conv3act3r   r:   r   	drop_path)selfr~   r   r   r   r3   r1   r5   r:   r;   r?   rA   r   r   r   ri   r   bottleneck_chsrX   cargsse_channels	__class__s                        rO   r   Bottleneck.__init__  sn   F /!),	U7#9:;:-y@ VQV%VSUV
 

 a[!

 

 


 eF$567K~b;R[b_abDGkkmDG haSXh\ahegh
%/BKKMY[	)	
 !	
 	
 6Da5G.1R[[]rN   rR   c                 ~    [         R                  R                  U R                  R                  R
                  5        g)z1Zero-initialize the last batch norm in the block.N)r   initzeros_r   bnweightr   s    rO   zero_init_lastBottleneck.zero_init_last`  s     
tzz}}++,rN   xc                    UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  b#  U R                  U5      U R	                  U5      -   nU R                  U5      nU$ zGForward pass.

Args:
    x: Input tensor.

Returns:
    Output tensor.
)r   r   r   r   r:   r   r   r   r   shortcuts      rO   forwardBottleneck.forwardd  sw     JJqMJJqMGGAJJJqM??& q!DOOH$==AIIaLrN   )r   r   r   r   r:   r   r   rR   NrC   rD   rE   rF   rG   r   ReLUr   rH   r   rJ   rK   rL   r   Moduler
   r   r   rj   Tensorr   rM   __classcell__r   s   @rO   r   r     s,    (."#"'$)+*,..48$&!G[G[ G[ 	G[
 CHoG[  G[ G[ G[ G[ G[ BIIG[ RYYG[ !bii1G[ "G[ G[R- %,,  rN   r   c                   L  ^  \ rS rSrSrSSSSSSS\R                  \R                  SS	SS4S
\S\S\S\	\\4   S\
S\S\
S\S\S\\R                     S\\R                     S\\\R                        S\
4U 4S jjjrSS jrS\R&                  S\R&                  4S jrSrU =r$ )PreBottleneckiz  zfPre-activation RegNet Bottleneck block.

Similar to Bottleneck but with pre-activation normalization.
r   r   r   r9   FNr4   r~   r   r   r   r3   r1   r5   r:   r;   r?   rA   r   r   c                 x  > XS.n[         TU ]  5         [        X5      n[        [	        X%-  5      5      nUU-  nU" U40 UD6U l        [        UU4SS0UD6U l        U" U40 UD6U l        [        UU4SUUS   US.UD6U l	        U(       a+  [        [	        X-  5      5      n[        U4UU
S.UD6U l        O[        R                  " 5       U l        U" U40 UD6U l        [        UU4SS0UD6U l        [!        UUU4SUUSS	.UD6U l        US:  a  [%        U5      U l        g
[        R                  " 5       U l        g
)aJ  Initialize pre-activation RegNet Bottleneck block.

Args:
    in_chs: Input channels.
    out_chs: Output channels.
    stride: Convolution stride.
    dilation: Dilation rates for conv2 and shortcut.
    bottle_ratio: Bottleneck ratio (reduction factor).
    group_size: Group convolution size.
    se_ratio: Squeeze-and-excitation ratio.
    downsample: Shortcut downsampling type.
    linear_out: Use linear activation for output.
    act_layer: Activation layer.
    norm_layer: Normalization layer.
    drop_block: Drop block layer.
    drop_path_rate: Stochastic depth drop rate.
r   r   r   r   r   )r   r   r   rX   r   T)r   r   r   r<   N)r   r   r   rH   rT   norm1r   r   norm2r   r   r   r   r   norm3r   r   r:   r   r   )r   r~   r   r   r   r3   r1   r5   r:   r;   r?   rA   r   r   r   ri   r   norm_act_layerr   rX   r   r   s                        rO   r   PreBottleneck.__init__  sg   F /+JBU7#9:;:-#F1b1
"6>OqOBO
#N9b9
"
 a[
 

 eF$567K~b;R[b_abDGkkmDG#N9b9
">7PPRP
)	
 	
 	
 6Da5G.1R[[]rN   rR   c                     g)z?Zero-initialize the last batch norm (no-op for pre-activation).NrB   r   s    rO   r   PreBottleneck.zero_init_last  s    rN   r   c                 X   U R                  U5      nUnU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  b#  U R                  U5      U R                  U5      -   nU$ r   )	r   r   r   r   r   r   r   r:   r   r   s      rO   r   PreBottleneck.forward  s     JJqMJJqMJJqMJJqMGGAJJJqMJJqM??& q!DOOH$==ArN   )	r   r   r   r:   r   r   r   r   r   r   r   r   s   @rO   r   r   z  s,    (."#"'$)+*,..48$&!F[F[ F[ 	F[
 CHoF[  F[ F[ F[ F[ F[ BIIF[ RYYF[ !bii1F[ "F[ F[P %,,  rN   r   c                      ^  \ rS rSrSrS\4S\S\S\S\S\S	\\\	      S
\
\R                     4U 4S jjjrS\R                  S\R                  4S jrSrU =r$ )RegStagei  zRegNet stage (sequence of blocks with the same output shape).

A stage consists of multiple bottleneck blocks with the same output dimensions.
Nr)   r~   r   r   r   drop_path_ratesblock_fnc                   > [         TU ]  5         SU l        US;   a  SOSn	[        U5       HW  n
U
S:X  a  UOSnU
S:X  a  UOUnX4nUb  Xj   OSnSR	                  U
S-   5      nU R                  UU" UU4UUUS	.UD65        Un	MY     g)
aH  Initialize RegNet stage.

Args:
    depth: Number of blocks in stage.
    in_chs: Input channels.
    out_chs: Output channels.
    stride: Stride for first block.
    dilation: Dilation rate.
    drop_path_rates: Drop path rates for each block.
    block_fn: Block class to use.
    **block_kwargs: Additional block arguments.
F)r   r   r   r   r   Nr4   zb{})r   r   r   )r   r   grad_checkpointingru   format
add_module)r   r)   r~   r   r   r   r   r   block_kwargsfirst_dilationiblock_strideblock_in_chsblock_dilationdprnamer   s                   rO   r   RegStage.__init__  s    . 	"'&&0auA%&!V6L%&!V6L,7N(7(C/$C<<A&DOO  (+#& #
 &N# rN   r   rR   c                     U R                   (       a?  [        R                  R                  5       (       d  [	        U R                  5       U5      nU$ U R                  5        H  nU" U5      nM     U$ )zgForward pass through all blocks in the stage.

Args:
    x: Input tensor.

Returns:
    Output tensor.
)r   rj   jitis_scriptingr   children)r   r   blocks      rO   r   RegStage.forward  sX     ""599+A+A+C+Ct}}2A  !H )rN   )r   )rC   rD   rE   rF   rG   r   rH   r
   r	   rJ   r   r   r   r   rj   r   r   rM   r   r   s   @rO   r   r     s     6:(2,&,& ,& 	,&
 ,& ,& &d5k2,& 299o,& ,&\ %,,  rN   r   c                   j  ^  \ rS rSrSr         S%S\S\S\S\S\S	\S
\S\	4U 4S jjjr
   S&S\S\S\S
\S\\\\\4      \\\4   4   4
S jjr\R"                  R$                  S'S\	S\\\4   4S jj5       r\R"                  R$                  S(S\	SS4S jj5       r\R"                  R$                  S\R,                  4S j5       rS)S\S\\   SS4S jjr     S*S\R4                  S\\\\\   4      S\	S\	S\S\	S\\\R4                     \\R4                  \\R4                     4   4   4S jjr   S+S\\\\   4   S\	S\	S\\   4S jjrS\R4                  S\R4                  4S  jrS'S\R4                  S!\	S\R4                  4S" jjrS\R4                  S\R4                  4S# jr S$r!U =r"$ ),r$   i)  zRegNet-X, Y, and Z Models.

Paper: https://arxiv.org/abs/2003.13678
Original Impl: https://github.com/facebookresearch/pycls/blob/master/pycls/models/regnet.py
Ncfgin_chansnum_classesoutput_strideglobal_pool	drop_rater   r   c           
        > [         TU ]  5         XS.nX0l        X l        X`l        US;   d   e[        U40 UD6nUR                  n[        UR                  UR                  S9nUR                  (       a  [        X-S4SS0UD6U l        O[        X-S4SS0UDUD6U l        [        USSS9/U l        UnSnU R                  UUUS	9u  nn[!        U5      S
:X  d   eUR                  (       a  ["        O[$        n['        U5       Hh  u  nnSR)                  US-   5      nU R+                  U[-        SUUS.UDUDUD65        US   nUUS   -  nU =R                  [        UUUS9/-  sl        Mj     UR.                  (       a1  [        XR.                  4SS0UDUD6U l        UR.                  U l        O`UR2                  =(       d    UR                  nU(       a  [5        UR                  5      " 5       O[6        R8                  " 5       U l        Xl        U R.                  U l        [=        SU R.                  UUUS.UD6U l        [A        [C        [D        US9U 5        g)a  Initialize RegNet model.

Args:
    cfg: Model architecture configuration.
    in_chans: Number of input channels.
    num_classes: Number of classifier classes.
    output_stride: Output stride of network, one of (8, 16, 32).
    global_pool: Global pooling type.
    drop_rate: Dropout rate.
    drop_path_rate: Stochastic depth drop-path rate.
    zero_init_last: Zero-init last weight of residual path.
    kwargs: Extra kwargs overlayed onto cfg.
r   )rc      r7   r   r   r   r   stem)num_chs	reductionmodule)r   r      zs{}r   )r~   r   r   r   )in_featuresr   	pool_typer   )r   NrB   )#r   r   r   r   r   r   r8   r   r?   rA   r<   r   r   r   feature_info_get_stage_argsrp   r   r   	enumerater   r   r   r=   
final_convr;   r   r   r   head_hidden_sizer   headr    r   _init_weights)r   r   r   r   r   r   r   r   r   r   ri   kwargsr   r8   na_args
prev_widthcurr_strideper_stage_argscommon_argsr   r   
stage_args
stage_name	final_actr   s                           rO   r   RegNet.__init__0  sd   6 	/& "+++c$V$ ^^
3>>J::%hANaN2NDI#H!WAWWTVWDI!*&QR  
&*&:&:') '; '
#
 >"a'''$'JJ=J&~6MAza!e,JOO %% ! "	
 	 $I.J:h//K$z[Yc"d!ee 7" )*6F6FgTUgY`gdfgDO # 0 0D4#**I@ImCMM:<r{{}DO * $ 1 1" 
))#!	

 
	 	GM.I4PrN   default_striderR   c           	      H   [        UR                  UR                  UR                  UR                  UR
                  5      u  pVn[        R                  " [        R                  " U5      SS9u  pUR                  5       U	R                  5       p[        U5       V
s/ s H  oR                  PM     nn
/ n/ nSnSn[        U5       H8  n
X:  a  X-  nSnOUnUU-  nUR                  U5        UR                  U5        M:     [        XISS9n[        XXqR                  S9u  p/ SQn[!        XXXU5       Vs/ s H  n[#        [!        UU5      5      PM     nn[#        UR$                  UR&                  UR(                  UR*                  UR,                  S9nUU4$ s  sn
f s  snf )	a  Generate stage arguments from configuration.

Args:`
    cfg: RegNet configuration.
    default_stride: Default stride for stages.
    output_stride: Target output stride.
    drop_path_rate: Stochastic depth rate.

Returns:
    Tuple of (per_stage_args, common_args).
T)return_countsr   r   )	stagewise)rY   )r   r   r   r)   r3   r1   r   )r:   r5   r;   r?   rA   )r}   r-   r+   r/   r)   r1   rj   rq   rt   rw   ru   r3   appendr   rb   r6   r[   r   r:   r5   r;   r?   rA   )r   r   r  r   r   rV   rz   stage_gsstage_widthsstage_depthsr|   stage_brstage_stridesstage_dilations
net_strider   r   	stage_dpr	arg_namesparamsr  r  s                         rO   r  RegNet._get_stage_args  s   & (7svvsvvsvvsyyZ]ZhZh'i$H &+\\%,,v2FVZ%["%1%8%8%:L<O<O<Ql.3J.?@.?$$.?@
z"A**'f$
  (""8, # .nVZ[	!:H8K8K"Mo	 _H`ij
j .4DY'(j 	 
 ~~\\~~mm~~
 {**= A&
s   F6Fcoarsec                 ,    [        SU(       a  SS9$ SS9$ )z"Group parameters for optimization.z^stemz^s(\d+)z^s(\d+)\.b(\d+))r   blocks)r   )r   r"  s     rO   group_matcherRegNet.group_matcher  s&     !':
 	
-?
 	
rN   enablec                 V    [        U R                  5       5      SS  H	  nXl        M     g)z)Enable or disable gradient checkpointing.r   N)listr   r   )r   r'  ss      rO   set_grad_checkpointingRegNet.set_grad_checkpointing  s&     dmmo&q,A#)  -rN   c                 .    U R                   R                  $ )zGet the classifier head.)r  fcr   s    rO   get_classifierRegNet.get_classifier  s     yy||rN   c                 B    Xl         U R                  R                  XS9  g)zReset the classifier head.

Args:
    num_classes: Number of classes for new classifier.
    global_pool: Global pooling type.
)r   N)r   r  reset)r   r   r   s      rO   reset_classifierRegNet.reset_classifier  s     '		;rN   r   indicesnorm
stop_early
output_fmtintermediates_onlyc                 ^   US;   d   S5       e/ n[        SU5      u  pSn
U R                  U5      nX;   a  UR                  U5        SnU(       a  USU	 nU H1  nU
S-  n
[        X5      " U5      nX;   d  M   UR                  U5        M3     U(       a  U$ U
S:X  a  U R	                  U5      nX4$ )	a  Forward features that returns intermediates.

Args:
    x: Input image tensor
    indices: Take last n blocks if int, all if None, select matching indices if sequence
    norm: Apply norm layer to compatible intermediates
    stop_early: Stop iterating over blocks when last desired intermediate hit
    output_fmt: Shape of intermediate feature outputs
    intermediates_only: Only return intermediate features
Returns:

)NCHWzOutput shape must be NCHW.   r   s1s2s3s4Nr   r   )r   r   r  getattrr  )r   r   r6  r7  r8  r9  r:  intermediatestake_indices	max_indexfeat_idxlayer_namesns                rO   forward_intermediatesRegNet.forward_intermediates  s    * Y&D(DD&"6q'"B IIaL#  #.%jy1KAMH #A'$$Q'	    q="ArN   
prune_norm
prune_headc                     [        SU5      u  pESnXeS nU H"  n[        X[        R                  " 5       5        M$     US:  a  [        R                  " 5       U l        U(       a  U R                  SS5        U$ )a  Prune layers not required for specified intermediates.

Args:
    indices: Indices of intermediate layers to keep.
    prune_norm: Whether to prune normalization layer.
    prune_head: Whether to prune the classifier head.

Returns:
    List of indices that were kept.
r=  r>  Nr   r   r   )r   setattrr   r   r  r4  )r   r6  rL  rM  rE  rF  rH  rI  s           rO   prune_intermediate_layers RegNet.prune_intermediate_layers  si      #7q'"B.!*-ADR[[]+ q= kkmDO!!!R(rN   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU$ )zjForward pass through feature extraction layers.

Args:
    x: Input tensor.

Returns:
    Feature tensor.
)r   r?  r@  rA  rB  r  r   r   s     rO   forward_featuresRegNet.forward_features)  sX     IIaLGGAJGGAJGGAJGGAJOOArN   
pre_logitsc                 P    U(       a  U R                  XS9$ U R                  U5      $ )zForward pass through classifier head.

Args:
    x: Input features.
    pre_logits: Return features before final linear layer.

Returns:
    Classification logits or features.
)rV  )r  )r   r   rV  s      rO   forward_headRegNet.forward_head:  s&     7Atyyy2RdiiPQlRrN   c                 J    U R                  U5      nU R                  U5      nU$ )zGForward pass.

Args:
    x: Input tensor.

Returns:
    Output logits.
)rT  rX  rS  s     rO   r   RegNet.forwardF  s)     !!!$a rN   )	r   r  r  r  r  r   r   r=   r   )	r     r7   r   r4   r4   TNN)r   r7   r4   F)T)N)NFFr<  F)r   FT)#rC   rD   rE   rF   rG   r%   rH   rK   rJ   rL   r   r   r	   r   r   r  rj   r   ignorer%  r,  r   r   r0  r
   r4  r   r   rJ  rP  rT  rX  r   rM   r   r   s   @rO   r$   r$   )  s    #!#$!$&#'WQWQ WQ 	WQ
 WQ WQ WQ "WQ !WQ WQx #$!#$&6+6+  6+ 	6+
 "6+ 
tDcN#T#s(^3	46+p YY
D 
T#s(^ 
 
 YY*T *T * *
 YY		  <C <hsm <W[ < 8<$$',. ||.  eCcN34.  	. 
 .  .  !%.  
tELL!5tELL7I)I#JJ	K. d ./$#	3S	>*  	
 
c6%,, 5<< "
Sell 
S 
S 
S %,,  rN   r   r   r   r   c                    [        U [        R                  5      (       a  U R                  S   U R                  S   -  U R                  -  nX0R
                  -  nU R                  R                  R                  S[        R                  " SU-  5      5        U R                  b%  U R                  R                  R                  5         gg[        U [        R                  5      (       aa  [        R                  R                  U R                  SSS9  U R                  b*  [        R                  R                  U R                  5        ggU(       a#  [!        U S5      (       a  U R#                  5         ggg)	zInitialize module weights.

Args:
    module: PyTorch module to initialize.
    name: Module name.
    zero_init_last: Zero-initialize last layer weights.
r   r          @Nr4   g{Gz?)meanstdr   )
isinstancer   Conv2dr   out_channelsrX   r   datanormal_rn   sqrtbiaszero_Linearr   r   hasattrr   )r   r   r   fan_outs       rO   r  r  T  s	    &"))$$$$Q'&*<*<Q*??&BUBUUMM!""1diig&>?;;"KK""$ #	FBII	&	&
CT:;;"GGNN6;;' #	GF,<== >rN   
state_dictc                    U R                  SU 5      n / SQnSU ;   a  SSKnU S   S   S   n 0 nU S   R                  5        Hp  u  pEUR                  SS	5      nUR                  S
S5      nUR	                  SS U5      nUR	                  SSU5      nU H  u  pgUR                  Xg5      nM     XSU'   Mr     U S   R                  5        H)  u  pESU;   d  SU;   a  M  UR                  SS5      nXSU'   M+     U$ SU ;   a  SSKn0 nU R                  5        Ho  u  pEUR                  SS	5      nUR                  SS5      nUR	                  SS U5      nU H  u  pgUR                  Xg5      nM     UR                  SS5      nXSU'   Mq     U$ U $ )zFilter and remap state dict keys for compatibility.

Args:
    state_dict: Raw state dictionary.

Returns:
    Filtered state dictionary.
model))zf.a.0z
conv1.conv)zf.a.1zconv1.bn)zf.b.0z
conv2.conv)zf.b.1zconv2.bn)z
f.final_bnconv3.bn)zf.se.excitation.0zse.fc1)zf.se.excitation.2zse.fc2)zf.ser   )zf.c.0
conv3.conv)zf.c.1rq  )zf.crr  )zproj.0downsample.conv)zproj.1zdownsample.bn)projrs  classy_state_dictr   N
base_modeltrunkz_feature_blocks.conv1.stem.0	stem.convz_feature_blocks.conv1.stem.1zstem.bnz&^_feature_blocks.res\d.block(\d)-(\d+)c                 x    S[        U R                  S5      5       S[        U R                  S5      5      S-    3$ )Nr+  r   .br   rH   groupr   s    rO   <lambda>_filter_fn.<locals>.<lambda>  0    Ac!''!*o.bQWWQZ11D0EFrN   zs(\d)\.b(\d+)\.bnzs\1.b\2.downsample.bnheadsprojection_head
prototypesz0.clf.0head.fczstem.0.weightzstem.0zstem.1z)trunk_output.block(\d)\.block(\d+)\-(\d+)c                 x    S[        U R                  S5      5       S[        U R                  S5      5      S-    3$ )Nr+  r   rz  r   r{  r}  s    rO   r~  r    r  rN   zfc.zhead.fc.)getreitemsr   sub)rn  replacesr  outkvr+  rs           rO   
_filter_fnr  j  s    4JH  j( 34\B7K
w'--/DA		8+FA		8)DA9FKA +-EqIA IIaO !F 0 w'--/DA A%):		)Y/AF	 0
 
*$$$&DA		(K0A		(I.A<FKA !IIaO !		%,AF ' 
rN   regnetx_002r0   gQ8B@gQ@   )r+   r-   r/   r1   r)   regnetx_004g{Gz8@gRQ@r      regnetx_004_tvg?)r+   r-   r/   r1   r)   r6   regnetx_0060   g\(|B@gQ@regnetx_0088   g=
ףpA@g=
ףp=@regnetx_016r*   gzGA@g      @   regnetx_032X   g(\O:@   regnetx_040`   g33333SC@gq=
ףp@(      regnetx_064   g
ףp=jN@g(\ @   regnetx_080gHzH@g
ףp=
@x   regnetx_120   gףp=
WR@g(\@p      regnetx_160   gQK@g @   regnetx_320@  gףp=
wQ@r`  regnety_002r   )r+   r-   r/   r1   r)   r5   regnety_004gp=
;@gQ @regnety_006gQE@@g(\@   regnety_008gQkC@g333333@   regnety_008_tv)r+   r-   r/   r1   r)   r5   r6   regnety_016g(\µ4@g333333@   regnety_032r,   r.   r(   regnety_040g)\h?@@   regnety_064g\(@@g)\(@H   regnety_080   gGz4S@gQ@regnety_080_tvregnety_120regnety_160   gQZ@gףp=
@regnety_320   g)\\@g=
ףp=@   regnety_640i`  g(\ob@iH  regnety_1280i  g(\d@g)\(@i  regnety_2560i  g(\l@iu  regnety_040_sgnsilu)r1   )r+   r-   r/   r1   r)   r5   r?   rA   regnetv_040T)r)   r+   r-   r/   r1   r5   r<   r?   regnetv_064r   )	r)   r+   r-   r/   r1   r5   r<   r?   r:   regnetz_005gffffff%@gGz@r   g      @i   )r)   r+   r-   r/   r1   r3   r5   r:   r;   r=   r?   regnetz_040   g      -@g+@regnetz_040_hi   variant
pretrainedc                 @    [        [        X4[        U    [        S.UD6$ )zCreate a RegNet model.

Args:
    variant: Model variant name.
    pretrained: Load pretrained weights.
    **kwargs: Additional model arguments.

Returns:
    RegNet model instance.
)	model_cfgpretrained_filter_fn)r   r$   
model_cfgsr  )r  r  r  s      rO   _create_regnetr    s0      W%' 	 rN   urlc                 6    U SSSSSSS[         [        SS	S
S.UE$ )zCreate default configuration dictionary.

Args:
    url: Model weight URL.
    **kwargs: Additional configuration options.

Returns:
    Configuration dictionary.
r\  r      r     r  )r      r  gffffff?r2   bicubicrx  r  z
apache-2.0)r  r   
input_size	pool_sizetest_input_sizecrop_pcttest_crop_pctinterpolationra  rb  
first_conv
classifierlicenser   r  r  s     rO   _cfgr    s:     4}SY(dS",AJ^!
 $* rN   c                 4    U SSSSS[         [        SSSS	S
.UE$ )zCreate pycls configuration dictionary.

Args:
    url: Model weight URL.
    **kwargs: Additional configuration options.

Returns:
    Configuration dictionary.
r\  r  r  g      ?r  rx  r  mitz)https://github.com/facebookresearch/pyclsr  r   r  r  r  r  ra  rb  r  r  r  
origin_urlr   r  s     rO   _cfgpycr    s:     4}SYI%.B!(S
 X^ rN   c                 4    U SSSSS[         [        SSSS	S
.UE$ )zCreate torchvision v2 configuration dictionary.

Args:
    url: Model weight URL.
    **kwargs: Additional configuration options.

Returns:
    Configuration dictionary.
r\  r  r  gzG?r  rx  r  zbsd-3-clausez!https://github.com/pytorch/visionr  r   r  s     rO   _cfgtv2r  $  s:     4}SYI%.B!!1T
 Y_ rN   zregnety_032.ra_in1kztimm/znhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/regnety_032_ra-7f2439f9.pth)	hf_hub_idr  zregnety_040.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_040_ra3-670e1166.pthzregnety_064.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_064_ra3-aa26dc7d.pthzregnety_080.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_080_ra3-1fdc4344.pthzregnety_120.sw_in12k_ft_in1k)r  zregnety_160.sw_in12k_ft_in1kzregnety_160.lion_in12k_ft_in1kzregnety_120.sw_in12ki-.  )r  r   zregnety_160.sw_in12kzregnety_040_sgn.untrained)r  zregnetv_040.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetv_040_ra3-c248f51f.pthr   )r  r  r  zregnetv_064.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetv_064_ra3-530616c2.pthzregnetz_005.untrainedzregnetz_040.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetz_040_ra3-9007edf5.pth)r      r  )rc   rc   r2   )r   r  r  )r  r  r  r  r  r  zregnetz_040_h.ra3_in1kzthttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetz_040h_ra3-f594343b.pthzregnety_160.deit_in1kz<https://dl.fbaipublicfiles.com/deit/regnety_160-a5fe301d.pthzregnetx_004_tv.tv2_in1kz?https://download.pytorch.org/models/regnet_x_400mf-62229a5f.pthzregnetx_008.tv2_in1kz?https://download.pytorch.org/models/regnet_x_800mf-94a99ebd.pthzregnetx_016.tv2_in1kz?https://download.pytorch.org/models/regnet_x_1_6gf-a12f2b72.pthzregnetx_032.tv2_in1kz?https://download.pytorch.org/models/regnet_x_3_2gf-7071aa85.pthzregnetx_080.tv2_in1kz=https://download.pytorch.org/models/regnet_x_8gf-2b70d774.pthzregnetx_160.tv2_in1kz>https://download.pytorch.org/models/regnet_x_16gf-ba3796d7.pthzregnetx_320.tv2_in1kz>https://download.pytorch.org/models/regnet_x_32gf-6eb8fdc6.pthzregnety_004.tv2_in1kz?https://download.pytorch.org/models/regnet_y_400mf-e6988f5f.pthzregnety_008_tv.tv2_in1kz?https://download.pytorch.org/models/regnet_y_800mf-58fc7688.pthzregnety_016.tv2_in1kz?https://download.pytorch.org/models/regnet_y_1_6gf-0d7bc02a.pthzregnety_032.tv2_in1kz?https://download.pytorch.org/models/regnet_y_3_2gf-9180c971.pthzregnety_080_tv.tv2_in1kz=https://download.pytorch.org/models/regnet_y_8gf-dc2b1b54.pthzregnety_160.tv2_in1kz>https://download.pytorch.org/models/regnet_y_16gf-3e4a00f9.pthzregnety_320.tv2_in1kz>https://download.pytorch.org/models/regnet_y_32gf-8db6d4b5.pthzregnety_160.swag_ft_in1kzChttps://download.pytorch.org/models/regnet_y_16gf_swag-43afe44d.pthzcc-by-nc-4.0)r     r  )   r  )r  r  r  r  r  r  zregnety_320.swag_ft_in1kzChttps://download.pytorch.org/models/regnet_y_32gf_swag-04fdfa75.pthzregnety_1280.swag_ft_in1kzDhttps://download.pytorch.org/models/regnet_y_128gf_swag-c8ce3e52.pthzregnety_160.swag_lc_in1kzFhttps://download.pytorch.org/models/regnet_y_16gf_lc_swag-f3ec0043.pth)r  r  r  zregnety_320.swag_lc_in1kzFhttps://download.pytorch.org/models/regnet_y_32gf_lc_swag-e1583746.pthzregnety_1280.swag_lc_in1kzGhttps://download.pytorch.org/models/regnet_y_128gf_lc_swag-cbe8ce12.pthzregnety_320.seer_ft_in1kzseer-licensez)https://github.com/facebookresearch/visslzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet32_finetuned_in1k_model_final_checkpoint_phase78.torch)r  r  r  r  r  r  r  zregnety_640.seer_ft_in1kzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet64_finetuned_in1k_model_final_checkpoint_phase78.torchzregnety_1280.seer_ft_in1kzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet128_finetuned_in1k_model_final_checkpoint_phase78.torchzregnety_2560.seer_ft_in1kzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet256_finetuned_in1k_model_final_checkpoint_phase38.torchzregnety_320.seerzihttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_regnet32d/seer_regnet32gf_model_iteration244000.torch)r  r  r   r  r  zregnety_640.seerzphttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_regnet64/seer_regnet64gf_model_final_checkpoint_phase0.torchzregnety_1280.seerzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/swav_ig1b_regnet128Gf_cnstant_bs32_node16_sinkhorn10_proto16k_syncBN64_warmup8k/model_final_checkpoint_phase0.torchzregnetx_002.pycls_in1kzregnetx_004.pycls_in1kzregnetx_006.pycls_in1kzregnetx_008.pycls_in1kzregnetx_016.pycls_in1kzregnetx_032.pycls_in1kzregnetx_040.pycls_in1kzregnetx_064.pycls_in1kzregnetx_080.pycls_in1kzregnetx_120.pycls_in1kzregnetx_160.pycls_in1kzregnetx_320.pycls_in1kzregnety_002.pycls_in1kzregnety_004.pycls_in1kzregnety_006.pycls_in1kzregnety_008.pycls_in1kzregnety_016.pycls_in1kzregnety_032.pycls_in1kzregnety_040.pycls_in1kzregnety_064.pycls_in1kzregnety_080.pycls_in1kzregnety_120.pycls_in1kzregnety_160.pycls_in1kzregnety_320.pycls_in1kc                     [        SU 40 UD6$ )zRegNetX-200MFr  r  r  r  s     rO   r  r         ->v>>rN   c                     [        SU 40 UD6$ )zRegNetX-400MFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )z+RegNetX-400MF w/ torchvision group roundingr  r  r  s     rO   r  r         *JA&AArN   c                     [        SU 40 UD6$ )zRegNetX-600MFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetX-800MFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetX-1.6GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetX-3.2GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetX-4.0GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetX-6.4GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetX-8.0GFr  r  r  s     rO   r  r  %  r  rN   c                     [        SU 40 UD6$ )zRegNetX-12GFr  r  r  s     rO   r  r  +  r  rN   c                     [        SU 40 UD6$ )zRegNetX-16GFr  r  r  s     rO   r  r  1  r  rN   c                     [        SU 40 UD6$ )zRegNetX-32GFr  r  r  s     rO   r  r  7  r  rN   c                     [        SU 40 UD6$ )zRegNetY-200MFr  r  r  s     rO   r  r  =  r  rN   c                     [        SU 40 UD6$ )zRegNetY-400MFr  r  r  s     rO   r  r  C  r  rN   c                     [        SU 40 UD6$ )zRegNetY-600MFr  r  r  s     rO   r  r  I  r  rN   c                     [        SU 40 UD6$ )zRegNetY-800MFr  r  r  s     rO   r  r  O  r  rN   c                     [        SU 40 UD6$ )z+RegNetY-800MF w/ torchvision group roundingr  r  r  s     rO   r  r  U  r  rN   c                     [        SU 40 UD6$ )zRegNetY-1.6GFr  r  r  s     rO   r  r  [  r  rN   c                     [        SU 40 UD6$ )zRegNetY-3.2GFr  r  r  s     rO   r  r  a  r  rN   c                     [        SU 40 UD6$ )zRegNetY-4.0GFr  r  r  s     rO   r  r  g  r  rN   c                     [        SU 40 UD6$ )zRegNetY-6.4GFr  r  r  s     rO   r  r  m  r  rN   c                     [        SU 40 UD6$ )zRegNetY-8.0GFr  r  r  s     rO   r  r  s  r  rN   c                     [        SU 40 UD6$ )z+RegNetY-8.0GF w/ torchvision group roundingr  r  r  s     rO   r  r  y  r  rN   c                     [        SU 40 UD6$ )zRegNetY-12GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetY-16GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetY-32GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetY-64GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetY-128GFr  r  r  s     rO   r  r         .*???rN   c                     [        SU 40 UD6$ )zRegNetY-256GFr  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetY-4.0GF w/ GroupNorm r  r  r  s     rO   r  r    s     +ZB6BBrN   c                     [        SU 40 UD6$ )zRegNetV-4.0GF (pre-activation)r  r  r  s     rO   r  r    r  rN   c                     [        SU 40 UD6$ )zRegNetV-6.4GF (pre-activation)r  r  r  s     rO   r  r    r  rN   c                      [        SU 4SS0UD6$ )zRegNetZ-500MF
NOTE: config found in https://github.com/facebookresearch/ClassyVision/blob/main/classy_vision/models/regnet.py
but it's not clear it is equivalent to paper model as not detailed in the paper.
r  r   Fr  r  s     rO   r  r         -TETVTTrN   c                      [        SU 4SS0UD6$ )RegNetZ-4.0GF
NOTE: config found in https://github.com/facebookresearch/ClassyVision/blob/main/classy_vision/models/regnet.py
but it's not clear it is equivalent to paper model as not detailed in the paper.
r  r   Fr  r  s     rO   r  r    r  rN   c                      [        SU 4SS0UD6$ )r   r  r   Fr  r  s     rO   r  r    s     /:VeVvVVrN   regnetz_040h)r4   )rc   )r   r   r   NFNN)r   NFNN)r   FrB   )r   r]  )mrG   rn   dataclassesr   r   	functoolsr   typingr   r   r   r	   r
   r   r   r   rj   torch.nnr   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r    	_registryr!   r"   r#   __all__r%   rJ   rH   rU   rb   r}   r   rL   r   r   r   rK   r   r   r   r   r$   r  r  r   r  r  r  r  r  default_cfgsr  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  r  r  r  r  r  r  r  r  rC   rB   rN   rO   <module>r/     s  2  *  J J J   A    X X * + 4 Y Y[
! 3 3 3&
!e 
! 
! 
!" 	S	E{ S	 	
 49d3i D >>> > 	>
 > > 49c49$%>H 040
0
0
 0
 	0

 0
 T"))_-0
 0
 YY0
l 04&(&(&( &( 	&(
 &( T"))_-&( &( ]]&(^ %+04&!#&& & 	&
 & S/& T"))_-& & bii&Rg gTgBII gTBryy BJhRYY hV	 "))  3  T  VZ  ,>4S> >d38n >D  =REdqK= REdrL= u"B`cd	=
 REdrL= REdrL= REdrL= REdrL= REdrL= SUt"M= REds"M= SUt2N= SUss"M= SUss"M=" REdqUYZ#=$ REdqUYZ%=& REdrVZ['=( REcbUYZ)=* u2X\nqr+=, REdrVZ[-=. REdrVZ[/=0 REdrVZ[1=2 SUt"W[\3=4 SUt"W[\5=6 $2RZ^pst7=8 SUt2X\]9=: SVBY]^;=< SVBY]^==> SV2X\]?=@ cf#RZ^_A=B cf#RZ^_C=J %DRrDW\b%IKK=T REdrDQUagiU=X SUtTRVbhY=b RDTacTXDtvc=j RDUqsUYDqFk=r RDUqsUYDtvs=
@C T  $c T#s(^ & S#X & S#X & % u&4|~u&
 D BCu& D BCu& D BCu& #D7$;u& #D7$;u&  %dW&=!u&& D'u&, D-u&6  "7u&8 D B9u&@ D BAu&J Tb\Ku&L D B FSR_aMu&T d C FSR_aUu&` T]_au&f wM Ogu&l GMOmu&r GMOsu&x GMOyu&~ GKMu&D GLNEu&J GLNKu&R GMOSu&X wM OYu&^ GMO_u&d GMOeu&j wK Mku&p GLNqu&v GLNwu&~ Q[i Hs!Du&F Q[i Hs!DGu&N  R\j Hs"DOu&X T^l!nYu&^ T^l!n_u&d  U_m"oeu&l +V N Hs	!Dmu&v +V N Hs	!Dwu&@  +V O Hs	"DAu&J  +V O Hs	"DKu&V w~:egWu&^ ~~:eg_u&f  q~:eggu&x g8yu&z g8{u&| g8}u&~ g8u&@ g8Au&B g8Cu&D g8Eu&F g8Gu&H g8Iu&J g8Ku&L g8Mu&N g8Ou&R g8Su&T g8Uu&V g8Wu&X g8Yu&Z g8[u&\ g8]u&^ g8_u&` g8au&b g8cu&d g8eu&f g8gu&h g8iu& up ?D ?v ? ?
 ?D ?v ? ?
 Bt B& B B
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 Bt B& B B
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 Bt B& B B
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 ?D ?v ? ?
 @T @ @ @
 @T @ @ @
 C C6 C C
 ?D ?v ? ?
 ?D ?v ? ?
 UD Uv U U UD Uv U U Wd W W W HO' rN   