o
    پiA                     @   s  d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlZddlmZ ddlmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZmZ ddlm Z m!Z! dgZ"eG dd dZ#dd Z$eG dd dZ%eG dd dZ&									dddZ'G dd dej(Z)G dd dej(Z*G dd  d ej(Z+G d!d" d"ej(Z,G d#d$ d$ej(Z-G d%d& d&ej(Z.d'd(d'd)d*d*ej/ej0df	d+d,Z1d-d. Z2d/d0 Z3d1d2 Z4d3e&d4e5d5e6d6e	e7ef fd7d8Z8G d9d dej(Z9dd:d;Z:e;di d<e&e#d=d>d?d@dAe%dBdCdDdEdFdGdHdIdJe&e#dKd'd?d@dAe%dBdCdDdEdFddGdLdIdMe&e#dKd'd?d@dAe%dBdNdDddOdFdGdLdIdPe&e#d=d>d?d@dAe%dBdNdDd(dddFdGdQdIdRe&e#d(d'dd*dAe%dSdTd)dUdVdWdGddXdIdYe&e#d(d'dd*dAe%dZdTd[d\d]ddd^dId_e&e#d(d'dd*dAe%d`dTd[d\d]ddd^dIdae&e#d(d'dd*dAe%d`dTd)dFddbdddcdIdde&e#d(d'dd*dAe%dSdTd)dFdddd^dIdee&e#d(d'dd*dAe%dSdTd)dFddGdddfdIdge'dFdFdhdie'djdkdhdle' dme'dndodhdpe'dFdFdGdqdre'djdkdGdqdse'dGdtdue'dndodGdqdve'dbe;dOdwdxdye'dbdndodzd{e&e#d|d'd)d*dAe%d}dNd)d~dFdFdbdddde'dndodddde'dndodddbe;dOdwdZ<dddZ=dddZ>e!i de>dddde> de> de>dddde>dddde> de> de> de>ddddddde>dddddde>ddde>ddddddde>ddddddde>dddddddde>dddddddde>ddddddde>dddddde>dde>dddddde>dddddde>dde>dddddde>ddddddddZ?e dde9fdd<Z@e dde9fddJZAe dde9fddMZBe dde9fddPZCe dde9fddRZDe dde9fddYZEe dde9fdd_ZFe dde9fddaZGe dde9fdddZHe dde9fddeZIe dde9fddgZJe dde9fddiZKe dde9fddlZLe dde9fddmZMe dde9fddpZNe dde9fddrZOe dde9fddsZPe dde9fdduZQe dde9fddvZRe dde9fddyZSe dde9fdd{ZTe dde9fddZUe dde9fddZVdS )a  PyTorch CspNet

A PyTorch implementation of Cross Stage Partial Networks including:
* CSPResNet50
* CSPResNeXt50
* CSPDarkNet53
* and DarkNet53 for good measure

Based on paper `CSPNet: A New Backbone that can Enhance Learning Capability of CNN` - https://arxiv.org/abs/1911.11929

Reference impl via darknet cfg files at https://github.com/WongKinYiu/CrossStagePartialNetworks

Hacked together by / Copyright 2020 Ross Wightman
    )	dataclassasdictreplace)partial)AnyDictOptionalTupleUnionNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)ClassifierHeadConvNormActDropPathget_attncreate_act_layermake_divisible   )build_model_with_cfg)named_applyMATCH_PREV_GROUP)register_modelgenerate_default_cfgsCspNetc                   @   sv   e Zd ZU dZeeeedf f ed< dZeeeedf f ed< dZ	eed< dZ
eeef ed	< dZee ed
< dS )
CspStemCfg    .out_chs   stride   kernel_size paddingpoolN)__name__
__module____qualname__r   r
   intr	   __annotations__r   r!   r#   strr$   r    r+   r+   F/home/ubuntu/.local/lib/python3.10/site-packages/timm/models/cspnet.pyr      s   
 r   c                 C   sN   t | ttfs
| f} t| }|| }|dkr| d | S t| | d f|  S )Nr   )
isinstancetuplelistlen)xncurr_npad_nr+   r+   r,   _pad_arg(   s   r6   c                   @   s  e Zd ZU dZeedf ed< dZeedf ed< dZe	eeedf f ed< dZ
e	eeedf f ed	< d
Ze	eeedf f ed< d
Ze	eeedf f ed< dZe	eeedf f ed< dZee	eeedf f  ed< dZee	eee f  ed< dZe	eee f ed< dZe	eee f ed< d
Ze	eeedf f ed< dZe	eeedf f ed< dZe	eeedf f ed< dd ZdS )CspStagesCfgr    r       r   .depth            r   r   r   r   groups      ?block_ratiobottle_ratioFavg_downN
attn_layerattn_kwargscsp
stage_typebottle
block_typeexpand_ratiocross_lineardown_growthc                 C   s   t | j}t | j|ksJ t| j|| _t| j|| _t| j|| _t| j|| _t| j|| _t| j	|| _	t| j
|| _
t| j|| _t| j|| _t| j|| _t| j|| _t| j|| _d S N)r1   r:   r   r6   r   r@   rB   rC   rD   rE   rF   rH   rJ   rK   rL   rM   )selfr3   r+   r+   r,   __post_init__F   s   
zCspStagesCfg.__post_init__)r%   r&   r'   r:   r	   r(   r)   r   r   r
   r@   rB   floatrC   rD   boolrE   r   r*   rF   r   rH   rJ   rK   rL   rM   rP   r+   r+   r+   r,   r7   3   s    
  r7   c                   @   sR   e Zd ZU eed< eed< dZeed< dZe	ed< dZ
e	ed< d	Zee	 ed
< d	S )CspModelCfgstemstagesTzero_init_last
leaky_relu	act_layer	batchnorm
norm_layerNaa_layer)r%   r&   r'   r   r)   r7   rV   rR   rX   r*   rZ   r[   r   r+   r+   r+   r,   rS   X   s   
 rS   rA   Fsiludarkc	           
         s   |rt td ddddd}	nt tfdddD d	ddd
}	t|	ttfdddD t fdddD d|d|||d|d
|dS )N@      r   r"   )r   r!   r   r#   r$   c                       g | ]}t |  qS r+   r   .0cwidth_multiplierr+   r,   
<listcomp>s       z_cs3_cfg.<locals>.<listcomp>r   r^   r    r   r!   r   r$   c                    r`   r+   ra   rb   re   r+   r,   rg   x   rh   r;   c                    r`   r+   )r(   )rc   d)depth_multiplierr+   r,   rg   y   rh   )r    r_   	   r          ?cs3)
r   r:   r   rC   rB   rD   rE   rF   rH   rJ   rT   rU   rX   )r   r   r/   rS   r7   )
rf   rl   rD   rX   focusrE   rF   rC   rJ   stem_cfgr+   )rl   rf   r,   _cs3_cfgb   s2   
rs   c                	       sH   e Zd ZdZdddejejddddf	 fdd	Zd	d
 Zdd Z	  Z
S )BottleneckBlockz  ResNe(X)t Bottleneck Block
    r         ?FN        c                    s   t t|   tt|| }t||d}|	d uo|}|	d uo!| }t||fddi|| _t||fd|||
d|| _|rE|	||dnt	
 | _t||fddd|| _|r_|	||dnt	
 | _|rjt|nt	
 | _t|| _d S )	NrX   rZ   r!   r   r    r!   dilationr@   
drop_layerrX   Fr!   	apply_act)superrt   __init__r(   rounddictr   conv1conv2nnIdentityattn2conv3attn3r   	drop_pathr   act3)rO   in_chsr   ry   rC   r@   rX   rZ   	attn_lastrE   
drop_blockr   mid_chsckwargs
attn_first	__class__r+   r,   r      s&   zBottleneckBlock.__init__c                 C      t j| jjj d S rN   )r   initzeros_r   bnweightrO   r+   r+   r,   rV         zBottleneckBlock.zero_init_lastc                 C   sR   |}|  |}| |}| |}| |}| |}| || }| |}|S rN   )r   r   r   r   r   r   r   rO   r2   shortcutr+   r+   r,   forward   s   





zBottleneckBlock.forwardr%   r&   r'   __doc__r   ReLUBatchNorm2dr   rV   r   __classcell__r+   r+   r   r,   rt      s    rt   c                       F   e Zd ZdZdddejejdddf fdd	Zdd	 Zd
d Z	  Z
S )	DarkBlockz DarkNet Block
    r   rn   Nrv   c                    s   t t|   tt|| }t||d}t||fddi|| _|d ur+|||dnt	 | _
t||fd|||	d|| _|
rHt|
| _d S t	 | _d S )Nrw   r!   r   r{   r    rx   )r~   r   r   r(   r   r   r   r   r   r   attnr   r   r   rO   r   r   ry   rC   r@   rX   rZ   rE   r   r   r   r   r   r+   r,   r      s    zDarkBlock.__init__c                 C   r   rN   r   r   r   r   r   r   r   r+   r+   r,   rV      r   zDarkBlock.zero_init_lastc                 C   4   |}|  |}| |}| |}| || }|S rN   r   r   r   r   r   r+   r+   r,   r         


zDarkBlock.forwardr   r+   r+   r   r,   r          r   c                       r   )	EdgeBlockzZ EdgeResidual / Fused-MBConv / MobileNetV1-like 3x3 + 1x1 block (w/ activated output)
    r   rn   Nrv   c                    s   t t|   tt|| }t||d}t||fd|||	d|| _|d ur.|||dnt	 | _
t||fddi|| _|
rHt|
| _d S t	 | _d S )Nrw   r    rx   r{   r!   r   )r~   r   r   r(   r   r   r   r   r   r   r   r   r   r   r   r   r+   r,   r      s    zEdgeBlock.__init__c                 C   r   rN   r   r   r+   r+   r,   rV      r   zEdgeBlock.zero_init_lastc                 C   r   rN   r   r   r+   r+   r,   r     r   zEdgeBlock.forwardr   r+   r+   r   r,   r      r   r   c                
       >   e Zd ZdZdddddddddef
 fdd	Zdd	 Z  ZS )

CrossStagezCross Stage.rA   r   NFc                    s  t t|   |
p
|}
|r|n|}tt||  | _}tt|| }t|d|dd}|dd }|dks>|
|krq|r^t	
|dkrKt	dnt	 t||fdd|	d|| _nt||fd||
|	|d	|| _|}nt	 | _|}t||fd| d
|| _|d }t	
 | _t|D ]!}| jt||d|||||	|d ur|| ndd| |}qt||d fddi|| _t||fddi|| _d S NrX   rZ   rw   r[   r   r   r!   r   r@   r    r!   r   ry   r@   r[   r|   rv   r   r   ry   rC   r@   r   r!   r+   )r~   r   r   r(   r   
expand_chsr   getpopr   
Sequential	AvgPool2dr   r   	conv_downconv_expblocksrange
add_moduler*   conv_transition_bconv_transitionrO   r   r   r   ry   r:   rB   rC   rK   r@   first_dilationrD   rM   rL   	block_dprblock_fnblock_kwargsdown_chsexp_chsblock_out_chsconv_kwargsr[   prev_chsir   r+   r,   r     sR   

	zCrossStage.__init__c                 C   s`   |  |}| |}|j| jd dd\}}| |}| | }| tj	||gdd}|S Nr   r   )dim)
r   r   splitr   r   r   
contiguousr   torchcat)rO   r2   xsxboutr+   r+   r,   r   M  s   


zCrossStage.forwardr%   r&   r'   r   rt   r   r   r   r+   r+   r   r,   r   
  s    Ar   c                
       r   )
CrossStage3z`Cross Stage 3.
    Similar to CrossStage, but with only one transition conv for the output.
    rA   r   NFc                    s  t t|   |
p
|}
|r|n|}tt||  | _}tt|| }t|d|dd}|dd }|dks>|
|krq|r^t	
|dkrKt	dnt	 t||fdd|	d|| _nt||fd||
|	|d	|| _|}nd | _|}t||fd| d
|| _|d }t	
 | _t|D ]!}| jt||d|||||	|d ur|| ndd| |}qt||fddi|| _d S 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   [  sP   
	zCrossStage3.__init__c                 C   sR   |  |}| |}|j| jd dd\}}| |}| tj||gdd}|S r   )r   r   r   r   r   r   r   r   )rO   r2   x1x2r   r+   r+   r,   r     s   


zCrossStage3.forwardr   r+   r+   r   r,   r   W  s    
>r   c                       s8   e Zd ZdZdddddedf fdd	Zdd	 Z  ZS )
	DarkStagezDarkNet stage.rA   r   NFc                    s  t t|   |	p
|}	t|d|dd}|dd }|
r=t|dkr*tdnt	 t
||fdd|d|| _nt
||fd||	||d	|| _|}tt|| }t | _t|D ]!}| jt||d||||||d urw|| nd
d| |}q`d S )NrX   rZ   rw   r[   r   r   r   r    r   rv   r   r+   )r~   r   r   r   r   r   r   r   r   r   r   r   r(   r   r   r   r   r*   )rO   r   r   r   ry   r:   rB   rC   r@   r   rD   r   r   r   r   r[   r   r   r   r   r+   r,   r     sB   
	zDarkStage.__init__c                 C      |  |}| |}|S rN   )r   r   rO   r2   r+   r+   r,   r        

zDarkStage.forwardr   r+   r+   r   r,   r     s    	.r   r    r   r   r"   c	                 C   s  t  }	g }
t|ttfs|g}t|}|sJ |dv sJ d }| }|d }d}t|D ]U\}}d|d  }|dkr?|dksI||krK|dkrK|sKdnd}|dkrZ|d urZ|
| |	|t	|||||dkrh|nd||d ||9 }|}t
||dd	|gd
}q,|r|dksJ |d ur|
| |d ur|	dt jdddd |	d||dd d}n|	dt jdddd d}|d9 }t
||dd	|gd
}|
| |	|
fS )N)r   r      r   convr   r   r"   )r   r#   rX   rZ   .rT   num_chs	reductionmoduler$   r    )r!   r   r#   aa)channelsr   )r   r   r.   r/   r0   r1   	enumerateappendr   r   r   join	MaxPool2d)in_chansr   r!   r   r$   r#   rX   rZ   r[   rT   feature_info
stem_depth	prev_featr   last_idxstem_strider   chs	conv_nameconv_stride	pool_namer+   r+   r,   create_csp_stem  sP   ,


r   c                 C   sn   |  d}|dv sJ |dkr'|  dd  |  dd  |  dd  t}|| fS |dkr1t}|| fS t}|| fS )NrH   )r]   rG   ro   r]   rK   rL   rM   rG   )r   r   r   r   )
stage_argsrH   stage_fnr+   r+   r,   _get_stage_fn  s   
r   c                 C   s>   |  d}|dv sJ |dkrt| fS |dkrt| fS t| fS )NrJ   )r]   edgerI   r]   r   )r   r   r   rt   )r   rJ   r+   r+   r,   _get_block_fn  s   
r   c                 C   sF   |  d}|  dd pi }|d urt|}|rt|fi |}|| fS )NrE   rF   )r   r   r   )r   rE   rF   r+   r+   r,   _get_attn_fn)  s   
r   cfgdrop_path_rateoutput_stride	stem_featc                    s  t | j t| jj}|sd g| ndd td|t| jj| jjD  d<  fddt 	  D }t
| j| jd}d}|d }|d	 }	|}
g }g }t|D ]e\}}t|\}}t|\}}t|\}}|d
}|dkrx|
rx||
 ||kr|dkr||9 }d}||9 }|dv rdnd}|||	fi |||||| j|d|g7 }|d }	t
|	|d| d}
qR||
 tj| |fS )Nc                 S   s   g | ]}|  qS r+   )tolist)rc   r2   r+   r+   r,   rg   <  s    z%create_csp_stages.<locals>.<listcomp>r   r   c                    s   g | ]}t t  |qS r+   )r   zipkeys)rc   valuescfg_dictr+   r,   rg   =  s    rw   r   r   r   r   r   r   r   )r   r   ry   r   r[   rE   r   zstages.r   )r   rU   r1   r:   r   linspacesumr   r   r   r   rX   rZ   r   r   r   r   r   r   r[   r   r   )r   r   r   r   
num_stagesr   r   ry   
net_strider   r   r   rU   	stage_idxr   r   attn_fnr   r   r+   r   r,   create_csp_stages3  s\   
(

	

r	  c                       s   e Zd ZdZ							ddef fd	d
Zejjd ddZ	ejjd!ddZ
ejjdejfddZd"dedee fddZdd Zd defddZdd Z  ZS )#r   a  Cross Stage Partial base model.

    Paper: `CSPNet: A New Backbone that can Enhance Learning Capability of CNN` - https://arxiv.org/abs/1911.11929
    Ref Impl: https://github.com/WongKinYiu/CrossStagePartialNetworks

    NOTE: There are differences in the way I handle the 1x1 'expansion' conv in this impl vs the
    darknet impl. I did it this way for simplicity and less special cases.
    r      r   avgrv   Tr   c	                    s   t    || _|| _|dv sJ t|fi |	}t|j|j|jd}
g | _	t
|fi t|j|
\| _}| j	|dd  t||||d d\| _}|d d }| j	| | | _| _t||||d| _ttt|d|  dS )	a  
        Args:
            cfg (CspModelCfg): Model architecture configuration
            in_chans (int): Number of input channels (default: 3)
            num_classes (int): Number of classifier classes (default: 1000)
            output_stride (int): Output stride of network, one of (8, 16, 32) (default: 32)
            global_pool (str): Global pooling type (default: 'avg')
            drop_rate (float): Dropout rate (default: 0.)
            drop_path_rate (float): Stochastic depth drop-path rate (default: 0.)
            zero_init_last (bool): Zero-init last weight of residual path
            kwargs (dict): Extra kwargs overlayed onto cfg
        )      r   )rX   rZ   r[   Nr-   )r   r   r   r   )in_featuresnum_classes	pool_type	drop_rate)rV   )r~   r   r  r  r   r   rX   rZ   r[   r   r   r   rT   extendr	  rU   num_featureshead_hidden_sizer   headr   r   _init_weights)rO   r   r   r  r   global_poolr  r   rV   kwargs
layer_argsstem_feat_infostage_feat_infor   r   r+   r,   r   r  s:   
 zCspNet.__init__Fc                 C   s"   t d|rdnddtfdgd}|S )Nz^stem^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)Nz^stages\.(\d+)\..*transition)r  )r   )rT   r   )r   r   )rO   coarsematcherr+   r+   r,   group_matcher  s   zCspNet.group_matcherc                 C   s   |rJ dd S )Nz$gradient checkpointing not supportedr+   )rO   enabler+   r+   r,   set_grad_checkpointing  s   zCspNet.set_grad_checkpointingreturnc                 C   s   | j jS rN   )r  fcr   r+   r+   r,   get_classifier  s   zCspNet.get_classifierNr  r  c                 C   s   || _ | j|| d S rN   )r  r  reset)rO   r  r  r+   r+   r,   reset_classifier  s   zCspNet.reset_classifierc                 C   r   rN   rT   rU   r   r+   r+   r,   forward_features  r   zCspNet.forward_features
pre_logitsc                 C   s   |r	| j ||dS |  |S )N)r)  )r  )rO   r2   r)  r+   r+   r,   forward_head  s   zCspNet.forward_headc                 C   r   rN   )r(  r*  r   r+   r+   r,   r     r   zCspNet.forward)r    r
  r   r  rv   rv   TF)TrN   )r%   r&   r'   r   rS   r   r   jitignorer  r!  r   Moduler$  r(   r   r*   r&  r(  rR   r*  r   r   r+   r+   r   r,   r   h  s,    >c                 C   s   t | tjr tjj| jddd | jd urtj| j d S d S t | tjr@tjj	| jddd | jd ur>tj| j d S d S |rMt
| drO|   d S d S d S )Nfan_outrelu)modenonlinearityrv   g{Gz?)meanstdrV   )r.   r   Conv2dr   kaiming_normal_r   biasr   Linearnormal_hasattrrV   )r   namerV   r+   r+   r,   r    s   

r  cspresnet50r^      r   maxrj   r8   r;   r         @rn   T)r:   r   r   rK   rC   rL   r'  cspresnet50d)r   r   r^   )r:   r   r   rK   rC   rB   rL   cspresnet50w)r=   r>   r?   i   ru   cspresnext50)r:   r   r   r@   rK   rC   rB   rL   cspdarknet53)r   r   r  r  r   )r^   r<   r=   r>   r?   )r?  rA   )rn   rA   )rA   rn   )r:   r   r   rK   rC   rB   rM   rJ   	darknet17)r   r   r   r   r   )r   )rn   )rA   )r:   r   r   rC   rB   rH   rJ   	darknet21)r   r   r   r   r   sedarknet21se)r:   r   r   rC   rB   rE   rH   rJ   	darknet53darknetaa53)r:   r   r   rC   rB   rD   rH   rJ   cs3darknet_s)rf   rl   cs3darknet_mg      ?gq=
ףp?cs3darknet_lcs3darknet_xg      ?gHzG?cs3darknet_focus_s)rf   rl   rq   cs3darknet_focus_mcs3darknet_focus_l)rq   cs3darknet_focus_xcs3sedarknet_l)rd_ratio)rE   rF   cs3sedarknet_x)rE   rf   rl   cs3sedarknet_xdwri   )r    r_      r   )r   r   r=   r>   )r:   r   r   r@   rC   rB   rE   rp   cs3edgenet_xg      ?r   )rf   rl   rC   rJ   cs3se_edgenet_x)rf   rl   rC   rJ   rE   rF   c                 K   sP   |  ds
|  drd}nd}|d|}tt| |ft|  td|dd|S )	Ndarknet
cspdarknet)r   r   r   r    r   r9   )r   r   r   r    r   out_indicesT)flatten_sequentialr[  )	model_cfgfeature_cfg)
startswithr   r   r   
model_cfgsr   )variant
pretrainedr  default_out_indicesr[  r+   r+   r,   _create_cspnet  s   
rd  c                 K   s   | dddddt tddd
|S )	Nr
  )r    r=   r=   )r  r  gMb?bilinearzstem.conv1.convzhead.fc)
urlr  
input_size	pool_sizecrop_pctinterpolationr3  r4  
first_conv
classifierr   )rf  r  r+   r+   r,   _cfg  s   rm  zcspresnet50.ra_in1kztimm/zlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspresnet50_ra-d3e8d487.pth)	hf_hub_idrf  zcspresnet50d.untrainedzcspresnet50w.untrainedzcspresnext50.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspresnext50_ra_224-648b4713.pthzcspdarknet53.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspdarknet53_ra_256-d05c7c21.pthzdarknet17.untrainedzdarknet21.untrainedzsedarknet21.untrainedzdarknet53.c2ns_in1kzthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/darknet53_256_c2ns-3aeff817.pthbicubic)r       rp  )rn  rf  rj  test_input_sizetest_crop_pctzdarknetaa53.c2ns_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/darknetaa53_c2ns-5c28ec8a.pth)rn  rf  rq  rr  zcs3darknet_s.untrained)rj  zcs3darknet_m.c2ns_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_m_c2ns-43f06604.pthgffffff?zcs3darknet_l.c2ns_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_l_c2ns-16220c5d.pthzcs3darknet_x.c2ns_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_x_c2ns-4e4490aa.pth)rn  rf  rj  ri  rq  rr  z&cs3darknet_focus_s.ra4_e3600_r256_in1k)rn   rn   rn   )r    @  rs  )rn  r3  r4  rj  rq  rr  zcs3darknet_focus_m.c2ns_in1kzyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_focus_m_c2ns-e23bed41.pthzcs3darknet_focus_l.c2ns_in1kzyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_focus_l_c2ns-65ef8888.pthzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3sedarknet_l_c2ns-e8d1dc13.pthzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3sedarknet_x_c2ns-b4d0abc0.pthzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3edgenet_x_c2-2e1610a9.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3se_edgenet_x_c2ns-76f8e3ac.pth)zcs3darknet_focus_x.untrainedzcs3sedarknet_l.c2ns_in1kzcs3sedarknet_x.c2ns_in1kzcs3sedarknet_xdw.untrainedzcs3edgenet_x.c2_in1kzcs3se_edgenet_x.c2ns_in1kr"  c                 K      t dd| i|S )Nr<  rb  )r<  rd  rb  r  r+   r+   r,   r<       c                 K   rt  )Nr@  rb  )r@  ru  rv  r+   r+   r,   r@    rw  c                 K   rt  )NrA  rb  )rA  ru  rv  r+   r+   r,   rA    rw  c                 K   rt  )NrB  rb  )rB  ru  rv  r+   r+   r,   rB    rw  c                 K   rt  )NrC  rb  )rC  ru  rv  r+   r+   r,   rC    rw  c                 K   rt  )NrD  rb  )rD  ru  rv  r+   r+   r,   rD    rw  c                 K   rt  )NrE  rb  )rE  ru  rv  r+   r+   r,   rE    rw  c                 K   rt  )NrF  rb  )rF  ru  rv  r+   r+   r,   rF    rw  c                 K   rt  )NrH  rb  )rH  ru  rv  r+   r+   r,   rH    rw  c                 K   rt  )NrI  rb  )rI  ru  rv  r+   r+   r,   rI    rw  c                 K   rt  )NrJ  rb  )rJ  ru  rv  r+   r+   r,   rJ    rw  c                 K   rt  )NrK  rb  )rK  ru  rv  r+   r+   r,   rK  !  rw  c                 K   rt  )NrL  rb  )rL  ru  rv  r+   r+   r,   rL  &  rw  c                 K   rt  )NrM  rb  )rM  ru  rv  r+   r+   r,   rM  +  rw  c                 K   rt  )NrN  rb  )rN  ru  rv  r+   r+   r,   rN  0  rw  c                 K   rt  )NrO  rb  )rO  ru  rv  r+   r+   r,   rO  5  rw  c                 K   rt  )NrP  rb  )rP  ru  rv  r+   r+   r,   rP  :  rw  c                 K   rt  )NrQ  rb  )rQ  ru  rv  r+   r+   r,   rQ  ?  rw  c                 K   rt  )NrR  rb  )rR  ru  rv  r+   r+   r,   rR  D  rw  c                 K   rt  )NrT  rb  )rT  ru  rv  r+   r+   r,   rT  I  rw  c                 K   rt  )NrU  rb  )rU  ru  rv  r+   r+   r,   rU  N  rw  c                 K   rt  )NrW  rb  )rW  ru  rv  r+   r+   r,   rW  S  rw  c                 K   rt  )NrX  rb  )rX  ru  rv  r+   r+   r,   rX  X  rw  )	rA   rA   Fr\   FNNrA   r]   r+  r+   )r"   )Wr   dataclassesr   r   r   	functoolsr   typingr   r   r   r	   r
   r   torch.nnr   	timm.datar   r   timm.layersr   r   r   r   r   r   _builderr   _manipulater   r   	_registryr   r   __all__r   r6   r7   rS   rs   r.  rt   r   r   r   r   r   r   r   r   r   r   r   rQ   r(   r*   r	  r   r  r   r`  rd  rm  default_cfgsr<  r@  rA  rB  rC  rD  rE  rF  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rT  rU  rW  rX  r+   r+   r+   r,   <module>   s,    $

%3((MK8
6


5
n$1>JWeq           
    
    	    
  
"


 $)-15
M