Ë
    éÓ^j~b  ã                   óF  — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmc mZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZ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*m+Z+ de	e,e,f   fd„Z-dej\                  de	e,e,f   de	e,e,f   fd„Z/de,de,de	e,e,f   de	e,e,e,e,f   fd„Z0 G d„ dejb                  «      Z2 G d„ dejb                  «      Z3 G d„ dejb                  «      Z4 G d„ dejb                  «      Z5d1d„Z6 e* e6d¬«       e6d¬«       e6d¬«       e6d¬«       e6d¬«       e6d¬«       e6dd d!d"¬#«       e6dd d!d"¬#«       e6d$d d%¬&«      d'œ	«      Z7d2d(„Z8d3d)e9d*e:de5fd+„Z;e+d3d,„«       Z<e+d3d-„«       Z=e+d3d.„«       Z>e+d3d/„«       Z?e+d3d0„«       Z@y)4é    N)Údeepcopy)Úpartial)ÚDictÚListÚOptionalÚTupleÚTypeÚUnion©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Ú
PatchEmbedÚMlpÚDropPathÚcalculate_drop_path_ratesÚClNormMlpClassifierHeadÚ
LayerScaleÚget_norm_layerÚget_act_layerÚinit_weight_jaxÚinit_weight_vitÚ	to_2tupleÚuse_fused_attné   )Úbuild_model_with_cfg)Úfeature_take_indices)Únamed_applyÚ
checkpoint)Úgenerate_default_cfgsÚregister_modelÚwindow_sizec                 óð   — | j                   \  }}}}| j                  |||d   z  |d   ||d   z  |d   |«      } | j                  dddddd«      j                  «       j                  d|d   |d   |«      }|S )aT  
    Partition into non-overlapping windows with padding if needed.
    Args:
        x (tensor): input tokens with [B, H, W, C].
        window_size (int): window size.
    Returns:
        windows: windows after partition with [B * num_windows, window_size, window_size, C].
        (Hp, Wp): padded height and width before partition
    r   r   é   é   é   é   éÿÿÿÿ©ÚshapeÚviewÚpermuteÚ
contiguous)Úxr!   ÚBÚHÚWÚCÚwindowss          úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/hieradet_sam2.pyÚwindow_partitionr4       sŒ   € ð —‘�J€A€qˆ!ˆQØ	�‰ˆq�!�{ 1‘~Ñ% {°1¡~°q¸KÈ¹NÑ7JÈKÐXYÉNÐ\]Ó^€AØ�i‰i˜˜1˜a  A qÓ)×4Ñ4Ó6×;Ñ;¸BÀÈAÁÐP[Ð\]ÑP^Ð`aÓb€GØ€Nó    r2   Úhwc                 ó  — |\  }}| j                   d   ||z  |d   z  |d   z  z  }| j                  |||d   z  ||d   z  |d   |d   d«      }|j                  dddddd«      j                  «       j                  |||d«      }|S )aZ  
    Window unpartition into original sequences and removing padding.
    Args:
        x (tensor): input tokens with [B * num_windows, window_size, window_size, C].
        window_size (int): window size.
        hw (Tuple): original height and width (H, W) before padding.
    Returns:
        x: unpartitioned sequences with [B, H, W, C].
    r   r   r'   r#   r$   r%   r&   r(   )r2   r!   r6   r/   r0   r.   r-   s          r3   Úwindow_unpartitionr8   0   s£   € ð �D€A€qØ�‰�aÑ˜Q ™U k°!¡nÑ4¸ÀA¹ÑFÑG€AØ�‰�Q˜˜[¨™^Ñ+¨Q°+¸a±.Ñ-@À+ÈaÁ.ÐR]Ð^_ÑR`ÐbdÓe€AØ	�	‰	�!�Q˜˜1˜a Ó#×.Ñ.Ó0×5Ñ5°a¸¸A¸rÓB€AØ€Hr5   r/   r0   Úreturnc                 ór   — |d   | |d   z  z
  |d   z  }|d   ||d   z  z
  |d   z  }| |z   ||z   }}||||fS )Nr   r   © )r/   r0   r!   Úpad_hÚpad_wÚHpÚWps          r3   Ú	_calc_padr@   A   sb   € Ø˜‰^˜a +¨a¡.Ñ0Ñ0°KÀ±NÑB€EØ˜‰^˜a +¨a¡.Ñ0Ñ0°KÀ±NÑB€EØ�‰Y˜˜E™	ˆ€BØˆr�5˜%ÐÐr5   c            	       ó¾   ‡ — e Zd ZU ej                  j
                  e   ed<   	 	 	 d
dededede	j                  fˆ fd„Zdej                  dej                  fd	„Zˆ xZS )ÚMultiScaleAttentionÚ
fused_attnÚdimÚdim_outÚ	num_headsÚq_poolc                 ó  •— ||dœ}t         ‰	| �  «        || _        || _        || _        ||z  }|dz  | _        t        «       | _        || _        t        j                  ||dz  fi |¤Ž| _        t        j                  ||fi |¤Ž| _        y )N©ÚdeviceÚdtypeg      à¿r#   )ÚsuperÚ__init__rD   rE   rF   Úscaler   rC   rG   ÚnnÚLinearÚqkvÚproj)
ÚselfrD   rE   rF   rG   rJ   rK   ÚddÚhead_dimÚ	__class__s
            €r3   rM   zMultiScaleAttention.__init__K   sˆ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØˆŒØ"ˆŒØ˜iÑ'ˆØ Ñ%ˆŒ
Ü(Ó*ˆŒàˆŒÜ—9‘9˜S '¨A¡+Ñ4°Ñ4ˆŒÜ—I‘I˜g wÑ5°"Ñ5ˆ�	r5   r-   r9   c                 ób  — |j                   \  }}}}| j                  |«      j                  |||z  d| j                  d«      }t	        j
                  |d«      \  }}}	| j                  �||j                  |||d«      j                  dddd«      }| j                  |«      j                  dddd«      }|j                   dd \  }}|j                  |||z  | j                  d«      }|j                  dd«      }|j                  dd«      }|	j                  dd«      }	| j                  rt        j                  |||	«      }n;|| j                  z  }||j                  dd«      z  }
|
j                  d¬«      }
|
|	z  }|j                  dd«      j                  |||d«      }| j                  |«      }|S )Nr#   r'   r$   r   r   éþÿÿÿ)rD   )r)   rQ   ÚreshaperF   ÚtorchÚunbindrG   r+   Ú	transposerC   ÚFÚscaled_dot_product_attentionrN   ÚsoftmaxrR   )rS   r-   r.   r/   r0   Ú_rQ   ÚqÚkÚvÚattns              r3   ÚforwardzMultiScaleAttention.forwarda   s�  € Ø—W‘W‰
ˆˆ1ˆa�ð �h‰h�q‹k×!Ñ! ! Q¨¡U¨A¨t¯~©~¸rÓBˆô —,‘,˜s AÓ&‰ˆˆ1ˆað �;‰;Ð"Ø—	‘	˜!˜Q  2Ó&×.Ñ.¨q°!°Q¸Ó:ˆAØ—‘˜A“×&Ñ& q¨!¨Q°Ó2ˆAØ—7‘7˜1˜Q�<‰DˆAˆqØ—	‘	˜!˜Q ™U D§N¡N°BÓ7ˆAð �K‰K˜˜1ÓˆØ�K‰K˜˜1ÓˆØ�K‰K˜˜1ÓˆØ�?Š?Ü×.Ñ.¨q°!°QÓ7‰Aà�D—J‘J‘ˆAØ�q—{‘{ 2 rÓ*Ñ*ˆDØ—<‘< B�<Ó'ˆDØ�q‘ˆAð �K‰K˜˜1Ó×%Ñ% a¨¨A¨rÓ2ˆà�I‰I�a‹LˆØˆr5   )NNN)Ú__name__Ú
__module__Ú__qualname__rZ   ÚjitÚFinalÚboolÚ__annotations__ÚintrO   ÚModulerM   ÚTensorre   Ú__classcell__©rV   s   @r3   rB   rB   H   sk   ø… Ø—	‘	—‘ Ñ%Ó%ð !%ØØñ6àð6ð ð6ð ð	6ð
 —I‘Iõ6ð, ˜Ÿ™ð  ¨%¯,©,÷  r5   rB   c                   óò   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 ddededededeeeef      deee	j                     ef   deee	j                     ef   ded	ee   d
efˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMultiScaleBlockrD   rE   rF   Ú	mlp_ratioÚq_strideÚ
norm_layerÚ	act_layerr!   Úinit_valuesÚ	drop_pathc                 óÄ  •— ||dœ}t         ‰| �  «        t        |«      }t        |«      }t	        |«      | _        t        | j
                  «      | _        || _        || _	        || _
        ||k7  rt        j                  ||fi |¤Ž| _        nt        j                  «       | _        d | _        | j                  rt        j                   ||d¬«      | _         ||fi |¤Ž| _        t%        ||f|t'        | j                  «      dœ|¤Ž| _        |	�t+        ||	fi |¤Žnt        j                  «       | _        |
dkD  rt/        |
«      nt        j                  «       | _         ||fi |¤Ž| _        t5        |t7        ||z  «      fd|i|¤Ž| _        |	�t+        ||	fi |¤Žnt        j                  «       | _        |
dkD  rt/        |
«      | _        y t        j                  «       | _        y )NrI   F)Úkernel_sizeÚstrideÚ	ceil_mode)rF   rG   ç        rw   )rL   rM   r   r   r   r!   ÚanyÚis_windowedrD   rE   ru   rO   rP   rR   ÚIdentityÚpoolÚ	MaxPool2dÚnorm1rB   r   rd   r   Úls1r   Ú
drop_path1Únorm2r   rm   ÚmlpÚls2Ú
drop_path2)rS   rD   rE   rF   rt   ru   rv   rw   r!   rx   ry   rJ   rK   rT   rV   s                 €r3   rM   zMultiScaleBlock.__init__…   sÁ  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ# JÓ/ˆ
Ü! )Ó,ˆ	Ü$ [Ó1ˆÔÜ˜t×/Ñ/Ó0ˆÔØˆŒØˆŒØ ˆŒà�'Š>ÜŸ	™	 # wÑ5°"Ñ5ˆD�IäŸ™›ˆDŒIØˆŒ	Ø�=Š=äŸ™Ø$ØØôˆDŒIñ   Ñ* rÑ*ˆŒ
Ü'ØØð
ð  Ü˜DŸI™IÓ&ñ	
ð
 ñ
ˆŒ	ð >IÐ=T”:˜g {Ñ9°bÒ9ÔZ\×ZeÑZeÓZgˆŒØ1:¸S²œ( 9Ô-ÄbÇkÁkÃmˆŒá Ñ.¨2Ñ.ˆŒ
ÜØÜ�˜)Ñ#Ó$ñ
ð  ð
ð ñ	
ˆŒð >IÐ=T”:˜g {Ñ9°bÒ9ÔZ\×ZeÑZeÓZgˆŒØ1:¸S²œ( 9Ó-ˆ�ÄbÇkÁkÃmˆ�r5   r-   r9   c           
      ó  — |}| j                  |«      }| j                  | j                  k7  rT| j                  |«      }| j                  �7|j                  dddd«      }| j	                  |«      j                  dddd«      }| j                  }|j                  dd \  }}||}}| j                  r:t        |||«      \  }}}}	t        j                  |ddd|	d|f«      }t        ||«      }| j                  |«      }| j                  �b| j                  d   | j                  d   z  | j                  d   | j                  d   z  f}|j                  dd \  }}t        |||«      \  }}}}	| j                  r.t        ||||f«      }|d d …d |…d |…d d …f   j!                  «       }|| j#                  | j%                  |«      «      z   }|| j'                  | j)                  | j+                  | j-                  |«      «      «      «      z   }|S )Nr   r#   r   r$   )r„   rD   rE   rR   r‚   r+   r!   r)   r€   r@   r]   Úpadr4   rd   ru   r8   r,   r†   r…   rŠ   r‰   rˆ   r‡   )
rS   r-   Úshortcutr!   r/   r0   r>   r?   r<   r=   s
             r3   re   zMultiScaleBlock.forwardÀ   sõ  € ØˆØ�J‰J�q‹Mˆð �8‰8�t—|‘|Ò#Ø—y‘y “|ˆHØ�y‰yÐ$Ø#×+Ñ+¨A¨q°!°QÓ7�ØŸ9™9 XÓ.×6Ñ6°q¸!¸QÀÓB�ð ×&Ñ&ˆØ�w‰w�q˜ˆ|‰ˆˆ1Ø�AˆBˆØ×ÒÜ#,¨Q°°;Ó#?Ñ ˆB��E˜5Ü—‘�a˜!˜Q  5¨!¨UÐ3Ó4ˆAÜ   KÓ0ˆAð �I‰I�a‹LˆØ�=‰=Ð$à×+Ñ+¨AÑ.°$·-±-ÀÑ2BÑBÀD×DTÑDTÐUVÑDWÐ[_×[hÑ[hÐijÑ[kÑDkÐlˆKØ—>‘> ! AÐ&‰DˆAˆqÜ#,¨Q°°;Ó#?Ñ ˆB��E˜5ð ×ÒÜ" 1 k°B¸°8Ó<ˆAØ’!�R�a�R˜˜!˜šQ�,‘×*Ñ*Ó,ˆAà�t—‘ t§x¡x°£{Ó3Ñ3ˆØ�—‘ §¡¨¯©°$·*±*¸Q³-Ó)@Ó AÓBÑBˆØˆr5   )	g      @NÚ	LayerNormÚGELUr   Nr~   NN)rf   rg   rh   rm   Úfloatr   r   r
   r	   rO   rn   ÚstrrM   rZ   ro   re   rp   rq   s   @r3   rs   rs   „   sã   ø„ ð  #Ø26Ø6AØ5;Ø Ø+/Ø"ØØñ9Tàð9Tð ð9Tð ð	9Tð
 ð9Tð ˜u S¨# X™Ñ/ð9Tð ˜d 2§9¡9™o¨sÐ2Ñ3ð9Tð ˜T "§)¡)™_¨cÐ1Ñ2ð9Tð ð9Tð " %™ð9Tð õ9Tðv#˜Ÿ™ð #¨%¯,©,÷ #r5   rs   c                   ó¾   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddeeeeef   f   deeeeef   f   deeeeeef   f   dedef
ˆ fd„Zde	j                  d	e	j                  fd
„Zˆ xZS )ÚHieraPatchEmbedz#
    Image to Patch Embedding.
    r{   r|   ÚpaddingÚin_chansÚ	embed_dimc                 ól   •— t         ‰	| �  «        ||dœ}t        j                  ||f|||dœ|¤Ž| _        y)a,  
        Args:
            kernel_size: kernel size of the projection layer.
            stride: stride of the projection layer.
            padding: padding size of the projection layer.
            in_chans: Number of input image channels.
            embed_dim: Patch embedding dimension.
        rI   )r{   r|   r”   N)rL   rM   rO   ÚConv2drR   )
rS   r{   r|   r”   r•   r–   rJ   rK   rT   rV   s
            €r3   rM   zHieraPatchEmbed.__init__ë   sJ   ø€ ô$ 	‰ÑÔØ¨Ñ/ˆÜ—I‘IØØð
ð $ØØñ
ð ñ
ˆ�	r5   r-   r9   c                 óP   — | j                  |«      }|j                  dddd«      }|S )Nr   r$   r#   r   )rR   r+   ©rS   r-   s     r3   re   zHieraPatchEmbed.forward  s(   € Ø�I‰I�a‹Lˆà�I‰I�a˜˜A˜qÓ!ˆØˆr5   )©é   rœ   ©r%   r%   ©r#   r#   r#   i   NN)rf   rg   rh   Ú__doc__r
   rm   r   r‘   rM   rZ   ro   re   rp   rq   s   @r3   r“   r“   æ   s§   ø„ ñð 4:Ø.4Ø4:ØØØØñ
à˜3  c¨3 h¡Ð/Ñ0ð
ð �c˜5  c ™?Ð*Ñ+ð
ð �s˜C  s¨C x¡Ð0Ñ1ð	
ð
 ð
ð õ
ð:˜Ÿ™ð ¨%¯,©,÷ r5   r“   c            5       óD  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7dedededededeeef   d	eeef   d
eeef   deeeef      dedeeef   deedf   dededeeef   deedf   deedf   dee   dede	dededede
eej                     ef   de
eej                     ef   f2ˆ fd„Zdej                   dej                   fd „Zd!„ Zej&                  j(                  d"„ «       Zej&                  j(                  d8d#e	defd$„«       Zej&                  j(                  d9d%e	ddfd&„«       Zej&                  j(                  d'„ «       Zd:dedee   d(e	fd)„Z	 	 	 	 	 	 d;dej                   d*ee
eee   f      d+e	d,e	d-ed.e	d#e	de
eej                      eej                   eej                      f   f   fd/„Z	 	 	 	 d<d*e
eee   f   d0e	d1e	d#e	fd2„Zdej                   dej                   fd3„Zd8d4e	dej                   fd5„Zdej                   dej                   fd6„Z ˆ xZ!S )=ÚHieraDetz5
    Reference: https://arxiv.org/abs/2306.00989
    Nr•   Únum_classesÚglobal_poolr–   rF   Úpatch_kernelÚpatch_strideÚpatch_paddingÚ
patch_sizerG   ru   Ústages.Údim_mulÚhead_mulÚglobal_pos_sizeÚwindow_specÚglobal_att_blocksrx   Úweight_initÚfix_initÚhead_init_scaleÚ	drop_rateÚdrop_path_raterv   rw   c                 ó*	  •— t         ‰&| �  «        ||dœ}t        |«      }t        |«      }t	        |«      t	        |«      k(  sJ ‚d| _        || _        || _        || _        d| _	        t        |«      }|| _        t        dt	        |«      dz   «      D �cg c]  }t        |d | «      dz
  ‘Œ c}| _        d|
cxk  rt	        | j                  d d «      k  sJ ‚ J ‚| j                  d d D �cg c]  }|dz   ‘Œ	 c}d |
 | _        |	�t        dd |	||dddœ|¤Ž| _        nt#        d|||||d	œ|¤Ž| _        || _        || _        t)        j*                  t-        j.                  d|g| j&                  ¢­i |¤Ž«      | _        t)        j*                  t-        j.                  d|| j                  d   | j                  d   fi |¤Ž«      | _        t5        ||«      } d}!t)        j6                  «       | _        g | _        t        |«      D ]ù  }|}"| j                  |!   }#| j$                  �|| j$                  v rdn|#}#|dz
  | j                  v r!t=        ||z  «      }"t=        ||z  «      }|!dz  }!t?        d||"|| |   || j                  v r| j                  nd |#|||d
œ	|¤Ž}$|"}| j8                  jA                  |$«       || j                  v sŒÂ| xj:                  tC        |"d|!dz   z  d| j                  |!   › �¬«      gz  c_        Œû |x| _"        | _#        tI        ||f|||dœ|¤Ž| _%        | j0                  �+t(        jL                  jO                  | j0                  d¬«       | j2                  �+t(        jL                  jO                  | j2                  d¬«       |dk7  r*|dk(  rtP        ntR        }%tU        |%d¬«      }%tW        |%| «       |r| jY                  «        t[        | jJ                  tH        «      r¢t[        | jJ                  j\                  t(        j^                  «      rs| jJ                  j\                  j`                  jb                  je                  |«       | jJ                  j\                  jf                  jb                  je                  |«       y y y c c}w c c}w )NrI   FÚNHWCr   r   r'   T)Úimg_sizer§   r•   r–   Ú
output_fmtÚdynamic_img_pad)r{   r|   r”   r•   r–   )	rD   rE   rF   ry   ru   r!   rv   rw   rx   r$   zblocks.)Únum_chsÚ	reductionÚmodule)Ú	pool_typer±   rv   g{®Gáz”?)ÚstdÚskipÚjaxúhead.fc)Úclassifier_namer;   )4rL   rM   r   r   ÚlenÚgrad_checkpointingr¢   r•   r¬   r¶   Úsumru   ÚrangeÚ
stage_endsÚq_pool_blocksr   Úpatch_embedr“   r­   r«   rO   Ú	ParameterrZ   ÚzerosÚ	pos_embedÚpos_embed_windowr   Ú
SequentialÚblocksÚfeature_inform   rs   ÚappendÚdictÚnum_featuresÚhead_hidden_sizer   ÚheadÚinitÚtrunc_normal_r   r   r   r   Úfix_init_weightÚ
isinstanceÚfcrP   ÚweightÚdataÚmul_Úbias)'rS   r•   r¢   r£   r–   rF   r¤   r¥   r¦   r§   rG   ru   r¨   r©   rª   r«   r¬   r­   rx   r®   r¯   r°   r±   r²   rv   rw   rJ   rK   rT   ÚdepthÚir-   ÚdprÚ	cur_stagerE   r!   ÚblockÚinit_fnrV   s'                                         €r3   rM   zHieraDet.__init__  s�  ø€ ôR 	‰ÑÔØ¨Ñ/ˆÜ# JÓ/ˆ
Ü! )Ó,ˆ	Ü�6‹{œc +Ó.Ò.Ð.Ð.Ø"'ˆÔØ&ˆÔØ ˆŒØ&ˆÔØ ˆŒä�F“ˆØ ˆŒÜ8=¸aÄÀVÃÈqÁÓ8QÖR°1œ3˜v b q˜z›?¨QÓ.ÒRˆŒØ�FÔ7œc $§/¡/°#°2Ð"6Ó7Ò7Ð7Ñ7Ð7Ð7Ø-1¯_©_¸S¸bÐ-AÖB¨˜a !›eÒBÀ7ÀFÐKˆÔàÐ!ä)ð  ØØ%Ø!Ø#Ø!Ø $ñ ð ñ ˆDÕô  /ð  Ø(Ø#Ø%Ø!Ø#ñ ð ñ ˆDÔð "3ˆÔð  /ˆÔÜŸ™¤e§k¡k°!°YÐ&\À×AUÑAUÒ&\ÐY[Ñ&\Ó]ˆŒÜ "§¡¬U¯[©[¸¸IÀt×GWÑGWÐXYÑGZÐ\`×\lÑ\lÐmnÑ\oÑ-vÐsuÑ-vÓ wˆÔä'¨¸Ó>ˆØˆ	Ü—m‘m“oˆŒØˆÔÜ�u“ò  	vˆAØˆGð ×*Ñ*¨9Ñ5ˆKà×%Ñ%Ð1Ø#$¨×(>Ñ(>Ñ#>™aÀK�à�1‰u˜Ÿ™Ñ'Ü˜i¨'Ñ1Ó2�Ü 	¨HÑ 4Ó5�	Ø˜Q‘�	ä#ð ØØØ#Ø˜a™&Ø*+¨t×/AÑ/AÑ*A˜ŸšÀtØ'Ø%Ø#Ø'ñð ñˆEð  ˆIØ�K‰K×Ñ˜uÔ%Ø�D—O‘OÒ#Ø×!Ò!Ü °A¸	À!¹Ñ4DÈwÐW[×WfÑWfÐgpÑWqÐVrÐMsÔtð&vñ vÖ!ð? 	vðD 5>Ð=ˆÔ˜DÔ1Ü+ØØð
ð "ØØ!ñ
ð ñ
ˆŒ	ð �>‰>Ð%Ü�G‰G×!Ñ! $§.¡.°dÐ!Ô;à× Ñ Ð,Ü�G‰G×!Ñ! $×"7Ñ"7¸TÐ!ÔBà˜&Ò Ø)4¸Ò)=•oÄ?ˆGÜ˜g°yÔAˆGÜ˜ Ô&áØ× Ñ Ô"ä�d—i‘iÔ!8Ô9¼jÈÏÉÏÉÔWY×W`ÑW`Ô>aØ�I‰I�L‰L×Ñ×$Ñ$×)Ñ)¨/Ô:Ø�I‰I�L‰L×Ñ×"Ñ"×'Ñ'¨Õ8ð ?bÐ9ùò SùâBs   ÂRÃ*Rr-   r9   c                 ó`  — |j                   dd \  }}| j                  }t        j                  | j                  ||fd¬«      }|j                   d   |j                   d   z  }|j                   d   |j                   d   z  }||j                  ||f«      z   }|j                  dddd«      }||z   S )	Nr   r#   Úbicubic)ÚsizeÚmoderX   r'   r   r$   )r)   rË   r]   ÚinterpolaterÊ   Útiler+   )rS   r-   ÚhÚwÚwindow_embedrÊ   Útile_hÚtile_ws           r3   Ú
_pos_embedzHieraDet._pos_embed­  s°   € Ø�w‰w�q˜ˆ|‰ˆˆ1Ø×,Ñ,ˆÜ—M‘M $§.¡.¸¸1°vÀIÔNˆ	Ø—‘ Ñ$¨×(:Ñ(:¸2Ñ(>Ñ>ˆØ—‘ Ñ$¨×(:Ñ(:¸2Ñ(>Ñ>ˆØ × 1Ñ 1°6¸6Ð2BÓ CÑCˆ	Ø×%Ñ% a¨¨A¨qÓ1ˆ	Ø�9‰}Ðr5   c                 ó  — d„ }t        | j                  «      D ]m  \  }} ||j                  j                  j                  j
                  |dz   «        ||j                  j                  j                  j
                  |dz   «       Œo y )Nc                 óR   — | j                  t        j                  d|z  «      «       y )Nç       @)Údiv_ÚmathÚsqrt)ÚparamÚ	_layer_ids     r3   Úrescalez)HieraDet.fix_init_weight.<locals>.rescale¸  s   € Ø�J‰J”t—y‘y  y¡Ó1Õ2r5   r   )Ú	enumeraterÍ   rd   rR   rÙ   rÚ   rˆ   Úfc2)rS   r÷   Úlayer_idÚlayers       r3   rÖ   zHieraDet.fix_init_weight·  si   € ò	3ô  )¨¯©Ó5ò 	=‰OˆH�eÙ�E—J‘J—O‘O×*Ñ*×/Ñ/°¸A±Ô>Ù�E—I‘I—M‘M×(Ñ(×-Ñ-¨x¸!©|Õ<ñ	=r5   c                 ó
   — ddgS )NrÊ   rË   r;   ©rS   s    r3   Úno_weight_decayzHieraDet.no_weight_decay¿  s   € àÐ/Ð0Ð0r5   Úcoarsec                 ó   — t        ddg¬«      S )Nz'^pos_embed|pos_embed_window|patch_embed)z^blocks\.(\d+)N)ÚstemrÍ   )rÐ   )rS   rÿ   s     r3   Úgroup_matcherzHieraDet.group_matcherÃ  s   € äØ;Ø-Ð.ô
ð 	
r5   Úenablec                 ó   — || _         y ©N)rÂ   )rS   r  s     r3   Úset_grad_checkpointingzHieraDet.set_grad_checkpointingÊ  s
   € à"(ˆÕr5   c                 ó.   — | j                   j                  S r  )rÓ   rØ   rý   s    r3   Úget_classifierzHieraDet.get_classifierÎ  s   € à�y‰y�|‰|Ðr5   Úreset_otherc                 óN   — || _         | j                  j                  |||¬«       y )N)r»   r	  )r¢   rÓ   Úreset)rS   r¢   r£   r	  s       r3   Úreset_classifierzHieraDet.reset_classifierÒ  s    € Ø&ˆÔØ�	‰	�‰˜¨{ÈˆÕTr5   ÚindicesÚnormÚ
stop_earlyr¶   Úintermediates_onlyc                 óô  — |rJ d«       ‚|dv sJ d«       ‚|rNt        t        | j                  «      |«      \  }}	|D �
cg c]  }
| j                  |
   ‘Œ }}
| j                  |	   }	n"t        t        | j                  «      |«      \  }}	| j	                  |«      }| j                  |«      }g }t        j                  j                  «       s|s| j                  }n| j                  d|	dz    }t        |«      D ]u  \  }
}| j                  r+t        j                  j                  «       st        ||«      }n ||«      }|
|v sŒJ|dk(  r|j                  dddd	«      n|}|j                  |«       Œw |r|S ||fS c c}
w )
aE   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to all intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
            coarse: Take coarse features (stage ends) if true, otherwise all block featrures
        Returns:

        z'normalization of features not supported)ÚNCHWr´   z(Output format must be one of NCHW, NHWC.Nr   r  r   r#   r$   )r   rÁ   rÅ   rÍ   rÇ   rî   rZ   ri   Úis_scriptingrø   rÂ   r   r+   rÏ   )rS   r-   r  r  r  r¶   r  rÿ   Útake_indicesÚ	max_indexrÞ   ÚintermediatesrÍ   ÚblkÚx_outs                  r3   Úforward_intermediateszHieraDet.forward_intermediatesÖ  so  € ñ. ÐBÐBÓBˆxØÐ-Ñ-ÐYÐ/YÓYÐ-ÙÜ&:¼3¸t¿¹Ó;OÐQXÓ&YÑ#ˆL˜)Ø8DÖE°1˜DŸO™O¨AÓ.ÐEˆLÐEØŸ™¨	Ñ2‰Iä&:¼3¸t¿{¹{Ó;KÈWÓ&UÑ#ˆL˜)à×Ñ˜QÓˆØ�O‰O˜AÓˆàˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFÜ Ó'ò 	,‰FˆAˆsØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ˜s AÓ&‘á˜“F�Ø�LÒ Ø1;¸vÒ1E˜Ÿ	™	 ! Q¨¨1Ô-È1�Ø×$Ñ$ UÕ+ð	,ñ Ø Ð à�-ÐÐùò3 Fs   ½E5Ú
prune_normÚ
prune_headc                 ó  — |r2t        t        | j                  «      |«      \  }}| j                  |   }n"t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |r| j                  j                  d|¬«       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   )r	  )r   rÁ   rÅ   rÍ   rÓ   r  )rS   r  r  r  rÿ   r  r  s          r3   Úprune_intermediate_layersz"HieraDet.prune_intermediate_layers  s}   € ñ Ü&:¼3¸t¿¹Ó;OÐQXÓ&YÑ#ˆL˜)ØŸ™¨	Ñ2‰Iä&:¼3¸t¿{¹{Ó;KÈWÓ&UÑ#ˆL˜)Ø—k‘k . 9¨q¡=Ð1ˆŒÙØ�I‰I�O‰O˜A¨:ˆOÔ6ØÐr5   c                 óê   — | j                  |«      }| j                  |«      }| j                  D ]A  }| j                  r+t        j
                  j                  «       st        ||«      }Œ: ||«      }ŒC |S r  )rÇ   rî   rÍ   rÂ   rZ   ri   r  r   )rS   r-   r  s      r3   Úforward_featureszHieraDet.forward_features  sg   € Ø×Ñ˜QÓˆØ�O‰O˜AÓˆØ—;‘;ò 	ˆCØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ˜s AÓ&‘á˜“F‘ð		ð
 ˆr5   Ú
pre_logitsc                 óV   — |r| j                  ||¬«      }|S | j                  |«      }|S )N)r   )rÓ   )rS   r-   r   s      r3   Úforward_headzHieraDet.forward_head)  s1   € Ù3=ˆD�I‰I�a JˆIÓ/ˆØˆð DHÇ9Á9ÈQÃ<ˆØˆr5   c                 óJ   — | j                  |«      }| j                  |«      }|S r  )r  r"  rš   s     r3   re   zHieraDet.forward-  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr5   )r#   éè  Úavgé`   r   r›   r�   rž   Nr#   )r$   r$   )r$   r#   é   r#   rñ   rñ   r›   )é   r%   é   rœ   )é   r'  é   NÚ Tgü©ñÒMbP?r~   r~   rŽ   r�   NN©F)T)NF)NFTr  FT)r   FTT)"rf   rg   rh   rŸ   rm   r‘   r   r   r�   rk   r
   r	   rO   rn   rM   rZ   ro   rî   rÖ   ri   Úignorerþ   r   r  r  r  r  r   r  r  r  r"  re   rp   rq   s   @r3   r¡   r¡     s  ø„ ñð Ø#Ø$ØØØ,2Ø,2Ø-3Ø48ØØ(.Ø&3Ø Ø!Ø/5ð,ð2ð
 ,0Ø!Ø!Ø%*Ø"Ø$'Ø6AØ5;ØØñOW9àðW9ð ðW9ð ð	W9ð
 ðW9ð ðW9ð    S ™/ðW9ð    S ™/ðW9ð !  c ™?ðW9ð !  s¨C x¡Ñ1ðW9ð ðW9ð ˜C ˜H‘oðW9ð ˜#˜s˜(‘OðW9ð ðW9ð ðW9ð  # 3¨ 8™_ð!W9ð$ ˜s C˜x™ð%W9ð2  % S¨# X™ð3W9ð< " %™ð=W9ð> ð?W9ð@ ðAW9ðB #ðCW9ðD ðEW9ðF "ðGW9ðH ˜d 2§9¡9™o¨sÐ2Ñ3ðIW9ðJ ˜T "§)¡)™_¨cÐ1Ñ2õKW9ðr˜EŸL™Lð ¨U¯\©\ó ò=ð ‡Y�Y×Ññ1ó ð1ð ‡Y�Y×Ññ
 Dð 
°Tò 
ó ð
ð ‡Y�Y×Ññ)¨Tð )¸Tò )ó ð)ð ‡Y�Y×Ññó ðñU¨Cð U¸hÀs¹mð UÐaeó Uð 8<ØØ#Ø$Ø',Øñ4 à�|‰|ð4 ð ˜e C¨¨c© NÑ3Ñ4ð4 ð ð	4 ð
 ð4 ð ð4 ð !%ð4 ð ð4 ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó4 ðp ./Ø$Ø#Øñà˜3  S¡	˜>Ñ*ðð ðð ð	ð
 óð& %§,¡,ð °5·<±<ó ñ¨$ð ¸5¿<¹<ó ð˜Ÿ™ð ¨%¯,©,÷ r5   r¡   c                 ó4   — | ddddddt         t        ddd	d
œ|¥S )Nr   )r#   é€  r0  )é   r1  g      ð?rä   )r#   éà   r2  zpatch_embed.projr¿   z
apache-2.0)Úurlr¢   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmin_input_sizeÚmeanr¼   Ú
first_convÚ
classifierÚlicenser   )r3  Úkwargss     r3   Ú_cfgr>  4  s5   € àØ¨ÀHØ¨)À}Ü%Ô.BØ(¸	Øñð ðð r5   ztimm/)Ú	hf_hub_id)r#   é   r@  )r#   é   rA  )é    rB  )r?  r8  r4  r5  r$  )r(  r(  )r¢   r4  r5  )	zsam2_hiera_tiny.fb_r896zsam2_hiera_tiny.fb_r896_2pt1zsam2_hiera_small.fb_r896zsam2_hiera_small.fb_r896_2pt1zsam2_hiera_base_plus.fb_r896z!sam2_hiera_base_plus.fb_r896_2pt1zsam2_hiera_large.fb_r1024zsam2_hiera_large.fb_r1024_2pt1zhieradet_small.untrainedc                 óú   — | j                  d| «      } i }| j                  «       D ]S  \  }}|j                  |«      r|j                  |d«      }nŒ+|j                  dd«      }|j                  dd«      }|||<   ŒU |S )NÚmodelr,  zmlp.layers.0zmlp.fc1zmlp.layers.1zmlp.fc2)ÚgetÚitemsÚ
startswithÚreplace)Ú
state_dictrD  ÚprefixÚoutputrb   rc   s         r3   Úcheckpoint_filter_fnrL  t  s‚   € Ø—‘ ¨Ó4€Jà€FØ× Ñ Ó"ò ‰ˆˆ1Ø�<‰<˜ÔØ—	‘	˜& "Ó%‰AàØ�I‰I�n iÓ0ˆØ�I‰I�n iÓ0ˆØˆˆqŠ	ðð €Mr5   ÚvariantÚ
pretrainedc                 óˆ   — |j                  dd«      }d}t        t        | |ft        t        |¬«      t        |d¬«      dœ|¤ŽS )NÚout_indicesr%   r,  )rJ  Úgetter)rP  Úfeature_cls)Úpretrained_filter_fnÚfeature_cfg)Úpopr   r¡   r   rL  rÐ   )rM  rN  r=  rP  Úcheckpoint_prefixs        r3   Ú_create_hiera_detrW  ƒ  sW   € Ø—*‘*˜]¨AÓ.€KØÐô  ÜØØðô %Ô%9ÐBSÔTÜ [¸hÔGñð ñð r5   c           	      óJ   — t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N)r   r$   rœ   r$   )r&   rœ   é	   ©r¨   r­   rN  )Úsam2_hiera_tiny©rÐ   rW  ©rN  r=  Ú
model_argss      r3   r[  r[  •  s,   € ä˜\¸YÔG€JÜÑd¸:ÐdÌÈjÑIcÐ\bÑIcÑdÐdr5   c           	      óJ   — t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N©r   r$   é   r$   ©rœ   é
   é   rZ  rN  )Úsam2_hiera_smallr\  r]  s      r3   re  re  ›  s,   € ä˜]¸kÔJ€JÜÑe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑeÐer5   c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nép   r$   )r)  r)  )r–   rF   r«   rN  )Úsam2_hiera_base_plusr\  r]  s      r3   rh  rh  ¡  s/   € ä ¨qÀ(ÔK€JÜÑiÀ
ÐiÌdÐS]ÑNhÐagÑNhÑiÐir5   c           	      óP   — t        ddddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )	Né�   r$   )r$   é   é$   r%   )é   é!   é+   ©r(  r%   r'  r(  )r–   rF   r¨   r­   r¬   rN  )Úsam2_hiera_larger\  r]  s      r3   rq  rq  §  s;   € äØØØØ&Ø!ô€Jô Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑeÐer5   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr`  rb  rp  gñhãˆµøä>)r¨   r­   r¬   rx   rN  )Úhieradet_smallr\  r]  s      r3   rs  rs  ³  s2   € ä˜]¸kÐWdÐrvÔw€JÜÑc¸*ÐcÌÈZÑHbÐ[aÑHbÑcÐcr5   )r,  )Nr,  r-  )Aró   Úcopyr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   rZ   Útorch.nnrO   Útorch.nn.functionalÚ
functionalr]   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_manipulater   r   Ú	_registryr   r    rm   r4   ro   r8   r@   rn   rB   rs   r“   r¡   r>  Údefault_cfgsrL  r‘   rk   rW  r[  re  rh  rq  rs  r;   r5   r3   ú<module>r�     sI  ðÛ Ý Ý ß ;× ;ã Ý ß Ð ç A÷÷ ÷ ó õ +Ý +ß 0ß <ð U¨3°¨8¡_ó ð  §¡ð ¸5ÀÀcÀ¹?ð ÐPUÐVYÐ[^ÐV^ÑP_ó ð" �ð  ˜ð  ¨5°°c°©?ð  ¸uÀSÈ#ÈsÐTWÐEWÑ?Xó  ô9˜"Ÿ)™)ô 9ôx_�b—i‘iô _ôD&�b—i‘iô &ôRaˆr�y‰yô aóJ		ñ %Ù#ð ô ñ
 %)ð ô%ñ
 !%ð ô!ñ
 &*ð ô&ñ
 %)ð ô%ñ
 *.ð ô*ñ
 "&ð Ø$Ø"¨hô"ñ '+ð Ø$Ø"¨hô'ñ !%ØØ ¨Fô!ñ[1&ó 1€óhñ˜sð °ð È8ó ð$ òeó ðeð
 òfó ðfð
 òjó ðjð
 òfó ðfð òdó ñdr5   