
    Ng{                    &   d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZ ddlZddlmZ ddlmc 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! ddl"m#Z# dd	l$m%Z% dd
l&m'Z' ddl(m)Z)m*Z*m+Z+ g dZ,dde-de-de-de-fdZ. G d dej/                  Z0 G d dej/                  Z1	 	 	 	 dde-de-de-de-de-dee-         dee
ej/                          dej/        fdZ2	 	 	 	 dde-de-de-de-de-dee-         dee
ej/                          dej/        fdZ3dde4fdZ5	 	 	 	 	 	 dd!e	ee0e1f                  d"e	e-d#f         d$e	e-d#f         d%e-d&e-d'e-d(e-d)e6d*e4d+e4de	ee	e7ej/        f                  eee7ef                  f         fd,Z8 G d- d.ej/                  Z9dd/e6de9fd0Z:dd2Z;dd3Z<dd4Z=dd5Z>dd6Z?dd7Z@ e*i d8 e=d9d:d;d<d=d>d?@          dA e=d9dBd;d<d=d>d?@          dC e>d9dDE          dF e>d9dGE          dH e?d9dIE          dJ e=d9dKd?L          dM e>d9dNE          dO e>d9dPE          dQ e?d9dRd=S          dT e=d9dUE          dV e=d9dWd?L          dX e=d9dYE          dZ e=d9d[d?L          d\ e=d9d]d?d^d_d`dadbc          dd e>d9deE          df e>d9dgd;d<dhd>dbi          dj e>d9dkE          i dl e?d9dmE          dn e>d9doE          dp e>d9dqE          dr e>d9dsE          dt e>d9duE          dv e>d9dwE          dx e=d9dyE          dz e<d9d{E          d| e=d9d}E          d~ e=d9dE          d e=d9dd?L          d e>d9ddd=ddbd?          d e>d9dd?L          d e>d9dd?L          d e?d9dd?L          d e=d?          d e>d9dE          i d e>d9dE          d e>d9dE          d e?d9dE          d e=d9dd?d^d_d=dbda          d e>d9dE          d e>d9dE          d e>d9dE          d e?d9dE          d e=d9dd?d^d_d=dbda          d e=            d e=d9dd?d^d_d=dbda          d e=d9dE          d e;d9ddd          d e;d9ddd          d e;d9ddd          d e;d9dd;d<d>ddd          d e;d9ddd          i d e;d9dd;d<d>ddd          d e;d9ddd          d e;d9dd;d<d>ddd          d e;d9ddd          d e;d9dd;d<d>ddd          d e;d9ddd          d e;d9dd;d<d>ddd          d e=d9dd`S          d e>d9dȬE          d e>d9dʬE          d e>d9d̬E          d e?d9dάE          d e=d9dЬE          d e=d9dd?L          d e=            d e>d9dլE          d e;d9ddd          i d e;d9ddd          d e;d9ddd          d e;d9dd;d<d>ddd          d e;d9dd;d<d>ddd          d e;d9ddd㬬          d e;d9ddd㬬          d e;d9ddd㬬          d e;d9ddd㬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          d e;d9ddd쬬          i d e;d9ddd쬬          d e;d9d dd쬬          d e;d9ddd쬬          d e=d9dd?d^d_d=da          d e<d9dd=d          d	 e<d9d
d?d=d          d e<d9dd?d=d          d e<d9dd?d^d_d=da          d e>d9dd?L          d e>d9dd?L          d e?d9dd?L          d e<d9dd?d=d          d e<d9dd?d=d          d e=d?d^d=d_          d e=d9dd?dadd=dbd          d  e<d?          d! e<d?          i d" e=            d# e=            d$ e>d9d%d=S          d& e>d9d'd=S          d( e?d9d)d=S          d* e=d9d+E          d, e=d?          d- e=            d. e=            d/ e=d9d0d?d^d_d=dbda          d1 e=d?d^d_2          d3 e=d?d^d_2          d4 e=d9d5d?L          d6 e=d9d7d?L          d8 e=d9d9E          d: e=            d; e>d9d<E          i d= e>d9d>d?L          d? e=d9d?d=db@          dA e=d9d?d=db@          dB e=d9d=ddCdadbd?D          dE e=d9d?dbF          dG e;d9dHd?dIdJdbK          dL e;d9dMdHd?d=daddJdbN	  	        dO e=d9dMd?d=dbP          dQ e=d9dMd?d=dbP          dR e=d9dMd?d=dbP          dS e=d9dMd?d=dbP          dT e=            dU e=d9dVE          dW e=d?          dX e=d?          dY e=d?          dZ e>d9d[E          i d\ e=d?          d] e>d9d^d?L          d_ e;d9d`dadbdcd>dHd?d          de e;d9dfdgd<d`ddHd?d          dh e;d9did^d_dbdadHd?d          dj e;d9dkd^d_dbdadHd?d          dl e;d9dmd^d_dbddHd?d          dn e;d9doddCdbdJdHd?d          dp e;d9dqdaddbdrdHd?d          ds e@d9dtE          du e@d9dvE          dw e@d9dxE          dy e@d9dzE          d{ e@d9d|E          d} e@d9d~d?L          d e@d9dd?L          d e@d9dd?L           e@d9dd?L           e@d9dd?L           e@d9dd?L           e@d9dd?L           e@d9dd?L           e@d9dd?L           e@d9dE           e@d9dE           e@d9dE           e@d9dE           e@d9dE           e@d9dE           e@d9dd?L           e;d9ddd=dadbd?          d          ZAe)dd/e6de9fd            ZBe)dd/e6de9fd            ZCe)dd/e6de9fd            ZDe)dd/e6de9fd            ZEe)dd/e6de9fd            ZFe)dd/e6de9fd            ZGe)dd/e6de9fd            ZHe)dd/e6de9fd            ZIe)dd/e6de9fd            ZJe)dd/e6de9fd            ZKe)dd/e6de9fd            ZLe)dd/e6de9fd            ZMe)dd/e6de9fd            ZNe)dd/e6de9fd            ZOe)dd/e6de9fd            ZPe)dd/e6de9fd            ZQe)dd/e6de9fd            ZRe)dd/e6de9fd            ZSe)dd/e6de9fd            ZTe)dd/e6de9fd            ZUe)dd/e6de9fd            ZVe)dd/e6de9fd            ZWe)dd/e6de9fd            ZXe)dd/e6de9fd            ZYe)dd/e6de9fd            ZZe)dd/e6de9fd            Z[e)dd/e6de9fd            Z\e)dd/e6de9fd            Z]e)dd/e6de9fd            Z^e)dd/e6de9fd            Z_e)dd/e6de9fd            Z`e)dd/e6de9fd            Zae)dd/e6de9fd            Zbe)dd/e6de9fd            Zce)dd/e6de9fd            Zde)dd/e6de9fd            Zee)dd/e6de9fd            Zfe)dd/e6de9fd            Zge)dd/e6de9fd            Zhe)dd/e6de9fd            Zie)dd/e6de9fd            Zje)dd/e6de9fd            Zke)dd/e6de9fd            Zle)dd/e6de9fd            Zme)dd/e6de9fd            Zne)dd/e6de9fd            Zoe)dd/e6de9fd            Zpe)dd/e6de9fd            Zqe)dd/e6de9fd            Zre)dd/e6de9fdÄ            Zse)dd/e6de9fdĄ            Zte)dd/e6de9fdń            Zue)dd/e6de9fdƄ            Zve)dd/e6de9fdǄ            Zwe)dd/e6de9fdȄ            Zxe)dd/e6de9fdɄ            Zye)dd/e6de9fdʄ            Zze)dd/e6de9fd˄            Z{e)dd/e6de9fd̄            Z|e)dd/e6de9fd̈́            Z}e)dd/e6de9fd΄            Z~e)dd/e6de9fdτ            Ze)dd/e6de9fdЄ            Ze)dd/e6de9fdф            Ze)dd/e6de9fd҄            Ze)dd/e6de9fdӄ            Ze)dd/e6de9fdԄ            Ze)dd/e6de9fdՄ            Ze)dd/e6de9fdք            Ze)dd/e6de9fdׄ            Ze)dd/e6de9fd؄            Ze)dd/e6de9fdل            Ze)dd/e6fdڄ            Ze)dd/e6de9fdۄ            Ze)dd/e6de9fd܄            Ze)dd/e6de9fd݄            Ze)dd/e6de9fdބ            Ze)dd/e6de9fd߄            Ze)dd/e6de9fd            Ze)dd/e6de9fd            Ze)dd/e6de9fd            Z e+ei dddddddddd֓ddddddddddddddddddddddddi ddddddddddsdduddwddydd{dd}ddddd ddddddddd	d
ddddddddd	           dS (  a*  PyTorch ResNet

This started as a copy of https://github.com/pytorch/vision 'resnet.py' (BSD-3-Clause) with
additional dropout and dynamic global avg/max pool.

ResNeXt, SE-ResNeXt, SENet, and MXNet Gluon stem/downsample variants, tiered stems added by Ross Wightman

Copyright 2019, Ross Wightman
    N)partial)AnyDictListOptionalTupleTypeUnionIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropBlock2dDropPathAvgPool2dSame
BlurPool2d	LayerTypecreate_attnget_attnget_act_layerget_norm_layercreate_classifier	create_aa	to_ntuple   )build_model_with_cfg)feature_take_indices)checkpoint_seq)register_modelgenerate_default_cfgsregister_model_deprecations)ResNet
BasicBlock
Bottleneckkernel_sizestridedilationreturnc                 (    |dz
  || dz
  z  z   dz  }|S )Nr       )r$   r%   r&   paddings       N/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/resnet.pyget_paddingr-      s#    
h+/::q@GN    c                        e Zd ZdZdddddddej        ej        ddddfdedededeej	                 ded	ed
ededee         de
ej	                 de
ej	                 dee
ej	                          dee
ej	                          dee
ej	                          deej	                 f fdZd Zdej        dej        fdZ xZS )r"   r   N@   inplanesplanesr%   
downsamplecardinality
base_widthreduce_firstr&   first_dilation	act_layer
norm_layer
attn_layeraa_layer
drop_block	drop_pathc           	         t          t          |                                            |dk    s
J d            |dk    s
J d            ||z  }|| j        z  }|	p|}	|duo|dk    p|	|k    }t	          j        ||d|rdn||	|	d	          | _         ||          | _        |
 |            nt	          j                    | _	         |
d
          | _
        t          ||||          | _        t	          j        ||d||d          | _         ||          | _        t          ||          | _         |
d
          | _        || _        || _        || _        || _        dS )  
        Args:
            inplanes: Input channel dimensionality.
            planes: Used to determine output channel dimensionalities.
            stride: Stride used in convolution layers.
            downsample: Optional downsample layer for residual path.
            cardinality: Number of convolution groups.
            base_width: Base width used to determine output channel dimensionality.
            reduce_first: Reduction factor for first convolution output width of residual blocks.
            dilation: Dilation rate for convolution layers.
            first_dilation: Dilation rate for first convolution layer.
            act_layer: Activation layer.
            norm_layer: Normalization layer.
            attn_layer: Attention layer.
            aa_layer: Anti-aliasing layer.
            drop_block: Class for DropBlock layer.
            drop_path: Optional DropPath layer.
        r   z)BasicBlock only supports cardinality of 1r0   z/BasicBlock does not support changing base widthNr)      F)r$   r%   r+   r&   biasTinplacechannelsr%   enable)r$   r+   r&   rA   )superr"   __init__	expansionnnConv2dconv1bn1Identityr<   act1r   aaconv2bn2r   seact2r3   r%   r&   r=   )selfr1   r2   r%   r3   r4   r5   r6   r&   r7   r8   r9   r:   r;   r<   r=   first_planes	outplanesuse_aa	__class__s                      r,   rH   zBasicBlock.__init__%   s   H 	j$((***a!LR!R-T^+	'38%U6Q;+T.H:TYlv:Q!!6[i#%1 1 1
 :l++*4*@**,,,bkmmId+++	H|FSYZZZY)Hx^ce e e
:i((j)44Id+++	$ "r.   c                     t          | j        dd           +t          j                            | j        j                   d S d S Nweight)getattrrR   rJ   initzeros_r\   rU   s    r,   zero_init_lastzBasicBlock.zero_init_lastf   <    48Xt,,8GNN48?+++++ 98r.   xr'   c                    |}|                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }| j        |                     |          }| j        |                     |          }| j	        | 	                    |          }||z  }| 
                    |          }|S N)rL   rM   r<   rO   rP   rQ   rR   rS   r=   r3   rT   rU   rc   shortcuts      r,   forwardzBasicBlock.forwardj   s    JJqMMHHQKKOOAIIaLLGGAJJJJqMMHHQKK7

A>%q!!A?&x00H	XIIaLLr.   __name__
__module____qualname__rI   rJ   ReLUBatchNorm2dintr   Moduler	   rH   ra   torchTensorrh   __classcell__rY   s   @r,   r"   r"   "   s}       I .2   !,0)+*,.482648-1!?# ?#?# ?# 	?#
 !+?# ?# ?# ?# ?# %SM?# BI?# RY?# !bi1?# tBI/?# !bi1?#   	*!?# ?# ?# ?# ?# ?#B, , , %,        r.   r"   c                        e Zd ZdZdddddddej        ej        ddddfdedededeej	                 d	ed
edededee         de
ej	                 de
ej	                 dee
ej	                          dee
ej	                          dee
ej	                          deej	                 f fdZd Zdej        dej        fdZ xZS )r#      r   Nr0   r1   r2   r%   r3   r4   r5   r6   r&   r7   r8   r9   r:   r;   r<   r=   c           
      N   t          t          |                                            t          t	          j        ||dz  z            |z            }||z  }|| j        z  }|	p|}	|duo|dk    p|	|k    }t          j        ||dd          | _	         ||          | _
         |
d          | _        t          j        ||d	|rdn||	|	|d
          | _         ||          | _        |
 |            nt          j                    | _         |
d          | _        t#          ||||          | _        t          j        ||dd          | _         ||          | _        t+          ||          | _         |
d          | _        || _        || _        || _        || _        dS )r?   r0   Nr)   r   F)r$   rA   TrB   r@   )r$   r%   r+   r&   groupsrA   rD   )rG   r#   rH   ro   mathfloorrI   rJ   rK   rL   rM   rO   rQ   rR   rN   r<   rT   r   rP   conv3bn3r   rS   act3r3   r%   r&   r=   )rU   r1   r2   r%   r3   r4   r5   r6   r&   r7   r8   r9   r:   r;   r<   r=   widthrV   rW   rX   rY   s                       r,   rH   zBottleneck.__init__   s   H 	j$((***DJvb9::[HII,T^+	'38%U6Q;+T.H:TYx15QQQ
:l++Id+++	Y%QF7Nqq"^KV[] ] ]
 :e$$*4*@**,,,bkmmId+++	HuVFSSSYuiQUKKK
:i((j)44Id+++	$ "r.   c                     t          | j        dd           +t          j                            | j        j                   d S d S r[   )r]   r|   rJ   r^   r_   r\   r`   s    r,   ra   zBottleneck.zero_init_last   rb   r.   rc   r'   c                    |}|                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }| 	                    |          }| j
        | 
                    |          }| j        |                     |          }| j        |                     |          }||z  }|                     |          }|S re   )rL   rM   rO   rQ   rR   r<   rT   rP   r{   r|   rS   r=   r3   r}   rf   s      r,   rh   zBottleneck.forward   s   JJqMMHHQKKIIaLLJJqMMHHQKKOOAIIaLLGGAJJJJqMMHHQKK7

A>%q!!A?&x00H	XIIaLLr.   ri   rt   s   @r,   r#   r#      s       I .2   !,0)+*,.482648-1!A# A#A# A# 	A#
 !+A# A# A# A# A# %SMA# BIA# RYA# !bi1A# tBI/A# !bi1A#   	*!A# A# A# A# A# A#F, , , %,        r.   r#   in_channelsout_channelsr7   r9   c                     |pt           j        }|dk    r|dk    rdn|}|dk    r|p|nd}t          |||          }t          j        t          j        | |||||d           ||          g S )Nr   F)r%   r+   r&   rA   )rJ   rn   r-   
SequentialrK   )r   r   r$   r%   r&   r7   r9   ps           r,   downsample_convr      s     -r~J{{x1}}!!+K5@1__n0!NK88A=
	{61Welq	s 	s 	s
<    r.   c                 2   |pt           j        }|dk    r|nd}|dk    r|dk    rt          j                    }n.|dk    r|dk    rt          nt           j        }	 |	d|dd          }t          j        |t          j        | |dddd           ||          g S )Nr   r)   TF)	ceil_modecount_include_padr   r%   r+   rA   )rJ   rn   rN   r   	AvgPool2dr   rK   )
r   r   r$   r%   r&   r7   r9   
avg_stridepoolavg_pool_fns
             r,   downsample_avgr     s     -r~J#q==aJ{{x1}}{}}'1Q8a<<mmR\{1jDERRR=
	+|Qq!%PPP
<    r.           	drop_probc           	      v    d d | rt          t          | dd          nd | rt          t          | dd          nd gS )N         ?)r   
block_sizegamma_scaler@         ?)r   r   )r   s    r,   drop_blocksr     sQ    dU^hyQDQQQQdhU^hyQDQQQQdhj jr.       F	block_fnsrE   .block_repeatsr1   r6   output_stridedown_kernel_sizeavg_downdrop_block_ratedrop_path_ratec
                 d   g }g }t          |          }d}d}dx}}t          t          | ||t          |                              D ]d\  }\  }}}}d|dz    }|dk    rdnd}||k    r||z  }d}n||z  }d }|dk    s|||j        z  k    rKt          |||j        z  |||||
                    d                    }|rt          di |nt          di |}t          d|||d|
}g }t          |          D ]i}|dk    r|nd }|dk    r|nd}|	|z  |dz
  z  }|
                     |||||f||d	k    rt          |          nd d
|           |}||j        z  }|dz  }j|
                    |t          j        | f           |
                    t          |||                     f||fS )Nr   rv   r   layerr)   r9   )r   r   r$   r%   r&   r7   r9   )r6   r&   r<   r   )r7   r=   num_chs	reductionmoduler*   )sum	enumeratezipr   rI   dictgetr   r   rangeappendr   rJ   r   )r   rE   r   r1   r6   r   r   r   r   r   kwargsstagesfeature_infonet_num_blocksnet_block_idx
net_strider&   prev_dilation	stage_idxblock_fnr2   
num_blocksdb
stage_namer%   r3   down_kwargsblock_kwargsblocks	block_idx	block_dprs                                  r,   make_blocksr      s    FL''NMJ  H}9B3yRZ\ikv  xG  lH  lH  DI  DI  :J  :J *] *]5	5Hfj",Y],,
1nn!&&HFF& J
Q;;(fx/A&AAA$#h&88,!,!::l33  K ;Cf66+666HfHfZeHfHfJbUWbb[abbz** 	 	I'0A~~4J(A~~VV1F&6.1:LMIMM((	
  -1:R(9---T       %M 22HQMMz2=&#9:;;;DZPZ[[[\\\\<r.   c            2       v    e Zd ZdZddddddddd	ddd	d
ej        ej        ddddddfdeee	f         de
edf         dededededededededededededee
edf                  deded eeej                          d!ed"ed#ed$ed%eeeef                  f. fd&Zej        j        d?d$efd'            Zej        j        d@d(efd)            Zej        j        d?d*efd+            Zej        j        d@d,efd-            ZdAdedefd.Z	 	 	 	 	 dBd0ej        d1eeeee         f                  d2ed3ed4ed5ed6eeej                 e
ej        eej                 f         f         fd7Z 	 	 	 dCd1eeee         f         d8ed9efd:Z!d0ej        d6ej        fd;Z"d@d0ej        d<ed6ej        fd=Z#d0ej        d6ej        fd>Z$ xZ%S )Dr!   a  ResNet / ResNeXt / SE-ResNeXt / SE-Net

    This class implements all variants of ResNet, ResNeXt, SE-ResNeXt, and SENet that
      * have > 1 stride in the 3x3 conv layer of bottleneck
      * have conv-bn-act ordering

    This ResNet impl supports a number of stem and downsample options based on the v1c, v1d, v1e, and v1s
    variants included in the MXNet Gluon ResNetV1b model. The C and D variants are also discussed in the
    'Bag of Tricks' paper: https://arxiv.org/pdf/1812.01187. The B variant is equivalent to torchvision default.

    ResNet variants (the same modifications can be used in SE/ResNeXt models as well):
      * normal, b - 7x7 stem, stem_width = 64, same as torchvision ResNet, NVIDIA ResNet 'v1.5', Gluon v1b
      * c - 3 layer deep 3x3 stem, stem_width = 32 (32, 32, 64)
      * d - 3 layer deep 3x3 stem, stem_width = 32 (32, 32, 64), average pool in downsample
      * e - 3 layer deep 3x3 stem, stem_width = 64 (64, 64, 128), average pool in downsample
      * s - 3 layer deep 3x3 stem, stem_width = 64 (64, 64, 128)
      * t - 3 layer deep 3x3 stem, stem width = 32 (24, 48, 64), average pool in downsample
      * tn - 3 layer deep 3x3 stem, stem width = 32 (24, 32, 64), average pool in downsample

    ResNeXt
      * normal - 7x7 stem, stem_width = 64, standard cardinality and base widths
      * same c,d, e, s variants as ResNet can be enabled

    SE-ResNeXt
      * normal - 7x7 stem, stem_width = 64
      * same c, d, e, s variants as ResNet can be enabled

    SENet-154 - 3 layer deep 3x3 stem (same as v1c-v1s), stem_width = 64, cardinality=64,
        reduction by 2 on width of first bottleneck convolution, 3x3 downsample convs after first block
      r@   r   avgr   r0    F)r0         i   Nr   Tblocklayers.num_classesin_chansr   global_poolr4   r5   
stem_width	stem_typereplace_stem_poolblock_reduce_firstr   r   rE   r8   r9   r;   	drop_rater   r   ra   
block_argsc                    t          t          |                                            |pt                      }|dv sJ || _        || _        d| _        t          |          }t          |          }d|
v }|r|	dz  nd}|r|	|	f}d|
v r
d|	dz  z  |	f}t          j
        t          j        ||d	         ddd
d           ||d	                    |d          t          j        |d	         |d
         dd
d
d           ||d
                    |d          t          j        |d
         |dd
d
d          g | _        nt          j        ||dddd          | _         ||          | _         |d          | _        t          |dd          g| _        |rit          j
        t!          dt          j        ||d|rd
ndd
d          |t#          ||d          nd ||           |d          g           | _        n|at'          |t          j                  r |d          | _        nRt          j
        t          j        dd
d
           ||d          g | _        nt          j        ddd
          | _         t-          t/          |                    |          }t1          ||||f|||||||||||d|\  }}|D ]} | j        |  | j                            |           |d         |d         j        z  x| _        | _        t=          | j        | j        |          \  | _        | _         | !                    |           dS )a	  
        Args:
            block (nn.Module): class for the residual block. Options are BasicBlock, Bottleneck.
            layers (List[int]) : number of layers in each block
            num_classes (int): number of classification classes (default 1000)
            in_chans (int): number of input (color) channels. (default 3)
            output_stride (int): output stride of the network, 32, 16, or 8. (default 32)
            global_pool (str): Global pooling type. One of 'avg', 'max', 'avgmax', 'catavgmax' (default 'avg')
            cardinality (int): number of convolution groups for 3x3 conv in Bottleneck. (default 1)
            base_width (int): bottleneck channels factor. `planes * base_width / 64 * cardinality` (default 64)
            stem_width (int): number of channels in stem convolutions (default 64)
            stem_type (str): The type of stem (default ''):
                * '', default - a single 7x7 conv with a width of stem_width
                * 'deep' - three 3x3 convolution layers of widths stem_width, stem_width, stem_width * 2
                * 'deep_tiered' - three 3x3 conv layers of widths stem_width//4 * 3, stem_width, stem_width * 2
            replace_stem_pool (bool): replace stem max-pooling layer with a 3x3 stride-2 convolution
            block_reduce_first (int): Reduction factor for first convolution output width of residual blocks,
                1 for all archs except senets, where 2 (default 1)
            down_kernel_size (int): kernel size of residual block downsample path,
                1x1 for most, 3x3 for senets (default: 1)
            avg_down (bool): use avg pooling for projection skip connection between stages/downsample (default False)
            act_layer (str, nn.Module): activation layer
            norm_layer (str, nn.Module): normalization layer
            aa_layer (nn.Module): anti-aliasing layer
            drop_rate (float): Dropout probability before classifier, for training (default 0.)
            drop_path_rate (float): Stochastic depth drop-path rate (default 0.)
            drop_block_rate (float): Drop block rate (default 0.)
            zero_init_last (bool): zero-init the last weight in residual path (usually last BN affine weight)
            block_args (dict): Extra kwargs to pass through to block module
        )      r   Fdeepr)   r0   tieredr@   rv   r   r   r   TrB      )r$   r%   r+   rA   rO   r   N)rE   r%   )r$   r%   r+   )r4   r5   r   r6   r   r   r8   r9   r;   r   r   	pool_type)ra   )"rG   r!   rH   r   r   r   grad_checkpointingr   r   rJ   r   rK   rL   rM   rO   r   filterr   maxpool
issubclassr   	MaxPool2dr   lenr   
add_moduleextendrI   num_featureshead_hidden_sizer   r   fcinit_weights) rU   r   r   r   r   r   r   r4   r5   r   r   r   r   r   r   rE   r8   r9   r;   r   r   r   ra   r   	deep_stemr1   stem_chsr   stage_modulesstage_feature_infostagerY   s                                   r,   rH   zResNet.__init__  s   p 	fd$$&&&)466
++++&""'!),,	#J//
 i'	%.6:>>B 	g"J/H9$$q1:>	(HQK1aeTTT
8A;''	$'''	(1+x{AaQVWWW
8A;''	$'''	(1+x1aeTTT)V WDJJ 8X1QXY`efffDJ:h''Id+++	!(aOOOP  	P=&	(HaX8L1VW^cdddDLDX	(Xa@@@@^b
8$$	$'''	8 + + DLL #h55 @#+8A;;DLL#%=1aHHH (1===3? $@DLL  "|!QOOO -Ic(mm,,U33	,7	-

 $!'+-!+)-
 -
  !-
 -
))$ # 	$ 	$EDOU###  !3444 5=RL9R=CZ4ZZD1$5d6GIYep$q$q$q!$'88888r.   c                 :   |                                  D ]F\  }}t          |t          j                  r't          j                            |j        dd           G|r;|                                 D ](}t          |d          r|	                                 'd S d S )Nfan_outrelu)modenonlinearityra   )
named_modules
isinstancerJ   rK   r^   kaiming_normal_r\   moduleshasattrra   )rU   ra   nms       r,   r   zResNet.init_weights
  s    &&(( 	W 	WDAq!RY'' W''yv'VVV 	'\\^^ ' '1.// '$$&&&	' 	'' 'r.   coarsec                 0    t          d|rdnd          }|S )Nz^conv1|bn1|maxpoolz^layer(\d+)z^layer(\d+)\.(\d+))stemr   )r   )rU   r   matchers      r,   group_matcherzResNet.group_matcher  s$    1F:m..Xmnnnr.   rF   c                     || _         d S re   )r   )rU   rF   s     r,   set_grad_checkpointingzResNet.set_grad_checkpointing  s    "(r.   	name_onlyc                     |rdn| j         S )Nr   )r   )rU   r   s     r,   get_classifierzResNet.get_classifier  s     -ttdg-r.   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )Nr   )r   r   r   r   r   )rU   r   r   s      r,   reset_classifierzResNet.reset_classifier!  s3    &$5d6GIYep$q$q$q!$'''r.   NCHWrc   indicesnorm
stop_early
output_fmtintermediates_onlyr'   c                    |dv s
J d            g }t          d|          \  }}	d}
|                     |          }|                     |          }|                     |          }|
|v r|                    |           |                     |          }d}|r
|d|	         }|D ]9}|
dz  }
 t          | |          |          }|
|v r|                    |           :|r|S ||fS )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:

        )r  zOutput shape must be NCHW.r   r   layer1layer2layer3layer4Nr   )r   rL   rM   rO   r   r   r]   )rU   rc   r  r  r  r  r  intermediatestake_indices	max_indexfeat_idxlayer_namesr   s                r,   forward_intermediateszResNet.forward_intermediates%  s   * Y&&&(D&&&"6q'"B"Bi JJqMMHHQKKIIaLL|##  ###LLOO> 	2%jyj1K 	( 	(AMH a  ##A<''$$Q''' 	!  -r.   
prune_norm
prune_headc                     t          d|          \  }}d}||d         }|D ]$}t          | |t          j                               %|r|                     dd           |S )z@ Prune layers not required for specified intermediates.
        r   r
  Nr   r   )r   setattrrJ   rN   r  )rU   r  r  r  r  r  r  r   s           r,   prune_intermediate_layersz ResNet.prune_intermediate_layersU  sy     #7q'"B"Bi>!)**- 	, 	,AD!R[]]++++ 	)!!!R(((r.   c                    |                      |          }|                     |          }|                     |          }|                     |          }| j        rIt
          j                                        s+t          | j	        | j
        | j        | j        g|d          }nT| 	                    |          }| 
                    |          }|                     |          }|                     |          }|S )NT)flatten)rL   rM   rO   r   r   rq   jitis_scriptingr   r  r  r  r  rU   rc   s     r,   forward_featureszResNet.forward_featuresf  s    JJqMMHHQKKIIaLLLLOO" 	59+A+A+C+C 	T[$+t{SUV`deeeAAAAAAAAAAr.   
pre_logitsc                     |                      |          }| j        r.t          j        |t	          | j                  | j                  }|r|n|                     |          S )N)r   training)r   r   Fdropoutfloatr"  r   )rU   rc   r   s      r,   forward_headzResNet.forward_headu  s[    Q> 	N	!uT^44t}MMMA.qqDGGAJJ.r.   c                 Z    |                      |          }|                     |          }|S re   )r  r&  r  s     r,   rh   zResNet.forward{  s-    !!!$$a  r.   )TF)r   )NFFr  F)r   FT)&rj   rk   rl   __doc__rJ   rm   rn   r
   r"   r#   r   ro   strboolr   r   r	   rp   r%  r   r   rH   rq   r  ignorer   r   r   r   r  rr   r   r  r  r  r&  rh   rs   rt   s   @r,   r!   r!   b  s4        F  $!#$   &+&'$%"2E#%7$&N26"$&%'#'371F9 F9Z/0F9 #s(OF9 	F9
 F9 F9 F9 F9 F9 F9 F9  $F9 !$F9 "F9 F9  uS#X/!F9" !#F9$ "%F9& tBI/'F9( )F9* "+F9, #-F9. !/F90 !c3h01F9 F9 F9 F9 F9 F9P Y' '4 ' ' ' ' Y D     Y) )T ) ) ) ) Y. . . . . .r rC rc r r r r 8<$$',.  . |.  eCcN34.  	. 
 .  .  !%.  
tEL!5tEL7I)I#JJ	K.  .  .  . d ./$#	 3S	>*  	   "%, 5<    / /el / / / / / / %,        r.   r!   
pretrainedc                 *    t          t          | |fi |S re   )r   r!   )variantr-  r   s      r,   _create_resnetr0    s    FFvFFFr.   r   c                 4    | dddddt           t          ddd
|S )	Nr   r@      r3  )r   r   g      ?bilinearrL   r   )
urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr   r5  r   s     r,   _cfgr?    s5    =vJ%.BT   r.   c           	      8    t          dd| it          ddifi |S )Nr5  r9  bicubicr*   r?  r   r>  s     r,   _tcfgrC    s0    HHCH4) <GGGGHHHr.   c                 >    t          dd| it          dddddfi |S )Nr5  rA  r@      rF  ffffff?3https://github.com/huggingface/pytorch-image-models)r9  test_input_sizetest_crop_pct
origin_urlr*   rB  r>  s     r,   _ttcfgrL    sU      C 4"}W[K! !   
    r.   c                 B    t          d	d| it          dddddddfi |S )
Nr5  rA  rG  rE  r   rH  arXiv:2110.00476)r9  r8  rI  rJ  rK  	paper_idsr*   rB  r>  s     r,   _rcfgrP    sZ      C 4"ilKZl! !   
    r.   c                 F    t          d
d| it          ddddddddd	fi |S )Nr5  rA  r@      rS  r   r   rG  r2  rH  rN  )r9  r6  r7  r8  rI  rJ  rK  rO  r*   rB  r>  s     r,   _r3cfgrU    s^      C 4"-f]TKZl! !   
	    r.   c           	      :    t          dd| it          dddfi |S )Nr5  rA  z1https://cv.gluon.ai/model_zoo/classification.html)r9  rK  r*   rB  r>  s     r,   _gcfgrW    sP      C 4"I! !   
    r.   zresnet10t.c3_in1kztimm/zrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet10t_176_c3-f3215ab1.pth)r@      rX  )   rY  rG  r2  zconv1.0)	hf_hub_idr5  r6  r7  rJ  rI  r<  zresnet14t.c3_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet14t_176_c3-c4ed2c37.pthzresnet18.a1_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet18_a1_0-d63eafa0.pth)rZ  r5  zresnet18.a2_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet18_a2_0-b61bd467.pthzresnet18.a3_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet18_a3_0-40c531c8.pthzresnet18d.ra2_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet18d_ra2-48a79e06.pth)rZ  r5  r<  zresnet34.a1_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet34_a1_0-46f8f793.pthzresnet34.a2_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet34_a2_0-82d47d71.pthzresnet34.a3_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet34_a3_0-a20cabb6.pth)rZ  r5  r8  zresnet34.bt_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet34-43635321.pthzresnet34d.ra2_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet34d_ra2-f8dcfcaf.pthzresnet26.bt_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet26-9aa10e23.pthzresnet26d.bt_in1kzghttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet26d-69e92c46.pthzresnet26t.ra2_in1kzthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/resnet26t_256_ra2-6f6fa748.pth)r@   r   r   )r   r   gGz?)r@   @  r[  r   )rZ  r5  r<  r6  r7  r8  rI  rJ  zresnet50.a1_in1kzohttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_a1_0-14fe96d1.pthzresnet50.a1h_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_a1h2_176-001a1197.pthg?)rZ  r5  r6  r7  r8  rI  rJ  zresnet50.a2_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_a2_0-a2746f79.pthzresnet50.a3_in1kzqhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_a3_0-59cae1ef.pthzresnet50.b1k_in1kzphttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_b1k-532a802a.pthzresnet50.b2k_in1kzphttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_b2k-1ba180c1.pthzresnet50.c1_in1kzohttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_c1-5ba5e060.pthzresnet50.c2_in1kzohttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_c2-d01e05b2.pthzresnet50.d_in1kznhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_d-f39db8af.pthzresnet50.ram_in1kzlhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/resnet50_ram-a26f946b.pthzresnet50.am_in1kzkhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/resnet50_am-6c502b37.pthzresnet50.ra_in1kzkhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/resnet50_ra-85ebb6e5.pthzresnet50.bt_in1kzkhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/rw_resnet50-86acaeed.pthzresnet50d.ra2_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet50d_ra2-464e36ba.pthzresnet50d.ra4_e3600_r224_in1k)      ?r\  r\  rE  )rZ  r:  r;  r8  rI  rJ  r<  zresnet50d.a1_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50d_a1_0-e20cff14.pthzresnet50d.a2_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50d_a2_0-a3adc64d.pthzresnet50d.a3_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50d_a3_0-403fdfad.pthzresnet50t.untrained)r<  zresnet101.a1h_in1kzohttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet101_a1h-36d3f2aa.pthzresnet101.a1_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet101_a1_0-cdcb52a9.pthzresnet101.a2_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet101_a2_0-6edb36c7.pthzresnet101.a3_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet101_a3_0-1db14157.pthzresnet101d.ra2_in1kzlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet101d_ra2-2803ffab.pth)rZ  r5  r<  r6  r7  r8  rJ  rI  zresnet152.a1h_in1kzohttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet152_a1h-dc400468.pthzresnet152.a1_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet152_a1_0-2eee8a7a.pthzresnet152.a2_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet152_a2_0-b4c6978f.pthzresnet152.a3_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet152_a3_0-134d4688.pthzresnet152d.ra2_in1kzlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet152d_ra2-5cac0439.pthzresnet200.untrainedzresnet200d.ra2_in1kzlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet200d_ra2-bdba9bf9.pthzwide_resnet50_2.racm_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/wide_resnet50_racm-8234f177.pthzresnet18.tv_in1kz9https://download.pytorch.org/models/resnet18-5c106cde.pthzbsd-3-clausez!https://github.com/pytorch/vision)rZ  r5  licenserK  zresnet34.tv_in1kz9https://download.pytorch.org/models/resnet34-333f7ec4.pthzresnet50.tv_in1kz9https://download.pytorch.org/models/resnet50-19c8e357.pthzresnet50.tv2_in1kz9https://download.pytorch.org/models/resnet50-11ad3fa6.pthgzG?)rZ  r5  r6  r7  rI  rJ  r]  rK  zresnet101.tv_in1kz:https://download.pytorch.org/models/resnet101-5d3b4d8f.pthzresnet101.tv2_in1kz:https://download.pytorch.org/models/resnet101-cd907fc2.pthzresnet152.tv_in1kz:https://download.pytorch.org/models/resnet152-b121ed2d.pthzresnet152.tv2_in1kz:https://download.pytorch.org/models/resnet152-f82ba261.pthzwide_resnet50_2.tv_in1kz@https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pthzwide_resnet50_2.tv2_in1kz@https://download.pytorch.org/models/wide_resnet50_2-9ba9bcbe.pthzwide_resnet101_2.tv_in1kzAhttps://download.pytorch.org/models/wide_resnet101_2-32ee1156.pthzwide_resnet101_2.tv2_in1kzAhttps://download.pytorch.org/models/wide_resnet101_2-d733dc28.pthzresnet50_gn.a1h_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnet50_gn_a1h2-8fe6c4d0.pthzresnext50_32x4d.a1h_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnext50_32x4d_a1h-0146ab0a.pthzresnext50_32x4d.a1_in1kzxhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnext50_32x4d_a1_0-b5a91a1d.pthzresnext50_32x4d.a2_in1kzxhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnext50_32x4d_a2_0-efc76add.pthzresnext50_32x4d.a3_in1kzxhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/resnext50_32x4d_a3_0-3e450271.pthzresnext50_32x4d.ra_in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/resnext50_32x4d_ra-d733960d.pthzresnext50d_32x4d.bt_in1kznhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnext50d_32x4d-103e99f8.pthzresnext101_32x4d.untrainedzresnext101_64x4d.c1_in1kzthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/resnext101_64x4d_c-0d0e0cc0.pthzresnext50_32x4d.tv_in1kz@https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pthzresnext101_32x8d.tv_in1kzAhttps://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pthzresnext101_64x4d.tv_in1kzAhttps://download.pytorch.org/models/resnext101_64x4d-173b62eb.pthzresnext50_32x4d.tv2_in1kz@https://download.pytorch.org/models/resnext50_32x4d-1a0047aa.pthzresnext101_32x8d.tv2_in1kzAhttps://download.pytorch.org/models/resnext101_32x8d-110c445d.pthz$resnext101_32x8d.fb_wsl_ig1b_ft_in1kzChttps://download.pytorch.org/models/ig_resnext101_32x8-c38310e5.pthzcc-by-nc-4.0z.https://github.com/facebookresearch/WSL-Imagesz%resnext101_32x16d.fb_wsl_ig1b_ft_in1kzDhttps://download.pytorch.org/models/ig_resnext101_32x16-c6f796b0.pthz%resnext101_32x32d.fb_wsl_ig1b_ft_in1kzDhttps://download.pytorch.org/models/ig_resnext101_32x32-e4b90b00.pthz%resnext101_32x48d.fb_wsl_ig1b_ft_in1kzDhttps://download.pytorch.org/models/ig_resnext101_32x48-3e41cc8a.pthz resnet18.fb_ssl_yfcc100m_ft_in1kzdhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_supervised_resnet18-d92f0530.pthzEhttps://github.com/facebookresearch/semi-supervised-ImageNet1K-modelsz resnet50.fb_ssl_yfcc100m_ft_in1kzdhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_supervised_resnet50-08389792.pthz'resnext50_32x4d.fb_ssl_yfcc100m_ft_in1kzjhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_supervised_resnext50_32x4-ddb3e555.pthz(resnext101_32x4d.fb_ssl_yfcc100m_ft_in1kzkhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_supervised_resnext101_32x4-dc43570a.pthz(resnext101_32x8d.fb_ssl_yfcc100m_ft_in1kzkhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_supervised_resnext101_32x8-2cfe2f8b.pthz)resnext101_32x16d.fb_ssl_yfcc100m_ft_in1kzlhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_supervised_resnext101_32x16-15fffa57.pthzresnet18.fb_swsl_ig1b_ft_in1kzkhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnet18-118f1556.pthzresnet50.fb_swsl_ig1b_ft_in1kzkhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnet50-16a12f1b.pthz$resnext50_32x4d.fb_swsl_ig1b_ft_in1kzqhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnext50_32x4-72679e44.pthz%resnext101_32x4d.fb_swsl_ig1b_ft_in1kzrhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnext101_32x4-3f87e46b.pthz%resnext101_32x8d.fb_swsl_ig1b_ft_in1kzrhttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnext101_32x8-b4712904.pthz&resnext101_32x16d.fb_swsl_ig1b_ft_in1kzshttps://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnext101_32x16-f3559a9c.pthzecaresnet26t.ra2_in1kznhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecaresnet26t_ra2-46609757.pth)rZ  r5  r<  r6  r7  rJ  rI  zecaresnetlight.miil_in1kzlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/ecaresnetlight-75a9c627.pth)rZ  r5  rJ  rI  zecaresnet50d.miil_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/ecaresnet50d-93c81e3b.pth)rZ  r5  r<  rJ  rI  zecaresnet50d_pruned.miil_in1kzlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/ecaresnet50d_p-e4fa23c2.pthzecaresnet50t.ra2_in1kznhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecaresnet50t_ra2-f7ac63c4.pthzecaresnet50t.a1_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/ecaresnet50t_a1_0-99bd76a8.pthzecaresnet50t.a2_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/ecaresnet50t_a2_0-b1c7b745.pthzecaresnet50t.a3_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/ecaresnet50t_a3_0-8cc311f1.pthzecaresnet101d.miil_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/ecaresnet101d-153dad65.pthzecaresnet101d_pruned.miil_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/ecaresnet101d_p-9e74cb91.pthzecaresnet200d.untrained)r<  r6  r8  r7  zecaresnet269d.ra2_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/ecaresnet269d_320_ra2-7baa55cb.pth)
   r^  )r@   `  r_  zecaresnext26t_32x4d.untrainedzecaresnext50t_32x4d.untrainedzseresnet18.untrainedzseresnet34.untrainedzseresnet50.a1_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/seresnet50_a1_0-ffa00869.pthzseresnet50.a2_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/seresnet50_a2_0-850de0d9.pthzseresnet50.a3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-rsb-weights/seresnet50_a3_0-317ecd56.pthzseresnet50.ra2_in1kzohttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/seresnet50_ra_224-8efdb4bb.pthzseresnet50t.untrainedzseresnet101.untrainedzseresnet152.untrainedzseresnet152d.ra2_in1kznhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/seresnet152d_ra2-04464dd2.pthzseresnet200d.untrained)r<  r6  r7  zseresnet269d.untrainedzseresnext26d_32x4d.bt_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/seresnext26d_32x4d-80fa48a3.pthzseresnext26t_32x4d.bt_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/seresnext26tn_32x4d-569cb627.pthzseresnext50_32x4d.racm_in1kzthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/seresnext50_32x4d_racm-a304a460.pthzseresnext101_32x4d.untrainedzseresnext101_32x8d.ah_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/seresnext101_32x8d_ah-e6bc4c0a.pthzseresnext101d_32x8d.ah_in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/seresnext101d_32x8d_ah-191d7b94.pthzresnetaa50d.sw_in12k_ft_in1k)rZ  r<  r8  rJ  zresnetaa101d.sw_in12k_ft_in1kz*seresnextaa101d_32x8d.sw_in12k_ft_in1k_288)	   r`  )rZ  r8  r6  r7  rI  rJ  r<  z&seresnextaa101d_32x8d.sw_in12k_ft_in1k)rZ  r<  rJ  z*seresnextaa201d_32x8d.sw_in12k_ft_in1k_384rA  )   ra  )r@     rb  )rZ  r9  r<  r7  r6  r8  zseresnextaa201d_32x8d.sw_in12ki-.  )	rZ  r   r9  r<  r8  r6  r7  rI  rJ  zresnetaa50d.sw_in12k)rZ  r   r<  r8  rJ  zresnetaa50d.d_in12kzresnetaa101d.sw_in12kzseresnextaa101d_32x8d.sw_in12kzresnetblur18.untrainedzresnetblur50.bt_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnetblur50-84f4748f.pthzresnetblur50d.untrainedzresnetblur101d.untrainedzresnetaa34d.untrainedzresnetaa50.a1h_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/resnetaa50_a1h-4cf422b3.pthzseresnetaa50d.untrainedzseresnextaa101d_32x8d.ah_in1kzzhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/seresnextaa101d_32x8d_ah-83c8ae12.pthzresnetrs50.tf_in1kzohttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rs-weights/resnetrs50_ema-6b53758b.pthrR  rT  gQ?)rZ  r5  r6  r7  r8  rI  r9  r<  zresnetrs101.tf_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rs-weights/resnetrs101_i192_ema-1509bbf6.pth)r@      rc  zresnetrs152.tf_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rs-weights/resnetrs152_i256_ema-a9aff7f9.pthzresnetrs200.tf_in1kzohttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/resnetrs200_c-6b698b88.pthzresnetrs270.tf_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rs-weights/resnetrs270_ema-b40e674c.pthzresnetrs350.tf_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rs-weights/resnetrs350_i256_ema-5a1aa8f1.pthzresnetrs420.tf_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rs-weights/resnetrs420_ema-972dee69.pth)r@     rd  zresnet18.gluon_in1kzrhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet18_v1b-0757602b.pthzresnet34.gluon_in1kzrhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet34_v1b-c6d82d59.pthzresnet50.gluon_in1kzrhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet50_v1b-0ebe02e2.pthzresnet101.gluon_in1kzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet101_v1b-3b017079.pthzresnet152.gluon_in1kzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet152_v1b-c1edb0dd.pthzresnet50c.gluon_in1kzrhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet50_v1c-48092f55.pthzresnet101c.gluon_in1kzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet101_v1c-1f26822a.pthzresnet152c.gluon_in1kzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet152_v1c-a3bb0b98.pthzrhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet50_v1d-818a1b1b.pthzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet101_v1d-0f9c8644.pthzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet152_v1d-bd354e12.pthzrhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet50_v1s-1762acc0.pthzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet101_v1s-60fe0cc1.pthzshttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnet152_v1s-dcc41b81.pthzuhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnext50_32x4d-e6a097c1.pthzvhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnext101_32x4d-b253c8c4.pthzvhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_resnext101_64x4d-f9a8e184.pthzwhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_seresnext50_32x4d-90cf2d6e.pthzxhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_seresnext101_32x4d-cf52900d.pthzxhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_seresnext101_64x4d-f9926f93.pthznhttps://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_senet154-70a1a3c0.pth)rZ  r:  r;  r8  r6  r7  r<  )resnet50d.gluon_in1kresnet101d.gluon_in1kresnet152d.gluon_in1kresnet50s.gluon_in1kresnet101s.gluon_in1kresnet152s.gluon_in1kresnext50_32x4d.gluon_in1kresnext101_32x4d.gluon_in1kresnext101_64x4d.gluon_in1kseresnext50_32x4d.gluon_in1kseresnext101_32x4d.gluon_in1kseresnext101_64x4d.gluon_in1ksenet154.gluon_in1kztest_resnet.r160_in1kc           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-10-T model.
    r   r   r   r   r   deep_tieredTr   r   r   r   r   	resnet10tr   r"   r0  r-  r   
model_argss      r,   rv  rv  !  F     J|VcnrsssJ+zPPT*5O5O5O5OPPPr.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-14-T model.
    rs  r   rt  Tru  	resnet14tr   r#   r0  rx  s      r,   r|  r|  )  rz  r.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z"Constructs a ResNet-18 model.
    r)   r)   r)   r)   r   r   resnet18rw  rx  s      r,   r  r  1  >     J|<<<J*jOOD4N4Nv4N4NOOOr.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-18-D model.
    r  r   r   Tru  	resnet18drw  rx  s      r,   r  r  9  F     J|V\gklllJ+zPPT*5O5O5O5OPPPr.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z"Constructs a ResNet-34 model.
    r@   rv   rY  r@   r  resnet34rw  rx  s      r,   r  r  A  r  r.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-34-D model.
    r  r   r   Tru  	resnet34drw  rx  s      r,   r  r  I  r  r.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z"Constructs a ResNet-26 model.
    r  r  resnet26r}  rx  s      r,   r  r  Q  r  r.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-26-T model.
    r  r   rt  Tru  	resnet26tr}  rx  s      r,   r  r  Y  rz  r.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-26-D model.
    r  r   r   Tru  	resnet26dr}  rx  s      r,   r  r  a  r  r.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z"Constructs a ResNet-50 model.
    r  r  resnet50r}  rx  s      r,   r  r  i  r  r.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-50-C model.
    r  r   r   r   r   r   r   	resnet50cr}  rx  s      r,   r  r  q  C     J|V\]]]J+zPPT*5O5O5O5OPPPr.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-50-D model.
    r  r   r   Tru  	resnet50dr}  rx  s      r,   r  r  y  r  r.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-50-S model.
    r  r0   r   r  	resnet50sr}  rx  s      r,   r  r    r  r.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z$Constructs a ResNet-50-T model.
    r  r   rt  Tru  	resnet50tr}  rx  s      r,   r  r    rz  r.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z#Constructs a ResNet-101 model.
    r@   rv      r@   r  	resnet101r}  rx  s      r,   r  r    >     J}===J+zPPT*5O5O5O5OPPPr.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-101-C model.
    r  r   r   r  
resnet101cr}  rx  s      r,   r  r    C     J}W]^^^J,
QQd:6P6P6P6PQQQr.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-101-D model.
    r  r   r   Tru  
resnet101dr}  rx  s      r,   r  r    F     J}W]hlmmmJ,
QQd:6P6P6P6PQQQr.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-101-S model.
    r  r0   r   r  
resnet101sr}  rx  s      r,   r  r    r  r.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z#Constructs a ResNet-152 model.
    r@   r   $   r@   r  	resnet152r}  rx  s      r,   r  r    r  r.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-152-C model.
    r  r   r   r  
resnet152cr}  rx  s      r,   r  r    r  r.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-152-D model.
    r  r   r   Tru  
resnet152dr}  rx  s      r,   r  r    r  r.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-152-S model.
    r  r0   r   r  
resnet152sr}  rx  s      r,   r  r    r  r.   c           	      `    t          t          d          }t          d| fi t          |fi |S )z#Constructs a ResNet-200 model.
    r@      r  r@   r  	resnet200r}  rx  s      r,   r  r    s>     J~>>>J+zPPT*5O5O5O5OPPPr.   c           	      f    t          t          dddd          }t          d| fi t          |fi |S )z%Constructs a ResNet-200-D model.
    r  r   r   Tru  
resnet200dr}  rx  s      r,   r  r    sF     J~"X^imnnnJ,
QQd:6P6P6P6PQQQr.   c           	      b    t          t          dd          }t          d| fi t          |fi |S )aO  Constructs a Wide ResNet-50-2 model.
    The model is the same as ResNet except for the bottleneck number of channels
    which is twice larger in every block. The number of channels in outer 1x1
    convolutions is the same, e.g. last block in ResNet-50 has 2048-512-2048
    channels, and in Wide ResNet-50-2 has 2048-1024-2048.
    r  r   r   r   r5   wide_resnet50_2r}  rx  s      r,   r  r    sA     J|LLLJ+ZVV4
;U;Uf;U;UVVVr.   c           	      b    t          t          dd          }t          d| fi t          |fi |S )zConstructs a Wide ResNet-101-2 model.
    The model is the same as ResNet except for the bottleneck number of channels
    which is twice larger in every block. The number of channels in outer 1x1
    convolutions is the same.
    r  r   r  wide_resnet101_2r}  rx  s      r,   r  r    sA     J}MMMJ,jWWD<V<Vv<V<VWWWr.   c           	      b    t          t          dd          }t          d| fi t          |fi |S )z.Constructs a ResNet-50 model w/ GroupNorm
    r  	groupnorm)r   r   r9   resnet50_gnr}  rx  s      r,   r  r    s@     J|TTTJ-RRtJ7Q7Q&7Q7QRRRr.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z(Constructs a ResNeXt50-32x4d model.
    r  r   rv   r   r   r4   r5   resnext50_32x4dr}  rx  s      r,   r  r     sD     J|XYZZZJ+ZVV4
;U;Uf;U;UVVVr.   c           	      j    t          t          dddddd          }t          d| fi t          |fi |S )zVConstructs a ResNeXt50d-32x4d model. ResNext50 w/ deep stem & avg pool downsample
    r  r   rv   r   T)r   r   r4   r5   r   r   r   resnext50d_32x4dr}  rx  s      r,   r  r    sS     B1$8 8 8J ,jWWD<V<Vv<V<VWWWr.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z*Constructs a ResNeXt-101 32x4d model.
    r  r   rv   r  resnext101_32x4dr}  rx  s      r,   r  r    D     J}"YZ[[[J,jWWD<V<Vv<V<VWWWr.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z*Constructs a ResNeXt-101 32x8d model.
    r  r   r   r  resnext101_32x8dr}  rx  s      r,   r  r    r  r.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z*Constructs a ResNeXt-101 32x16d model
    r  r   r   r  resnext101_32x16dr}  rx  s      r,   r  r  "  E     J}"Y[\\\J-zXXT*=W=WPV=W=WXXXr.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z*Constructs a ResNeXt-101 32x32d model
    r  r   r  resnext101_32x32dr}  rx  s      r,   r  r  *  r  r.   c           	      d    t          t          ddd          }t          d| fi t          |fi |S )z)Constructs a ResNeXt101-64x4d model.
    r  r0   rv   r  resnext101_64x4dr}  rx  s      r,   r  r  2  r  r.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	zConstructs an ECA-ResNeXt-26-T model.
    This is technically a 28 layer ResNet, like a 'D' bag-of-tricks model but with tiered 24, 32, 64 channels
    in the deep stem and ECA attn.
    r  r   rt  Tecar:   r   r   r   r   r   r   ecaresnet26tr}  rx  s      r,   r  r  :  s^     "$45;Q;Q;QS S SJ .*SSZ8R8R68R8RSSSr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	z-Constructs a ResNet-50-D model with eca.
    r  r   r   Tr  r  r  ecaresnet50dr}  rx  s      r,   r  r  F  s\     "Y]5)))+ + +J .*SSZ8R8R68R8RSSSr.   c           
          t          t          ddddt          d                    }t          d| fd	dit          |fi |S )
zConstructs a ResNet-50-D model pruned with eca.
        The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf
    r  r   r   Tr  r  r  ecaresnet50d_prunedprunedr}  rx  s      r,   r  r  P  sd    
 "Y]5)))+ + +J /ggDgDQ[LfLf_eLfLfgggr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	zConstructs an ECA-ResNet-50-T model.
    Like a 'D' bag-of-tricks model but with tiered 24, 32, 64 channels in the deep stem and ECA attn.
    r  r   rt  Tr  r  r  ecaresnet50tr}  rx  s      r,   r  r  [  s^    
 "$45;Q;Q;QS S SJ .*SSZ8R8R68R8RSSSr.   c           	          t          t          dddt          d                    }t          d| fi t          |fi |S )z3Constructs a ResNet-50-D light model with eca.
    )r   r      r@   r   Tr  r  )r   r   r   r   r   ecaresnetlightr}  rx  s      r,   r  r  f  sZ     25)))+ + +J *JUU$z:T:TV:T:TUUUr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	z.Constructs a ResNet-101-D model with eca.
    r  r   r   Tr  r  r  ecaresnet101dr}  rx  s      r,   r  r  p  s\     2Z^5)))+ + +J /:TTj9S9SF9S9STTTr.   c           
          t          t          ddddt          d                    }t          d| fd	dit          |fi |S )
zConstructs a ResNet-101-D model pruned with eca.
       The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf
    r  r   r   Tr  r  r  ecaresnet101d_prunedr  r}  rx  s      r,   r  r  z  sd    
 2Z^5)))+ + +J 0*hhThTR\MgMg`fMgMghhhr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	z.Constructs a ResNet-200-D model with ECA.
    r  r   r   Tr  r  r  ecaresnet200dr}  rx  s      r,   r  r    \     B&[_5)))+ + +J /:TTj9S9SF9S9STTTr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	z.Constructs a ResNet-269-D model with ECA.
    r@      0   r   r   r   Tr  r  r  ecaresnet269dr}  rx  s      r,   r  r    r  r.   c                     t          t          ddddddt          d                    }t          d	| fi t          |fi |S )
zConstructs an ECA-ResNeXt-26-T model.
    This is technically a 28 layer ResNet, like a 'D' bag-of-tricks model but with tiered 24, 32, 64 channels
    in the deep stem. This model replaces SE module with the ECA module
    r  r   rv   rt  Tr  r  r   r   r4   r5   r   r   r   r   ecaresnext26t_32x4dr}  rx  s      r,   r  r    e     2!XZ$45;Q;Q;QS S SJ /ZZtJ?Y?YRX?Y?YZZZr.   c                     t          t          ddddddt          d                    }t          d	| fi t          |fi |S )
zConstructs an ECA-ResNeXt-50-T model.
    This is technically a 28 layer ResNet, like a 'D' bag-of-tricks model but with tiered 24, 32, 64 channels
    in the deep stem. This model replaces SE module with the ECA module
    r  r   rv   rt  Tr  r  r  ecaresnext50t_32x4dr}  rx  s      r,   r  r    r  r.   c           	      ~    t          t          dt          d                    }t          d| fi t          |fi |S )Nr  rS   r  r   r   r   
seresnet18rw  rx  s      r,   r  r    J    J|X\H]H]H]^^^J,
QQd:6P6P6P6PQQQr.   c           	      ~    t          t          dt          d                    }t          d| fi t          |fi |S )Nr  rS   r  r  
seresnet34rw  rx  s      r,   r  r    r  r.   c           	      ~    t          t          dt          d                    }t          d| fi t          |fi |S )Nr  rS   r  r  
seresnet50r}  rx  s      r,   r  r    r  r.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	Nr  r   rt  TrS   r  r  seresnet50tr}  rx  s      r,   r  r    sY    2$$"7"7"79 9 9J -RRtJ7Q7Q&7Q7QRRRr.   c           	      ~    t          t          dt          d                    }t          d| fi t          |fi |S )Nr  rS   r  r  seresnet101r}  rx  s      r,   r  r    J    J}Y]I^I^I^___J-RRtJ7Q7Q&7Q7QRRRr.   c           	      ~    t          t          dt          d                    }t          d| fi t          |fi |S )Nr  rS   r  r  seresnet152r}  rx  s      r,   r  r    r   r.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	Nr  r   r   TrS   r  r  seresnet152dr}  rx  s      r,   r  r    sY    2$$"7"7"79 9 9J .*SSZ8R8R68R8RSSSr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	z2Constructs a ResNet-200-D model with SE attn.
    r  r   r   TrS   r  r  seresnet200dr}  rx  s      r,   r  r    [     B&$$"7"7"79 9 9J .*SSZ8R8R68R8RSSSr.   c           
          t          t          ddddt          d                    }t          d| fi t          |fi |S )	z2Constructs a ResNet-269-D model with SE attn.
    r  r   r   TrS   r  r  seresnet269dr}  rx  s      r,   r	  r	    r  r.   c                     t          t          ddddddt          d                    }t          d	| fi t          |fi |S )
zConstructs a SE-ResNeXt-26-D model.`
    This is technically a 28 layer ResNet, using the 'D' modifier from Gluon / bag-of-tricks for
    combination of deep stem and avg_pool in downsample.
    r  r   rv   r   TrS   r  r  seresnext26d_32x4dr}  rx  s      r,   r  r    se     2!XZ4DD4I4I4IK K KJ .
YYd:>X>XQW>X>XYYYr.   c                     t          t          ddddddt          d                    }t          d	| fi t          |fi |S )
zConstructs a SE-ResNet-26-T model.
    This is technically a 28 layer ResNet, like a 'D' bag-of-tricks model but with tiered 24, 32, 64 channels
    in the deep stem.
    r  r   rv   rt  TrS   r  r  seresnext26t_32x4dr}  rx  s      r,   r  r    se     2!XZ$44;P;P;PR R RJ .
YYd:>X>XQW>X>XYYYr.   c           	          t          t          dddt          d                    }t          d| fi t          |fi |S )Nr  r   rv   rS   r  r   r   r4   r5   r   seresnext50_32x4dr}  rx  s      r,   r  r    sY    2!4(((* * *J -zXXT*=W=WPV=W=WXXXr.   c           	          t          t          dddt          d                    }t          d| fi t          |fi |S )Nr  r   rv   rS   r  r  seresnext101_32x4dr}  rx  s      r,   r  r    Y    B14(((* * *J .
YYd:>X>XQW>X>XYYYr.   c           	          t          t          dddt          d                    }t          d| fi t          |fi |S )Nr  r   r   rS   r  r  seresnext101_32x8dr}  rx  s      r,   r  r    r  r.   c                     t          t          ddddddt          d                    }t          d	| fi t          |fi |S )
Nr  r   r   r   TrS   r  r  seresnext101d_32x8dr}  rx  s      r,   r  r  #  s`    B1$4(((* * *J /ZZtJ?Y?YRX?Y?YZZZr.   c           	          t          t          dddt          d                    }t          d| fi t          |fi |S )Nr  r0   rv   rS   r  r  seresnext101_64x4dr}  rx  s      r,   r  r  ,  r  r.   c                     t          t          ddddddt          d          	          }t          d
| fi t          |fi |S )Nr  r0   rv   r   r@   r)   rS   r  )r   r   r4   r5   r   r   r   r   senet154r}  rx  s      r,   r  r  4  sa    B1X^qTT=R=R=RT T TJ *jOOD4N4Nv4N4NOOOr.   c           	      l    t          t          dt                    }t          d| fi t          |fi |S )z9Constructs a ResNet-18 model with blur anti-aliasing
    r  r   r   r;   resnetblur18)r   r"   r   r0  rx  s      r,   r  r  <  @     J|jQQQJ.*SSZ8R8R68R8RSSSr.   c           	      l    t          t          dt                    }t          d| fi t          |fi |S )z9Constructs a ResNet-50 model with blur anti-aliasing
    r  r  resnetblur50r   r#   r   r0  rx  s      r,   r!  r!  D  r  r.   c           	      r    t          t          dt          ddd          }t          d| fi t          |fi |S )z;Constructs a ResNet-50-D model with blur anti-aliasing
    r  r   r   Tr   r   r;   r   r   r   resnetblur50dr"  rx  s      r,   r%  r%  L  sP     
$8 8 8J /:TTj9S9SF9S9STTTr.   c           	      r    t          t          dt          ddd          }t          d| fi t          |fi |S )z<Constructs a ResNet-101-D model with blur anti-aliasing
    r  r   r   Tr$  resnetblur101dr"  rx  s      r,   r'  r'  V  sQ     $8 8 8J *JUU$z:T:TV:T:TUUUr.   c           	      |    t          t          dt          j        ddd          }t	          d| fi t          |fi |S )z<Constructs a ResNet-34-D model w/ avgpool anti-aliasing
    r  r   r   Tr$  resnetaa34d)r   r"   rJ   r   r0  rx  s      r,   r)  r)  `  sU     RT`fquw w wJ-RRtJ7Q7Q&7Q7QRRRr.   c           	      v    t          t          dt          j                  }t	          d| fi t          |fi |S )z<Constructs a ResNet-50 model with avgpool anti-aliasing
    r  r  
resnetaa50r   r#   rJ   r   r0  rx  s      r,   r+  r+  i  sB     J|blSSSJ,
QQd:6P6P6P6PQQQr.   c           	      |    t          t          dt          j        ddd          }t	          d| fi t          |fi |S )z>Constructs a ResNet-50-D model with avgpool anti-aliasing
    r  r   r   Tr$  resnetaa50dr,  rx  s      r,   r.  r.  q  sR     $8 8 8J -RRtJ7Q7Q&7Q7QRRRr.   c           	      |    t          t          dt          j        ddd          }t	          d| fi t          |fi |S )z?Constructs a ResNet-101-D model with avgpool anti-aliasing
    r  r   r   Tr$  resnetaa101dr,  rx  s      r,   r0  r0  {  sR     $8 8 8J .*SSZ8R8R68R8RSSSr.   c                     t          t          dt          j        dddt          d                    }t	          d| fi t          |fi |S )	zAConstructs a SE=ResNet-50-D model with avgpool anti-aliasing
    r  r   r   TrS   r  )r   r   r;   r   r   r   r   seresnetaa50dr,  rx  s      r,   r2  r2    sc     $4SWCXCXCXZ Z ZJ /:TTj9S9SF9S9STTTr.   c                     t          t          ddddddt          j        t          d          	  	        }t	          d	| fi t          |fi |S )
IConstructs a SE=ResNeXt-101-D 32x8d model with avgpool anti-aliasing
    r  r   r   r   TrS   r  	r   r   r4   r5   r   r   r   r;   r   seresnextaa101d_32x8dr,  rx  s      r,   r6  r6    sf     B1$4(((* * *J 1:\\jA[A[TZA[A[\\\r.   c                     t          t          ddddddt          j        t          d          		  	        }t	          d
| fi t          |fi |S )r4  )r@   r  r  rv   r   r   r0   r   TrS   r  r5  seresnextaa201d_32x8dr,  rx  s      r,   r8  r8    sf     RA$4(((* * *J 1:\\jA[A[TZA[A[\\\r.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-50 model.
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   rd_ratior  r   r   Tr  r   r   r   r   r   r   r   
resnetrs50r   r   r   r#   r0  r-  r   r:   ry  s       r,   r=  r=    sy     $$777J"bf4:#>#>#>@ @ @J ,
QQd:6P6P6P6PQQQr.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-101 model.
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   r:  r  r   r   Tr  r<  resnetrs101r>  r?  s       r,   rA  rA    y     $$777J2cg4:#>#>#>@ @ @J -RRtJ7Q7Q&7Q7QRRRr.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-152 model.
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   r:  r  r   r   Tr  r<  resnetrs152r>  r?  s       r,   rD  rD    rB  r.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-200 model.
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   r:  r  r   r   Tr  r<  resnetrs200r>  r?  s       r,   rF  rF    y     $$777JB&dh4:#>#>#>@ @ @J -RRtJ7Q7Q&7Q7QRRRr.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-270 model.
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   r:  )rv      5   rv   r   r   Tr  r<  resnetrs270r>  r?  s       r,   rK  rK    rG  r.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-350 model.
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   r:  )rv   r  H   rv   r   r   Tr  r<  resnetrs350r>  r?  s       r,   rN  rN    rG  r.   c                     t          t          d          d          }t          t          dddddt          |          	          }t	          d
| fi t          |fi |S )zConstructs a ResNet-RS-420 model
    Paper: Revisiting ResNets - https://arxiv.org/abs/2103.07579
    Pretrained weights from https://github.com/tensorflow/tpu/tree/bee9c4f6/models/official/resnet/resnet_rs
    rS   r   r:  )rv   ,   W   rv   r   r   Tr  r<  resnetrs420r>  r?  s       r,   rR  rR    rG  r.   c           	          t          t          t          t          t          gddddd          }t          d| fi t          |fi |S )z)Constructs a tiny ResNet test model.
    rs  r   r   T)r   r  r  `   )r   r   r   r   r   rE   test_resnet)r   r"   r#   r0  rx  s      r,   rU  rU    s]     :z:>|$AQS S SJ -RRtJ7Q7Q&7Q7QRRRr.   tv_resnet34tv_resnet50tv_resnet101tv_resnet152tv_resnext50_32x4dig_resnext101_32x8dig_resnext101_32x16dig_resnext101_32x32dig_resnext101_32x48dssl_resnet18ssl_resnet50ssl_resnext50_32x4dssl_resnext101_32x4dssl_resnext101_32x8dssl_resnext101_32x16dswsl_resnet18swsl_resnet50swsl_resnext50_32x4dswsl_resnext101_32x4dswsl_resnext101_32x8dswsl_resnext101_32x16dgluon_resnet18_v1bgluon_resnet34_v1bgluon_resnet50_v1bgluon_resnet101_v1bgluon_resnet152_v1bgluon_resnet50_v1cgluon_resnet101_v1cgluon_resnet152_v1cgluon_resnet50_v1dre  gluon_resnet101_v1drf  gluon_resnet152_v1drg  gluon_resnet50_v1srh  gluon_resnet101_v1sri  rj  rk  rl  rm  rn  ro  rp  rq  r  )	gluon_resnet152_v1sgluon_resnext50_32x4dgluon_resnext101_32x4dgluon_resnext101_64x4dgluon_seresnext50_32x4dgluon_seresnext101_32x4dgluon_seresnext101_64x4dgluon_senet154seresnext26tn_32x4d)r   )r   r   NN)r   )r   r   r   Fr   r   r(  )r   )r)  ry   	functoolsr   typingr   r   r   r   r   r	   r
   rq   torch.nnrJ   torch.nn.functional
functionalr#  	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   	_registryr   r   r    __all__ro   r-   rp   r"   r#   r   r   r%  r   r+  r*  r   r!   r0  r?  rC  rL  rP  rU  rW  default_cfgsrv  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  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  r2  r6  r8  r=  rA  rD  rF  rK  rN  rR  rU  rj   r*   r.   r,   <module>r     sb6           @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @                 A A A A A A A AU U U U U U U U U U U U U U U U U U U U U U U U U U U U * * * * * * + + + + + + ' ' ' ' ' ' Y Y Y Y Y Y Y Y Y Y
0
0
0 S #  S    
_ _ _ _ _ _ _ _De e e e e e e eX (,04   	
  ! T")_- Y   2 (,04   	
  ! T")_- Y   0j j5 j j j j  !!# "?  ? z:567? S/?  S#X?  	? 
 ?  ?  ?  ?  ?  ?  4c29n%&T#s(^(<<=?  ?  ?  ? D\ \ \ \ \RY \ \ \~G G G6 G G G G   I I I I             %$ m	& A F$Xe	  m	&  A F$Xe	  m	& A A Am	& A A Am	&$ A A A%m	&* &&y  +m	&2 A A A3m	&8 A A A9m	&>   ?m	&F tv v vGm	&L &&y  Mm	&T tv v vUm	&Z u  [m	&b && C&}C	I I Icm	&l }  mm	&r  D FSR_ort t tsm	&z A A A{m	& m	&@ A A AAm	&F ~@ @ @Gm	&L ~@ @ @Mm	&R }  Sm	&X }  Ym	&^ uu|~ ~ ~_m	&d z| | |em	&j y{ { {km	&p y{ { {qm	&v y{ { {wm	&| &&y  }m	&D $UU/}C	& & &Em	&N  A  Om	&V  A  Wm	&^  A  _m	&f 66Y777gm	&h %%}  im	& m	& m	&n  AB B Bom	&t  AB B Bum	&z  AB B B{m	&@ 66z&SW=	: : :Am	&J %%}  Km	&P  AB B BQm	&V  AB B BWm	&\  AB B B]m	&b 66z&SW=	: : :cm	&l 6688mm	&n 66z&SW=	: : :om	&x  ~"@ "@ "@ym	&B G+NP P PCm	&J G+NP P PKm	&R G+NP P PSm	&Z G FMaf+N	P P P[m	&d H+NP P Pem	& m	& m	&l $$H FMaf+N	P P Pmm	&v H+NP P Pwm	&~ $$H FMaf+N	P P Pm	&H ttN+N P  P  PIm	&P N FMaf+N	!P !P !PQm	&Z O+N!P !P !P[m	&b  O FMaf+N	"P "P "Pcm	&p FF A  qm	&|  D!E !E !E}m	&B uu G H  H  HCm	&H uu G H  H  HIm	&N vv G H  H  HOm	&T vv A B  B  BUm	&Z |! ! ![m	&b !&&((cm	&d  C!D !D !Dem	&n ttN+N P  P  Pom	& m	& m	&v O+N!P !P !Pwm	&~ O+N!P !P !Pm	&F N FMaf+N	!P !P !PGm	&P  O FMaf+N	"P "P "PQm	&b +DDQ+[-] -] -]cm	&j ,TTR+[.] .] .]km	&r ,TTR+[.] .] .]sm	&z ,TTR+[.] .] .]{m	&H	 'r+r*t *t *tI	m	&P	 'r+r*t *t *tQ	m	&X	 .ttx+r0t 0t 0tY	m	&`	 /y+r1t 1t 1ta	m	&h	 /y+r1t 1t 1ti	m	&p	 0z+r2t 2t 2tq	m	&~	 $TTy+r&t &t &t	m	&F
 $TTy+r&t &t &tG
m	&N
 +DD+r-t -t -tO
m	& m	& m	&V
 ,TT A+r.t .t .tW
m	&^
 ,TT A+r.t .t .t_
m	&f
 -dd B+r/t /t /tg
m	&r
 VV|&M	; ; ;s
m	&|
 zM!; !; !;}
m	&D eexD-Q Q QEm	&L $UUzD-&Q &Q &QMm	&T UU|&M	; ; ;Um	&^ EE D  _m	&f EE D  gm	&n FF D  om	&v uuyD- Q  Q  Qwm	&~ %ee{D-'Q 'Q 'Qm	&F vvQW Y  Y  YGm	&J ff B(UY=	: : :Km	&X $UUi%@%@%@Ym	&Z $UUi%@%@%@[m	& m	& m	&` FFHHam	&b FFHHcm	&d %% B  em	&l %% B  mm	&t && B  um	&| 66}  }m	&B VV  Cm	&F VVXXGm	&H VVXXIm	&J VV|&SW=	  Km	&V ff&J J JWm	&Z ff&J J J[m	&b !&&~# # #cm	&j !&&# # #km	&r "66 C$D $D $Dsm	&x #FFHHym	&z !%% F#G #G #G{m	& m	& m	&@ "55 G$ $ $Am	&L #FFt3%@ %@ %@Mm	&R $VVt3&@ &@ &@Sm	&X 1&&-6S`ps3 3 3Ym	&` -ffC/1 /1 /1am	&f 1$$IVcnq3s 3s 3sgm	&l %ddy-8Ubru'w 'w 'wmm	&v FFi$cS S Swm	&| 66i$cS S S}m	&B VVi$cS S SCm	&H %ffi$c'S 'S 'SIm	&P ffhhQm	&R FFxz z zSm	&X vv;;;Ym	&Z ) < < <[m	&\ VVy999]m	&^ 55~@ @ @_m	& m	& m	&f vv;;;gm	&h $UU I& & &im	&t $$} FTS`I	7 7 7um	&~ 44 D FTS`I	7 7 7m	&H 44 D FSR_I	7 7 7Im	&R 44} FSR_I	7 7 7Sm	&\ 44~ FSR_I	7 7 7]m	&f 44 D FSR_I	7 7 7gm	&p 44~ HsTaI	7 7 7qm	&~ 55 AB B Bm	&D 55 AB B BEm	&J 55 AB B BKm	&P EE BC C CQm	&V EE BC C CWm	&\ EE A  ]m	&d UU B  em	&l UU B  mm	& m	&t "E A   #U B   #U B   "E A   #U B   #U B   #(% D#E #E #E $)5 E$F $F $F $)5 E$F $F $F %*E F%G %G %G &+U G&H &H &H &+U G&H &H &H !5|  
 "T/D FyJ J JSm	& m	& m	& m	 m	` Q Q$ QV Q Q Q Q Q Q$ QV Q Q Q Q P P PF P P P P Q Q$ QV Q Q Q Q P P PF P P P P Q Q$ QV Q Q Q Q P P PF P P P P Q Q$ QV Q Q Q Q Q Q$ QV Q Q Q Q P P PF P P P P Q Q$ QV Q Q Q Q Q Q$ QV Q Q Q Q Q Q$ QV Q Q Q Q Q Q$ QV Q Q Q Q Q Q$ QV Q Q Q Q R R4 Rf R R R R R R4 Rf R R R R R R4 Rf R R R R Q Q$ QV Q Q Q Q R R4 Rf R R R R R R4 Rf R R R R R R4 Rf R R R R Q Q$ QV Q Q Q Q R R4 Rf R R R R W W W6 W W W W X X XF X X X X S SD Sv S S S S W W W6 W W W W X X XF X X X X X X XF X X X X X X XF X X X X Y Y$ YV Y Y Y Y Y Y$ YV Y Y Y Y X X XF X X X X T TT T T T T T T TT T T T T T h hD hv h h h h T TT T T T T T V Vt V& V V V V U Ud U U U U U i iT i i i i i U Ud U U U U U U Ud U U U U U [ [D [v [ [ [ [ [ [D [v [ [ [ [ R R4 Rf R R R R
 R R4 Rf R R R R
 R R4 Rf R R R R
 S SD Sv S S S S S SD Sv S S S S
 S SD Sv S S S S
 T TT T T T T T T TT T T T T T T TT T T T T T Z Z4 Zf Z Z Z Z Z Z4 Zf Z Z Z Z Y Y$ YV Y Y Y Y Z Z4 Zf Z Z Z Z Z Z4 Zf Z Z Z Z [ [D [v [ [ [ [ Z Z4 Zf Z Z Z Z P P PF P P P P T TT T T T T T T TT T T T T T U Ud U U U U U V Vt V& V V V V S SD Sv S S S S R R4 Rf R R R R S SD Sv S S S S T TT T T T T T U Ud U U U U U ] ]d ] ] ] ] ] ] ]d ] ] ] ] 	R 	R4 	Rf 	R 	R 	R 	R 	S 	SD 	Sv 	S 	S 	S 	S 	S 	SD 	Sv 	S 	S 	S 	S 	S 	SD 	Sv 	S 	S 	S 	S 	S 	SD 	Sv 	S 	S 	S 	S 	S 	SD 	Sv 	S 	S 	S 	S 	S 	SD 	Sv 	S 	S 	S 	S S SD Sv S S S S  H ,'%,'%,' ',' '	,'
 4,' A,' B,' B,' B,' 6,' 6,' D,' F,' F,' H,'  4!,'" 4#,' ,'$ B%,'& D','( D),'* F+,', /-,'. //,'0 /1,'2 13,'4 15,'6 07,'8 29,': 2;,'< 0=,'> 2?,'@ 2A,'B 0C,'D 2E,' ,'F 39;;= ? ?+/W,' ,' ,' , , , , ,r.   