Ë
    cQêjP%  ã                   óØ   — d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlmZ d dl	Z	 e j                  e«      Z G d„ dej                  «      Z	 	 	 	 ddeded	ed
ededefd„Z	 ddedefd„Zy)é    N)ÚSAM2Base)Úcompare_tensors_with_toleranceÚrandom_sam2_input_image)Únnc            
       óœ   ‡ — e Zd Zdeddfˆ fd„Z	 ddej                  dedeej                  ej                  ej                  f   fd„Z	ˆ xZ
S )	ÚSAM2ImageEncoderÚ	sam_modelÚreturnNc                 ót   •— t         ‰| �  «        || _        |j                  | _        |j                  | _        y )N)ÚsuperÚ__init__ÚmodelÚimage_encoderÚno_mem_embed)Úselfr	   Ú	__class__s     €úw/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/sam2/image_encoder.pyr   zSAM2ImageEncoder.__init__   s1   ø€ Ü‰ÑÔØˆŒ
Ø&×4Ñ4ˆÔØ%×2Ñ2ˆÕó    ÚimageÚenable_nvtx_profilec           
      óþ  — d}|rddl m}  |ddg«      }|�|j                  d«       | j                  |«      }|�"|j	                  d«       |j                  d«       | j
                  j                  j                  |d   d   «      |d   d<   | j
                  j                  j                  |d   d   «      |d   d<   |d   | j
                  j                   d }|d   | j
                  j                   d }|D �cg c]   }|j                  d	   |j                  d
   f‘Œ" }	}|D �cg c]$  }|j                  d«      j                  ddd«      ‘Œ& }
}|
d
   | j                  z   |
d
<   t        |
ddd
…   |	ddd
…   d¬«      D ��cg c]*  \  }} |j                  ddd«      j                  dd
g|¢­Ž ‘Œ, c}}ddd
…   }|�!|j	                  d«       |j!                  «        |d   |d   |d   fS c c}w c c}w c c}}w )aè  
        Encodes images into features.

        Only supports H=W=1024. If you want to use different image sizes like 512x512,
        see https://github.com/facebookresearch/segment-anything-2/issues/138.

        Args:
            image (torch.Tensor): images of shape [B, 3, H, W], B is batch size, H and W are height and width.
            enable_nvtx_profile (bool): enable NVTX profiling.

        Returns:
            image_features_0: image features of shape [B, 32, H/4, W/4] - high resolution features of level 0
            image_features_1: image features of shape [B, 64, H/8, W/8] - high resolution features of level 1
            image_embeddings: image features of shape [B, 256, H/16, W/16] - 16 is the backbone_stride
        Nr   )Ú
NvtxHelperr   Úpost_processÚbackbone_fpné   Úvision_pos_encéþÿÿÿéÿÿÿÿé   F)Ústrict)Únvtx_helperr   Ústart_profiler   Ústop_profiler   Úsam_mask_decoderÚconv_s0Úconv_s1Únum_feature_levelsÚshapeÚflattenÚpermuter   ÚzipÚreshapeÚprint_latency)r   r   r   r!   r   Úbackbone_outÚfeature_mapsÚvision_pos_embedsÚxÚ
feat_sizesÚvision_featsÚfeatÚ	feat_sizeÚfeatss                 r   ÚforwardzSAM2ImageEncoder.forward   s-  € ð( ˆÙÝ.á$ o°~Ð%FÓGˆKàÐ"Ø×%Ñ% oÔ6à×)Ñ)¨%Ó0ˆàÐ"Ø×$Ñ$ _Ô5Ø×%Ñ% nÔ5ð +/¯*©*×*EÑ*E×*MÑ*MÈlÐ[iÑNjÐklÑNmÓ*nˆ�^Ñ$ QÑ'Ø*.¯*©*×*EÑ*E×*MÑ*MÈlÐ[iÑNjÐklÑNmÓ*nˆ�^Ñ$ QÑ'ð $ NÑ3°T·Z±Z×5RÑ5RÐ4RÐ4TÐUˆØ(Ð)9Ñ:¸D¿J¹J×<YÑ<YÐ;YÐ;[Ð\ÐØ:KÖL°Q�q—w‘w˜r‘{ A§G¡G¨B¡KÒ0ÐLˆ
ÐLð @LÖL¸!˜Ÿ	™	 !›×,Ñ,¨Q°°1Õ5ÐLˆÐLà'¨Ñ+¨d×.?Ñ.?Ñ?ˆ�RÑô $' |±D°b°DÑ'9¸:ÁdÈÀdÑ;KÐTYÔ#Z÷
á��ið *ˆD�L‰L˜˜A˜qÓ!×)Ñ)¨!¨RÐ<°)Ô<ó
ñ ˆBˆ$ñˆð
 Ð"Ø×$Ñ$ ^Ô4Ø×%Ñ%Ô'à�Q‰x˜˜q™ 5¨¡8Ð+Ð+ùò# Mùò Mùó
s   Ã=%G/Ä()G4Æ/G9©F)Ú__name__Ú
__module__Ú__qualname__r   r   ÚtorchÚTensorÚboolÚtupler7   Ú__classcell__)r   s   @r   r   r      sX   ø„ ð3 (ð 3¨tõ 3ð %*ñ<,à�|‰|ð<,ð "ð<,ð 
ˆu�|‰|˜UŸ\™\¨5¯<©<Ð7Ñ	8÷	<,r   r   Ú
sam2_modelÚonnx_model_pathÚdynamic_batch_axesÚverboseÚdynamoÚclear_dynamo_metadatac                 ó2  — t        «       }t        | «      j                  «       } ||«      \  }}	}
t        j	                  d|j
                  «       t        j	                  d|j
                  «       t        j	                  d|	j
                  «       t        j	                  d|
j
                  «       d }|rddiddiddiddidœ}t        j                  «       5  |sJt        j                  dt        j                  j                  ¬	«       t        j                  dt        ¬	«       |s-t        j                  j                  |||d
dd
dgg d¢|¬«	       �n%d
t        j                  j                   _        t        j                  j                  ||fddt        j                  j$                  j&                  ig¬«      }t        j                  j                  |dddgg d¢d
¬«      }|j)                  «        |j+                  |dz   d¬«       dd l}ddlm} |j1                  |dz   d
¬«      }|r¢d|j2                  j4                  d   j6                  j8                  j
                  j:                  d   _        t?        d«      D ]K  }d|j2                  j@                  |   j6                  j8                  j
                  j:                  d   _        ŒM  ||«      }|jC                  «        |r|jE                  «        dd l#}|jH                  jK                  |«      r|jM                  |«       |jH                  jK                  |dz   «      r|jM                  |dz   «       |jN                  jQ                  |d
d
d
¬«       d d d «       tS        d|«       y # 1 sw Y   ŒxY w)Núimage.shape: %súimage_features_0.shape: %súimage_features_1.shape: %súimage_embeddings.shape: %sr   Ú
batch_size)r   Úimage_features_0Úimage_features_1Úimage_embeddingsÚignore)ÚcategoryTé   r   )rM   rN   rO   )Úexport_paramsÚopset_versionÚdo_constant_foldingÚinput_namesÚoutput_namesÚdynamic_axesF)Úargsr    Údynamic_shapes© )rT   rV   rW   rE   z.dynamo.onnx)Úexternal_data)ÚDynamoOnnxHelper)Úload_external_dataé   z.data)Úuse_external_data_formatÚall_tensors_to_one_fileÚconvert_attributezencoder onnx model saved to)*r   r   ÚcpuÚloggerÚinfor(   ÚwarningsÚcatch_warningsÚfilterwarningsr<   ÚjitÚTracerWarningÚUserWarningÚonnxÚexportÚ_dynamoÚconfigÚcapture_scalar_outputsÚDimÚAUTOÚoptimizeÚsaveÚ+onnxruntime.transformers.dynamo_onnx_helperr]   Ú
load_modelÚgraphÚinputÚtypeÚtensor_typeÚdimÚ	dim_paramÚrangeÚoutputÚ!convert_constants_to_initializersÚclear_metadataÚosÚpathÚexistsÚremover   Úsave_model_to_fileÚprint)rA   rB   rC   rD   rE   rF   r   Úsam2_encoderrM   rN   rO   rX   ÚepÚonnx_programrl   r]   Ú
onnx_modelÚiÚonnx_model_helperr�   s                       r   Úexport_image_encoder_onnxr�   X   s+  € ô $Ó%€Eä# JÓ/×3Ñ3Ó5€LÙ;GÈÓ;NÑ8ÐÐ&Ð(8Ü
‡K�KÐ! 5§;¡;Ô/Ü
‡K�KÐ,Ð.>×.DÑ.DÔEÜ
‡K�KÐ,Ð.>×.DÑ.DÔEÜ
‡K�KÐ,Ð.>×.DÑ.DÔEà€LÙà˜Ð&Ø!" LÐ 1Ø!" LÐ 1Ø!" LÐ 1ñ	
ˆô 
×	 Ñ	 Ó	"ñ >ÙÜ×#Ñ# H´u·y±y×7NÑ7NÕOÜ×#Ñ# H´{ÕCáÜ�J‰J×ÑØØØØ"Ø Ø$(Ø$˜IÚYØ)ð ö 
ð ;?ŒE�M‰M× Ñ Ô7Ü—‘×$Ñ$ØØ�XØàœŸ™×(Ñ(×-Ñ-Ð.ð ð	 %ó ˆBô !Ÿ:™:×,Ñ,ØØØ Ø$˜IÚYØð -ó ˆLð ×!Ñ!Ô#Ø×Ñ˜o°Ñ>ÈeÐÔTÛåTàŸ™¨¸>Ñ)IÐ^b˜ÓcˆJÙ!àT`�
× Ñ ×&Ñ& qÑ)×.Ñ.×:Ñ:×@Ñ@×DÑDÀQÑGÔQÜ˜q›ò f�AØYe�J×$Ñ$×+Ñ+¨AÑ.×3Ñ3×?Ñ?×EÑE×IÑIÈ!ÑLÕVðfñ !1°Ó <ÐØ×?Ñ?ÔAÙ$Ø!×0Ñ0Ô2ãà�w‰w�~‰~˜oÔ.Ø—	‘	˜/Ô*Ø�w‰w�~‰~˜o°Ñ7Ô8Ø—	‘	˜/¨GÑ3Ô4Ø×#Ñ#×6Ñ6Ø¸$ÐX\Ðptð 7ô ÷y>ô@ 
Ð
'¨Õ9÷A>ð >ús   ÃJ!NÎNc                 ó
  — t        j                  |dg¬«      }|j                  «       }t        t	        |«      «      D �cg c]  }||   j
                  ‘Œ }}t        j                  d|«       |j                  «       }t        t	        |«      «      D �cg c]  }||   j
                  ‘Œ }}t        j                  d|«       |rddgndg}	|	D �]ª  }
t        |
«      }t        | «      j                  «       } ||j                  «       «      \  }}}t        j                  d|j                  «       t        j                  d|j                  «       t        j                  d	|j                  «       t        j                  d
|j                  «       |j                  |d|j                  «       i«      }t!        |«      D ])  \  }}t        j                  d|||   j                  «       Œ+ |\  }}}t#        d|t%        j&                  |«      d¬«      rWt#        d|t%        j&                  |«      d¬«      r5t#        d|t%        j&                  |«      d¬«      rt)        d|
› d|› �«       �Œšt)        d|
› d|› �«       �Œ­ y c c}w c c}w )NÚCPUExecutionProvider)Ú	providerszinput_names: %szoutput_names: %sr   r   rH   rI   rJ   rK   r   zoutput %s shape %srM   )Úmismatch_percentage_tolerancerN   rO   z,onnx model has been verified for batch_size=z: z.onnx model verification failed for batch_size=)ÚonnxruntimeÚInferenceSessionÚ
get_inputsr}   ÚlenÚnamerd   re   Úget_outputsr   r   rc   Úcloner(   ÚrunÚnumpyÚ	enumerater   r<   Útensorr†   )rA   rB   rC   Úort_sessionÚmodel_inputsr‹   rV   Úmodel_outputsrW   Úbatch_sizesrL   r   r‡   rM   rN   rO   ÚoutputsÚoutput_nameÚort_image_features_0Úort_image_features_1Úort_image_embeddingss                        r   Útest_image_encoder_onnxr¦   µ   sL  € ô
 ×.Ñ.¨ÐKaÐJbÔc€Kà×)Ñ)Ó+€LÜ16´s¸<Ó7HÓ1IÖJ¨A�< ‘?×'Ó'ÐJ€KÐJÜ
‡K�KÐ! ;Ô/à×+Ñ+Ó-€MÜ38¼¸]Ó9KÓ3LÖM¨a�M !Ñ$×)Ó)ÐM€LÐMÜ
‡K�KÐ" LÔ1á.�1�a‘&°Q°C€KØ!ó 'dˆ
Ü'¨
Ó3ˆä'¨
Ó3×7Ñ7Ó9ˆÙ?KÈEÏKÉKËMÓ?ZÑ<ÐÐ*Ð,<ä�‰Ð% u§{¡{Ô3Ü�‰Ð0Ð2B×2HÑ2HÔIÜ�‰Ð0Ð2B×2HÑ2HÔIÜ�‰Ð0Ð2B×2HÑ2HÔIà—/‘/ ,°¸%¿+¹+»-Ð0HÓIˆÜ'¨Ó5ò 	M‰NˆAˆ{Ü�K‰KÐ,¨k¸7À1¹:×;KÑ;KÕLð	MàKRÑHÐÐ2Ð4Hô +Ø"Ø Ü—‘Ð1Ó2Ø./õ	ô /Ø"Ø Ü—‘Ð1Ó2Ø./õ	ô /Ø"Ø Ü—‘Ð1Ó2Ø./õ	ô Ð@ÀÀÈBÈÐN_Ð`ÖaäÐBÀ:À,ÈbÐQ`ÐPaÐbÖcñO'dùò Kùò Ns   ¿I;ÂJ )FFFFr8   )Úloggingrf   r<   Úsam2.modeling.sam2_baser   Ú
sam2_utilsr   r   r   r’   Ú	getLoggerr9   rd   ÚModuler   Ústrr>   r�   r¦   r[   r   r   ú<module>r­      s±   ðó
 Û ã Ý ,ß NÝ ã à	ˆ×	Ñ	˜8Ó	$€ôC,�r—y‘yô C,ðR  %ØØØ"'ñZ:ØðZ:àðZ:ð ðZ:ð ð	Z:ð
 ðZ:ð  óZ:ð@ ñ7dØð7dàô7dr   