a
    d\                      @   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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j0ej1df	d+d,Z2d-d. Z3d/d0 Z4d1d2 Z5e'e6e7e	e8ef d3d4d5Z9G d6d dej)Z:dd7d8Z;e<e'e$d9d:d;d<d=e&d>d?d@dAdBdCdDdEe'e$dFd'd;d<d=e&d>d?d@dAdBddCdGdEe'e$dFd'd;d<d=e&d>dHd@ddIdBdCdGdEe'e$d9d:d;d<d=e&d>dHd@d(dddBdCdJdEe'e$d(d'dd*d=e&dKdLd)dMdNdOdCddPdEe'e$d(d'dd*d=e&dQdLdRdSdTdddUdEe'e$d(d'dd*d=e&dVdLdRdSdTdddUdEe'e$d(d'dd*d=e&dVdLd)dBddWdddXdEe'e$d(d'dd*d=e&dKdLd)dBddddUdEe'e$d(d'dd*d=e&dKdLd)dBddCdddYdEe(dBdBdZe(d[d\dZe( e(d]d^dZe(dBdBdCd_e(d[d\dCd_e(dCd`e(d]d^dCd_e(dWe<dIdadbe(dWd]d^dce'e$ddd'd)d*d=e&dedHd)dfdBdBdWdgddhe(d]d^didjdke(d]d^didjdWe<dIdadldmZ=ddndoZ>ddpdqZ?e"e?drdsdte? e? e?drdudte?drdvdte? e? e? e?drdwdxdyddze?drd{dydd|e?dxd}e?drd~dxdyddze?drddxdyddze?drddxddydde?dxd}e?drddxdyddze?drddxdyddze?dxd}e?drddxdyddze?drddxdyddze?dxd}e?drddxdyddze?drddxdddddZ@e!de:dddZAe!de:dddZBe!de:dddZCe!de:dddZDe!de:dddZEe!de:dddZFe!de:dddZGe!de:dddZHe!de:dddZIe!de:dddZJe!de:dddZKe!de:dddZLe!de:dddZMe!de:dddZNe!de:dddZOe!de:dddZPe!de:dddZQe!de:dddZRe!de:dddZSe!de:dddZTe!de:dddZUe!de:dddZVe!de:dddZWd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ConvNormActAa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,   [/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/cspnet.pyr      s
   
r   c                 C   sN   t | ttfs| f} t| }|| }|dkr8| d | S t| | d f|  S )Nr   )
isinstancetuplelistlen)xnZcurr_nZpad_nr,   r,   r-   _pad_arg(   s    r5   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)r2   r9   r   r5   r    r?   rA   rB   rC   rD   rE   rG   rI   rJ   rK   rL   )selfr4   r,   r,   r-   __post_init__F   s    
zCspStagesCfg.__post_init__)r&   r'   r(   r9   r	   r)   r*   r   r    r
   r?   rA   floatrB   rC   boolrD   r   r+   rE   r   rG   rI   rJ   rK   rL   rO   r,   r,   r,   r-   r6   3   s   
 r6   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_lastZ
leaky_relu	act_layerZ	batchnorm
norm_layerNaa_layer)r&   r'   r(   r   r*   r6   rU   rQ   rV   r+   rW   rX   r   r,   r,   r,   r-   rR   X   s   
rR   r@   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                    s   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                    s   g | ]}t |  qS r,   r]   r^   ra   r,   r-   rc   x   rd   r:   c                    s   g | ]}t |  qS r,   )r)   )r_   d)depth_multiplierr,   r-   rc   y   rd   )r!   r\   	   r!         ?cs3)
r   r9   r    rB   rA   rC   rD   rE   rG   rI   rS   rT   rV   )r   r   r0   rR   r6   )
rb   rh   rC   rV   focusrD   rE   rB   rI   Zstem_cfgr,   )rh   rb   r-   _cs3_cfgb   s2    
rn   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o4|}|	d uoB| }t||fddi|| _t||fd|||
d|| _|r|	||dnt	
 | _t||fddd|| _|r|	||dnt	
 | _|rt|nt	
 | _t|| _d S )	NrV   rW   r"   r   r!   r"   dilationr?   Z
drop_layerrV   Fr"   Z	apply_act)superro   __init__r)   rounddictr   conv1conv2nnIdentityattn2conv3attn3r   	drop_pathr   act3)rN   in_chsr   rt   rB   r?   rV   rW   Z	attn_lastrD   
drop_blockr   mid_chsckwargsZ
attn_first	__class__r,   r-   rx      s&    zBottleneckBlock.__init__c                 C   s   t j| jjj d S rM   )r}   initzeros_r   bnweightrN   r,   r,   r-   rU      s    zBottleneckBlock.zero_init_lastc                 C   sR   |}|  |}| |}| |}| |}| |}| || }| |}|S rM   )r{   r|   r   r   r   r   r   rN   r3   Zshortcutr,   r,   r-   forward   s    





zBottleneckBlock.forwardr&   r'   r(   __doc__r}   ReLUBatchNorm2drx   rU   r   __classcell__r,   r,   r   r-   ro      s   ro   c                       sF   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   rj   Nrq   c                    s   t t|   tt|| }t||d}t||fddi|| _|d urV|||dnt	 | _
t||fd|||	d|| _|
rt|
nt	 | _d S )Nrr   r"   r   ru   r!   rs   )rw   r   rx   r)   ry   rz   r   r{   r}   r~   attnr|   r   r   rN   r   r   rt   rB   r?   rV   rW   rD   r   r   r   r   r   r,   r-   rx      s    zDarkBlock.__init__c                 C   s   t j| jjj d S rM   r}   r   r   r|   r   r   r   r,   r,   r-   rU      s    zDarkBlock.zero_init_lastc                 C   s4   |}|  |}| |}| |}| || }|S rM   r{   r   r|   r   r   r,   r,   r-   r      s    


zDarkBlock.forwardr   r,   r,   r   r-   r      s   r   c                       sF   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 )	EdgeBlockzZ EdgeResidual / Fused-MBConv / MobileNetV1-like 3x3 + 1x1 block (w/ activated output)
    r   rj   Nrq   c                    s   t t|   tt|| }t||d}t||fd|||	d|| _|d ur\|||dnt	 | _
t||fddi|| _|
rt|
nt	 | _d S )Nrr   r!   rs   ru   r"   r   )rw   r   rx   r)   ry   rz   r   r{   r}   r~   r   r|   r   r   r   r   r,   r-   rx      s    zEdgeBlock.__init__c                 C   s   t j| jjj d S rM   r   r   r,   r,   r-   rU      s    zEdgeBlock.zero_init_lastc                 C   s4   |}|  |}| |}| |}| || }|S rM   r   r   r,   r,   r-   r     s    


zEdgeBlock.forwardr   r,   r,   r   r-   r      s   r   c                
       s>   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.r@   r   NFc                    s  t t|   |
p|}
|r|n|}tt||  | _}tt|| }t|d|dd}|dd }|dks||
|kr|rt	
|dkrt	dnt	 t||fdd|	d|| _n t||fd||
|	|d	|| _|}nt	 | _|}t||fd| d
|| _|d }t	
 | _t|D ]F}| jt||f |||||	|d urV|| ndd| |}q&t||d fddi|| _t||fddi|| _d S NrV   rW   rr   rX   r   r   r"   r    r?   r!   r"   r    rt   r?   rX   rv   rq   r   r   rt   rB   r?   r   r"   )rw   r   rx   r)   ry   
expand_chsrz   getpopr}   
Sequential	AvgPool2dr~   r   	conv_downr   conv_expblocksrange
add_moduler+   conv_transition_bconv_transitionrN   r   r   r    rt   r9   rA   rB   rJ   r?   first_dilationrC   rL   rK   	block_dprblock_fnblock_kwargsZdown_chsZexp_chsblock_out_chsconv_kwargsrX   prev_chsir   r,   r-   rx     sR    

	zCrossStage.__init__c                 C   s`   |  |}| |}|j| jd dd\}}| |}| | }| tj	||gdd}|S Nr   r   )Zdim)
r   r   splitr   r   r   
contiguousr   torchcat)rN   r3   xsxboutr,   r,   r-   r   M  s    


zCrossStage.forwardr&   r'   r(   r   ro   rx   r   r   r,   r,   r   r-   r   
  s   Ar   c                
       s>   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 )
CrossStage3z`Cross Stage 3.
    Similar to CrossStage, but with only one transition conv for the output.
    r@   r   NFc                    s  t t|   |
p|}
|r|n|}tt||  | _}tt|| }t|d|dd}|dd }|dks||
|kr|rt	
|dkrt	dnt	 t||fdd|	d|| _n t||fd||
|	|d	|| _|}n
d | _|}t||fd| d
|| _|d }t	
 | _t|D ]F}| jt||f |||||	|d urR|| ndd| |}q"t||fddi|| _d S r   )rw   r   rx   r)   ry   r   rz   r   r   r}   r   r   r~   r   r   r   r   r   r   r   r+   r   r   r   r,   r-   rx   [  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   )rN   r3   x1Z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.r@   r   NFc                    s  t t|   |	p|}	t|d|dd}|dd }|
rzt|dkrTtdnt	 t
||fdd|d|| _n t
||fd||	||d	|| _|}tt|| }t | _t|D ]B}| jt||f ||||||d ur|| nd
d| |}qd S )NrV   rW   rr   rX   r   r   r   r!   r   rq   r   )rw   r   rx   rz   r   r   r}   r   r   r~   r   r   r)   ry   r   r   r   r+   )rN   r   r   r    rt   r9   rA   rB   r?   r   rC   r   r   r   r   rX   r   r   r   r   r,   r-   rx     s@    
	zDarkStage.__init__c                 C   s   |  |}| |}|S rM   )r   r   rN   r3   r,   r,   r-   r     s    

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|}|s0J |dv s<J d }| }|d }d}t|D ]\}}d|d  }|dkr~|dks||kr|dkr|sdnd}|dkr|d ur|
| |	|t	|||||dkr|nd||d ||9 }|}t
||dd	|gd
}qX|r|dksJ |d ur,|
| |d urh|	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$   rV   rW   .rS   num_chs	reductionmoduler%   r!   )r"   r    r$   Zaa)Zchannelsr    )r}   r   r/   r0   r1   r2   	enumerateappendr   r   rz   joinZ	MaxPool2d)in_chansr   r"   r    r%   r$   rV   rW   rX   rS   feature_infoZ
stem_depth	prev_featr   Zlast_idxZstem_strider   ZchsZ	conv_nameZconv_strideZ	pool_namer,   r,   r-   create_csp_stem  sP    ,




r   c                 C   sb   |  d}|dv sJ |dkrH|  dd  |  dd  |  dd  t}n|dkrVt}nt}|| fS )NrG   )rZ   rF   rk   rZ   rJ   rK   rL   rF   )r   r   r   r   )
stage_argsrG   stage_fnr,   r,   r-   _get_stage_fn  s    
r   c                 C   sB   |  d}|dv sJ |dkr&t| fS |dkr6t| fS t| fS d S )NrI   )rZ   edgerH   rZ   r   )r   r   r   ro   )r   rI   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 )NrD   rE   )r   r   r   )r   rD   rE   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 ]\}}t|\}}t|\}}t|\}}|d
}|dkr|
r||
 ||kr|dkr||9 }d}||9 }|dv r&dnd}|||	fi |||||| j|d|g7 }|d }	t
|	|d| d}
q||
 tj| |fS )Nc                 S   s   g | ]}|  qS r,   )tolist)r_   r3   r,   r,   r-   rc   <  rd   z%create_csp_stages.<locals>.<listcomp>r   r   c                    s   g | ]}t t  |qS r,   )rz   zipkeys)r_   valuesZcfg_dictr,   r-   rc   =  rd   rr   r   r   r   r    r   r   r   )r    r   rt   r   rX   rD   r   zstages.r   )r   rT   r2   r9   r   Zlinspacesumr   r   r   rz   rV   rW   r   r   r   r   r   r   rX   r}   r   )r   r   r   r   Z
num_stagesr   r   rt   Z
net_strider   r   r   rT   Z	stage_idxr   r   Zattn_fnr    r   r,   r   r-   create_csp_stages3  s\    
(

	

r   c                       s   e Zd ZdZded fd	d
ZejjdddZ	ejjdddZ
ejjdd ZdddZdd ZdedddZdd Z  ZS ) r   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   avgrq   T)r   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   )rV   rW   rX   Nr.   )r   r   r   r   )Zin_featuresnum_classes	pool_type	drop_rate)rU   )rw   rx   r   r   r   rz   rV   rW   rX   r   r   r   rS   extendr   rT   num_featuresr   headr   r   _init_weights)rN   r   r   r   r   global_poolr   r   rU   kwargsZ
layer_argsZstem_feat_infoZstage_feat_infor   r   r,   r-   rx   r  s4    
 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   )rS   r   )rz   r   )rN   ZcoarseZmatcherr,   r,   r-   group_matcher  s    zCspNet.group_matcherc                 C   s   |rJ dd S )Nz$gradient checkpointing not supportedr,   )rN   enabler,   r,   r-   set_grad_checkpointing  s    zCspNet.set_grad_checkpointingc                 C   s   | j jS rM   )r   Zfcr   r,   r,   r-   get_classifier  s    zCspNet.get_classifierc                 C   s   t | j||| jd| _d S )N)r   r   )r   r   r   r   )rN   r   r   r,   r,   r-   reset_classifier  s    zCspNet.reset_classifierc                 C   s   |  |}| |}|S rM   rS   rT   r   r,   r,   r-   forward_features  s    

zCspNet.forward_features
pre_logitsc                 C   s   | j ||dS )Nr   )r   )rN   r3   r   r,   r,   r-   forward_head  s    zCspNet.forward_headc                 C   s   |  |}| |}|S rM   )r   r   r   r,   r,   r-   r     s    

zCspNet.forward)r!   r   r   r   rq   rq   T)F)T)r   )F)r&   r'   r(   r   rR   rx   r   Zjitignorer   r   r   r   r   rQ   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rtj| j nPt | tjrttjj	| jddd | jd urtj| j n|rt
| dr|   d S )NZfan_outZrelu)modeZnonlinearityrq   g{Gz?)meanstdrU   )r/   r}   ZConv2dr   Zkaiming_normal_r   Zbiasr   ZLinearZnormal_hasattrrU   )r   namerU   r,   r,   r-   r     s    

r   r[      r   maxrf   r7   r:   r          @rj   T)r9   r   r    rJ   rB   rK   r   )r   r   r[   )r9   r   r    rJ   rB   rA   rK   )r<   r=   r>   i   rp   )r9   r   r    r?   rJ   rB   rA   rK   )r   r   r   r   r   )r[   r;   r<   r=   r>   )r  r@   )rj   r@   )r@   rj   )r9   r   r    rJ   rB   rA   rL   rI   )r   r   r   r   r   )r   )rj   )r@   )r9   r   r    rB   rA   rG   rI   )r   r   r   r   r   se)r9   r   r    rB   rA   rD   rG   rI   )r9   r   r    rB   rA   rC   rG   rI   )rb   rh   g      ?gq=
ףp?g      ?gHzG?)rb   rh   rm   )rm   )Zrd_ratio)rD   rE   )rD   rb   rh   re   )r!   r\      r   )r   r   r<   r=   )r9   r   r    r?   rB   rA   rD   rl   g      ?r   )rb   rh   rB   rI   )rb   rh   rB   rI   rD   rE   )cspresnet50cspresnet50dcspresnet50wcspresnext50cspdarknet53	darknet17	darknet21sedarknet21	darknet53darknetaa53cs3darknet_scs3darknet_mcs3darknet_lcs3darknet_xcs3darknet_focus_scs3darknet_focus_mcs3darknet_focus_lcs3darknet_focus_xcs3sedarknet_lcs3sedarknet_xcs3sedarknet_xdwcs3edgenet_xcs3se_edgenet_xc                 K   sP   |  ds|  drd}nd}|d|}tt| |ft|  td|dd|S )	NZdarknetZ
cspdarknet)r   r   r   r!   r   r8   )r   r   r   r!   r   out_indicesT)Zflatten_sequentialr  )Z	model_cfgZfeature_cfg)
startswithr   r   r   
model_cfgsrz   )variant
pretrainedr   Zdefault_out_indicesr  r,   r,   r-   _create_cspnet  s    
r"  c                 K   s   | dddddt tddd
|S )	Nr   )r!   r<   r<   )r   r   gMb?Zbilinearzstem.conv1.convzhead.fc)
urlr   Z
input_sizeZ	pool_sizecrop_pctinterpolationr   r   Z
first_conv
classifierr   )r#  r   r,   r,   r-   _cfg  s    r'  ztimm/zlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspresnet50_ra-d3e8d487.pth)	hf_hub_idr#  zqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspresnext50_ra_224-648b4713.pthzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspdarknet53_ra_256-d05c7c21.pthzthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/darknet53_256_c2ns-3aeff817.pthZbicubic)r!      r)  )r(  r#  r%  test_input_sizetest_crop_pctzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/darknetaa53_c2ns-5c28ec8a.pth)r(  r#  r*  r+  )r%  zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_m_c2ns-43f06604.pthgffffff?zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_l_c2ns-16220c5d.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_x_c2ns-4e4490aa.pth)r(  r#  r%  r$  r*  r+  zyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_focus_m_c2ns-e23bed41.pthzyhttps://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)r!   @  r,  )zcspresnet50.ra_in1kzcspresnet50d.untrainedzcspresnet50w.untrainedzcspresnext50.ra_in1kzcspdarknet53.ra_in1kzdarknet17.untrainedzdarknet21.untrainedzsedarknet21.untrainedzdarknet53.c2ns_in1kzdarknetaa53.c2ns_in1kzcs3darknet_s.untrainedzcs3darknet_m.c2ns_in1kzcs3darknet_l.c2ns_in1kzcs3darknet_x.c2ns_in1kzcs3darknet_focus_s.untrainedzcs3darknet_focus_m.c2ns_in1kzcs3darknet_focus_l.c2ns_in1kzcs3darknet_focus_x.untrainedzcs3sedarknet_l.c2ns_in1kzcs3sedarknet_x.c2ns_in1kzcs3sedarknet_xdw.untrainedzcs3edgenet_x.c2_in1kzcs3se_edgenet_x.c2ns_in1k)returnc                 K   s   t dd| i|S )Nr  r!  )r  r"  r!  r   r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr	  r!  )r	  r.  r/  r,   r,   r-   r	    s    r	  c                 K   s   t dd| i|S )Nr
  r!  )r
  r.  r/  r,   r,   r-   r
    s    r
  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r     s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  
  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r    s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  #  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  (  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  -  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  2  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  7  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  <  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  A  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  F  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  K  s    r  c                 K   s   t dd| i|S )Nr  r!  )r  r.  r/  r,   r,   r-   r  P  s    r  )	r@   r@   FrY   FNNr@   rZ   )F)F)r#   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)Xr   Zdataclassesr   r   r   	functoolsr   typingr   r   r   r	   r
   r   Ztorch.nnr}   Z	timm.datar   r   Ztimm.layersr   r   r   r   r   r   r   Z_builderr   Z_manipulater   r   	_registryr   r   __all__r   r5   r6   rR   rn   Modulero   r   r   r   r   r   r   r   r   r   r   r   rP   r)   r+   r   r   r   rz   r  r"  r'  Zdefault_cfgsr  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,   r,   r,   r-   <module>   s  $$
         
%3((MK8
6
5i



	
  "

J