
    RЦi~b                     (   S SK r S SKJr  S SKJr  S SKJrJrJrJ	r	J
r
Jr  S SKrS SKJr  S SKJs  Jr  S SKJrJr  S SKJrJrJrJrJrJrJrJrJrJrJ r J!r!  SSK"J#r#  SS	K$J%r%  SS
K&J'r'J(r(  SSK)J*r*J+r+  S\	\,\,4   4S jr-S\R\                  S\	\,\,4   S\	\,\,4   4S jr/S\,S\,S\	\,\,4   S\	\,\,\,\,4   4S jr0 " S S\Rb                  5      r2 " S S\Rb                  5      r3 " S S\Rb                  5      r4 " S S\Rb                  5      r5S1S jr6\*" \6" SS9\6" SS9\6" SS9\6" SS9\6" SS9\6" SS9\6" SS S!S"S#9\6" SS S!S"S#9\6" S$S S%S&9S'.	5      r7S2S( jr8S3S)\9S*\:S\54S+ jjr;\+S3S, j5       r<\+S3S- j5       r=\+S3S. j5       r>\+S3S/ j5       r?\+S3S0 j5       r@g)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                     U R                   u  p#pEU R                  X#US   -  US   XAS   -  US   U5      n U R                  SSSSSS5      R                  5       R                  SUS   US   U5      nU$ )a4  
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          X/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/hieradet_sam2.pywindow_partitionr4       s     JA!	q{1~%{1~qN7JKXYN\]^Aii1aAq)446;;BAP[\]P^`abGN    r2   hwc                    Uu  p4U R                   S   X4-  US   -  US   -  -  nU R                  XSUS   -  XAS   -  US   US   S5      nUR                  SSSSSS5      R                  5       R                  XSUS5      nU$ )a:  
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     DAaQUk!n4AFGAQ[^+Qa.-@+a.R]^_R`bdeA			!Q1a#..055aArBAHr5   r/   r0   returnc                 d    US   XS   -  -
  US   -  nUS   XS   -  -
  US   -  nX-   X-   peXVX44$ )Nr   r    )r/   r0   r!   pad_hpad_wHpWps          r3   	_calc_padr@   A   sT    ^aa.00KNBE^aa.00KNBEY	5r5   c            	          ^  \ rS rSr% \R
                  R                  \   \S'      SS\	S\	S\	S\
R                  4U 4S jjjrS\R                  S	\R                  4S
 jrSrU =r$ )MultiScaleAttentionH   
fused_attndimdim_out	num_headsq_poolc                 
  > XVS.n[         T	U ]  5         Xl        X l        X0l        X#-  nUS-  U l        [        5       U l        X@l        [        R                  " XS-  40 UD6U l        [        R                  " X"40 UD6U l        g )Ndevicedtypeg      r#   )super__init__rE   rF   rG   scaler   rD   rH   nnLinearqkvproj)
selfrE   rF   rG   rH   rK   rL   ddhead_dim	__class__s
            r3   rN   MultiScaleAttention.__init__K   sx     /"'%
(*99SA+44IIg5"5	r5   r-   r9   c                 T   UR                   u  p#pEU R                  U5      R                  X#U-  SU R                  S5      n[        R
                  " US5      u  pxn	U R                  by  UR                  X#US5      R                  SSSS5      nU R                  U5      R                  SSSS5      nUR                   SS u  p4UR                  X#U-  U R                  S5      nUR                  SS5      nUR                  SS5      nU	R                  SS5      n	U R                  (       a  [        R                  " XxU	5      nO5XpR                  -  nXxR                  SS5      -  n
U
R                  SS9n
X-  nUR                  SS5      R                  X#US5      nU R                  U5      nU$ )Nr#   r'   r$   r   r   )rE   )r)   rR   reshaperG   torchunbindrH   r+   	transposerD   Fscaled_dot_product_attentionrO   softmaxrS   )rT   r-   r.   r/   r0   _rR   qkvattns              r3   forwardMultiScaleAttention.forwarda   sx   WW
a hhqk!!!UAt~~rB ,,sA&a ;;"		!2&..q!Q:AA&&q!Q2A771Q<DA		!UDNNB7A KK1KK1KK1??..qQ7AJJA{{2r**D<<B<'DA KK1%%aAr2IIaLr5   )rE   rF   rD   rG   rS   rH   rR   rO   )NNN)__name__
__module____qualname____firstlineno__r\   jitFinalbool__annotations__intrP   ModulerN   Tensorrg   __static_attributes____classcell__rW   s   @r3   rB   rB   H   su    		%% !%66 6 	6
 II6 6,   %,,    r5   rB   c                     ^  \ rS rSr         SS\S\S\S\S\\\\4      S\\	\
R                     \4   S\\	\
R                     \4   S	\S
\\   S\4U 4S jjjrS\R                  S\R                  4S jrSrU =r$ )MultiScaleBlock   rE   rF   rG   	mlp_ratioq_stride
norm_layer	act_layerr!   init_values	drop_pathc                   > XS.n[         TU ]  5         [        U5      n[        U5      n[	        U5      U l        [        U R
                  5      U l        Xl        X l	        XPl
        X:w  a  [        R                  " X40 UD6U l        O[        R                  " 5       U l        S U l        U R                  (       a  [        R                   " UUSS9U l        U" U40 UD6U l        [%        UU4U['        U R                  5      S.UD6U l        U	b  [+        X)40 UD6O[        R                  " 5       U l        U
S:  a  [/        U
5      O[        R                  " 5       U l        U" U40 UD6U l        [5        U[7        X$-  5      4SU0UD6U l        U	b  [+        X)40 UD6O[        R                  " 5       U l        U
S:  a  [/        U
5      U l        g [        R                  " 5       U l        g )NrJ   F)kernel_sizestride	ceil_mode)rG   rH           r}   )rM   rN   r   r   r   r!   anyis_windowedrE   rF   r{   rP   rQ   rS   Identitypool	MaxPool2dnorm1rB   r   rf   r   ls1r   
drop_path1norm2r   rq   mlpls2
drop_path2)rT   rE   rF   rG   rz   r{   r|   r}   r!   r~   r   rK   rL   rU   rW   s                 r3   rN   MultiScaleBlock.__init__   s    /#J/
!),	$[1t//0 >		#5"5DIDI	==$DI  *r*
'
  DII&	

 
	 >I=T:g9b9Z\ZeZeZg1:S(9-bkkm.2.
#$
  
 	
 >I=T:g9b9Z\ZeZeZg1:S(9-bkkmr5   r-   r9   c           
         UnU R                  U5      nU R                  U R                  :w  aU  U R                  U5      nU R                  b7  UR                  SSSS5      nU R	                  U5      R                  SSSS5      nU R                  nUR                  SS u  pEXEpvU R                  (       a7  [        XEU5      u  pgp[        R                  " USSSU	SU45      n[        X5      nU R                  U5      nU R                  b^  U R                  S   U R                  S   -  U R                  S   U R                  S   -  4nUR                  SS u  pE[        XEU5      u  pgpU R                  (       a,  [        XXg45      nUS S 2S U2S U2S S 24   R!                  5       nX R#                  U R%                  U5      5      -   nXR'                  U R)                  U R+                  U R-                  U5      5      5      5      -   nU$ )Nr   r#   r   r$   )r   rE   rF   rS   r   r+   r!   r)   r   r@   r_   padr4   rf   r{   r8   r,   r   r   r   r   r   r   )
rT   r-   shortcutr!   r/   r0   r>   r?   r<   r=   s
             r3   rg   MultiScaleBlock.forward   s   JJqM 88t||#yy|Hyy$#++Aq!Q799X.66q!QB &&wwq|B#,Q;#? BEa!Q5!U34A 0A IIaL==$++A.$--2BBDDTDTUVDW[_[h[hij[kDklK>>!A&DA#,Q;#? BE "1B8<A!RaR!Q,**,Atxx{33$**Q-)@ ABBr5   )rf   rE   rF   r   r   r   r   r   r   r   r   r   rS   r{   r!   )	g      @N	LayerNormGELUr   Nr   NN)ri   rj   rk   rl   rq   floatr   r   r
   r	   rP   rr   strrN   r\   rs   rg   rt   ru   rv   s   @r3   rx   rx      s      #266A5; +/"9T9T 9T 	9T
 9T uS#X/9T d299os239T T"))_c129T 9T "%9T 9T 9Tv# #%,, # #r5   rx   c                      ^  \ rS rSrSr       SS\\\\\4   4   S\\\\\4   4   S\\\\\\4   4   S\S\4
U 4S jjjr	S	\
R                  S
\
R                  4S jrSrU =r$ )HieraPatchEmbed   z
Image to Patch Embedding.
r   r   paddingin_chans	embed_dimc                 l   > [         T	U ]  5         XgS.n[        R                  " UU4UUUS.UD6U l        g)z
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.
rJ   )r   r   r   N)rM   rN   rP   Conv2drS   )
rT   r   r   r   r   r   rK   rL   rU   rW   s
            r3   rN   HieraPatchEmbed.__init__   sH    $ 	/II
 $
 
	r5   r-   r9   c                 P    U R                  U5      nUR                  SSSS5      nU$ )Nr   r$   r#   r   )rS   r+   rT   r-   s     r3   rg   HieraPatchEmbed.forward  s(    IIaLIIaAq!r5   )rS   )   r   r%   r%   r#   r#   r#   i   NN)ri   rj   rk   rl   __doc__r
   rq   r   r   rN   r\   rs   rg   rt   ru   rv   s   @r3   r   r      s     4:.44:
3c3h/0
 c5c?*+
 sCsCx01	

 
 
 
: %,,  r5   r   c            5       p  ^  \ rS rSrSr                           S9S\S\S\S\S\S	\\\4   S
\\\4   S\\\4   S\\\\4      S\S\\\4   S\\S4   S\	S\	S\\\4   S\\S4   S\\S4   S\\	   S\S\
S\	S\	S\	S\\\R                     \4   S\\\R                     \4   42U 4S jjjrS\R"                  S \R"                  4S! jrS" r\R(                  R*                  S# 5       r\R(                  R*                  S:S$\
S \4S% jj5       r\R(                  R*                  S;S&\
S S4S' jj5       r\R(                  R*                  S( 5       rS<S\S\\   S)\
4S* jjr      S=S\R"                  S+\\\\\   4      S,\
S-\
S.\S/\
S$\
S \\\R"                     \\R"                  \\R"                     4   4   4S0 jjr    S>S+\\\\   4   S1\
S2\
S$\
4S3 jjrS\R"                  S \R"                  4S4 jrS:S5\
S \R"                  4S6 jjr S\R"                  S \R"                  4S7 jr!S8r"U =r#$ )?HieraDeti  z-
Reference: https://arxiv.org/abs/2306.00989
Nr   num_classesglobal_poolr   rG   patch_kernelpatch_stridepatch_padding
patch_sizerH   r{   stages.dim_mulhead_mulglobal_pos_sizewindow_specglobal_att_blocksr~   weight_initfix_inithead_init_scale	drop_ratedrop_path_rater|   r}   c                 d	  > [         T&U ]  5         UUS.n[        U5      n[        U5      n[	        U5      [	        U5      :X  d   eSU l        X l        Xl        UU l        SU l	        [        U5      nXl        [        S[	        U5      S-   5       Vs/ s H  n[        US U 5      S-
  PM     snU l        SU
s=::  a  [	        U R                  S S 5      ::  d   e   eU R                  S S  Vs/ s H  nUS-   PM
     snS U
 U l        U	b  [        SS U	UUSSS.UD6U l        O[#        SUUUUUS	.UD6U l        UU l        Xl        [(        R*                  " [,        R.                  " SU/U R&                  Q70 UD65      U l        [(        R*                  " [,        R.                  " SX@R                  S   U R                  S   40 UD65      U l        [5        UU5      n Sn![(        R6                  " 5       U l        / U l        [        U5       GH   nUn"U R                  U!   n#U R$                  b  UU R$                  ;   a  SOU#n#US-
  U R                  ;   a  [=        XM-  5      n"[=        X^-  5      nU!S-  n![?        SUU"UU U   UU R                  ;   a  U R                  OS U#UUUS
.	UD6n$U"nU R8                  RA                  U$5        UU R                  ;   d  M  U =R:                  [C        U"SU!S-   -  SU R                  U!    3S9/-  sl        GM     U=U l"        U l#        [I        UU4UUUS.UD6U l%        U R0                  b(  [(        RL                  RO                  U R0                  SS9  U R2                  b(  [(        RL                  RO                  U R2                  SS9  US:w  a(  US:X  a  [P        O[R        n%[U        U%SS9n%[W        U%U 5        U(       a  U RY                  5         [[        U RJ                  [H        5      (       a  [[        U RJ                  R\                  [(        R^                  5      (       as  U RJ                  R\                  R`                  Rb                  Re                  U5        U RJ                  R\                  Rf                  Rb                  Re                  U5        g g g s  snf s  snf )NrJ   FNHWCr   r   r'   T)img_sizer   r   r   
output_fmtdynamic_img_pad)r   r   r   r   r   )	rE   rF   rG   r   r{   r!   r|   r}   r~   r$   zblocks.)num_chs	reductionmodule)	pool_typer   r|   g{Gz?)stdskipjaxhead.fc)classifier_namer;   )4rM   rN   r   r   lengrad_checkpointingr   r   r   r   sumr{   range
stage_endsq_pool_blocksr   patch_embedr   r   r   rP   	Parameterr\   zeros	pos_embedpos_embed_windowr   
Sequentialblocksfeature_inforq   rx   appenddictnum_featureshead_hidden_sizer   headinittrunc_normal_r   r   r   r   fix_init_weight
isinstancefcrQ   weightdatamul_bias)'rT   r   r   r   r   rG   r   r   r   r   rH   r{   r   r   r   r   r   r   r~   r   r   r   r   r   r|   r}   rK   rL   rU   depthir-   dpr	cur_stagerF   r!   blockinit_fnrW   s'                                         r3   rN   HieraDet.__init__  s   R 	/#J/
!),	6{c+...."'& & F 8=aVq8QR8Q13vbqz?Q.8QRF7c$//#2"6777777-1__Sb-AB-Aa!e-AB7FK!)  %!#! $   D  /  (#%!#   D "3  /ekk!Y&\AUAU&\Y[&\] "U[[IGWGWXYGZ\`\l\lmn\o-vsu-v w'>	mmouAG **95K%%1#$(>(>#>aK1u'i12	 45	Q	# #a&*+t/A/A*At'%#' E  IKKu%DOO#!!A	!4DwW[WfWfgpWqVrMst&v v!!? D 5>=D1+
 "!
 
	 >>%GG!!$..d!;  ,GG!!$"7"7T!B& )4)=o?GgyAG&  "dii!899jWYW`W`>a>aIILL$$))/:IILL""''8 ?b9 SBs   R(-R-r-   r9   c                 R   UR                   SS u  p#U R                  n[        R                  " U R                  X#4SS9nUR                   S   UR                   S   -  nUR                   S   UR                   S   -  nXTR                  Xg45      -   nUR                  SSSS5      nX-   $ )	Nr   r#   bicubic)sizemoderZ   r'   r   r$   )r)   r   r_   interpolater   tiler+   )rT   r-   hwwindow_embedr   tile_htile_ws           r3   
_pos_embedHieraDet._pos_embed  s    wwq|,,MM$..vIN	$(:(:2(>>$(:(:2(>> 1 162B CC	%%aAq1	}r5   c                    S n[        U R                  5       Hm  u  p#U" UR                  R                  R                  R
                  US-   5        U" UR                  R                  R                  R
                  US-   5        Mo     g )Nc                 T    U R                  [        R                  " SU-  5      5        g )N       @)div_mathsqrt)param	_layer_ids     r3   rescale)HieraDet.fix_init_weight.<locals>.rescale  s    JJtyyy12r5   r   )	enumerater   rf   rS   r   r   r   fc2)rT   r  layer_idlayers       r3   r   HieraDet.fix_init_weight  sb    	3  )5OHEJJOO**//A>EIIMM((--x!|<  6r5   c                 
    SS/$ )Nr   r   r;   rT   s    r3   no_weight_decayHieraDet.no_weight_decay  s    /00r5   coarsec                     [        SS/S9$ )Nz'^pos_embed|pos_embed_window|patch_embed)z^blocks\.(\d+)N)stemr   )r   )rT   r  s     r3   group_matcherHieraDet.group_matcher  s    ;-.
 	
r5   enablec                     Xl         g N)r   )rT   r  s     r3   set_grad_checkpointingHieraDet.set_grad_checkpointing  s    "(r5   c                 .    U R                   R                  $ r  )r   r   r  s    r3   get_classifierHieraDet.get_classifier  s    yy||r5   reset_otherc                 D    Xl         U R                  R                  XUS9  g )N)r   r  )r   r   reset)rT   r   r   r  s       r3   reset_classifierHieraDet.reset_classifier  s    &		Tr5   indicesnorm
stop_earlyr   intermediates_onlyc                 B   U(       a   S5       eUS;   d   S5       eU(       aO  [        [        U R                  5      U5      u  pU V
s/ s H  oR                  U
   PM     nn
U R                  U	   n	O![        [        U R                  5      U5      u  pU R	                  U5      nU R                  U5      n/ n[        R                  R                  5       (       d  U(       d  U R                  nOU R                  SU	S-    n[        U5       H  u  pU R                  (       a/  [        R                  R                  5       (       d  [        X5      nOU" U5      nX;   d  MT  US:X  a  UR                  SSSS	5      OUnUR                  U5        M     U(       a  U$ X4$ s  sn
f )
a  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   r\   rm   is_scriptingr  r   r   r+   r   )rT   r-   r!  r"  r#  r   r$  r  take_indices	max_indexr   intermediatesr   blkx_outs                  r3   forward_intermediatesHieraDet.forward_intermediates  sc   . BBBx--Y/YY-&:3t;OQX&Y#L8DE1OOA.LE	2I&:3t{{;KW&U#LQOOA99!!##:[[F[[)a-0F'FA&&uyy/E/E/G/Gs&F 1;v1E		!Q1-1$$U+ (   3 Fs   F
prune_norm
prune_headc                 (   U(       a1  [        [        U R                  5      U5      u  pVU R                  U   nO![        [        U R                  5      U5      u  pVU R                  SUS-    U l        U(       a  U R                  R                  SUS9  U$ )z?Prune layers not required for specified intermediates.
        Nr   r   )r  )r   r   r   r   r   r  )rT   r!  r/  r0  r  r(  r)  s          r3   prune_intermediate_layers"HieraDet.prune_intermediate_layers  sy     &:3t;OQX&Y#L	2I&:3t{{;KW&U#Lkk.9q=1IIOOA:O6r5   c                    U R                  U5      nU R                  U5      nU R                   HL  nU R                  (       a0  [        R
                  R                  5       (       d  [        X!5      nMD  U" U5      nMN     U$ r  )r   r   r   r   r\   rm   r'  r   )rT   r-   r+  s      r3   forward_featuresHieraDet.forward_features  sc    QOOA;;C&&uyy/E/E/G/Gs&F	 
 r5   
pre_logitsc                 X    U(       a  U R                  XS9nU$ U R                  U5      nU$ )N)r7  )r   )rT   r-   r7  s      r3   forward_headHieraDet.forward_head)  s/    3=DIIaI/ DH99Q<r5   c                 J    U R                  U5      nU R                  U5      nU$ r  )r5  r9  r   s     r3   rg   HieraDet.forward-  s'    !!!$a r5   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r{   r   r   )r#     avg`   r   r   r   r   Nr#   )r$   r$   )r$   r#      r#   r   r   r   )   r%      r   )   r@     N TgMbP?r   r   r   r   NNF)T)NF)NFTr&  FT)r   FTT)$ri   rj   rk   rl   r   rq   r   r   r   r   ro   r
   r	   rP   rr   rN   r\   rs   r   r   rm   ignorer  r   r  r  r  r  r   r-  r2  r5  r9  rg   rt   ru   rv   s   @r3   r   r     s    #$,2,2-348(.&3 !/5,2
 ,0!!%*"$'6A5;OW9W9 W9 	W9
 W9 W9  S/W9  S/W9 !c?W9 !sCx1W9 W9 CHoW9 #s(OW9 W9 W9  #38_!W9$ sCx%W92  %S#X3W9< "%=W9> ?W9@ AW9B #CW9D EW9F "GW9H d299os23IW9J T"))_c12KW9 W9rELL U\\ = YY1 1 YY
D 
T 
 
 YY)T )T ) ) YY UC Uhsm Uae U 8<#$',4 ||4  eCcN344  	4 
 4  4  !%4  4  
tELL!5tELL7I)I#JJ	K4 p ./$#3S	>*  	
 &%,, 5<< $ 5<<  %,,  r5   r   c                 4    U SSSSSS[         [        SSS	S
.UE$ )Nr   )r#     rI  )   rJ  g      ?r   )r#      rK  zpatch_embed.projr   z
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationmin_input_sizemeanr   
first_conv
classifierlicenser   )rL  kwargss     r3   _cfgrW  4  s5    H)}%.B(	  r5   ztimm/)	hf_hub_id)r#      rY  )r#      rZ  )    r[  )rX  rQ  rM  rN  r=  )rA  rA  )r   rM  rN  )	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                    U R                  SU 5      n 0 nU R                  5        HX  u  pEUR                  U5      (       a  UR                  US5      nOM0  UR                  SS5      nUR                  SS5      nXSU'   MZ     U$ )NmodelrE  zmlp.layers.0zmlp.fc1zmlp.layers.1zmlp.fc2)getitems
startswithreplace)
state_dictr]  prefixoutputrd   re   s         r3   checkpoint_filter_fnre  t  s|    4JF  "<<		&"%AIIni0IIni0q	 # Mr5   variant
pretrainedc           	      |    UR                  SS5      nSn[        [        U U4[        [        US9[        USS9S.UD6$ )Nout_indicesr%   rE  )rc  getter)ri  feature_cls)pretrained_filter_fnfeature_cfg)popr   r   r   re  r   )rf  rg  rV  ri  checkpoint_prefixs        r3   _create_hiera_detrp    sW    **]A.K   %%9BST[hG  r5   c           	      D    [        SSS9n[        SSU 0[        U40 UD6D6$ )N)r   r$   r   r$   )r&   r   	   r   r   rg  )sam2_hiera_tinyr   rp  rg  rV  
model_argss      r3   rt  rt    s,    \YGJd:djIc\bIcddr5   c           	      D    [        SSS9n[        SSU 0[        U40 UD6D6$ )Nr   r$      r$   r   
      rs  rg  )sam2_hiera_smallru  rv  s      r3   r~  r~    s,    ]kJJeJe$zJd]cJdeer5   c           	      F    [        SSSS9n[        SSU 0[        U40 UD6D6$ )Np   r$   )rB  rB  )r   rG   r   rg  )sam2_hiera_base_plusru  rv  s      r3   r  r    s/    q(KJi
idS]NhagNhiir5   c           	      J    [        SSSSSS9n[        SSU 0[        U40 UD6D6$ )	N   r$   )r$      $   r%   )   !   +   rA  r%   r@  rA  )r   rG   r   r   r   rg  )sam2_hiera_largeru  rv  s      r3   r  r    s;    &!J eJe$zJd]cJdeer5   c           	      H    [        SSSSS9n[        SSU 0[        U40 UD6D6$ )Nry  r{  r  gh㈵>)r   r   r   r~   rg  )hieradet_smallru  rv  s      r3   r  r    s2    ]kWdrvwJc*cZHb[aHbccr5   )rE  )NrE  rF  )Ar   copyr   	functoolsr   typingr   r   r   r   r	   r
   r\   torch.nnrP   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    rq   r4   rs   r8   r@   rr   rB   rx   r   r   rW  default_cfgsre  r   ro   rp  rt  r~  r  r  r  r;   r5   r3   <module>r     sI      ; ;     A    + + 0 <U38_   5c? PUVY[^V^P_ "     5c?  uS#sTWEW?X  9")) 9x_bii _D&bii &Raryy aJ		 %#  
 %) %
 !% !
 &* &
 %) %
 *. *
 "& $"h" '+ $"h' !% F![1& 1hs  8 $ e e
 f f
 j j
 f f d dr5   