Ë
    Fêñi®/  ã                   ó2  — d dl mZ d dl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 dd	lmZ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lmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddefd„Z(defd„Z)dde*de+de+fd„Z,dde*defd„Z-dd„Z.y)é    N)ÚMLP)Ú
torch_loadé   )ÚPositionEmbeddingSineÚRoPEAttention)ÚMemoryEncoder)ÚMemoryAttentionÚMemoryAttentionLayer)Ú	SAM3Model)ÚTransformerDecoderÚTransformerDecoderLayer)ÚTransformerEncoderFusionÚTransformerEncoderLayer)ÚSequenceGeometryEncoder)ÚPixelDecoderÚUniversalSegmentationHead)ÚDotProductScoringÚTransformerWrapper)ÚSam3DualViTDetNeck)ÚSAM3SemanticModel)ÚVETextEncoder)ÚViT)ÚSAM3VLBackboneÚreturnc                 óæ   — t        dddd¬«      }t        di dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d"“d#d“d$d%“d&d“d'd%“d(d%“d)d%“d*| “Ž}t        |dg d+¢||¬,«      S )-z.Create SAM3 visual backbone with ViT and neck.é   TNé'  ©Únum_pos_featsÚ	normalizeÚscaleÚtemperatureÚimg_sizeéð  Úpretrain_img_sizeiP  Ú
patch_sizeé   Ú	embed_dimé   Údepthé    Ú	num_headsé   Ú	mlp_ratiog     €@Ú
norm_layerÚ	LayerNormÚdrop_path_rateçš™™™™™¹?Úqkv_biasÚuse_abs_posÚtile_abs_posÚglobal_att_blocks)é   é   é   é   Úrel_pos_blocks© Úuse_ropeÚuse_interp_ropeÚwindow_sizeé   Úpretrain_use_cls_tokenÚretain_cls_tokenFÚln_preÚln_postÚreturn_interm_layersÚbias_patch_embedÚcompile_mode)g      @g       @g      ð?g      à?)Úposition_encodingÚd_modelÚscale_factorsÚtrunkÚadd_sam2_neck)r   r   r   )rG   Úenable_inst_interactivityrH   Úvit_backbones       úc/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/models/sam/build_sam3.pyÚ_create_vision_backbonerP      s1  € ô .ØØØØô	Ðô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ *ðñ ðñ ðñ  ð!ñ" ð#ñ$  $ð%ñ& ð'ñ( ð)ñ* ð+ñ, #ð-ñ. ð/ñ0 "ð1€Lô4 Ø+ØÚ*ØØ/ôð ó    c                  ó@  — t        t        dddddddt        j                  dddd¬«      t        j                  dddd¬«      ¬«	      d	dd
dddd¬«      } t	        t        dddt        j                  ddd¬«      dd¬«      d	dddddddddddd¬«      }t        | |d¬«      S )z)Create SAM3 detector encoder and decoder.r   é   r2   TFé   )r,   Údropoutr(   Úbatch_first)	rI   Údim_feedforwardrU   Úpos_enc_at_attnÚpos_enc_at_cross_attn_keysÚpos_enc_at_cross_attn_queriesÚpre_normÚself_attentionÚcross_attentioné   r   )ÚlayerÚ
num_layersrI   Únum_feature_levelsÚfrozenÚuse_act_checkpointÚadd_pooled_text_to_img_featÚpool_text_with_mask©r,   rU   r(   )rI   rW   rU   r]   Ún_headsÚuse_text_cross_attentionéÈ   r   ÚlogN)r_   r`   Únum_queriesÚreturn_intermediateÚ
box_refineÚnum_o2m_queriesÚdacÚboxRPBrI   rb   Úinteraction_layerÚdac_use_selfatt_lnrc   Úpresence_token)ÚencoderÚdecoderrI   )r   r   ÚnnÚMultiheadAttentionr   r   r   )rt   ru   s     rO   Ú_create_sam3_transformerrx   H   sì   € ä(@Ü%ØØ ØØ Ø',Ø*/ØÜ×0Ñ0ØØØØ ô	ô ×1Ñ1ØØØØ ô	ô
ð* ØØØØØ$)Ø ô9)€Gô< #5Ü%ØØ ØÜ×1Ñ1ØØØôð
 Ø%)ô
ð ØØ ØØØØØØØØØØô3#€Gô8  g°wÈÔLÐLrQ   Úcheckpoint_pathÚenable_segmentationÚcompilec                 ó”  — 	 ddl }|rdnd}t	        |d¬«      }t        |j                  j                  «       dd	d
d¬«      }t        ||d¬«      }t        «       }	t        ddt        dddddt        j                  d«      ¬«      ¬«      }
|r6t        ddddddt        j                  ddd¬«      t!        ddd|¬«      ¬«      nd}t#        t%        dddd¬«      ddddddt'        ddddddd¬«      ddd¬«      }t)        ||	||dd|
dd¬«	      }t+        || «      }|j-                  «        |S # t        $ r ddlm}  |d«       ddl }Y �Œ@w xY w) a  Build SAM3 image model.

    Args:
        checkpoint_path: Optional path to model checkpoint
        enable_segmentation: Whether to enable segmentation head
        compile: Whether to enable compilation of the model

    Returns:
        A SAM3 image model
    r   N)Úcheck_requirementsz+git+https://github.com/ultralytics/CLIP.gitÚdefaultT)rG   rM   r   r)   r-   r@   )Ú	tokenizerrI   ÚwidthÚheadsÚlayersr   )ÚvisualÚtextÚscalprS   é   )Ú	input_dimÚ
hidden_dimÚ
output_dimr`   ÚresidualÚout_norm)rI   Úd_projÚ
prompt_mlpé   FrT   rf   Únearest)Únum_upsampling_stagesÚinterpolation_moderˆ   rG   )rˆ   Úupsampling_stagesÚ	aux_masksÚpresence_headÚdot_product_scorerÚact_ckptÚcross_attend_promptÚpixel_decoderr   r   r2   )rI   rW   rU   rX   r[   rZ   rY   )Úpos_encÚencode_boxes_as_pointsÚboxes_direct_projectÚ
boxes_poolÚboxes_pos_encrI   r`   r_   Úuse_act_ckptÚadd_clsÚadd_post_encode_proj)	ÚbackboneÚtransformerÚinput_geometry_encoderÚsegmentation_headra   Úo2m_mask_predictÚdot_prod_scoringÚuse_instance_queryÚmultimask_output)ÚclipÚImportErrorÚultralytics.utils.checksr}   rP   r   Úsimple_tokenizerÚSimpleTokenizerr   rx   r   r   rv   r0   r   rw   r   r   r   r   r   Ú_load_checkpointÚeval)ry   rz   r{   r©   r}   rG   Úvision_encoderÚtext_encoderr¡   r¢   r¦   r¤   r£   Úmodels                 rO   Úbuild_sam3_image_modelr³   ‡   s¶  € ðÛñ !(‘9¨T€LÜ,¸,ÐbfÔg€Nô !Ø×'Ñ'×7Ñ7Ó9ØØØØô€Lô  ^¸,ÈaÔP€Hô +Ó,€Kô )ØØÜØØØØØÜ—\‘\ #Ó&ô
ôÐñD ô' 	"ØØØØØ#ØÜ "× 5Ñ 5ØØØô!ô
 'Ø&'Ø#,ØØ)ô	õ	
ð( ð+ ô2 5Ü%ØØØØô	
ð  %Ø!ØØØØÜ%ØØ ØØ!ØØ*/Ø'+ô
ð ØØ!ô1Ðô8 ØØØ5Ø+ØØØ)Ø Øô
€Eô ˜U OÓ4€EØ	‡J�J„LØ€LøôW ò Ý?áÐHÔIÞð	ús   ‚D( Ä(EÅEc                 óö  — t        dddg¬«      }t        dddt        dddddt        dd	d	d
ddg¬«      dt        dd	d	dd
ddgd¬«      ¬«      d¬«      }|rt	        d	t        |¬«      d¬«      nd}t        d;i dd“d|“d|“d|“dd“dd“dd“dd “d!d“d"d“d#d“d$d“d%d“d&d“d'd“d(d“d)d“d*d“d+d“d,d“d-d“d.d/“d0d	“d1d“d2d“d3d“d4d“d5d“d6t        dd7d8¬9«      “Ž}t        || d¬:«      }|j                  «        |S )<aa  Build the SAM3 Tracker module for video tracking.

    Args:
        checkpoint_path (str): Path to model checkpoint.
        compile (str | None): Compilation mode for the vision backbone.
        with_backbone (bool): Whether to include the vision backbone in the model.

    Returns:
        (SAM3Model): A configured and initialized SAM3 model.
    é@   i€  )Úout_dimÚinterpol_sizeTr   rS   r2   Fr   g     ˆÃ@éH   )Úembedding_dimr,   Údownsample_rateÚ
rope_thetaÚ
feat_sizes)r¹   r,   rº   Ú	kv_in_dimr»   r¼   Úrope_k_repeat)rW   rU   rX   rY   rZ   Ú	self_attnrI   Ú
cross_attné   )rV   rI   Úpos_enc_at_inputr_   r`   )rG   N)r…   rƒ   r„   Ú
image_sizer$   Úimage_encoderÚmemory_attentionÚmemory_encoderÚbackbone_strider'   Únum_maskmemr7   Úsigmoid_scale_for_mem_encg      4@Úsigmoid_bias_for_mem_encg      $ÀÚ$use_mask_input_as_output_without_samÚdirectly_add_no_mem_embedÚuse_high_res_features_in_samÚmultimask_output_in_samÚiou_prediction_use_sigmoidÚuse_obj_ptrs_in_encoderÚadd_tpos_enc_to_obj_ptrsÚ"only_obj_ptrs_in_the_past_for_evalÚpred_obj_scoresÚpred_obj_scores_mlpÚfixed_no_obj_ptrÚmultimask_output_for_trackingÚuse_multimask_token_for_obj_ptrÚmultimask_min_pt_numr   Úmultimask_max_pt_numÚuse_mlp_for_obj_ptr_projÚcompile_image_encoderÚno_obj_embed_spatialÚproj_tpos_enc_in_obj_ptrsÚuse_signed_tpos_enc_to_obj_ptrsÚsam_mask_decoder_extra_argsgš™™™™™©?g\�Âõ(\ï?)Údynamic_multimask_via_stabilityÚ!dynamic_multimask_stability_deltaÚ"dynamic_multimask_stability_thresh)Úinteractiver<   )
r   r	   r
   r   r   rP   r   Údictr®   r¯   )ry   r{   Úwith_backbonerÆ   rÅ   r¡   r²   s          rO   Úbuild_interactive_sam3ræ     s  € ô #¨2¸dÀD¸\ÔJ€NÜ&ØØØÜ"Ø ØØ!Ø'+Ø*/Ü#Ø!ØØ !Ø"Ø ˜8ôð Ü$Ø!ØØ !ØØ"Ø ˜8Ø"ôô
ð0 ô9ÐñB ô 	˜QÔ'>ÈGÔ'TÐ[_Õ`àð ô
 ò "Ùð"áð"ñ *ð"ñ &ð	"ñ
 ð"ñ ð"ñ #'ð"ñ "'ð"ñ .2ð"ñ #'ð"ñ &*ð"ñ !%ð"ñ $(ð"ñ !%ð"ñ "&ð"ñ  ,0ð!"ñ" ð#"ñ$ !ð%"ñ& ð'"ñ( '+ð)"ñ* )-ð+"ñ, ð-"ñ. ð/"ñ0 "&ð1"ñ2 $ð3"ñ4 "ð5"ñ6 #'ð7"ñ8 )-ð9"ô: %)Ø,0Ø.2Ø/3õ%
ð;"€EôJ ˜U OÀÔF€Eð 
‡J�J„LØ€LrQ   c           
      óª  — t        |d«      5 }t        |«      }ddd«       dv rt        |d   t        «      r|d   }|j	                  «       D ��ci c]  \  }}d|v sŒ|j                  dd«      |“Œ }}}|�r|j                  |j	                  «       D ��ci c]  \  }}d|v r|j                  dd«      |“Œ c}}«       |j                  |j	                  «       D ��ci c]  \  }}d	|v r|j                  d
d«      |“Œ c}}«       |j                  |j	                  «       D ��ci c]  \  }}d|v r|j                  dd«      |“Œ c}}«       |j                  |j	                  «       D ��ci c]  \  }}d|v sŒ|j                  dd«      |“Œ c}}«       | j                  |d¬«       | S # 1 sw Y   �Œ“xY wc c}}w c c}}w c c}}w c c}}w c c}}w )z%Load SAM3 model checkpoint from file.ÚrbNr²   Údetectorz	detector.Ú zbackbone.vision_backbonezimage_encoder.vision_backboneztracker.transformerztracker.transformer.encoderrÅ   ztracker.maskmem_backbonerÆ   ztracker.F)Ústrict)Úopenr   Ú
isinstancerä   ÚitemsÚreplaceÚupdateÚload_state_dict)r²   Ú
checkpointrã   ÚfÚckptÚkÚvÚsam3_image_ckpts           rO   r®   r®   _  sØ  € ä	ˆj˜$Ó	ð  1Ü˜!‹}ˆ÷à�$�œ: d¨7¡m´TÔ:Ø�G‰}ˆØAEÇÁÃ×a¹¸¸AÐQ[Ð_`ÒQ`�q—y‘y ¨bÓ1°1Ñ4Ða€OÑaÚØ×Ñð ,×1Ñ1Ó3÷á�A�qØ-°Ñ2ð —	‘	Ð4Ð6UÓVÐXYÑYóô	
ð 	×Ñð !ŸJ™J›L÷á�A�qØ(¨AÑ-ð —	‘	Ð7Ð9KÓLÈaÑOóô	
ð 	×Ñð !ŸJ™J›L÷á�A�qØ-°Ñ2ð —	‘	Ð4Ð6FÓGÈÑJóô	
ð 	×ÑÈÏÉË×iÁÀÀAÐYcÐghÒYh §	¡	¨*°bÓ 9¸1Ñ <ÓiÔjØ	×Ñ˜/°%ÐÔ8Ø€L÷;ñ üó bùóùóùóùó  js5   �F*ÁF7ÁF7Â!F=
Ã!G
Ä$!G	
Å+G
Å8G
Æ*F4)NT)TF)F)/Útorch.nnrv   Ú"ultralytics.nn.modules.transformerr   Úultralytics.utils.patchesr   Úmodules.blocksr   r   Úmodules.encodersr   Úmodules.memory_attentionr	   r
   Úmodules.samr   Úsam3.decoderr   r   Úsam3.encoderr   r   Úsam3.geometry_encodersr   Úsam3.maskformer_segmentationr   r   Úsam3.model_miscr   r   Ú
sam3.necksr   Úsam3.sam3_imager   Úsam3.text_encoder_ver   Úsam3.vitdetr   Úsam3.vl_combinerr   rP   rx   ÚstrÚboolr³   ræ   r®   r<   rQ   rO   ú<module>r     s•   ðõ
 å 2Ý 0ç @Ý +ß KÝ "ß Eß KÝ ;ß Qß BÝ *Ý .Ý /Ý Ý ,ñ+ÐRdó +ð\<MÐ"4ó <Mñ~x¨Cð xÀdð xÐ\`ó xñvZ¨Cð ZÐV_ó ZôzrQ   