Ë
    éÓ^jE†  ã                   óÎ  — d Z ddl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 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j:                  e«      Z e  e d e dddddd¬«       e dddddd¬«       e dddddd¬«       e dddddd¬«      ¬«       e d e ddddd d¬«       e ddddd!d¬«       e ddddd"d¬«       e ddddd#d¬«      ¬«       e d e dddd$d d¬«       e dddd%d!d¬«       e dddd&d"d¬«       e dddd'd#d¬«      ¬«       e d e dddd$d d¬«       e dddd%d(d¬«       e dddd&d)d¬«       e dddd'd*d¬«      ¬«       e d e dddd$d d¬«       e dddd%d+d¬«       e dddd&d,d¬«       e dddd'd-d¬«      ¬«       e d e dddd$d d¬«       e dddd%d.d¬«       e dddd&d/d¬«       e dddd'd0d¬«      ¬«       e d e dddd$d d¬«       e dddd%d1d¬«       e dddd&d2d¬«       e dddd'd3d¬«      ¬«       e d e dddd$d d¬«       e dddd%d4d¬«       e dddd&d5d¬«       e dddd'd6d¬«      ¬«       e d e dddd$d d¬«       e dddd%d7d¬«       e dddd&d8d¬«       e dddd'd9d¬«      ¬«      ¬:«	      Z! G d;„ d<e
jD                  «      Z# G d=„ d>e
jH                  «      Z%eed?œZ& G d@„ de
jD                  «      Z' G dA„ de'«      Z(d[dB„Z)d\dC„Z* e e*dDdEdF¬G«       e*dD¬H«       e*dDdEdF¬G«       e*dD¬H«       e*dDdI¬J«       e*dD¬H«       e*dD¬H«       e*dD¬H«       e*dD¬H«       e*dD¬H«       e*dD¬H«       e*dD¬H«       e*dDdIdKdL¬M«       e*dDdIdKdL¬M«      dNœ«      Z+ed]dOe'fdP„«       Z,ed]dOe'fdQ„«       Z-ed]dOe'fdR„«       Z.ed]dOe'fdS„«       Z/ed]dOe'fdT„«       Z0ed]dOe'fdU„«       Z1ed]dOe'fdV„«       Z2ed]dOe'fdW„«       Z3ed]dOe'fdX„«       Z4ed]dOe'fdY„«       Z5ed]dOe'fdZ„«       Z6y)^zò 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)ÚDictÚListÚTypeÚOptionalÚTuple©Ú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   )é    Ú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$   )é   é<   )r0   r1   éx   )r0   r1   r2   éð   )r   r   )r   r   r%   ©r   r   r%   é   )é(   éP   )r6   r7   é    )r6   r7   r8   i@  )é,   éX   )r9   r:   é°   )r9   r:   r;   i`  )é0   é`   )r<   r=   éÀ   )r<   r=   r>   i€  )r   r%   )r   r%   r5   )r   r%   r5   i   )	Úhrnet_w18_smallÚhrnet_w18_small_v2Ú	hrnet_w18Ú	hrnet_w30Ú	hrnet_w32Ú	hrnet_w40Ú	hrnet_w44Ú	hrnet_w48Ú	hrnet_w64c                   óà   ‡ — e Zd Z	 	 	 ddedeej                     deedf   dee   deedf   de	de
fˆ fd	„Zd
„ Zdd„Zdd„Zdd„Zd„ Zdeej$                     deej$                     fd„Zˆ xZS )ÚHighResolutionModuler   Úblock_typesr   .Ú
num_in_chsr   r   Úmulti_scale_outputc
                 ó&  •— ||	dœ}
t         ‰| �  «        | j                  |||||«       || _        || _        || _        || _         | j                  ||||fi |
¤Ž| _         | j                  di |
¤Ž| _
        t        j                  d«      | _        y )N©ÚdeviceÚdtypeF© )ÚsuperÚ__init__Ú_check_branchesrK   r   r   rL   Ú_make_branchesÚbranchesÚ_make_fuse_layersÚfuse_layersÚnnÚReLUÚfuse_act)Úselfr   rJ   r   rK   r   r   rL   rO   rP   ÚddÚ	__class__s              €ú\/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/hrnet.pyrS   zHighResolutionModule.__init__f  s«   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ×ÑØØØØØô	
ð %ˆŒØ&ˆÔØ(ˆÔà"4ˆÔà+˜×+Ñ+ØØØØñ	
ð
 ñ
ˆŒð 2˜4×1Ñ1Ñ7°BÑ7ˆÔÜŸ™ ›ˆ�ó    c                 óF  — d}|t        |«      k7  rdj                  |t        |«      «      }nS|t        |«      k7  rdj                  |t        |«      «      }n)|t        |«      k7  rdj                  |t        |«      «      }|r t        j                  |«       t	        |«      ‚y )NÚ z"num_branches({}) <> num_blocks({})z$num_branches({}) <> num_channels({})z"num_branches({}) <> num_in_chs({}))ÚlenÚformatÚ_loggerÚerrorÚ
ValueError)r\   r   rJ   r   rK   r   Ú	error_msgs          r_   rT   z$HighResolutionModule._check_branchesŒ  s–   € Øˆ	Øœ3˜z›?Ò*Ø<×CÑCÀLÔRUÐV`ÓRaÓb‰IØœS Ó.Ò.Ø>×EÑEÀlÔTWÐXdÓTeÓf‰IØœS ›_Ò,Ø<×CÑCÀLÔRUÐV`ÓRaÓbˆIÙÜ�M‰M˜)Ô$Ü˜YÓ'Ð'ð r`   c           	      ó`  — ||dœ}d }	|dk7  s"| j                   |   ||   |j                  z  k7  rvt        j                  t        j                  | j                   |   ||   |j                  z  fd|ddœ|¤Žt        j
                  ||   |j                  z  fdt        i|¤Ž«      }	 || j                   |   ||   ||	fi |¤Žg}
||   |j                  z  | j                   |<   t        d||   «      D ]+  }|
j                   || j                   |   ||   fi |¤Ž«       Œ- t        j                  |
Ž S ©NrN   r   F)Úkernel_sizeÚstrideÚbiasÚmomentum)	rK   Ú	expansionrY   Ú
SequentialÚConv2dÚBatchNorm2dÚ_BN_MOMENTUMÚrangeÚappend)r\   Úbranch_indexr   r   r   rl   rO   rP   r]   Ú
downsampleÚlayersÚis               r_   Ú_make_one_branchz%HighResolutionModule._make_one_branch˜  sU  € Ø¨Ñ/ˆØˆ
Ø�QŠ;˜$Ÿ/™/¨,Ñ7¸<ÈÑ;UÐXb×XlÑXlÑ;lÒlÜŸ™Ü—	‘	Ø—O‘O LÑ1Ø  Ñ.°×1EÑ1EÑEðð !"Ø!Øñð ñô —‘˜|¨LÑ9¸J×<PÑ<PÑPÑnÔ[gÐnÐkmÑnó
ˆJñ ˜TŸ_™_¨\Ñ:¸LÈÑ<VÐX^Ð`jÑqÐnpÑqÐrˆØ(4°\Ñ(BÀZ×EYÑEYÑ(Yˆ�‰˜Ñ%Ü�q˜* \Ñ2Ó3ò 	gˆAØ�M‰M™* T§_¡_°\Ñ%BÀLÐQ]ÑD^ÑeÐbdÑeÕfð	gô �}‰}˜fÐ%Ð%r`   c           	      ó¤   — ||dœ}g }t        |«      D ]'  }	|j                   | j                  |	|||fi |¤Ž«       Œ) t        j                  |«      S )NrN   )rt   ru   rz   rY   Ú
ModuleList)
r\   r   r   r   r   rO   rP   r]   rV   ry   s
             r_   rU   z#HighResolutionModule._make_branches¯  s^   € Ø¨Ñ/ˆØˆÜ�|Ó$ò 	bˆAØ�O‰OÐ1˜D×1Ñ1°!°ZÀÈ\Ñ`Ð]_Ñ`Õað	bô �}‰}˜XÓ&Ð&r`   c                 óê  — ||dœ}| j                   dk(  rt        j                  «       S | j                   }| j                  }g }t	        | j
                  r|nd«      D �]   }g }t	        |«      D �]È  }	|	|kD  r|j                  t        j                  t        j                  ||	   ||   dddfddi|¤Žt        j                  ||   fdt        i|¤Žt        j                  d|	|z
  z  d¬	«      «      «       Œˆ|	|k(  r$|j                  t        j                  «       «       Œ±g }
t	        ||	z
  «      D ]ä  }|||	z
  dz
  k(  rb||   }|
j                  t        j                  t        j                  ||	   |d
ddfddi|¤Žt        j                  |fdt        i|¤Ž«      «       Œp||	   }|
j                  t        j                  t        j                  ||	   |d
ddfddi|¤Žt        j                  |fdt        i|¤Žt        j                  d«      «      «       Œæ |j                  t        j                  |
Ž «       �ŒË |j                  t        j                  |«      «       �Œ t        j                  |«      S )NrN   r   r   rm   Frn   r    Únearest)Úscale_factorÚmoder#   )r   rY   ÚIdentityrK   rt   rL   ru   rp   rq   rr   rs   ÚUpsamplerZ   r|   )r\   rO   rP   r]   r   rK   rX   ry   Ú
fuse_layerÚjÚconv3x3sÚkÚnum_out_chs_conv3x3s                r_   rW   z&HighResolutionModule._make_fuse_layers·  sI  € Ø¨Ñ/ˆØ×Ñ Ò!Ü—;‘;“=Ð à×(Ñ(ˆØ—_‘_ˆ
ØˆÜ t×'>Ò'>‘|ÀAÓFó 	:ˆAØˆJÜ˜<Ó(ó @�Ø�q’5Ø×%Ñ%¤b§m¡mÜŸ	™	 *¨Q¡-°¸A±ÀÀ1ÀaÑZÈeÐZÐWYÑZÜŸ™ z°!¡}ÑR¼|ÐRÈrÑRÜŸ™°°q¸1±u±ÀIÔNó'Põ Qð ˜!’VØ×%Ñ%¤b§k¡k£mÕ4à!�HÜ" 1 q¡5›\ò ˜Ø  A¡¨¡	š>Ø2<¸Q±-Ð/Ø$ŸO™O¬B¯M©MÜ "§	¡	¨*°Q©-Ð9LÈaÐQRÐTUÑ hÐ\aÐ hÐegÑ hÜ "§¡Ð/BÑ `Ì\Ð `Ð]_Ñ `ó-õ ð
 3=¸Q±-Ð/Ø$ŸO™O¬B¯M©MÜ "§	¡	¨*°Q©-Ð9LÈaÐQRÐTUÑ hÐ\aÐ hÐegÑ hÜ "§¡Ð/BÑ `Ì\Ð `Ð]_Ñ `Ü "§¡¨£ó-õ ðð ×%Ñ%¤b§m¡m°XÐ&>Ö?ð1@ð2 ×ÑœrŸ}™}¨ZÓ8Ö9ð7	:ô: �}‰}˜[Ó)Ð)r`   c                 ó   — | j                   S ©N)rK   ©r\   s    r_   Úget_num_in_chsz#HighResolutionModule.get_num_in_chsÞ  s   € Ø�‰Ðr`   ÚxÚreturnc                 óŒ  — | j                   dk(  r | j                  d   |d   «      gS t        | j                  «      D ]  \  }} |||   «      ||<   Œ g }t        | j                  «      D ]V  \  }}d }t        |«      D ]!  \  }}|€ |||   «      }Œ| |||   «      z   }Œ# |j	                  | j                  |«      «       ŒX |S )Nr   r   )r   rV   Ú	enumeraterX   ru   r[   )	r\   rŒ   ry   ÚbranchÚx_fuseÚ
fuse_outerÚyr„   Úfs	            r_   ÚforwardzHighResolutionModule.forwardá  sÝ   € Ø×Ñ Ò!Ø$�D—M‘M !Ñ$ Q q¡TÓ*Ð+Ð+ä" 4§=¡=Ó1ò 	 ‰IˆAˆvÙ˜!˜A™$“<ˆAˆaŠDð	 ð ˆÜ& t×'7Ñ'7Ó8ò 	,‰MˆAˆzØˆAÜ! *Ó-ò $‘��1Ø�9Ù˜!˜A™$›‘Aà™A˜a ™d›G™‘Að	$ð
 �M‰M˜$Ÿ-™-¨Ó*Õ+ð	,ð ˆr`   ©TNN©r   NN©NN)Ú__name__Ú
__module__Ú__qualname__Úintr   rY   ÚModuler   r   ÚstrÚboolrS   rT   rz   rU   rW   r‹   ÚtorchÚTensorr•   Ú__classcell__©r^   s   @r_   rI   rI   e  s³   ø„ ð (,ØØñ$'àð$'ð ˜bŸi™i™ð$'ð ˜c 3˜h™ð	$'ð
 ˜S™	ð$'ð    S ™/ð$'ð ð$'ð !%õ$'òL
(ó&ó.'ó%*òNð˜˜eŸl™lÑ+ð °°U·\±\Ñ0B÷ r`   rI   c                   óD   ‡ — e Zd Zˆ fd„Zdeej                     fd„Zˆ xZS )ÚSequentialListc                 ó   •— t        ‰| �  |Ž  y r‰   )rR   rS   )r\   Úargsr^   s     €r_   rS   zSequentialList.__init__ö  s   ø€ Ü‰Ñ˜$Òr`   r�   c                 ó$   — | D ]
  } ||«      }Œ |S r‰   rQ   )r\   rŒ   Úmodules      r_   r•   zSequentialList.forwardù  s   € Øò 	ˆFÙ�q“	‰Að	àˆr`   )	r™   rš   r›   rS   r   r    r¡   r•   r¢   r£   s   @r_   r¥   r¥   ô  s   ø„ ô ð˜D §¡Ñ.÷ r`   r¥   )r!   r   c                   ó¾  ‡ — e Zd Z	 	 	 	 	 	 	 	 ddededededededefˆ fd„Zdd	„Zdd
„Z	dd„Z
dd„Zej                  j                  d„ «       Zej                  j                  dd„«       Zej                  j                  dd„«       Zej                  j                  dej&                  fd„«       Zddedefd„Zdeej.                     fd„Zd„ Zddefd„Zd„ Zˆ xZS ) r   ÚcfgÚin_chansÚnum_classesÚoutput_strideÚglobal_poolÚ	drop_rateÚheadc
           
      ó
  •— ||	dœ}t         ‰| �  «        || _        || _        |dk(  sJ ‚ |j                  d"i |
¤Ž |d   }t        j                  ||fdddddœ|¤Ž| _        t        j                  |fd	t        i|¤Ž| _
        t        j                  d
¬«      | _        t        j                  |dfdddddœ|¤Ž| _        t        j                  d#d	t        i|¤Ž| _        t        j                  d
¬«      | _        |d   | _        | j                   d   d   }t"        | j                   d      }| j                   d   d   } | j$                  |d||fi |¤Ž| _        |j(                  |z  }|d   | _        | j*                  d   }t"        | j*                  d      }t-        t/        |«      «      D �cg c]  }||   |j(                  z  ‘Œ }} | j0                  |g|fi |¤Ž| _         | j4                  | j*                  |fi |¤Ž\  | _        }|d   | _        | j8                  d   }t"        | j8                  d      }t-        t/        |«      «      D �cg c]  }||   |j(                  z  ‘Œ }} | j0                  ||fi |¤Ž| _         | j4                  | j8                  |fi |¤Ž\  | _        }|d   | _        | j>                  d   }t"        | j>                  d      }t-        t/        |«      «      D �cg c]  }||   |j(                  z  ‘Œ }} | j0                  ||fi |¤Ž| _          | j4                  | j>                  |fdd
i|¤Ž\  | _!        }|| _"        d | _#        |jI                  dd
«      }|dk(  rndx| _%        | _&         | jN                  |fd|i|¤Ž\  | _(        | _)        | _*        tW        | jJ                  | j                  f||dœ|¤Ž\  | _,        | _-        | _.        n’|dk(  r-dx| _%        | _&         | jN                  |fdd
i|¤Ž\  | _(        }}ndx| _%        | _&        d | _(        t        j^                  «       | _,        t        j^                  «       | _-        t        j^                  «       | _.        d}ta        d|d¬«      g| _1        te        | jF                  r| jF                  n|«      D ]E  \  }}|dz  }| jF                  r|d z  n|}| xjb                  ta        ||d!|dz   › �¬«      gz  c_1        ŒG | jg                  «        y c c}w c c}w c c}w )$NrN   r   r&   r#   r    r   F)rk   rl   Úpaddingrm   rn   T©Úinplacer   r'   r   r   r   r   r(   r)   r*   rL   Úhead_conv_biasÚclassificationi   Ú	conv_bias)Ú	pool_typer°   ÚincreÚ
incre_onlyr5   Ústem)Únum_chsÚ	reductionr©   r$   ÚstagerQ   r+   )4rR   rS   r­   r¬   ÚupdaterY   rq   Úconv1rr   rs   Úbn1rZ   Úact1Úconv2Úbn2Úact2Ú
stage1_cfgÚblock_types_dictÚ_make_layerÚlayer1ro   Ú
stage2_cfgrt   rc   Ú_make_transition_layerÚtransition1Ú_make_stager(   Ú
stage3_cfgÚtransition2r)   Ú
stage4_cfgÚtransition3r*   r±   Úhead_channelsÚpopÚnum_featuresÚhead_hidden_sizeÚ
_make_headÚincre_modulesÚdownsamp_modulesÚfinal_layerr   r¯   Ú	head_dropÚ
classifierr�   ÚdictÚfeature_infor�   Úinit_weights)r\   r«   r¬   r­   r®   r¯   r°   r±   rO   rP   Úkwargsr]   r&   r   r   r   Ústage1_out_channelry   Úpre_stage_channelsr¶   Ú_Úcurr_strideÚcr^   s                          €r_   rS   zHighResolutionNet.__init__  s*  ø€ ð ¨Ñ/ˆÜ‰ÑÔØ&ˆÔØ ˆŒØ Ò"Ð"Ð"àˆ�
‰
Ñ�VÒØ˜Ñ&ˆ
Ü—Y‘Y˜x¨ÐjÀÈ1ÐVWÐ^cÑjÐgiÑjˆŒ
Ü—>‘> *ÑJ´|ÐJÀrÑJˆŒÜ—G‘G DÔ)ˆŒ	Ü—Y‘Y˜z¨2Ðd¸1ÀQÐPQÐX]ÑdÐacÑdˆŒ
Ü—>‘>ÑB¬|ÐB¸rÑBˆŒÜ—G‘G DÔ)ˆŒ	à˜h™-ˆŒØ—‘ ~Ñ6°qÑ9ˆÜ% d§o¡o°lÑ&CÑDˆ
Ø—_‘_ \Ñ2°1Ñ5ˆ
Ø&�d×&Ñ& z°2°|ÀZÑVÐSUÑVˆŒØ'×1Ñ1°LÑ@Ðà˜h™-ˆŒØ—‘ ~Ñ6ˆÜ% d§o¡o°lÑ&CÑDˆ
ÜHMÌcÐR^ÓN_ÓH`ÖaÀ1˜ Q™¨*×*>Ñ*>Ó>ÐaˆÐaØ6˜4×6Ñ6Ð8JÐ7KÈ\Ñ`Ð]_Ñ`ˆÔØ*:¨$×*:Ñ*:¸4¿?¹?ÈLÑ*_Ð\^Ñ*_Ñ'ˆŒÐ'à˜h™-ˆŒØ—‘ ~Ñ6ˆÜ% d§o¡o°lÑ&CÑDˆ
ÜHMÌcÐR^ÓN_ÓH`ÖaÀ1˜ Q™¨*×*>Ñ*>Ó>ÐaˆÐaØ6˜4×6Ñ6Ð7IÈ<Ñ^Ð[]Ñ^ˆÔØ*:¨$×*:Ñ*:¸4¿?¹?ÈLÑ*_Ð\^Ñ*_Ñ'ˆŒÐ'à˜h™-ˆŒØ—‘ ~Ñ6ˆÜ% d§o¡o°lÑ&CÑDˆ
ÜHMÌcÐR^ÓN_ÓH`ÖaÀ1˜ Q™¨*×*>Ñ*>Ó>ÐaˆÐaØ6˜4×6Ñ6Ð7IÈ<Ñ^Ð[]Ñ^ˆÔØ*:¨$×*:Ñ*:¸4¿?¹?ÈLÑ*xÐmqÐ*xÐuwÑ*xÑ'ˆŒÐ'àˆŒ	Ø!ˆÔØŸ™Ð!1°4Ó8ˆØÐ#Ò#à8<Ð<ˆDÔ Ô 5ØJYÈ$Ï/É/Ø"ñKà(ðKð ñKÑGˆDÔ Ô 5°tÔ7Gô
 ARØ×!Ñ!Ø× Ñ ðAð &Ø#ñ	Að
 ñAÑ=ˆDÔ˜dœn¨d­oð �wŠØ<@Ð@�Ô! DÔ$9Ø+:¨4¯?©?Ð;MÑ+eÐZ^Ð+eÐbdÑ+eÑ(�Ô" A¡qà<?Ð?�Ô! DÔ$9Ø%)�Ô"Ü!Ÿ{™{›}ˆDÔÜŸ[™[›]ˆDŒNÜ Ÿk™k›mˆDŒOàˆä!¨"¸ÈFÔSÐTˆÔÜ°D×4FÒ4F˜d×0Ò0ÈLÓYò 	b‰DˆAˆqØ˜1ÑˆKØ×+Ò+��A’°ˆAØ×Ò¤$¨q¸KÐRWÐXYÐ\]ÑX]ÐW^ÐP_Ô"`Ð!aÑaÖð	bð
 	×ÑÕùòo bùò bùò bs   Æ-S?ÉTË,T	c                 óÔ  — ||dœ}t         }g d¢| _        g }t        |«      D ]9  \  }	}
|j                   | j                  ||
| j                  |	   dfddi|¤Ž«       Œ; t        j                  |«      }|r|d d fS g }t        t        |«      dz
  «      D ]­  }	| j                  |	   |j                  z  }| j                  |	dz      |j                  z  }t        j                  t        j                  d||ddd|dœ|¤Žt        j                  |fdt        i|¤Žt        j                  d	¬
«      «      }|j                  |«       Œ¯ t        j                  |«      }t        j                  t        j                  d| j                  d   |j                  z  | j                  ddd|dœ|¤Žt        j                  | j                  fdt        i|¤Žt        j                  d	¬
«      «      }|||fS )NrN   r4   r   rl   r#   r    )Úin_channelsÚout_channelsrk   rl   r³   rm   rn   Tr´   r   rQ   )r   rÓ   r�   ru   rÉ   rY   r|   rt   rc   ro   rp   rq   rr   rs   rZ   rÕ   )r\   râ   r»   r¸   rO   rP   r]   Úhead_block_typerØ   ry   ÚchannelsrÙ   rç   rè   Údownsamp_modulerÚ   s                   r_   r×   zHighResolutionNet._make_headf  s  € Ø¨Ñ/ˆÜ$ˆÚ/ˆÔð ˆÜ$Ð%7Ó8ò 	x‰KˆAˆxØ× Ñ Ð!1 ×!1Ñ!1°/À8ÈT×M_ÑM_Ð`aÑMbÐdeÑ!vÐnoÐ!vÐsuÑ!vÕwð	xäŸ™ mÓ4ˆÙØ  $¨Ð,Ð,ð ÐÜ”sÐ-Ó.°Ñ2Ó3ò 	5ˆAØ×,Ñ,¨QÑ/°/×2KÑ2KÑKˆKØ×-Ñ-¨a°!©eÑ4°×7PÑ7PÑPˆLÜ Ÿm™mÜ—	‘	ð Ø +Ø!-Ø !ØØØ"ñð ñô —‘˜|ÑI´lÐIÀbÑIÜ—‘ Ô%óˆOð ×#Ñ# OÕ4ð!	5ô" Ÿ=™=Ð)9Ó:Ðä—m‘mÜ�I‰Ið Ø ×.Ñ.¨qÑ1°O×4MÑ4MÑMØ!×.Ñ.ØØØØñð ñô �N‰N˜4×,Ñ,ÑJ´|ÐJÀrÑJÜ�G‰G˜DÔ!ó
ˆð Ð.°Ð;Ð;r`   c                 óX  — ||dœ}t        |«      }t        |«      }g }t        |«      D �]j  }	|	|k  r§||	   ||	   k7  rx|j                  t        j                  t        j
                  ||	   ||	   dddfddi|¤Žt        j                  ||	   fdt        i|¤Žt        j                  d¬«      «      «       ŒŒ|j                  t        j                  «       «       Œ°g }
t        |	dz   |z
  «      D ]„  }|d	   }||	|z
  k(  r||	   n|}|
j                  t        j                  t        j
                  ||dd
dfddi|¤Žt        j                  |fdt        i|¤Žt        j                  d¬«      «      «       Œ† |j                  t        j                  |
Ž «       �Œm t        j                  |«      S )NrN   r#   r   rm   Frn   Tr´   éÿÿÿÿr    )rc   rt   ru   rY   rp   rq   rr   rs   rZ   r�   r|   )r\   Únum_channels_pre_layerÚnum_channels_cur_layerrO   rP   r]   Únum_branches_curÚnum_branches_preÚtransition_layersry   r…   r„   Ú_in_chsÚ_out_chss                 r_   rÌ   z(HighResolutionNet._make_transition_layer™  s¯  € Ø¨Ñ/ˆÜÐ5Ó6ÐÜÐ5Ó6ÐàÐÜÐ'Ó(ó 	CˆAØÐ#Ò#Ø)¨!Ñ,Ð0FÀqÑ0IÒIØ%×,Ñ,¬R¯]©]ÜŸ	™	Ð"8¸Ñ";Ð=SÐTUÑ=VÐXYÐ[\Ð^_ÑrÐfkÐrÐoqÑrÜŸ™Ð'=¸aÑ'@Ñ^Ì<Ð^Ð[]Ñ^ÜŸ™¨Ô-ó./õ 0ð
 &×,Ñ,¬R¯[©[«]Õ;à�Ü˜q 1™uÐ'7Ñ7Ó8ò 0�AØ4°RÑ8�GØ<=ÀÐEUÑAUÒ<UÐ5°aÒ8Ð[b�HØ—O‘O¤B§M¡MÜŸ	™	 '¨8°Q¸¸1ÑOÀ5ÐOÈBÑOÜŸ™ xÑM¼,ÐMÈ"ÑMÜŸ™¨Ô-ó%/õ 0ð0ð "×(Ñ(¬¯©¸Ð)AÖBð%	Cô( �}‰}Ð.Ó/Ð/r`   c           	      ó´  — ||dœ}d }	|dk7  s|||j                   z  k7  rct        j                  t        j                  |||j                   z  fd|ddœ|¤Žt        j                  ||j                   z  fdt
        i|¤Ž«      }	 |||||	fi |¤Žg}
||j                   z  }t        d|«      D ]  }|
j                   |||fi |¤Ž«       Œ t        j                  |
Ž S rj   )ro   rY   rp   rq   rr   rs   rt   ru   )r\   r   ÚinplanesÚplanesrJ   rl   rO   rP   r]   rw   rx   ry   s               r_   rÉ   zHighResolutionNet._make_layerµ  sí   € Ø¨Ñ/ˆØˆ
Ø�QŠ;˜( f¨z×/CÑ/CÑ&CÒCÜŸ™Ü—	‘	˜( F¨Z×-AÑ-AÑ$AÐrÈqÐY_ÐfkÑrÐoqÑrÜ—‘˜v¨
×(<Ñ(<Ñ<ÑZÄ|ÐZÐWYÑZóˆJñ
 ˜X v¨v°zÑHÀRÑHÐIˆØ˜J×0Ñ0Ñ0ˆÜ�q˜+Ó&ò 	>ˆAØ�M‰M™* X¨vÑ<¸Ñ<Õ=ð	>ô �}‰}˜fÐ%Ð%r`   c                 ó  — |d   }|d   }|d   }|d   }	t         |d      }
|d   }g }t        |«      D ]D  }|xs ||dz
  k  }|j                  t        ||
|||	||||¬«	      «       |d	   j	                  «       }ŒF t        |Ž |fS )
Nr   r   r   r   r   r   r   rN   rí   )rÈ   rt   ru   rI   r‹   r¥   )r\   Úlayer_configrK   rL   rO   rP   r   r   r   r   r   r   Úmodulesry   Úreset_multi_scale_outputs                  r_   rÎ   zHighResolutionNet._make_stageÅ  sÅ   € Ø" =Ñ1ˆØ# NÑ3ˆØ! ,Ñ/ˆ
Ø# NÑ3ˆÜ% l°<Ñ&@ÑAˆ
Ø" =Ñ1ˆàˆÜ�{Ó#ò 	6ˆAà'9Ò'P¸QÀÈqÁÑ=PÐ$Ø�N‰NÔ/ØØØØØØØ(ØØô
ô 
ð ! ™×3Ñ3Ó5‰Jð	6ô  ˜wÐ'¨Ð3Ð3r`   c                 óš  — | j                  «       D ]¸  }t        |t        j                  «      r-t        j                  j                  |j                  dd¬«       ŒJt        |t        j                  «      sŒet        j                  j                  |j                  d«       t        j                  j                  |j                  d«       Œº y )NÚfan_outÚrelu)r€   Únonlinearityr   r   )
rú   Ú
isinstancerY   rq   ÚinitÚkaiming_normal_Úweightrr   Ú	constant_rm   )r\   Úms     r_   rß   zHighResolutionNet.init_weightsà  s†   € à—‘“ò 	-ˆAÜ˜!œRŸY™YÔ'Ü—‘×'Ñ'Ø—H‘H 9¸6ð (õ Cä˜AœrŸ~™~Õ.Ü—‘×!Ñ! !§(¡(¨AÔ.Ü—‘×!Ñ! !§&¡&¨!Õ,ñ	-r`   c                 ó,   — t        d|rdn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¼   rJ   )rÝ   )r\   ÚcoarseÚmatchers      r_   Úgroup_matcherzHighResolutionNet.group_matcherê  s"   € äØ$Ù?EÑ;ò Lô
ˆð ˆr`   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedrQ   )r\   Úenables     r_   Úset_grad_checkpointingz(HighResolutionNet.set_grad_checkpointingö  s   € áÐAÐAÓAˆz�6r`   r�   c                 ó   — | j                   S r‰   )rÜ   rŠ   s    r_   Úget_classifierz HighResolutionNet.get_classifierú  s   € à�‰Ðr`   c                 óp   — || _         t        | j                  | j                   |¬«      \  | _        | _        y )N)r¹   )r­   r   rÕ   r¯   rÜ   )r\   r­   r¯   s      r_   Úreset_classifierz"HighResolutionNet.reset_classifierþ  s2   € Ø&ˆÔÜ,=Ø×Ñ˜t×/Ñ/¸;ô-HÑ)ˆÔ˜$�/r`   c                 óH  — | j                  |«      }t        | j                  «      D ��cg c]  \  }} ||«      ‘Œ }}}| j                  |«      }t        | j                  «      D ��cg c]/  \  }}t        |t        j                  «      s ||d   «      n||   ‘Œ1 }}}| j                  |«      }t        | j                  «      D ��cg c]/  \  }}t        |t        j                  «      s ||d   «      n||   ‘Œ1 }}}| j                  |«      }|S c c}}w c c}}w c c}}w )Nrí   )rÊ   r�   rÍ   r(   rÐ   r   rY   r�   r)   rÒ   r*   )r\   rŒ   ry   ÚtÚxlÚyls         r_   ÚstageszHighResolutionNet.stages  sô   € Ø�K‰K˜‹Nˆä(¨×)9Ñ)9Ó:×;‘t�q˜!‰a��dÐ;ˆÑ;Ø�[‰[˜‹_ˆäQZÐ[_×[kÑ[kÓQl×mÉÈÈAœz¨!¬R¯[©[Ô9‰a��2‘Œi¸rÀ!¹uÑDÐmˆÑmØ�[‰[˜‹_ˆäQZÐ[_×[kÑ[kÓQl×mÉÈÈAœz¨!¬R¯[©[Ô9‰a��2‘Œi¸rÀ!¹uÑDÐmˆÑmØ�[‰[˜‹_ˆØˆ	ùó <ùó nùó ns   ªDÁ(4DÃ4Dc                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }| j                  �| j                  €|S d }t        | j                  «      D ]B  \  }}|€ |||   «      }Œ| j                  |dz
     } |||   «      |j                  |«      z   }ŒD | j                  |«      }|S )Nr   )rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   r  rØ   rÙ   r�   r•   rÚ   )r\   rŒ   r  r“   ry   rº   Údowns          r_   Úforward_featuresz"HighResolutionNet.forward_features  sõ   € à�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�I‰I�a‹Lˆð �[‰[˜‹^ˆØ×ÑÐ%¨×)>Ñ)>Ð)FØˆIàˆÜ! $×"4Ñ"4Ó5ò 	3‰HˆAˆuØˆyÙ˜"˜Q™%“L‘à×,Ñ,¨Q°©UÑ3�Ù˜"˜Q™%“L 4§<¡<°£?Ñ2‘ð	3ð ×Ñ˜QÓˆØˆr`   Ú
pre_logitsc                 óp   — | j                  |«      }| j                  |«      }|r|S | j                  |«      S r‰   )r¯   rÛ   rÜ   )r\   rŒ   r  s      r_   Úforward_headzHighResolutionNet.forward_head)  s6   € à×Ñ˜QÓˆØ�N‰N˜1ÓˆÙˆqÐ6 D§O¡O°AÓ$6Ð6r`   c                 óJ   — | j                  |«      }| j                  |«      }|S r‰   )r  r  )r\   rŒ   r“   s      r_   r•   zHighResolutionNet.forward/  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr`   )r#   éè  r   Úavgç        r·   NN)FTNNr˜   r—   r–   ©F)T)r  )r™   rš   r›   r   rœ   rž   ÚfloatrS   r×   rÌ   rÉ   rÎ   r    ÚjitÚignorerß   r	  r  rY   r�   r  r  r   r¡   r  r  rŸ   r  r•   r¢   r£   s   @r_   r   r     sJ  ø„ ð
 Ø#Ø!#Ø$Ø"Ø(ØØñ]àð]ð ð]ð ð	]ð
 ð]ð ð]ð ð]ð õ]ó~1<óf0ó8&ó 4ð6 ‡Y�Y×Ññ-ó ð-ð ‡Y�Y×Ñò	ó ð	ð ‡Y�Y×ÑòBó ðBð ‡Y�Y×Ñð §	¡	ò ó ðñH¨Cð H¸có Hð
˜4 §¡Ñ-ó òñ27¨$ó 7ör`   c                   ó^   ‡ — e Zd ZdZ	 	 	 	 	 	 	 dˆ fd„	Zd„ Zdeej                     fd„Z	ˆ x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.
    c	           
      óà   •— |dv sJ ‚t        ‰| �  |f||||||dœ|	¤Ž t        | j                  |«      | _        | j                  j	                  «       D �
ch c]  }
|
d   ’Œ	 c}
| _        y c c}
w )N)rº   rb   )r¬   r­   r®   r¯   r°   r±   Úindex)rR   rS   r   rÞ   Ú	get_dictsÚ_out_idx)r\   r«   r¬   r­   r®   r¯   r°   Úfeature_locationÚout_indicesrà   r”   r^   s              €r_   rS   z"HighResolutionNetFeatures.__init__@  sƒ   ø€ ð   =Ñ0Ð0Ð0Ü‰ÑØð		
àØ#Ø'Ø#ØØ!ñ		
ð ò		
ô (¨×(9Ñ(9¸;ÓGˆÔØ-1×->Ñ->×-HÑ-HÓ-JÖK¨˜˜7›ÒKˆ�ùÒKs   ÁA+c                 ó   — J d«       ‚)NzNot supportedrQ   )r\   rŒ   s     r_   r  z*HighResolutionNetFeatures.forward_featuresZ  s   € Ø%�oÓ%ˆur`   r�   c                 ó"  — g }| j                  |«      }| j                  |«      }| j                  |«      }d| j                  v r|j	                  |«       | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  �.t        || j                  «      D ��cg c]  \  }} ||«      ‘Œ }}}t        |«      D ](  \  }}|dz   | j                  v sŒ|j	                  |«       Œ* |S c c}}w )Nr   r   )rÁ   rÂ   rÃ   r(  ru   rÄ   rÅ   rÆ   r  rØ   Úzipr�   )r\   rŒ   Úoutr”   rº   ry   s         r_   r•   z!HighResolutionNetFeatures.forward]  sì   € ØˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�—‘ÑØ�J‰J�qŒMØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�K‰K˜‹NˆØ×ÑÐ)Ü*-¨a°×1CÑ1CÓ*D×E™h˜a ‘�q•ÐEˆAÑEÜ˜a“Lò 	‰DˆAˆqØ�1‰u˜Ÿ™Ò%Ø—
‘
˜1•ð	ð ˆ
ùó	 Fs   Â>D)r#   r  r   r  r  rº   )r   r   r    r#   r$   )r™   rš   r›   Ú__doc__rS   r  r   r    r¡   r•   r¢   r£   s   @r_   r   r   5  s?   ø„ ñð ØØØØØ$Ø'õLò4&ð˜D §¡Ñ.÷ r`   c                 ó>  — t         }d}d }|j                  dd«      r
t        }d}d}|xs | }|j                  d| xr |j                  dd«      dk(  «      }t	        || |ft
        |   ||dœ|¤Ž}|r+t        |j                  «      |_        |j                  |_        |S )	NFÚfeatures_only)r­   r¯   TÚpretrained_strictr±   r·   )Ú	model_cfgr2  Úkwargs_filter)	r   rÔ   r   Úgetr   Úcfg_clsr   Údefault_cfgÚpretrained_cfg)	ÚvariantÚ
pretrainedÚcfg_variantÚmodel_kwargsÚ	model_clsr1  r4  r2  Úmodels	            r_   Ú_create_hrnetr?  p  sÌ   € Ü!€IØ€MØ€MØ×Ñ˜¨Ô/Ü-ˆ	Ø6ˆØˆØÒ( €Kà$×(Ñ(ØØÐÒ\˜l×.Ñ.¨vÐ7GÓHÐL\Ñ\óÐô !ØØØðô ˜+Ñ&Ø+Ø#ñð ñ€Eñ Ü:¸5×;LÑ;LÓMˆÔØ!×0Ñ0ˆÔØ€Lr`   c                 ó2   — | dddddt         t        dddd	œ|¥S )
Nr  )r#   éà   rA  )é   rB  g      ì?ÚbilinearrÁ   rÜ   Úmit)Úurlr­   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdÚ
first_convrÜ   Úlicenser   )rE  rà   s     r_   Ú_cfgrN  �  s3   € àØ¨=ÀvØ¨JÜ%Ô.BØ¨\Øñð ðð r`   ztimm/Úbicubicz
apache-2.0)Ú	hf_hub_idrI  rM  )rP  gffffffî?)rP  rH  g      ð?)r#   é   rQ  )rP  rH  Útest_crop_pctÚ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                 ó   — t        d| fi |¤ŽS )Nr?   ©r?  ©r:  rà   s     r_   r?   r?   µ  s   € äÐ*¨JÑA¸&ÑAÐAr`   c                 ó   — t        d| fi |¤ŽS )Nr@   rU  rV  s     r_   r@   r@   º  s   € äÐ-¨zÑD¸VÑDÐDr`   c                 ó   — t        d| fi |¤ŽS )NrA   rU  rV  s     r_   rA   rA   ¿  ó   € ä˜ jÑ;°FÑ;Ð;r`   c                 ó   — t        d| fi |¤ŽS )NrB   rU  rV  s     r_   rB   rB   Ä  rY  r`   c                 ó   — t        d| fi |¤ŽS )NrC   rU  rV  s     r_   rC   rC   É  rY  r`   c                 ó   — t        d| fi |¤ŽS )NrD   rU  rV  s     r_   rD   rD   Î  rY  r`   c                 ó   — t        d| fi |¤ŽS )NrE   rU  rV  s     r_   rE   rE   Ó  rY  r`   c                 ó   — t        d| fi |¤ŽS )NrF   rU  rV  s     r_   rF   rF   Ø  rY  r`   c                 ó   — t        d| fi |¤ŽS )NrG   rU  rV  s     r_   rG   rG   Ý  rY  r`   c                 óB   — |j                  dd«       t        dd| dœ|¤ŽS )Nr¶   FrA   ©r;  r:  )Úhrnet_w18_ssld©Ú
setdefaultr?  rV  s     r_   rb  rb  â  ó)   € à
×ÑÐ&¨Ô.ÜÐd°{ÈzÑdÐ]cÑdÐdr`   c                 óB   — |j                  dd«       t        dd| dœ|¤ŽS )Nr¶   FrF   ra  )Úhrnet_w48_ssldrc  rV  s     r_   rg  rg  è  re  r`   )FN)rb   r   )7r/  ÚloggingÚtypingr   r   r   r   r   r    Útorch.nnrY   Ú	timm.datar	   r
   Útimm.layersr   Ú_builderr   r   Ú	_featuresr   Ú	_registryr   r   Úresnetr   r   Ú__all__rs   Ú	getLoggerr™   re   rÝ   r6  r�   rI   rp   r¥   rÈ   r   r   r?  rN  Údefault_cfgsr?   r@   rA   rB   rC   rD   rE   rF   rG   rb  rg  rQ   r`   r_   ú<module>rt     sþ  ðñ	ó ß 4Õ 4ã Ý ç AÝ )ß GÝ "ß <ß *àÐ ;Ð
<€à€Ø
ˆ'×
Ñ
˜HÓ
%€ñ ÙØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø%Øô
ñ ØØØØ#Ø*Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø%Øô
ñ ØØØØ#Ø*Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø%Øô
ñ ØØØØ#Ø*Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø&Øô
ñ ØØØØ#Ø+Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø&Øô
ñ ØØØØ#Ø+Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø&Øô
ñ ØØØØ#Ø+Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø&Øô
ñ ØØØØ#Ø+Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ!Øô
ñ ØØØØ Ø&Øô
ñ ØØØØ#Ø+Øô
ô5"ñH ØÙØØØ#ØØØô
ñ ØØØØØ"Øô
ñ ØØØØ Ø'Øô
ñ ØØØØ#Ø,Øô
ô5"ôC	D€ôN
L˜2Ÿ9™9ô Lô^�R—]‘]ô ð ØñÐ ôm˜Ÿ	™	ô mô`	8Ð 1ô 8óvó:	ñ %Ù"&°È	Ð[gÔ"hÙ#¨gÔ6Ù%)°GÈ9Ð^jÔ%kÙ"&°Ô"9Ù!ØØôñ ¨Ô0Ù¨Ô0Ù¨Ô0Ù¨Ô0Ù¨Ô0Ù¨Ô0Ù¨Ô0á"&ØØ S¸-ô#ñ #'ØØ S¸-ô#ñ+&ó €ð8 ñBÐ3Dò Bó ðBð ñEÐ6Gò Eó ðEð ñ<Ð->ò <ó ð<ð ñ<Ð->ò <ó ð<ð ñ<Ð->ò <ó ð<ð ñ<Ð->ò <ó ð<ð ñ<Ð->ò <ó ð<ð ñ<Ð->ò <ó ð<ð ñ<Ð->ò <ó ð<ð ñeÐ2Cò eó ðeð
 ñeÐ2Cò eó ñer`   