o
    پi%                     @   s  d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ G d	d
 d
ejZd2ddZd3ddZeeddeddeddeddddeddddddeddddddedddeddddZed2d efd!d"Zed2d efd#d$Zed2d efd%d&Zed2d efd'd(Zed2d efd)d*Zed2d efd+d,Zed2d efd-d.Zed2d efd/d0Zd1S )4a   ResNeSt Models

Paper: `ResNeSt: Split-Attention Networks` - https://arxiv.org/abs/2004.08955

Adapted from original PyTorch impl w/ weights at https://github.com/zhanghang1989/ResNeSt by Hang Zhang

Modified for torchscript compat, and consistency with timm by Ross Wightman
    )nnIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)	SplitAttn   )build_model_with_cfg)register_modelgenerate_default_cfgs)ResNetc                       s\   e Zd ZdZdZdddddddddddejejddddf fdd	Zd	d
 Z	dd Z
  ZS )ResNestBottleneckzResNet Bottleneck
       r   N@   Fc                    s  t t|   |dksJ |d u sJ |d u sJ |d u sJ t||d  | }|p,|}|r:|dks5|
r:|}d}nd}|| _tj||ddd| _||| _|dd| _	|dkrb|	rbtj
d|dd	nd | _| jdkrt||d|||||||d

| _t | _t | _t | _n%tj||d||||dd| _||| _|d ur| nt | _|dd| _|dkr|	stj
d|dd	nd | _tj||d ddd| _||d | _|dd| _|| _d S )Nr   g      P@r   F)kernel_sizebiasT)inplace   )padding)r   strider   dilationgroupsradix
norm_layer
drop_layer)r   r   r   r   r   r   r   )superr   __init__intr   r   Conv2dconv1bn1act1	AvgPool2d	avd_firstr   conv2Identitybn2
drop_blockact2avd_lastconv3bn3act3
downsample)selfinplanesplanesr   r,   r   cardinality
base_widthavdr"   is_firstreduce_firstr   first_dilation	act_layerr   
attn_layeraa_layerr&   	drop_pathgroup_width
avd_stride	__class__ G/home/ubuntu/.local/lib/python3.10/site-packages/timm/models/resnest.pyr      sH   
"






"
zResNestBottleneck.__init__c                 C   s*   t | jdd d urtj| jj d S d S )Nweight)getattrr*   r   initzeros_r@   )r-   r>   r>   r?   zero_init_lastW   s   z ResNestBottleneck.zero_init_lastc                 C   s   |}|  |}| |}| |}| jd ur| |}| |}| |}| |}| |}| jd ur9| |}| 	|}| 
|}| jd urM| |}||7 }| |}|S N)r   r   r    r"   r#   r%   r&   r'   r(   r)   r*   r,   r+   )r-   xshortcutoutr>   r>   r?   forward[   s&   















zResNestBottleneck.forward)__name__
__module____qualname____doc__	expansionr   ReLUBatchNorm2dr   rD   rI   __classcell__r>   r>   r<   r?   r      s.    ?r   Fc                 K   s   t t| |fi |S rE   )r   r   )variant
pretrainedkwargsr>   r>   r?   _create_resnestx   s   rU    c                 K   s   | dddddt tddd
|S )	Ni  )r      rW   )   rX   g      ?bilinearzconv1.0fc)
urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr   )r[   rT   r>   r>   r?   _cfg   s   re   ztimm/)	hf_hub_id)r      rg   )   rh   )rf   r]   r^   )r   @  ri   )
   rj   gJ+?bicubic)rf   r]   r^   r_   r`   )r     rl   )   rm   gV-?)rf   r`   )zresnest14d.gluon_in1kzresnest26d.gluon_in1kzresnest50d.in1kzresnest101e.in1kzresnest200e.in1kzresnest269e.in1kzresnest50d_4s2x40d.in1kzresnest50d_1s4x24d.in1kreturnc                 K   D   t tg ddddddt dddd	d
}tdd| it |fi |S )z5 ResNeSt-14d model. Weights ported from GluonCV.
    )r   r   r   r   deep    Tr   r      Fr   r2   r"   blocklayers	stem_type
stem_widthavg_downr1   r0   
block_args
resnest14drS   N)r{   dictr   rU   rS   rT   model_kwargsr>   r>   r?   r{         
r{   c                 K   ro   )z5 ResNeSt-26d model. Weights ported from GluonCV.
    )rr   rr   rr   rr   rp   rq   Tr   r   rr   Frs   rt   
resnest26drS   N)r   r|   r~   r>   r>   r?   r      r   r   c                 K   ro   )z ResNeSt-50d model. Matches paper ResNeSt-50 model, https://arxiv.org/abs/2004.08955
    Since this codebase supports all possible variations, 'd' for deep stem, stem_width 32, avg in downsample.
    r   r      r   rp   rq   Tr   r   rr   Frs   rt   
resnest50drS   N)r   r|   r~   r>   r>   r?   r         
r   c                 K   D   t tg ddddddt ddddd	}tdd| it |fi |S )z ResNeSt-101e model. Matches paper ResNeSt-101 model, https://arxiv.org/abs/2004.08955
     Since this codebase supports all possible variations, 'e' for deep stem, stem_width 64, avg in downsample.
    )r   r      r   rp   r   Tr   rr   Frs   rt   resnest101erS   N)r   r|   r~   r>   r>   r?   r      r   r   c                 K   r   )z ResNeSt-200e model. Matches paper ResNeSt-200 model, https://arxiv.org/abs/2004.08955
    Since this codebase supports all possible variations, 'e' for deep stem, stem_width 64, avg in downsample.
    )r      $   r   rp   r   Tr   rr   Frs   rt   resnest200erS   N)r   r|   r~   r>   r>   r?   r      r   r   c                 K   r   )z ResNeSt-269e model. Matches paper ResNeSt-269 model, https://arxiv.org/abs/2004.08955
    Since this codebase supports all possible variations, 'e' for deep stem, stem_width 64, avg in downsample.
    )r      0   rh   rp   r   Tr   rr   Frs   rt   resnest269erS   N)r   r|   r~   r>   r>   r?   r      r   r   c                 K   D   t tg ddddddt ddddd	}tdd| it |fi |S )z]ResNeSt-50 4s2x40d from https://github.com/zhanghang1989/ResNeSt/blob/master/ablation.md
    r   rp   rq   T(   rr   r   rs   rt   resnest50d_4s2x40drS   N)r   r|   r~   r>   r>   r?   r      r   r   c                 K   r   )z]ResNeSt-50 1s4x24d from https://github.com/zhanghang1989/ResNeSt/blob/master/ablation.md
    r   rp   rq   Tr   r   r   rs   rt   resnest50d_1s4x24drS   N)r   r|   r~   r>   r>   r?   r      r   r   N)F)rV   )rM   torchr   	timm.datar   r   timm.layersr   _builderr   	_registryr	   r
   resnetr   Moduler   rU   re   default_cfgsr{   r   r   r   r   r   r   r   r>   r>   r>   r?   <module>   sf    
f
	


