
    RЦiE                        S r SSKrSSKJrJrJrJrJr  SSKrSSK	J
r
  SSKJrJr  SSKJr  SSKJrJr  SSKJr  SS	KJrJr  SS
KJrJr  SS/rSr\R:                  " \5      r\ " \ " S\ " SSSSSSS9\ " SSSSSSS9\ " SSSSSSS9\ " SSSSSSS9S9\ " S\ " SSSSS SS9\ " SSSSS!SS9\ " SSSSS"SS9\ " SSSSS#SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S!SS9\ " SSSS&S"SS9\ " SSSS'S#SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S(SS9\ " SSSS&S)SS9\ " SSSS'S*SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S+SS9\ " SSSS&S,SS9\ " SSSS'S-SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S.SS9\ " SSSS&S/SS9\ " SSSS'S0SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S1SS9\ " SSSS&S2SS9\ " SSSS'S3SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S4SS9\ " SSSS&S5SS9\ " SSSS'S6SS9S9\ " S\ " SSSS$S SS9\ " SSSS%S7SS9\ " SSSS&S8SS9\ " SSSS'S9SS9S9S:9	r! " S; S<\
RD                  5      r# " S= S>\
RH                  5      r%\\S?.r& " S@ S\
RD                  5      r' " SA S\'5      r(S[SB jr)S\SC jr*\" \*" SDSESFSG9\*" SDSH9\*" SDSESFSG9\*" SDSH9\*" SDSISJ9\*" SDSH9\*" SDSH9\*" SDSH9\*" SDSH9\*" SDSH9\*" SDSH9\*" SDSH9\*" SDSISKSLSM9\*" SDSISKSLSM9SN.5      r+\S]SO\'4SP jj5       r,\S]SO\'4SQ jj5       r-\S]SO\'4SR jj5       r.\S]SO\'4SS jj5       r/\S]SO\'4ST jj5       r0\S]SO\'4SU jj5       r1\S]SO\'4SV jj5       r2\S]SO\'4SW jj5       r3\S]SO\'4SX jj5       r4\S]SO\'4SY jj5       r5\S]SO\'4SZ jj5       r6g)^zHRNet

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                      ^  \ rS rSr   SS\S\\R                     S\\S4   S\	\   S\\S4   S\
S	\4U 4S
 jjjrS rSS jrSS jrSS jrS rS\	\R&                     S\	\R&                     4S jrSrU =r$ )HighResolutionModuleie  r   block_typesr   .
num_in_chsr   r   multi_scale_outputc
                   > XS.n
[         TU ]  5         U R                  UUUUU5        X@l        X`l        Xl        Xpl        U R                  " UUUU40 U
D6U l        U R                  " S0 U
D6U l
        [        R                  " S5      U l        g )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              P/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/hrnet.pyrS   HighResolutionModule.__init__f  s     /	
 %&("4++	

 
  117B7    c                 V   SnU[        U5      :w  a  SR                  U[        U5      5      nOUU[        U5      :w  a  SR                  U[        U5      5      nO*U[        U5      :w  a  SR                  U[        U5      5      nU(       a   [        R                  U5        [	        U5      eg )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   $HighResolutionModule._check_branches  s    	3z?*<CCLRUV`RabIS..>EElTWXdTefIS_,<CCLRUV`RabIMM)$Y'' ra   c           	      ^   XgS.nS n	US:w  d"  U R                   U   XA   UR                  -  :w  aw  [        R                  " [        R                  " U R                   U   XA   UR                  -  4SUSS.UD6[        R
                  " XA   UR                  -  4S[        0UD65      n	U" U R                   U   XA   XY40 UD6/n
XA   UR                  -  U R                   U'   [        SX1   5       H+  nU
R                  U" U R                   U   XA   40 UD65        M-     [        R                  " U
6 $ NrN   r   F)kernel_sizestridebiasmomentum)	rK   	expansionrY   
SequentialConv2dBatchNorm2d_BN_MOMENTUMrangeappend)r\   branch_indexr   r   r   rn   rO   rP   r]   
downsamplelayersis               r_   _make_one_branch%HighResolutionModule._make_one_branch  s:   /
Q;$//,7<;UXbXlXl;ll		OOL1 .1E1EE !"!  |9J<P<PPn[gnkmn
J T__\:L<VX^qnpqr(4(BZEYEY(Y%q*23AMM*T__\%BLD^ebdef 4 }}f%%ra   c           	          XVS.n/ n[        U5       H&  n	UR                  U R                  " XX440 UD65        M(     [        R                  " U5      $ )NrN   )rv   rw   r|   rY   
ModuleList)
r\   r   r   r   r   rO   rP   r]   rV   r{   s
             r_   rU   #HighResolutionModule._make_branches  sN    /|$AOOD11!`]_`a % }}X&&ra   c                    XS.nU R                   S:X  a  [        R                  " 5       $ U R                   nU R                  n/ n[	        U R
                  (       a  UOS5       GH
  n/ n[	        U5       GH  n	X:  a}  UR                  [        R                  " [        R                  " XY   XW   SSS4SS0UD6[        R                  " XW   4S[        0UD6[        R                  " SX-
  -  SS	95      5        M  X:X  a&  UR                  [        R                  " 5       5        M  / n
[	        Xy-
  5       H  nXU	-
  S-
  :X  ad  XW   nU
R                  [        R                  " [        R                  " XY   US
SS4SS0UD6[        R                  " U4S[        0UD65      5        Mr  XY   nU
R                  [        R                  " [        R                  " XY   US
SS4SS0UD6[        R                  " U4S[        0UD6[        R                  " S5      5      5        M     UR                  [        R                  " U
6 5        GM     UR                  [        R                  " U5      5        GM     [        R                  " U5      $ )NrN   r   r   ro   Frp   r    nearest)scale_factormoder#   )r   rY   IdentityrK   rv   rL   rw   rr   rs   rt   ru   UpsamplerZ   r   )r\   rO   rP   r]   r   rK   rX   r{   
fuse_layerjconv3x3sknum_out_chs_conv3x3s                r_   rW   &HighResolutionModule._make_fuse_layers  s   /!;;= ((__
t'>'>|AFAJ<(5%%bmm		*-1aZeZWYZz}R|RrRquIN'P Q V%%bkkm4!H"15\A	>2<-/$OOBMM "		*-9LaQRTU h\a heg h "/B `\ `]_ `- 
 3=-/$OOBMM "		*-9LaQRTU h\a heg h "/B `\ `]_ ` "-  * %%bmmX&>?1 )2 r}}Z897 G: }}[))ra   c                     U R                   $ N)rK   r\   s    r_   get_num_in_chs#HighResolutionModule.get_num_in_chs  s    ra   xreturnc                    U R                   S:X  a  U R                  S   " US   5      /$ [        U R                  5       H  u  p#U" X   5      X'   M     / n[        U R                  5       HV  u  p%S n[        U5       H   u  pxUc  U" X   5      nM  Xh" X   5      -   nM"     UR	                  U R                  U5      5        MX     U$ )Nr   r   )r   rV   	enumeraterX   rw   r[   )	r\   r   r{   branchx_fuse
fuse_outeryr   fs	            r_   forwardHighResolutionModule.forward  s    !MM!$QqT*++"4==1IA!$<AD 2 &t'7'78MAA!*-9!$AAadGA	 .
 MM$--*+ 9 ra   )rV   r[   rX   r   rL   r   rK   TNNr   NNNN)__name__
__module____qualname____firstlineno__intr   rY   Moduler   r   strboolrS   rT   r|   rU   rW   r   torchTensorr   __static_attributes____classcell__r^   s   @r_   rI   rI   e  s     (,$'$' bii$' c3h	$'
 S	$'  S/$' $' !%$' $'L
(&.'%*Nell+ U\\0B  ra   rI   c                   P   ^  \ rS rSrU 4S jrS\\R                     4S jrSr	U =r
$ )SequentialListi  c                     > [         TU ]  " U6   g r   )rR   rS   )r\   argsr^   s     r_   rS   SequentialList.__init__  s    $ra   r   c                 (    U  H  nU" U5      nM     U$ r   rQ   )r\   r   modules      r_   r   SequentialList.forward  s    Fq	A ra   rQ   )r   r   r   r   rS   r   r   r   r   r   r   r   s   @r_   r   r     s"     D.  ra   r   )r!   r   c                     ^  \ rS rSr        SS\S\S\S\S\S\S\4U 4S	 jjjrSS
 jr	SS jr
SS jrSS jr\R                  R                  S 5       r\R                  R                  SS j5       r\R                  R                  S S j5       r\R                  R                  S\R(                  4S j5       rS!S\S\4S jjrS\\R0                     4S jrS rSS\4S jjrS rSrU =r$ )"r   i  cfgin_chansnum_classesoutput_strideglobal_pool	drop_rateheadc
           
      :
  > XS.n[         TU ]  5         X0l        X l        US:X  d   eUR                  " S"0 U
D6  US   n[
        R                  " X,4SSSSS.UD6U l        [
        R                  " U4S	[        0UD6U l
        [
        R                  " S
S9U l        [
        R                  " US4SSSSS.UD6U l        [
        R                  " S#S	[        0UD6U l        [
        R                  " S
S9U l        US   U l        U R                   S   S   n["        U R                   S      nU R                   S   S   nU R$                  " USX40 UD6U l        UR(                  U-  nUS   U l        U R*                  S   n["        U R*                  S      n[-        [/        U5      5       Vs/ s H  nUU   UR(                  -  PM     nnU R0                  " U/U40 UD6U l        U R4                  " U R*                  U40 UD6u  U l        nUS   U l        U R8                  S   n["        U R8                  S      n[-        [/        U5      5       Vs/ s H  nUU   UR(                  -  PM     nnU R0                  " UU40 UD6U l        U R4                  " U R8                  U40 UD6u  U l        nUS   U l        U R>                  S   n["        U R>                  S      n[-        [/        U5      5       Vs/ s H  nUU   UR(                  -  PM     nnU R0                  " UU40 UD6U l         U R4                  " U R>                  U4SS
0UD6u  U l!        nXpl"        S U l#        URI                  SS
5      nUS:X  an  S=U l%        U l&        U RN                  " U4SU0UD6u  U l(        U l)        U l*        [W        U RJ                  U R                  4UUS.UD6u  U l,        U l-        U l.        OUS:X  a-  S=U l%        U l&        U RN                  " U4SS
0UD6u  U l(          nOS=U l%        U l&        S U l(        [
        R^                  " 5       U l,        [
        R^                  " 5       U l-        [
        R^                  " 5       U l.        Sn[a        SUSS9/U l1        [e        U RF                  (       a  U RF                  OU5       HH  u  nnUS-  nU RF                  (       a  US -  OUnU =Rb                  [a        UUS!US-    3S9/-  sl1        MJ     U Rg                  5         g s  snf s  snf s  snf )$NrN   r   r&   r#   r    r   F)rm   rn   paddingro   rp   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   rs   conv1rt   ru   bn1rZ   act1conv2bn2act2
stage1_cfgblock_types_dict_make_layerlayer1rq   
stage2_cfgrv   rd   _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_channelr{   pre_stage_channelsr   _curr_stridecr^   s                          r_   rS   HighResolutionNet.__init__  s    /& """

V&
YYxj1VW^cjgij
>>*J|JrJGGD)	YYz2d1QPQX]dacd
>>B|BrBGGD)	h-~6q9%dool&CD
__\215
&&z2|VSUV'11L@h-~6%dool&CD
HMcR^N_H`aH`1Q**>*>>H`a668J7K\`]_`*.*:*:4??L*_\^*_''h-~6%dool&CD
HMcR^N_H`aH`1Q**>*>>H`a667I<^[]^*.*:*:4??L*_\^*_''h-~6%dool&CD
HMcR^N_H`aH`1Q**>*>>H`a667I<^[]^*.*:*:4??L*xmq*xuw*x''	!!148##8<<D 5JN//"K(K KGD 5t7G
 AR!!  A &#	A
 A=Ddndo w<@@!D$9+/??;M+eZ^+ebd+e("Aq<??!D$9%)"!{{}D[[]DN kkmDO!"FSTD4F4Fd00LYDAq1K++AA$qKRWXY\]X]W^P_"`!aa Z
 	o b b bs   )TT.Tc                    XES.n[         n/ SQU l        / n[        U5       H8  u  pUR                  U R                  " XzU R                  U	   S4SS0UD65        M:     [
        R                  " U5      nU(       a  US S 4$ / n[        [        U5      S-
  5       H  n	U R                  U	   UR                  -  nU R                  U	S-      UR                  -  n[
        R                  " [
        R                  " SUUSSSUS.UD6[
        R                  " U4S[        0UD6[
        R                  " S	S
95      nUR                  U5        M     [
        R                  " U5      n[
        R                  " [
        R                  " SU R                  S   UR                  -  U R                  SSSUS.UD6[
        R                  " U R                  4S[        0UD6[
        R                  " S	S
95      nXU4$ )NrN   r4   r   rn   r#   r    )in_channelsout_channelsrm   rn   r   ro   rp   Tr   r   rQ   )r   r   r   rw   r   rY   r   rv   rd   rq   rr   rs   rt   ru   rZ   r   )r\   r   r   r   rO   rP   r]   head_block_typer   r{   channelsr   r   r   downsamp_moduler   s                   r_   r   HighResolutionNet._make_headf  s   /$/ $%78KA  !1!1/TM_M_`aMbde!vno!vsu!vw 9m4 $,, s-.23A,,Q//2K2KKK--a!e47P7PPL mm		  +!- !"  |IlIbI%O ##O4! 4" ==)9:mmII  ..q1O4M4MM!..  NN4,,J|JrJGGD!
 ;;ra   c                 `   X4S.n[        U5      n[        U5      n/ n[        U5       GHm  n	X:  a  X)   X   :w  aw  UR                  [        R                  " [        R
                  " X   X)   SSS4SS0UD6[        R                  " X)   4S[        0UD6[        R                  " SS95      5        M  UR                  [        R                  " 5       5        M  / n
[        U	S-   U-
  5       H  nUS	   nXU-
  :X  a  X)   OUnU
R                  [        R                  " [        R
                  " XSS
S4SS0UD6[        R                  " U4S[        0UD6[        R                  " SS95      5        M     UR                  [        R                  " U
6 5        GMp     [        R                  " U5      $ )NrN   r#   r   ro   Frp   Tr   r    )rd   rv   rw   rY   rr   rs   rt   ru   rZ   r   r   )r\   num_channels_pre_layernum_channels_cur_layerrO   rP   r]   num_branches_curnum_branches_pretransition_layersr{   r   r   _in_chs_out_chss                 r_   r   (HighResolutionNet._make_transition_layer  s   /5656'(A#),0F0II%,,R]]		"8";=S=VXY[\^_rfkroqr'='@^<^[]^-./ 0
 &,,R[[];q1u'778A4R8G<=EUAU<U58[bHOOBMM		'Q1O5OBOxM,M"M-%/ 0 9 "(()AB% )( }}.//ra   c           	         XgS.nS n	US:w  d  X#UR                   -  :w  ad  [        R                  " [        R                  " X#UR                   -  4SUSS.UD6[        R                  " X1R                   -  4S[
        0UD65      n	U" X#XY40 UD6/n
X1R                   -  n[        SU5       H  nU
R                  U" X#40 UD65        M     [        R                  " U
6 $ rl   )rq   rY   rr   rs   rt   ru   rv   rw   )r\   r   inplanesplanesrJ   rn   rO   rP   r]   ry   rz   r{   s               r_   r   HighResolutionNet._make_layer  s    /
Q;(z/C/C&CC		(Z-A-A$ArqY_fkroqrv(<(<<Z|ZWYZJ
 XvHRHI000q+&AMM*X<<= ' }}f%%ra   c                    US   nUS   nUS   nUS   n	[         US      n
US   n/ n[        U5       HF  nU=(       d    XS-
  :  nUR                  [        UU
UUU	UUUUS9	5        US	   R	                  5       nMH     [        U6 U4$ )
Nr   r   r   r   r   r   r   rN   r   )r   rv   rw   rI   r   r   )r\   layer_configrK   rL   rO   rP   r   r   r   r   r   r   modulesr{   reset_multi_scale_outputs                  r_   r   HighResolutionNet._make_stage  s    "=1#N3!,/
#N3%l<&@A
"=1{#A'9'PQq=P$NN/(
 
 !335J $  w'33ra   c                    U R                  5        H  n[        U[        R                  5      (       a+  [        R                  R                  UR                  SSS9  MM  [        U[        R                  5      (       d  Mn  [        R                  R                  UR                  S5        [        R                  R                  UR                  S5        M     g )Nfan_outrelu)r   nonlinearityr   r   )
r	  
isinstancerY   rs   initkaiming_normal_weightrt   	constant_ro   )r\   ms     r_   r   HighResolutionNet.init_weights  s    A!RYY''''HH96 ( CAr~~..!!!((A.!!!&&!,  ra   c                 0    [        SU(       a  SO/ SQS9nU$ )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_matcherHighResolutionNet.group_matcher  s"    $?E; L
 ra   c                      U(       a   S5       eg )Nz$gradient checkpointing not supportedrQ   )r\   enables     r_   set_grad_checkpointing(HighResolutionNet.set_grad_checkpointing  s    AAAz6ra   r   c                     U R                   $ r   )r   r   s    r_   get_classifier HighResolutionNet.get_classifier  s    ra   c                 h    Xl         [        U R                  U R                   US9u  U l        U l        g )N)r   )r   r   r   r   r   )r\   r   r   s      r_   reset_classifier"HighResolutionNet.reset_classifier  s0    &,=t//;-H)$/ra   c                 d   U R                  U5      n[        U R                  5       VVs/ s H  u  p#U" U5      PM     nnnU R                  U5      n[        U R                  5       VVs/ s H3  u  p#[        U[        R                  5      (       d  U" US   5      OXR   PM5     nnnU R                  U5      n[        U R                  5       VVs/ s H3  u  p#[        U[        R                  5      (       d  U" US   5      OXR   PM5     nnnU R                  U5      nU$ s  snnf s  snnf s  snnf )Nr   )r   r   r   r(   r   r  rY   r   r)   r   r*   )r\   r   r{   txlyls         r_   stagesHighResolutionNet.stages  s    KKN()9)9:;:tqad:;[[_QZ[_[k[kQlmQlz!R[[99a2iruDQlm[[_QZ[_[k[kQlmQlz!R[[99a2iruDQlm[[_	 < n ns   D *:D&:D,c                    U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  b  U R                  c  U$ S n[        U R                  5       HB  u  pEUc  U" X$   5      nM  U R                  US-
     nU" X$   5      UR                  U5      -   nMD     U R                  U5      nU$ )Nr   )r   r   r   r   r   r   r*  r   r   r   r   r   )r\   r   r)  r   r{   r   downs          r_   forward_features"HighResolutionNet.forward_features  s    JJqMHHQKIIaLJJqMHHQKIIaL [[^%)>)>)FI!$"4"45HAy"%L,,QU3"%L4<<?2 6 Qra   
pre_logitsc                 z    U R                  U5      nU R                  U5      nU(       a  U$ U R                  U5      $ r   )r   r   r   )r\   r   r0  s      r_   forward_headHighResolutionNet.forward_head)  s6    QNN1q6DOOA$66ra   c                 J    U R                  U5      nU R                  U5      nU$ r   )r.  r2  )r\   r   r   s      r_   r   HighResolutionNet.forward/  s'    !!!$a ra   )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   r   r   r   )r#     r   avg        r   NN)FTNNr   r   r   F)T)r7  ) 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   r2  r   r   r   r   s   @r_   r   r     sU   
 #!#$"(]] ] 	]
 ] ] ] ] ]~1<f08& 46 YY- - YY	 	 YYB B YY		  HC Hc H
4- 27$ 7 ra   c                   l   ^  \ rS rSrSr       SU 4S jjrS rS\\R                     4S jr
SrU =r$ )	r   i5  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	           
         > US;   d   e[         TU ]  " U4UUUUUUS.U	D6  [        U R                  U5      U l        U R                  R	                  5        V
s1 s H  oS   iM	     sn
U l        g s  sn
f )N)r   rc   )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   "HighResolutionNetFeatures.__init__@  s      =000		
#'#!		
 		
 ((9(9;G-1->->-H-H-JK-J7-JKKs   A0c                      S5       e)NzNot supportedrQ   )r\   r   s     r_   r.  *HighResolutionNetFeatures.forward_featuresZ  s    %o%ura   r   c                 2   / nU R                  U5      nU R                  U5      nU R                  U5      nSU R                  ;   a  UR	                  U5        U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  b/  [        XR                  5       VVs/ s H  u  p4U" U5      PM     nnn[        U5       H+  u  pSUS-   U R                  ;   d  M  UR	                  U5        M-     U$ s  snnf )Nr   r   )r   r   r   rA  rw   r   r   r   r*  r   zipr   )r\   r   outr   r   r{   s         r_   r   !HighResolutionNetFeatures.forward]  s    JJqMHHQKIIaLJJqMJJqMHHQKIIaLKKN)*-a1C1C*DE*Dhaq*DAEaLDA1u%

1 ! 
	 Fs    D)rA  r   )r#   r6  r   r7  r8  r   )r   r   r    r#   r$   )r   r   r   r   __doc__rS   r.  r   r   r   r   r   r   r   s   @r_   r   r   5  sD     $'L4&D.  ra   c                 n   [         nSnS nUR                  SS5      (       a
  [        nSnSnU=(       d    U nUR                  SU(       + =(       a    UR                  SS5      S:H  5      n[	        UU U4[
        U   UUS.UD6nU(       a+  [        UR                  5      Ul        UR                  Ul        U$ )	NFfeatures_only)r   r   Tpretrained_strictr   r   )	model_cfgrN  kwargs_filter)	r   r   r   getr   cfg_clsr   default_cfgpretrained_cfg)	variant
pretrainedcfg_variantmodel_kwargs	model_clsrM  rP  rN  models	            r_   _create_hrnetr[  p  s    !IMM//-	6(K$((\l..v7GHL\\ ! +&+# E :5;L;LM!00Lra   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr6  )r#      r]  )   r^  g      ?bilinearr   r   mit)urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convr   licenser   )ra  r   s     r_   _cfgrj    s3    =vJ%.B\  ra   ztimm/bicubicz
apache-2.0)	hf_hub_idre  ri  )rl  gffffff?)rl  rd  g      ?)r#      rm  )rl  rd  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                     [        SU 40 UD6$ )Nr?   r[  rV  r   s     r_   r?   r?     s    *JA&AAra   c                     [        SU 40 UD6$ )Nr@   rq  rr  s     r_   r@   r@     s    -zDVDDra   c                     [        SU 40 UD6$ )NrA   rq  rr  s     r_   rA   rA         j;F;;ra   c                     [        SU 40 UD6$ )NrB   rq  rr  s     r_   rB   rB     ru  ra   c                     [        SU 40 UD6$ )NrC   rq  rr  s     r_   rC   rC     ru  ra   c                     [        SU 40 UD6$ )NrD   rq  rr  s     r_   rD   rD     ru  ra   c                     [        SU 40 UD6$ )NrE   rq  rr  s     r_   rE   rE     ru  ra   c                     [        SU 40 UD6$ )NrF   rq  rr  s     r_   rF   rF     ru  ra   c                     [        SU 40 UD6$ )NrG   rq  rr  s     r_   rG   rG     ru  ra   c                 B    UR                  SS5        [        SSU S.UD6$ )Nr   FrA   rW  rV  )hrnet_w18_ssld
setdefaultr[  rr  s     r_   r~  r~    )    
&.d{zd]cddra   c                 B    UR                  SS5        [        SSU S.UD6$ )Nr   FrF   r}  )hrnet_w48_ssldr  rr  s     r_   r  r    r  ra   )FN)rc   r9  )7rK  loggingtypingr   r   r   r   r   r   torch.nnrY   	timm.datar	   r
   timm.layersr   _builderr   r   	_featuresr   	_registryr   r   resnetr   r   __all__ru   	getLoggerr   rf   r   rR  r   rI   rr   r   r   r   r   r[  rj  default_cfgsr?   r@   rA   rB   rC   rD   rE   rF   rG   r~  r  rQ   ra   r_   <module>r     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299 L^R]]   m		 m`	8 1 8v:	 %"&	[g"h#g6%)G9^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ra   