U
    ¯Ê¹jL�  ã                   @   sp  d Z ddlZddlmZ ddlZddlmZ ddlm  mZ	 ddl
mZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZ dd
lmZmZ ddgZdZe e¡Zeededdddddd�eddddddd�eddddddd�eddddddd�d�ededdddd dd�eddddd!dd�eddddd"dd�eddddd#dd�d�ededddd$d dd�edddd%d!dd�edddd&d"dd�edddd'd#dd�d�ededddd$d dd�edddd%d(dd�edddd&d)dd�edddd'd*dd�d�ededddd$d dd�edddd%d+dd�edddd&d,dd�edddd'd-dd�d�ededddd$d dd�edddd%d.dd�edddd&d/dd�edddd'd0dd�d�ededddd$d dd�edddd%d1dd�edddd&d2dd�edddd'd3dd�d�ededddd$d dd�edddd%d4dd�edddd&d5dd�edddd'd6dd�d�ededddd$d dd�edddd%d7dd�edddd&d8dd�edddd'd9dd�d�d:�	Z G d;d<„ d<ej!ƒZ"G d=d>„ d>ej#ƒZ$ej%j&G d?d@„ d@ejj!ƒƒZ'eedAœZ(G dBd„ dej!ƒZ)G dCd„ de)ƒZ*dkdEdF„Z+dldHdI„Z,ee,dJdKdL�e,dJdM�e,dJdKdL�e,dJdM�e,dJdNdO�e,dJdM�e,dJdM�e,dJdM�e,dJdM�e,dJdM�e,dJdM�e,dJdM�e,dJdNdPdQdR�e,dJdNdPdQdR�dSœƒZ-edme)dTœdUdV„ƒZ.edne)dTœdWdX„ƒZ/edoe)dTœdYdZ„ƒZ0edpe)dTœd[d\„ƒZ1edqe)dTœd]d^„ƒZ2edre)dTœd_d`„ƒZ3edse)dTœdadb„ƒZ4edte)dTœdcdd„ƒZ5edue)dTœdedf„ƒZ6edve)dTœdgdh„ƒZ7edwe)dTœdidj„ƒZ8dS )xzò HRNet

Copied from https://github.com/HRNet/HRNet-Image-Classification

Original header:
  Copyright (c) Microsoft
  Licensed under the MIT License.
  Written by Bin Xiao (Bin.Xiao@microsoft.com)
  Modified by Ke Sun (sunk@mail.ustc.edu.cn)
é    N)ÚList©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Úcreate_classifieré   )Úbuild_model_with_cfgÚpretrained_cfg_for_features)ÚFeatureInfo)Úregister_modelÚgenerate_default_cfgs)Ú
BasicBlockÚ
BottleneckÚHighResolutionNetÚHighResolutionNetFeaturesgš™™™™™¹?é@   Ú
BOTTLENECK)r   )é    ZSUM)Únum_modulesÚnum_branchesÚ
block_typeÚ
num_blocksÚnum_channelsÚfuse_methodé   ÚBASIC)r   r   )é   r   é   )r   r   r   )r   r   r   é   )r   r   r   r   )r   r   r   é€   )Ú
stem_widthÚstage1Ústage2Ústage3Ústage4)r   )r   )é   é$   )r%   r&   éH   )r%   r&   r'   é�   )r   )r   r   )r   r   r   )r   r   r   r   )é   é<   )r)   r*   éx   )r)   r*   r+   éð   )r   r   )r   r   r   )r   r   r   é   )é(   éP   )r.   r/   é    )r.   r/   r0   i@  )é,   éX   )r1   r2   é°   )r1   r2   r3   i`  )é0   é`   )r4   r5   éÀ   )r4   r5   r6   i€  )r   r   )r   r   r-   )r   r   r-   i   )	Úhrnet_w18_smallÚhrnet_w18_small_v2Ú	hrnet_w18Ú	hrnet_w30Ú	hrnet_w32Ú	hrnet_w40Ú	hrnet_w44Ú	hrnet_w48Ú	hrnet_w64c                       sd   e Zd Zd‡ fdd„	Zdd„ Zddd„Zd	d
„ Zdd„ Zdd„ Ze	e
j e	e
j dœdd„Z‡  ZS )ÚHighResolutionModuleTc                    sd   t t| ƒ ¡  |  |||||¡ || _|| _|| _|| _|  ||||¡| _	|  
¡ | _t d¡| _d S )NF)Úsuperr@   Ú__init__Ú_check_branchesÚ
num_in_chsr   r   Úmulti_scale_outputÚ_make_branchesÚbranchesÚ_make_fuse_layersÚfuse_layersÚnnÚReLUÚfuse_act)Úselfr   Úblock_typesr   rD   r   r   rE   ©Ú	__class__© úP/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/hrnet.pyrB   g  s(    
ûü
zHighResolutionModule.__init__c                 C   sv   d}|t |ƒkr"d |t |ƒ¡}n:|t |ƒkr@d |t |ƒ¡}n|t |ƒkr\d |t |ƒ¡}|rrt |¡ t|ƒ‚d S )NÚ z"num_branches({}) <> num_blocks({})z$num_branches({}) <> num_channels({})z"num_branches({}) <> num_in_chs({}))ÚlenÚformatÚ_loggerÚerrorÚ
ValueError)rM   r   rN   r   rD   r   Ú	error_msgrQ   rQ   rR   rC   ‰  s    
z$HighResolutionModule._check_branchesr   c           	   	   C   sÊ   d }|dks$| j | || |j krdt tj| j | || |j d|dd�tj|| |j td�¡}|| j | || ||ƒg}|| |j | j |< td|| ƒD ]}| || j | || ƒ¡ q tj|Ž S ©Nr   F)Úkernel_sizeÚstrideÚbias©Zmomentum)	rD   Ú	expansionrJ   Ú
SequentialÚConv2dÚBatchNorm2dÚ_BN_MOMENTUMÚrangeÚappend)	rM   Zbranch_indexr   r   r   r\   Ú
downsampleÚlayersÚirQ   rQ   rR   Ú_make_one_branch•  s"        þüz%HighResolutionModule._make_one_branchc              	   C   s2   g }t |ƒD ]}| |  ||||¡¡ qt |¡S ©N)rd   re   ri   rJ   Ú
ModuleList)rM   r   r   r   r   rG   rh   rQ   rQ   rR   rF   ¦  s    z#HighResolutionModule._make_branchesc           
      C   s�  | j dkrt ¡ S | j }| j}g }t| jr.|ndƒD �]N}g }t|ƒD �]*}||kr¤| t tj|| || ddddd�tj	|| t
d�tjd||  dd�¡¡ qF||kr¼| t ¡ ¡ qFg }t|| ƒD ]”}||| d k�r|| }	| t tj|| |	d	dddd�tj	|	t
d�¡¡ qÌ|| }	| t tj|| |	d	dddd�tj	|	t
d�t d¡¡¡ qÌ| tj|Ž ¡ qF| t |¡¡ q4t |¡S )
Nr   r   F©r]   r^   r   Znearest)Zscale_factorÚmoder   )r   rJ   ÚIdentityrD   rd   rE   re   r`   ra   rb   rc   ZUpsamplerK   rk   )
rM   r   rD   rI   rh   Z
fuse_layerÚjÚconv3x3sÚkZnum_out_chs_conv3x3rQ   rQ   rR   rH   ­  sB    
ýþýz&HighResolutionModule._make_fuse_layersc                 C   s   | j S rj   )rD   ©rM   rQ   rQ   rR   Úget_num_in_chsÓ  s    z#HighResolutionModule.get_num_in_chs)ÚxÚreturnc           	      C   sª   | j dkr| jd |d ƒgS t| jƒD ]\}}||| ƒ||< q(g }t| jƒD ]T\}}d }t|ƒD ].\}}|d kr‚||| ƒ}qd|||| ƒ }qd| |  |¡¡ qP|S )Nr   r   )r   rG   Ú	enumeraterI   re   rL   )	rM   rt   rh   ÚbranchZx_fuseZ
fuse_outerÚyro   ÚfrQ   rQ   rR   ÚforwardÖ  s    
zHighResolutionModule.forward)T)r   )Ú__name__Ú
__module__Ú__qualname__rB   rC   ri   rF   rH   rs   r   ÚtorchÚTensorrz   Ú__classcell__rQ   rQ   rO   rR   r@   f  s   	 ø"
&r@   c                       sP   e Zd Z‡ fdd„Zejjdd„ ƒZejjdd„ ƒZeej	 dœdd„Z‡  Z
S )ÚSequentialListc                    s   t t| ƒj|Ž  d S rj   )rA   r�   rB   )rM   ÚargsrO   rQ   rR   rB   ë  s    zSequentialList.__init__c                 C   s   d S rj   rQ   ©rM   rt   rQ   rQ   rR   rz   î  s    zSequentialList.forwardc                 C   s   d S rj   rQ   rƒ   rQ   rQ   rR   rz   ó  s    ©ru   c                 C   s   | D ]}||ƒ}q|S rj   rQ   )rM   rt   ÚmodulerQ   rQ   rR   rz   ø  s    
)r{   r|   r}   rB   r~   ÚjitZ_overload_methodrz   r   r   r€   rQ   rQ   rO   rR   r�   é  s   

r�   c                   @   s    e Zd Zejejdœdd„ZdS )ÚModuleInterface)Úinputru   c                 C   s   d S rj   rQ   )rM   rˆ   rQ   rQ   rR   rz      s    zModuleInterface.forwardN)r{   r|   r}   r~   r   rz   rQ   rQ   rQ   rR   r‡   þ  s   r‡   )r   r   c                       sÆ   e Zd Zd(‡ fdd„	Zd)dd„Zdd„ Zd*dd„Zd+dd„Zej	j
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eej dœdd „Zd!d"„ Zd/ed#œd$d%„Zd&d'„ Z‡  ZS )0r   r   éè  r   Úavgç        Úclassificationc              	      sP  t t| ƒ ¡  || _|dks t‚|jf |Ž |d }	tj||	ddddd�| _tj	|	t
d�| _tjd	d
�| _tj|	dddddd�| _tj	dt
d�| _tjd	d
�| _|d | _| jd d ‰t| jd  ‰ | jd d }
|  ˆ dˆ|
¡| _ˆ jˆ }|d | _| jd ‰t| jd  ‰ ‡ ‡fdd„ttˆƒƒD ƒ‰|  |gˆ¡| _|  | jˆ¡\| _}|d | _| jd ‰t| jd  ‰ ‡ ‡fdd„ttˆƒƒD ƒ‰|  |ˆ¡| _|  | jˆ¡\| _}|d | _ | j d ‰t| j d  ‰ ‡ ‡fdd„ttˆƒƒD ƒ‰|  |ˆ¡| _!| j| j ˆd	d�\| _"}|| _#d | _$| %dd	¡}|dk�rzd| _&| j'||d�\| _(| _)| _*t+| j&| j||d�\| _,| _-| _.nR|dk�r¢d| _&| j'|d	d�\| _(}}nd | _&d | _(t /¡ | _,t /¡ | _-t /¡ | _.d}t0d|d!d"�g| _1t2| j$�rò| j$nˆƒD ]J\}}|d9 }| j$�r|d# n|}|  j1t0||d$|d › �d"�g7  _1�qø|  3¡  d S )%Nr   r    r   r   r   F)r[   r\   Úpaddingr]   r^   T©Zinplacer   r!   r   r   r   r   r"   c                    s   g | ]}ˆ| ˆ j  ‘qS rQ   ©r_   ©Ú.0rh   ©r   r   rQ   rR   Ú
<listcomp>.  s     z.HighResolutionNet.__init__.<locals>.<listcomp>r#   c                    s   g | ]}ˆ| ˆ j  ‘qS rQ   r�   r�   r’   rQ   rR   r“   5  s     r$   c                    s   g | ]}ˆ| ˆ j  ‘qS rQ   r�   r�   r’   rQ   rR   r“   <  s     )rE   Úhead_conv_biasrŒ   i   )Ú	conv_bias)Ú	pool_typeÚ	drop_rateÚincre)Ú
incre_onlyr-   Ústem)Znum_chsZ	reductionr…   r   Zstage)4rA   r   rB   Únum_classesÚAssertionErrorÚupdaterJ   ra   Úconv1rb   rc   Úbn1rK   Úact1Úconv2Úbn2Úact2Z
stage1_cfgÚblock_types_dictÚ_make_layerÚlayer1r_   Z
stage2_cfgrd   rT   Ú_make_transition_layerÚtransition1Ú_make_stager"   Z
stage3_cfgÚtransition2r#   Z
stage4_cfgÚtransition3r$   ÚheadÚhead_channelsÚpopÚnum_featuresÚ
_make_headÚincre_modulesÚdownsamp_modulesÚfinal_layerr   Úglobal_poolÚ	head_dropÚ
classifierrn   ÚdictÚfeature_inforv   Úinit_weights)rM   ÚcfgÚin_chansr›   Úoutput_strider´   r—   r¬   Úkwargsr    r   Zstage1_out_channelÚpre_stage_channelsr”   Ú_Zcurr_striderh   ÚcrO   r’   rR   rB     s‚    








þü



(zHighResolutionNet.__init__FTc                 C   s0  t }ddddg| _g }t|ƒD ](\}}| | j||| j| ddd�¡ qt |¡}|r`|d d fS g }tt|ƒd ƒD ]d}| j| |j	 }	| j|d  |j	 }
t 
tj|	|
ddd|d	�tj|
td
�tjdd�¡}| |¡ qtt |¡}t 
tj| jd |j	 | jddd|d	�tj| jtd
�tjdd�¡}|||fS )Nr   r   r   r-   r   )r\   r   r   )Úin_channelsÚout_channelsr[   r\   r�   r]   r^   TrŽ   r   )r   r­   rv   re   r¥   rJ   rk   rd   rT   r_   r`   ra   rb   rc   rK   r¯   )rM   r¾   r™   r•   Zhead_block_typer±   rh   Zchannelsr²   rÁ   rÂ   Zdownsamp_moduler³   rQ   rQ   rR   r°   e  sN    "

    þ
û
    þ
ûzHighResolutionNet._make_headc                 C   s  t |ƒ}t |ƒ}g }t|ƒD ]ô}||k rŽ|| || kr~| t tj|| || ddddd�tj|| td�tjdd�¡¡ n| t 	¡ ¡ qg }t|d | ƒD ]\}|d }	||| krÂ|| n|	}
| t tj|	|
dd	ddd�tj|
td�tjdd�¡¡ q¢| tj|Ž ¡ qt 
|¡S )
Nr   r   Frl   r^   TrŽ   éÿÿÿÿr   )rT   rd   re   rJ   r`   ra   rb   rc   rK   rn   rk   )rM   Znum_channels_pre_layerZnum_channels_cur_layerZnum_branches_curZnum_branches_preZtransition_layersrh   rp   ro   Z_in_chsZ_out_chsrQ   rQ   rR   r§   ‹  s.    
ý
ýz(HighResolutionNet._make_transition_layerr   c           	   	   C   s�   d }|dks|||j  krLt tj|||j  d|dd�tj||j  td�¡}|||||ƒg}||j  }td|ƒD ]}| |||ƒ¡ qptj|Ž S rZ   )r_   rJ   r`   ra   rb   rc   rd   re   )	rM   r   ZinplanesZplanesrN   r\   rf   rg   rh   rQ   rQ   rR   r¥   ¦  s    þ
zHighResolutionNet._make_layerc                 C   sˆ   |d }|d }|d }|d }t |d  }|d }	g }
t|ƒD ]:}|pR||d k }|
 t||||||	|ƒ¡ |
d  ¡ }q@t|
Ž |fS )	Nr   r   r   r   r   r   r   rÃ   )r¤   rd   re   r@   rs   r�   )rM   Zlayer_configrD   rE   r   r   r   r   r   r   Úmodulesrh   Zreset_multi_scale_outputrQ   rQ   rR   r©   µ  s(          ÿzHighResolutionNet._make_stagec                 C   s`   |   ¡ D ]R}t|tjƒr.tjj|jddd� qt|tjƒrtj |jd¡ tj |j	d¡ qd S )NZfan_outZrelu)rm   Znonlinearityr   r   )
rÄ   Ú
isinstancerJ   ra   ÚinitZkaiming_normal_Úweightrb   Z	constant_r]   )rM   ÚmrQ   rQ   rR   r¹   È  s      ÿzHighResolutionNet.init_weightsc                 C   s   t d|rdndddgd�}|S )Nz^conv[12]|bn[12]z ^(?:layer|stage|transition)(\d+))z^layer(\d+)\.(\d+)N)z^stage(\d+)\.(\d+)N)z^transition(\d+))iŸ† )rš   rN   )r·   )rM   ZcoarseZmatcherrQ   rQ   rR   Úgroup_matcherÒ  s    ýþzHighResolutionNet.group_matcherc                 C   s   |rt dƒ‚d S )Nz$gradient checkpointing not supported©rœ   )rM   ÚenablerQ   rQ   rR   Úset_grad_checkpointingÞ  s    z(HighResolutionNet.set_grad_checkpointingc                 C   s   | j S rj   )r¶   rr   rQ   rQ   rR   Úget_classifierâ  s    z HighResolutionNet.get_classifierc                 C   s$   || _ t| j| j |d�\| _| _d S )N)r–   )r›   r   r¯   r´   r¶   )rM   r›   r´   rQ   rQ   rR   Úreset_classifieræ  s      ÿz"HighResolutionNet.reset_classifierr„   c                    st   |   ˆ ¡‰ ‡ fdd„t| jƒD ƒ}|  |¡‰‡fdd„t| jƒD ƒ}|  |¡‰‡fdd„t| jƒD ƒ}|  |¡‰ˆS )Nc                    s   g | ]\}}|ˆ ƒ‘qS rQ   rQ   ©r‘   rh   Út)rt   rQ   rR   r“   î  s     z,HighResolutionNet.stages.<locals>.<listcomp>c                    s0   g | ](\}}t |tjƒs$|ˆ d  ƒnˆ | ‘qS ©rÃ   ©rÅ   rJ   rn   rÏ   ©ÚylrQ   rR   r“   ñ  s     c                    s0   g | ](\}}t |tjƒs$|ˆ d  ƒnˆ | ‘qS rÑ   rÒ   rÏ   rÓ   rQ   rR   r“   ô  s     )r¦   rv   r¨   r"   rª   r#   r«   r$   )rM   rt   ZxlrQ   )rt   rÔ   rR   Ústagesë  s    



zHighResolutionNet.stagesc                 C   s¾   |   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}| jd ksZ| jd kr^|S d }t	| jƒD ]B\}}|d krŠ||| ƒ}ql| j|d  }||| ƒ| 
|¡ }ql|  |¡}|S )Nr   )rž   rŸ   r    r¡   r¢   r£   rÕ   r±   r²   rv   rz   r³   )rM   rt   rÔ   rx   rh   r˜   ZdownrQ   rQ   rR   Úforward_featuresø  s"    







z"HighResolutionNet.forward_features)Ú
pre_logitsc                 C   s&   |   |¡}|  |¡}|r|S |  |¡S rj   )r´   rµ   r¶   )rM   rt   r×   rQ   rQ   rR   Úforward_head  s    

zHighResolutionNet.forward_headc                 C   s   |   |¡}|  |¡}|S rj   )rÖ   rØ   )rM   rt   rx   rQ   rQ   rR   rz     s    

zHighResolutionNet.forward)r   r‰   r   rŠ   r‹   rŒ   )FT)r   )T)F)T)rŠ   )F)r{   r|   r}   rB   r°   r§   r¥   r©   r~   r†   Úignorer¹   rÉ   rÌ   rÍ   rÎ   r   r   rÕ   rÖ   ÚboolrØ   rz   r€   rQ   rQ   rO   rR   r   
  s0         øY
&


	

c                       s>   e Zd ZdZd‡ fd	d
„	Zdd„ Zeej dœdd„Z	‡  Z
S )r   aÈ  HighResolutionNet feature extraction

    The design of HRNet makes it easy to grab feature maps, this class provides a simple wrapper to do so.
    It would be more complicated to use the FeatureNet helpers.

    The `feature_location=incre` allows grabbing increased channel count features using part of the
    classification head. If `feature_location=''` the default HRNet features are returned. First stem
    conv is used for stride 2 features.
    r   r‰   r   rŠ   r‹   r˜   ©r   r   r   r   r   c	           
   	      sZ   |dkst ‚tt| ƒj|f||||||dœ|	—Ž t| j|ƒ| _dd„ | j ¡ D ƒ| _d S )N)r˜   rS   )r»   r›   r¼   r´   r—   r¬   c                 S   s   h | ]}|d  ’qS )ÚindexrQ   )r‘   ry   rQ   rQ   rR   Ú	<setcomp>@  s     z5HighResolutionNetFeatures.__init__.<locals>.<setcomp>)rœ   rA   r   rB   r
   r¸   Z	get_dictsÚ_out_idx)
rM   rº   r»   r›   r¼   r´   r—   Zfeature_locationZout_indicesr½   rO   rQ   rR   rB   (  s    
ÿùø
z"HighResolutionNetFeatures.__init__c                 C   s   dst dƒ‚d S )NFzNot supportedrÊ   rƒ   rQ   rQ   rR   rÖ   B  s    z*HighResolutionNetFeatures.forward_featuresr„   c                 C   s¬   g }|   |¡}|  |¡}|  |¡}d| jkr6| |¡ |  |¡}|  |¡}|  |¡}|  |¡}| j	d k	r~dd„ t
|| j	ƒD ƒ}t|ƒD ] \}}|d | jkr†| |¡ q†|S )Nr   c                 S   s   g | ]\}}||ƒ‘qS rQ   rQ   )r‘   ry   r˜   rQ   rQ   rR   r“   Q  s     z5HighResolutionNetFeatures.forward.<locals>.<listcomp>r   )rž   rŸ   r    rÞ   re   r¡   r¢   r£   rÕ   r±   Úziprv   )rM   rt   Úoutrh   ry   rQ   rQ   rR   rz   E  s     









z!HighResolutionNetFeatures.forward)r   r‰   r   rŠ   r‹   r˜   rÛ   )r{   r|   r}   Ú__doc__rB   rÖ   r   r~   Ztensorrz   r€   rQ   rQ   rO   rR   r     s          ÷Fc                 K   sj   t }d}d }| dd¡r$t}d}d}|p*| }t|| |ft| | |dœ|—Ž}|rft|jƒ|_|j|_|S )NFÚfeatures_only)r›   r´   T)Z	model_cfgZpretrained_strictÚkwargs_filter)r   r®   r   r   Úcfg_clsr	   Zdefault_cfgZpretrained_cfg)ÚvariantÚ
pretrainedÚcfg_variantZmodel_kwargsZ	model_clsrâ   rã   ÚmodelrQ   rQ   rR   Ú_create_hrnetX  s.    ýúù	ré   rS   c                 K   s   | dddddt tdddœ
|–S )	Nr‰   )r   éà   rê   )é   rë   g      ì?Zbilinearrž   r¶   )
Úurlr›   Z
input_sizeZ	pool_sizeÚcrop_pctÚinterpolationZmeanZstdZ
first_convr¶   r   )rì   r½   rQ   rQ   rR   Ú_cfgp  s         ûúrï   ztimm/Zbicubic)Ú	hf_hub_idrî   )rð   gffffffî?)rð   rí   g      ð?)r   é   rñ   )rð   rí   Ztest_crop_pctZtest_input_size)zhrnet_w18_small.gluon_in1kzhrnet_w18_small.ms_in1kzhrnet_w18_small_v2.gluon_in1kzhrnet_w18_small_v2.ms_in1kzhrnet_w18.ms_aug_in1kzhrnet_w18.ms_in1kzhrnet_w30.ms_in1kzhrnet_w32.ms_in1kzhrnet_w40.ms_in1kzhrnet_w44.ms_in1kzhrnet_w48.ms_in1kzhrnet_w64.ms_in1kzhrnet_w18_ssld.paddle_in1kzhrnet_w48_ssld.paddle_in1kr„   c                 K   s   t d| f|ŽS )Nr7   ©ré   ©ræ   r½   rQ   rQ   rR   r7   —  s    r7   c                 K   s   t d| f|ŽS )Nr8   rò   ró   rQ   rQ   rR   r8   œ  s    r8   c                 K   s   t d| f|ŽS )Nr9   rò   ró   rQ   rQ   rR   r9   ¡  s    r9   c                 K   s   t d| f|ŽS )Nr:   rò   ró   rQ   rQ   rR   r:   ¦  s    r:   c                 K   s   t d| f|ŽS )Nr;   rò   ró   rQ   rQ   rR   r;   «  s    r;   c                 K   s   t d| f|ŽS )Nr<   rò   ró   rQ   rQ   rR   r<   °  s    r<   c                 K   s   t d| f|ŽS )Nr=   rò   ró   rQ   rQ   rR   r=   µ  s    r=   c                 K   s   t d| f|ŽS )Nr>   rò   ró   rQ   rQ   rR   r>   º  s    r>   c                 K   s   t d| f|ŽS )Nr?   rò   ró   rQ   rQ   rR   r?   ¿  s    r?   c                 K   s    |  dd¡ tdd| dœ|—ŽS )Nr”   FÚhrnet_w18_ssldr9   ©rç   ræ   )rô   ©Ú
setdefaultré   ró   rQ   rQ   rR   rô   Ä  s    rô   c                 K   s    |  dd¡ tdd| dœ|—ŽS )Nr”   FÚhrnet_w48_ssldr>   rõ   )rø   rö   ró   rQ   rQ   rR   rø   Ê  s    rø   )FN)rS   )F)F)F)F)F)F)F)F)F)F)F)9rá   ÚloggingÚtypingr   r~   Ztorch.nnrJ   Ztorch.nn.functionalZ
functionalÚFZ	timm.datar   r   Ztimm.layersr   Z_builderr   r	   Z	_featuresr
   Ú	_registryr   r   Zresnetr   r   Ú__all__rc   Ú	getLoggerr{   rV   r·   rä   ÚModuler@   r`   r�   r†   Z	interfacer‡   r¤   r   r   ré   rï   Zdefault_cfgsr7   r8   r9   r:   r;   r<   r=   r>   r?   rô   rø   rQ   rQ   rQ   rR   Ú<module>   s   

úúúúæ$úúúúæ$úúúúæ$úúúúæ$úúúúæ$úúúúæ$úúúúæ$úúúúæ$úúúúæ€ € ß  I þ  ;



þ  þ  þë