a
    d                  F   @   s
  d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
 ddl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 ddlmZmZmZmZ d	d
lmZ d	dl m!Z!m"Z" d	dl#m$Z$m%Z%m&Z& ddgZ'eG dd dZ(dd Z)d%ddZ*d&ddZ+d'ddZ,d(ddZ-d)ddZ.G d d! d!ej/Z0G d"d# d#ej/Z1G d$d% d%ej/Z2G d&d dej/Z3d*d(d)Z4d*d+ Z5e6e(d,d-d.dd/d0e(d,d1d2d3d4d0e(d,d1d2d3d4d5d6e(d7d8d9d,d3d0e(d:d;d<d3d3d0e(d=d>d?d,d@d0e(dAdBd?d7dCd0e(dDdEdFdGdHd0e(dIdJdKd:dLd0e(d=dMdNdOdHd0e(dPdQdRdSdTd0e(dUdVdWdXd4d0e(dYdZd[dPdHd0e(d,d-d.dd/d\d]e(d7d^d_dd3d\d]e(d7d`dad3dbd\d]e(d:dcddd3ded\d]e(d:dcddd3ded\d5dfe(d7dgdhd,did\d]e(d=djdkd,dld\d]e(dDdmd9dnd4d\d]e(dSdodpdqdCd\d]e(drdsdtd:dLd\d]e(drdsdtd:dLd\d5dfe(dPdQdRdSdTd\d]e(dudvdwdSd@d\d]e(dxdydzdxd{d\d]e(d|d}ddd~d{d\d]e(dddddid\d]e(dddzddid\d]e(dDdmd9dnd4d\deed3dde(d4dDdmd9dnd\ddde(dCdSdodpdqd\dddd	e(dld3ddddd\ddddde(dd7ddddd\ddddde(dd7ddddd\dddddd$Z7dd Z8d+ddZ9d,ddZ:d-ddZ;e$e9ddde9ddde9ddde9ddde9dde9dde9dde9ddde9ddde9d'de9dddde9dddde9d'de9ddddddde9ddddddde9ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;ddde;dddddddȍe;dddddddȍe;dddddddȍe;dddd̍e;dddd̍e;dddd̍e;ddddddddҍe;ddddddddҍe;ddddddddҍe;ddddddddҍe;dddddd׍e;dddddd׍e;dddddd׍e:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dde:dddڜCZ<e%d.e3dۜdd݄Z=e%d/e3dۜdd߄Z>e%d0e3dۜddZ?e%d1e3dۜddZ@e%d2e3dۜddZAe%d3e3dۜddZBe%d4e3dۜddZCe%d5e3dۜddZDe%d6e3dۜddZEe%d7e3dۜddZFe%d8e3dۜddZGe%d9e3dۜddZHe%d:e3dۜddZIe%d;e3dۜddZJe%d<e3dۜddZKe%d=e3dۜddZLe%d>e3dۜddZMe%d?e3dۜddZNe%d@e3dۜd dZOe%dAe3dۜddZPe%dBe3dۜddZQe%dCe3dۜddZRe%dDe3dۜdd	ZSe%dEe3dۜd
dZTe%dFe3dۜddZUe%dGe3dۜddZVe%dHe3dۜddZWe%dIe3dۜddZXe%dJe3dۜddZYe%dKe3dۜddZZe%dLe3dۜddZ[e%dMe3dۜddZ\e%dNe3dۜddZ]e%dOe3dۜddZ^e%dPe3dۜd d!Z_e%dQe3dۜd"d#Z`e&ead$d#i dS (R  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)OptionalUnionCallableIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)ClassifierHeadAvgPool2dSameConvNormActSEModuleDropPathGroupNormAct)get_act_layerget_norm_act_layercreate_conv2dmake_divisible   )build_model_with_cfg)checkpoint_seqnamed_apply)generate_default_cfgsregister_modelregister_model_deprecationsRegNet	RegNetCfgc                   @   s   e Zd ZU dZeed< dZeed< dZeed< dZ	eed< d	Z
eed
< dZeed< dZeed< dZeed< dZeed< dZee ed< dZeed< dZeed< dZeed< dZeeef ed< dZeeef ed< dS )r      depthP   w0q=
ףPE@waHzG@wm   
group_size      ?bottle_ratio        se_ratiogroup_min_ratio    
stem_widthconv1x1
downsampleF
linear_outpreactr   num_featuresZrelu	act_layerZ	batchnorm
norm_layerN)__name__
__module____qualname__r   int__annotations__r!   r#   floatr%   r'   r)   r+   r,   r.   r0   r   strr1   boolr2   r3   r4   r   r   r5    r>   r>   [/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/regnet.pyr   -   s   
c                 C   s   t t| | | S )z<Converts a float to the closest non-zero int divisible by q.)r9   round)fqr>   r>   r?   quantize_float@   s    rC   r*   c                    sv   dd t | |D }dd t ||D } rF fddt ||D }ndd t ||D }dd t ||D } | |fS )z/Adjusts the compatibility of widths and groups.c                 S   s   g | ]\}}t || qS r>   r9   ).0wbr>   r>   r?   
<listcomp>G       z-adjust_widths_groups_comp.<locals>.<listcomp>c                 S   s   g | ]\}}t ||qS r>   )min)rE   gw_botr>   r>   r?   rH   H   rI   c                    s   g | ]\}}t || qS r>   )r   rE   rL   rK   	min_ratior>   r?   rH   K   rI   c                 S   s   g | ]\}}t ||qS r>   )rC   rM   r>   r>   r?   rH   M   rI   c                 S   s   g | ]\}}t || qS r>   rD   )rE   rL   rG   r>   r>   r?   rH   N   rI   )zip)widthsZbottle_ratiosgroupsrO   Zbottleneck_widthsr>   rN   r?   adjust_widths_groups_compE   s    rS      c              	      s   | dkr$|dkr$|dkr$|| dks(J t ||  | }t t || t | }t t |t || || }tt || d  }	}
t 	 fddt
|	D }|t |	|t fS )z2Generates per block widths from RegNet parameters.r   r   c                    s   g | ]} qS r>   r>   rE   _r'   r>   r?   rH   \   rI   z#generate_regnet.<locals>.<listcomp>)npZaranger@   logdividepowerlenuniquemaxarrayrangeZastyper9   tolist)Zwidth_slopeZwidth_initialZ
width_multr   r'   ZquantZwidths_contZ
width_expsrQ   
num_stagesZ	max_stagerR   r>   rW   r?   generate_regnetR   s    ("rc   Fc              	   C   sb   |pt j}|dkr|dkrdn|}|dkr.|nd}|rHt| ||||dS t| |||||ddS d S )Nr   )stridedilationF)rd   re   r5   	apply_act)nnBatchNorm2dr   r   )in_chsout_chskernel_sizerd   re   r5   r2   r>   r>   r?   downsample_conv`   s(    	
rl   c                 C   s   |pt j}|dkr|nd}t  }|dks2|dkr\|dkrF|dkrFtnt j}	|	d|ddd}|rrt| |ddd}
nt| |dd|dd}
t j||
g S )zd AvgPool Downsampling as in 'D' ResNet variants. This is not in RegNet space but I might experiment.r      TF)Z	ceil_modeZcount_include_padrd   )rd   r5   rf   )rg   rh   Identityr   Z	AvgPool2dr   r   Z
Sequential)ri   rj   rk   rd   re   r5   r2   Z
avg_stridepoolZavg_pool_fnconvr>   r>   r?   downsample_avg   s    

rr   r   r   c           	      C   s   | dv sJ ||ks,|dks,|d |d krzt ||d ||d}| sHd S | dkrbt||fi |S t||fd|i|S nt S d S )N)avgr/    Nr   r   )rd   re   r5   r2   rt   rk   )dictrr   rl   rg   ro   )	Zdownsample_typeri   rj   rk   rd   re   r5   r2   dargsr>   r>   r?   create_shortcut   s    
 rx   c                       sL   e Zd ZdZdddddddejejddf fd	d
	Zdd Zdd Z	  Z
S )
Bottleneck RegNet Bottleneck

    This is almost exactly the same as a ResNet Bottlneck. 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   rs         ?r/   FNr*   c              	      s
  t t|   t|
}
tt|| }|| }t|
|d}t||fddi|| _t||fd||d ||d|| _	|rtt|| }t
|||
d| _n
t | _t||fddd	|| _|	rt n|
 | _t|||d|||d
| _|dkrt|nt | _d S )Nr4   r5   rk   r      r   )rk   rd   re   rR   Z
drop_layerZrd_channelsr4   F)rk   rf   )rk   rd   re   r5   )superry   __init__r   r9   r@   rv   r   conv1conv2r   serg   ro   conv3act3rx   r0   r   	drop_path)selfri   rj   rd   re   r)   r'   r+   r0   r1   r4   r5   
drop_blockdrop_path_ratebottleneck_chsrR   Zcargsse_channels	__class__r>   r?   r      sD    

	zBottleneck.__init__c                 C   s   t j| jjj d S N)rg   initzeros_r   Zbnweightr   r>   r>   r?   zero_init_last   s    zBottleneck.zero_init_lastc                 C   sX   |}|  |}| |}| |}| |}| jd urJ| || | }| |}|S r   )r   r   r   r   r0   r   r   r   xZshortcutr>   r>   r?   forward   s    





zBottleneck.forwardr6   r7   r8   __doc__rg   ZReLUrh   r   r   r   __classcell__r>   r>   r   r?   ry      s   
3ry   c                       sL   e Zd ZdZdddddddejejddf fd	d
	Zdd Zdd Z	  Z
S )PreBottleneckrz   r   rs   r{   r/   FNr*   c              	      s   t t|   t||
}tt|| }|| }||| _t||dd| _||| _	t||d||d |d| _
|rtt|| }t|||
d| _n
t | _||| _t||dd| _t|||d||dd| _|dkrt|nt | _d S )	Nr   )rk   r}   r   )rk   rd   re   rR   r~   T)rk   rd   re   r2   )r   r   r   r   r9   r@   norm1r   r   norm2r   r   r   rg   ro   norm3r   rx   r0   r   r   )r   ri   rj   rd   re   r)   r'   r+   r0   r1   r4   r5   r   r   Znorm_act_layerr   rR   r   r   r>   r?   r      s>    




	zPreBottleneck.__init__c                 C   s   d S r   r>   r   r>   r>   r?   r   2  s    zPreBottleneck.zero_init_lastc                 C   sl   |  |}|}| |}| |}| |}| |}| |}| |}| jd urh| || | }|S r   )	r   r   r   r   r   r   r   r0   r   r   r>   r>   r?   r   5  s    







zPreBottleneck.forwardr   r>   r>   r   r?   r      s   
2r   c                       s.   e Zd ZdZdef fdd	Zdd Z  ZS )RegStagez4Stage (sequence of blocks w/ the same output shape).Nc              
      s   t t|   d| _|dv r dnd}	t|D ]t}
|
dkr<|nd}|
dkrL|n|}|	|f}|d urh||
 nd}d|
d }| ||||f|||d| |}	q,d S )	NF)r   rm   r   rm   r   r*   zb{})rd   re   r   )r   r   r   grad_checkpointingr`   format
add_module)r   r   ri   rj   rd   re   drop_path_ratesblock_fnZblock_kwargsZfirst_dilationiZblock_strideZblock_in_chsZblock_dilationZdprnamer   r>   r?   r   H  s.    zRegStage.__init__c                 C   s:   | j r tj s t|  |}n|  D ]}||}q(|S r   )r   torchjitZis_scriptingr   children)r   r   blockr>   r>   r?   r   j  s
    
zRegStage.forward)r6   r7   r8   r   ry   r   r   r   r>   r>   r   r?   r   E  s
   	"r   c                       s   e Zd ZdZded fd	d
ZdedddZejj	d ddZ
ejj	d!ddZejj	dd Zd"ddZdd Zd#edddZdd Z  ZS )$r   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
    r}     r-   rt   r*   Tcfgc	              	      s  t    || _|| _|dv s"J t|fi |	}|j}
t|j|jd}|j	rbt
||
ddd| _nt||
dfddi|| _t|
dddg| _|
}d}| j|||d	\}}t|d
ksJ |j	rtnt}t|D ]d\}}d|d }| |tf ||d|| |d }||d 9 }|  jt|||dg7  _q|jrbt||jfddi|| _|j| _n0|jpn|j	}|rt|j nt | _|| _t| j|||d| _ttt |d|  dS )a  

        Args:
            cfg (RegNetCfg): Model architecture configuration
            in_chans (int): Number of input channels (default: 3)
            num_classes (int): Number of classifier classes (default: 1000)
            output_stride (int): Output stride of network, one of (8, 16, 32) (default: 32)
            global_pool (str): Global pooling type (default: 'avg')
            drop_rate (float): Dropout rate (default: 0.)
            drop_path_rate (float): Stochastic depth drop-path rate (default: 0.)
            zero_init_last (bool): Zero-init last weight of residual path
            kwargs (dict): Extra kwargs overlayed onto cfg
        )rT      r-   r|   r}   rm   rn   rd   stem)Znum_chsZ	reductionmodule)output_strider      zs{}r   )ri   r   rj   rk   )Zin_featuresnum_classes	pool_type	drop_rate)r   N)!r   r   r   r   r   r.   rv   r4   r5   r2   r   r   r   Zfeature_info_get_stage_argsr\   r   ry   	enumerater   r   r   r3   
final_convr1   r   rg   ro   r   headr   r   _init_weights)r   r   Zin_chansr   r   global_poolr   r   r   kwargsr.   Zna_argsZ
prev_widthZcurr_strideper_stage_argscommon_argsr   r   Z
stage_argsZ
stage_nameZ	final_actr   r>   r?   r   z  sb    

	
zRegNet.__init__rm   c              	      s(  t jjjjj\}}}tj|dd\}}	fddt|D }
g }g }d}d}t|D ]:}||krz||9 }d}n|}||9 }|	| |	| q`t
td|t|	t|	d d }t||
|jd	\}}g d
  fddt||||	|
||D }tjjjjjd}||fS )NT)Zreturn_countsc                    s   g | ]
} j qS r>   )r)   rU   r   r>   r?   rH     rI   z*RegNet._get_stage_args.<locals>.<listcomp>rm   r   r   rN   )rj   rd   re   r   r)   r'   r   c                    s   g | ]}t t |qS r>   )rv   rP   )rE   params)	arg_namesr>   r?   rH     s   )r0   r+   r1   r4   r5   )rc   r#   r!   r%   r   r'   rX   r]   r`   appendsplitZlinspacesumZcumsumrS   r,   rP   rv   r0   r+   r1   r4   r5   )r   r   Zdefault_strider   r   rQ   rb   Zstage_gsZstage_widthsZstage_depthsZstage_brZstage_stridesZstage_dilationsZ
net_stridere   rV   rd   Z	stage_dprr   r   r>   )r   r   r?   r     s>     
(


zRegNet._get_stage_argsFc                 C   s   t d|rdnddS )Nz^stemz^s(\d+)z^s(\d+)\.b(\d+))r   blocks)rv   )r   Zcoarser>   r>   r?   group_matcher  s    
zRegNet.group_matcherc                 C   s$   t |  dd D ]
}||_qd S )Nr   r   )listr   r   )r   enablesr>   r>   r?   set_grad_checkpointing  s    zRegNet.set_grad_checkpointingc                 C   s   | j jS r   )r   Zfcr   r>   r>   r?   get_classifier  s    zRegNet.get_classifierc                 C   s   | j j||d d S )N)r   )r   reset)r   r   r   r>   r>   r?   reset_classifier  s    zRegNet.reset_classifierc                 C   s@   |  |}| |}| |}| |}| |}| |}|S r   )r   s1s2Zs3Zs4r   r   r   r>   r>   r?   forward_features  s    





zRegNet.forward_features
pre_logitsc                 C   s   | j ||dS )Nr   )r   )r   r   r   r>   r>   r?   forward_head  s    zRegNet.forward_headc                 C   s   |  |}| |}|S r   )r   r   r   r>   r>   r?   r     s    

zRegNet.forward)r}   r   r-   rt   r*   r*   T)rm   r-   r*   )F)T)rt   )F)r6   r7   r8   r   r   r   r   r   r   ignorer   r   r   r   r   r=   r   r   r   r>   r>   r   r?   r   s  s,   	       R'

	ru   c                 C   s   t | tjrb| jd | jd  | j }|| j }| jjdt	
d|  | jd ur| jj  nPt | tjrtjj| jddd | jd urtj| j n|rt| dr|   d S )Nr   r          @r*   g{Gz?)meanstdr   )
isinstancerg   ZConv2drk   Zout_channelsrR   r   dataZnormal_mathsqrtZbiasZzero_ZLinearr   r   hasattrr   )r   r   r   Zfan_outr>   r>   r?   r     s    


r   c                 C   st  |  d| } g d}d| v rdd l}| d d d } i }| d  D ]b\}}|dd}|d	d
}|ddd |}|dd|}|D ]\}}|||}q|||< qD| d  D ].\}}d|v sd|v rq|dd}|||< q|S d| v rpdd l}i }|  D ]d\}}|dd}|dd
}|ddd |}|D ]\}}|||}q<|dd}|||< q|S | S )N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.1r   )zf.cr   )zproj.0downsample.conv)zproj.1zdownsample.bn)Zprojr   Zclassy_state_dictr   Z
base_modelZtrunkz_feature_blocks.conv1.stem.0	stem.convz_feature_blocks.conv1.stem.1zstem.bnz&^_feature_blocks.res\d.block(\d)-(\d+)c                 S   s(   dt | d dt | dd  S )Nr   r   .brm   r9   groupr   r>   r>   r?   <lambda>C  rI   z_filter_fn.<locals>.<lambda>zs(\d)\.b(\d+)\.bnzs\1.b\2.downsample.bnZheadsZprojection_headZ
prototypesz0.clf.0head.fczstem.0.weightzstem.0zstem.1z)trunk_output.block(\d)\.block(\d+)\-(\d+)c                 S   s(   dt | d dt | dd  S )Nr   r   r   r}   r   r   r>   r>   r?   r   W  rI   zfc.zhead.fc.)getreitemsr   sub)Z
state_dictZreplacesr   outkvr   rr>   r>   r?   
_filter_fn'  sN    


r   r&   gQ8B@gQ@   )r!   r#   r%   r'   r   g{Gz8@gRQ@r      g?)r!   r#   r%   r'   r   r,   0   g\(|B@gQ@8   g=
ףpA@g=
ףp=@r    gzGA@g      @   X   g(\O:@   `   g33333SC@gq=
ףp@(         g
ףp=jN@g(\ @   gHzH@g
ףp=
@x      gףp=
WR@g(\@p         gQK@g @   @  gףp=
wQ@r   r{   )r!   r#   r%   r'   r   r+   gp=
;@gQ @gQE@@g(\@   gQkC@g333333@   )r!   r#   r%   r'   r   r+   r,   g(\µ4@g333333@   r"   r$   r   g)\h?@@   g\(@@g)\(@H      gGz4S@gQ@   gQZ@gףp=
@   g)\\@g=
ףp=@   i`  g(\ob@iH  i  g(\d@g)\(@i  i  g(\l@iu  ZsilurW   )r!   r#   r%   r'   r   r+   r4   r5   T)r   r!   r#   r%   r'   r+   r2   r4   rt   )	r   r!   r#   r%   r'   r+   r2   r4   r0   gffffff%@gGz@r   g      @i   )r   r!   r#   r%   r'   r)   r+   r0   r1   r3   r4      g      -@g+@i   )$regnetx_002regnetx_004regnetx_004_tvregnetx_006regnetx_008regnetx_016regnetx_032regnetx_040regnetx_064regnetx_080regnetx_120regnetx_160regnetx_320regnety_002regnety_004regnety_006regnety_008regnety_008_tvregnety_016regnety_032regnety_040regnety_064regnety_080regnety_080_tvregnety_120regnety_160regnety_320regnety_640regnety_1280regnety_2560regnety_040_sgnregnetv_040regnetv_064regnetz_005regnetz_040regnetz_040_hc                 K   s   t t| |ft|  td|S )N)Z	model_cfgZpretrained_filter_fn)r   r   
model_cfgsr   )variant
pretrainedr   r>   r>   r?   _create_regnet  s    r5  c                 K   s"   | dddddddt tdd	d
|S )Nr   r}      r7     r9  )r}      r:  gffffff?r(   bicubicr   r   )urlr   
input_size	pool_sizetest_input_sizecrop_pctZtest_crop_pctinterpolationr   r   
first_conv
classifierr   r<  r   r>   r>   r?   _cfg  s    rE  c                 K   s"   | dddddt tdddd	d
|S )Nr   r6  r8  g      ?r;  r   r   Zmitz)https://github.com/facebookresearch/pyclsr<  r   r=  r>  r@  rA  r   r   rB  rC  license
origin_urlr   rD  r>   r>   r?   _cfgpyc  s    rI  c                 K   s"   | dddddt tdddd	d
|S )Nr   r6  r8  gzG?r;  r   r   zbsd-3-clausez!https://github.com/pytorch/visionrF  r   rD  r>   r>   r?   _cfgtv2  s    rJ  ztimm/znhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/regnety_032_ra-7f2439f9.pth)	hf_hub_idr<  zshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_040_ra3-670e1166.pthzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_064_ra3-aa26dc7d.pthzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_080_ra3-1fdc4344.pth)rK  i-.  )rK  r   )r<  zshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetv_040_ra3-c248f51f.pthr   )rK  r<  rB  zshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetv_064_ra3-530616c2.pthzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetz_040_ra3-9007edf5.pth)r}      rL  )rT   rT   r(   )r}   r  r  )rK  r<  r=  r>  r@  r?  zthttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetz_040h_ra3-f594343b.pthz<https://dl.fbaipublicfiles.com/deit/regnety_160-a5fe301d.pthz?https://download.pytorch.org/models/regnet_x_400mf-62229a5f.pthz?https://download.pytorch.org/models/regnet_x_800mf-94a99ebd.pthz?https://download.pytorch.org/models/regnet_x_1_6gf-a12f2b72.pthz?https://download.pytorch.org/models/regnet_x_3_2gf-7071aa85.pthz=https://download.pytorch.org/models/regnet_x_8gf-2b70d774.pthz>https://download.pytorch.org/models/regnet_x_16gf-ba3796d7.pthz>https://download.pytorch.org/models/regnet_x_32gf-6eb8fdc6.pthz?https://download.pytorch.org/models/regnet_y_400mf-e6988f5f.pthz?https://download.pytorch.org/models/regnet_y_800mf-58fc7688.pthz?https://download.pytorch.org/models/regnet_y_1_6gf-0d7bc02a.pthz?https://download.pytorch.org/models/regnet_y_3_2gf-9180c971.pthz=https://download.pytorch.org/models/regnet_y_8gf-dc2b1b54.pthz>https://download.pytorch.org/models/regnet_y_16gf-3e4a00f9.pthz>https://download.pytorch.org/models/regnet_y_32gf-8db6d4b5.pthzChttps://download.pytorch.org/models/regnet_y_16gf_swag-43afe44d.pthzcc-by-nc-4.0)r}     rM  )   rN  )rK  r<  rG  r=  r>  r@  zChttps://download.pytorch.org/models/regnet_y_32gf_swag-04fdfa75.pthzDhttps://download.pytorch.org/models/regnet_y_128gf_swag-c8ce3e52.pthzFhttps://download.pytorch.org/models/regnet_y_16gf_lc_swag-f3ec0043.pth)rK  r<  rG  zFhttps://download.pytorch.org/models/regnet_y_32gf_lc_swag-e1583746.pthzGhttps://download.pytorch.org/models/regnet_y_128gf_lc_swag-cbe8ce12.pthotherz)https://github.com/facebookresearch/visslzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet32_finetuned_in1k_model_final_checkpoint_phase78.torch)rK  rG  rH  r<  r=  r>  r@  zhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet64_finetuned_in1k_model_final_checkpoint_phase78.torchzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet128_finetuned_in1k_model_final_checkpoint_phase78.torchzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet256_finetuned_in1k_model_final_checkpoint_phase38.torchzihttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_regnet32d/seer_regnet32gf_model_iteration244000.torch)rK  r<  r   rG  rH  zphttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_regnet64/seer_regnet64gf_model_final_checkpoint_phase0.torchzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/swav_ig1b_regnet128Gf_cnstant_bs32_node16_sinkhorn10_proto16k_syncBN64_warmup8k/model_final_checkpoint_phase0.torch)Czregnety_032.ra_in1kzregnety_040.ra3_in1kzregnety_064.ra3_in1kzregnety_080.ra3_in1kzregnety_120.sw_in12k_ft_in1kzregnety_160.sw_in12k_ft_in1kzregnety_160.lion_in12k_ft_in1kzregnety_120.sw_in12kzregnety_160.sw_in12kzregnety_040_sgn.untrainedzregnetv_040.ra3_in1kzregnetv_064.ra3_in1kzregnetz_005.untrainedzregnetz_040.ra3_in1kzregnetz_040_h.ra3_in1kzregnety_160.deit_in1kzregnetx_004_tv.tv2_in1kzregnetx_008.tv2_in1kzregnetx_016.tv2_in1kzregnetx_032.tv2_in1kzregnetx_080.tv2_in1kzregnetx_160.tv2_in1kzregnetx_320.tv2_in1kzregnety_004.tv2_in1kzregnety_008_tv.tv2_in1kzregnety_016.tv2_in1kzregnety_032.tv2_in1kzregnety_080_tv.tv2_in1kzregnety_160.tv2_in1kzregnety_320.tv2_in1kzregnety_160.swag_ft_in1kzregnety_320.swag_ft_in1kzregnety_1280.swag_ft_in1kzregnety_160.swag_lc_in1kzregnety_320.swag_lc_in1kzregnety_1280.swag_lc_in1kzregnety_320.seer_ft_in1kzregnety_640.seer_ft_in1kzregnety_1280.seer_ft_in1kzregnety_2560.seer_ft_in1kzregnety_320.seerzregnety_640.seerzregnety_1280.seerz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_in1k)returnc                 K   s   t d| fi |S )zRegNetX-200MFr  r5  r4  r   r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-400MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )z+RegNetX-400MF w/ torchvision group roundingr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-600MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-800MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-1.6GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-3.2GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-4.0GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-6.4GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-8.0GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-12GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-16GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetX-32GFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetY-200MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetY-400MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetY-600MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetY-800MFr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )z+RegNetY-800MF w/ torchvision group roundingr  rQ  rR  r>   r>   r?   r    s    r  c                 K   s   t d| fi |S )zRegNetY-1.6GFr   rQ  rR  r>   r>   r?   r     s    r   c                 K   s   t d| fi |S )zRegNetY-3.2GFr!  rQ  rR  r>   r>   r?   r!    s    r!  c                 K   s   t d| fi |S )zRegNetY-4.0GFr"  rQ  rR  r>   r>   r?   r"    s    r"  c                 K   s   t d| fi |S )zRegNetY-6.4GFr#  rQ  rR  r>   r>   r?   r#    s    r#  c                 K   s   t d| fi |S )zRegNetY-8.0GFr$  rQ  rR  r>   r>   r?   r$    s    r$  c                 K   s   t d| fi |S )z+RegNetY-8.0GF w/ torchvision group roundingr%  rQ  rR  r>   r>   r?   r%  	  s    r%  c                 K   s   t d| fi |S )zRegNetY-12GFr&  rQ  rR  r>   r>   r?   r&    s    r&  c                 K   s   t d| fi |S )zRegNetY-16GFr'  rQ  rR  r>   r>   r?   r'    s    r'  c                 K   s   t d| fi |S )zRegNetY-32GFr(  rQ  rR  r>   r>   r?   r(    s    r(  c                 K   s   t d| fi |S )zRegNetY-64GFr)  rQ  rR  r>   r>   r?   r)  !  s    r)  c                 K   s   t d| fi |S )zRegNetY-128GFr*  rQ  rR  r>   r>   r?   r*  '  s    r*  c                 K   s   t d| fi |S )zRegNetY-256GFr+  rQ  rR  r>   r>   r?   r+  -  s    r+  c                 K   s   t d| fi |S )zRegNetY-4.0GF w/ GroupNorm r,  rQ  rR  r>   r>   r?   r,  3  s    r,  c                 K   s   t d| fi |S )zRegNetV-4.0GF (pre-activation)r-  rQ  rR  r>   r>   r?   r-  9  s    r-  c                 K   s   t d| fi |S )zRegNetV-6.4GF (pre-activation)r.  rQ  rR  r>   r>   r?   r.  ?  s    r.  c                 K   s   t d| fddi|S )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   FrQ  rR  r>   r>   r?   r/  E  s    r/  c                 K   s   t d| fddi|S )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.
    r0  r   FrQ  rR  r>   r>   r?   r0  N  s    r0  c                 K   s   t d| fddi|S )rS  r1  r   FrQ  rR  r>   r>   r?   r1  W  s    r1  Zregnetz_040h)r*   )rT   )r   r   r   NF)r   r   r   NF)rs   NF)ru   F)ru   )ru   )ru   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)br   r   Zdataclassesr   r   	functoolsr   typingr   r   r   numpyrX   r   Ztorch.nnrg   Z	timm.datar	   r
   Ztimm.layersr   r   r   r   r   r   r   r   r   r   Z_builderr   Z_manipulater   r   	_registryr   r   r   __all__r   rC   rS   rc   rl   rr   rx   Modulery   r   r   r   r   r   rv   r2  r5  rE  rI  rJ  Z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/  r0  r1  r6   r>   r>   r>   r?   <module>   s       
#    
  
KL. &:@


	  9