Ë
    cQêjš"  ã            	       óÔ   — d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dlm
Z
  e j                  e«      Z G d„ de
j                  «      Z	 	 dde	d	ed
edefd„Zde	d	ed
edefd„Zy)é    N)ÚSAM2ImageEncoderÚrandom_sam2_input_image)ÚSAM2PromptEncoder)ÚSAM2Base)Únnc                   óô   ‡ — e Zd Z	 ddedededdfˆ fd„Z ej                  «       dej                  dej                  d	ej                  d
ej                  dej                  dej                  fd„«       Z	ˆ xZ
S )ÚSAM2MaskDecoderÚ	sam_modelÚmultimask_outputÚdynamic_multimask_via_stabilityÚreturnNc                 ó�   •— t         ‰| �  «        |j                  | _        |j                  | _        || _        || _        || _        y )N)	ÚsuperÚ__init__Úsam_mask_decoderÚmask_decoderÚsam_prompt_encoderÚprompt_encoderÚmodelr   r   )Úselfr
   r   r   Ú	__class__s       €úv/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/sam2/mask_decoder.pyr   zSAM2MaskDecoder.__init__   sC   ø€ ô 	‰ÑÔØ%×6Ñ6ˆÔØ'×:Ñ:ˆÔØˆŒ
Ø 0ˆÔØ/NˆÕ,ó    Úimage_features_0Úimage_features_1Úimage_embeddingsÚimage_peÚsparse_embeddingsÚdense_embeddingsc           	      óh  — | j                   j                  |||||j                  d   dkD  ||g¬«      \  }}}	}	| j                  r |dd…dd…dd…dd…f   }|dd…dd…f   }||fS | j                  r#| j                   j                  ||«      \  }}||fS |dd…dd…dd…dd…f   }|dd…dd…f   }||fS )a…  
        Decode masks from image and prompt embeddings. Only support H=W=1024.

        Args:
            image_features_0 (torch.Tensor): [1, 32, H/4, W/4]. high resolution features of level 0 from image encoder.
            image_features_1 (torch.Tensor): [1, 64, H/8, W/8]. high resolution features of level 1 from image encoder.
            image_embeddings (torch.Tensor): [1, 256, H/16, W/16]. image embedding from image encoder.
            image_pe (torch.Tensor): [1, 256, H/16, W/16]. image positional encoding.
            sparse_embeddings (torch.Tensor): [L, P+1, 256], embedding for points and boxes.
            dense_embeddings (torch.Tensor):  [L, 256, H/16, W/16]. embedding for input masks.

        Returns:
            low_res_masks (torch.Tensor, optional): [1, M, H/4, W/4]. low resolution masks.
            iou_predictions (torch.Tensor): [1, M]. scores for M masks.
        r   é   )r   r   Úsparse_prompt_embeddingsÚdense_prompt_embeddingsÚrepeat_imageÚhigh_res_featuresN)r   Úpredict_masksÚshaper   r   Ú _dynamic_multimask_via_stability)
r   r   r   r   r   r   r   Úlow_res_masksÚiou_predictionsÚ_s
             r   ÚforwardzSAM2MaskDecoder.forward   sü   € ð2 04×/@Ñ/@×/NÑ/NØ-ØØ%6Ø$4Ø*×0Ñ0°Ñ3°aÑ7Ø/Ð1AÐBð 0Oó 0
Ñ,ˆ�¨¨1ð × Ò Ø)ª!¨Q©R²²A¨+Ñ6ˆMØ-ªa°±¨eÑ4ˆOð ˜oÐ-Ð-ð ×1Ò1ð .2×->Ñ->×-_Ñ-_Ø˜ó.Ñ*ˆM˜?ð ˜oÐ-Ð-ð *ª!¨Q¨q¨S²!²Q¨,Ñ7ˆMØ-ªa°°1°¨fÑ5ˆOà˜oÐ-Ð-r   )T)Ú__name__Ú
__module__Ú__qualname__r   Úboolr   ÚtorchÚno_gradÚTensorr,   Ú__classcell__)r   s   @r   r	   r	      s¦   ø„ ð
 15ñ	OàðOð ðOð *.ð	Oð
 
õOð €U‡]�]ƒ_ð/.àŸ,™,ð/.ð  Ÿ,™,ð/.ð  Ÿ,™,ð	/.ð
 —,‘,ð/.ð !Ÿ<™<ð/.ð  Ÿ,™,ò/.ó ô/.r   r	   Ú
sam2_modelÚonnx_model_pathr   r   c                 óª  — t        | «      j                  «       }t        «       }t        | «      j                  «       } ||«      \  }}	}
t        j                  d|j                  «       t        j                  d|	j                  «       t        j                  d|
j                  «       d}d}t        j                  dd||dft        j                  ¬«      }t        j                  dd	||ft        j                  ¬«      }t        j                  |d	d
d
t        j                  ¬«      }t        j                  d	t        j                  ¬«      } |||||«      \  }}}t        j                  d|j                  «       t        j                  d|j                  «       t        j                  d|j                  «       t        | ||«      }||	|
|||f} ||Ž \  }}t        j                  d|j                  «       t        j                  d|j                  «       t        j                  «       5  |sJt        j                  dt        j                   j"                  ¬«       t        j                  dt$        ¬«       t        j&                  j)                  |||dddg d¢ddgdddœddiddiddidœ¬«	       d d d «       t+        d|«       y # 1 sw Y   ŒxY w)Nzimage_features_0.shape: %szimage_features_1.shape: %szimage_embeddings.shape: %sé   é   r   é   ©ÚlowÚhighÚsizeÚdtyper!   é   ©r?   zsparse_embeddings.shape: %szdense_embeddings.shape: %szimage_pe.shape: %szlow_res_masks.shape: %sziou_predictions.shape: %sÚignore)ÚcategoryTé   ©r   r   r   r   r   r   r)   r*   Ú
num_labelsznum_points+1)r   r!   )r   r   r)   r*   )Úexport_paramsÚopset_versionÚdo_constant_foldingÚinput_namesÚoutput_namesÚdynamic_axesz mask decoder onnx model saved to)r   Úcpur   r   ÚloggerÚinfor'   r1   ÚrandintÚfloatÚzerosÚonesr	   ÚwarningsÚcatch_warningsÚfilterwarningsÚjitÚTracerWarningÚUserWarningÚonnxÚexportÚprint)r5   r6   r   r   ÚverboseÚsam2_prompt_encoderÚimageÚsam2_encoderr   r   r   rF   Ú
num_pointsÚpoint_coordsÚpoint_labelsÚinput_masksÚhas_input_masksr   r   r   Úsam2_mask_decoderÚinputsr)   r*   s                           r   Úexport_mask_decoder_onnxrh   R   s|  € ô ,¨JÓ7×;Ñ;Ó=Ðä#Ó%€EÜ# JÓ/×3Ñ3Ó5€LÙ;GÈÓ;NÑ8ÐÐ&Ð(8Ü
‡K�KÐ,Ð.>×.DÑ.DÔEÜ
‡K�KÐ,Ð.>×.DÑ.DÔEÜ
‡K�KÐ,Ð.>×.DÑ.DÔEð €JØ€JÜ—=‘= Q¨T¸ÀZÐQRÐ8SÔ[`×[fÑ[fÔg€LÜ—=‘= Q¨Q°jÀ*Ð5MÔUZ×U`ÑU`Ôa€LÜ—+‘+˜j¨!¨S°#¼U¿[¹[ÔI€KÜ—j‘j ¬%¯+©+Ô6€Oá4GØ�l K°ó5Ñ1ÐÐ'¨ô ‡K�KÐ-Ð/@×/FÑ/FÔGÜ
‡K�KÐ,Ð.>×.DÑ.DÔEÜ
‡K�KÐ$ h§n¡nÔ5ä'¨
Ð4DÐFeÓfÐØÐ 0Ð2BÀHÐN_ÐaqÐr€FÙ%6¸Ð%?Ñ"€M�?Ü
‡K�KÐ)¨=×+>Ñ+>Ô?Ü
‡K�KÐ+¨_×-BÑ-BÔCä	×	 Ñ	 Ó	"ñ 
ÙÜ×#Ñ# H´u·y±y×7NÑ7NÕOÜ×#Ñ# H´{ÕCÜ�
‰
×ÑØØØØØØ $òð *Ð+<Ð=à)5¸.Ñ%IØ%&¨Ð$5Ø"# \Ð!2Ø$% |Ð#4ñ	ð! 	ô 	
÷	
ô8 
Ð
,¨oÕ>÷9
ð 
ús   È-BK	Ë	Kc           
      ó  — t        | «      j                  «       }t        «       }t        | «      j                  «       } ||«      \  }}}	d}
d}t	        j
                  dd|
|dft        j                  ¬«      }t	        j
                  dd|
|ft        j                  ¬«      }t	        j                  |
dddt        j                  ¬«      }t	        j                  dt        j                  ¬«      } |||||«      \  }}}t        | ||«      }|||	|||f} ||Ž \  }}dd l
}|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|«       |j'                  ||j)                  «       |j)                  «       |	j)                  «       |j)                  «       |j)                  «       |j)                  «       dœ«      }t+        |«      D ])  \  }}t         j#                  d|||   j,                  «       Œ+ |\  } }!t        j.                  j1                  |t	        j2                  | «      dd¬«       t        j.                  j1                  |t	        j2                  |!«      dd¬«       t5        d|› �«       y c c}w c c}w )Nr!   é   r   r:   r8   r;   r@   rA   ÚCPUExecutionProvider)Ú	providerszinput_names: %szoutput_names: %srE   zoutput %s shape: %sg{®Gázt?g-Cëâ6?)ÚatolÚrtolzonnx model has been verified: )r   rM   r   r   r1   rP   rQ   ÚrandrS   r	   ÚonnxruntimeÚInferenceSessionÚ
get_inputsÚrangeÚlenÚnamerN   rO   Úget_outputsÚrunÚnumpyÚ	enumerater'   ÚtestingÚassert_closeÚtensorr\   )"r5   r6   r   r   r^   r_   r`   r   r   r   rF   ra   rb   rc   rd   re   r   r   r   rf   rg   r)   r*   rp   Úort_sessionÚmodel_inputsÚirJ   Úmodel_outputsrK   ÚoutputsÚoutput_nameÚort_low_res_masksÚort_iou_predictionss"                                     r   Útest_mask_decoder_onnxr…   —   sÇ  € ô ,¨JÓ7×;Ñ;Ó=Ðä#Ó%€EÜ# JÓ/×3Ñ3Ó5€LÙ;GÈÓ;NÑ8ÐÐ&Ð(8à€JØ€JÜ—=‘= Q¨T¸ÀZÐQRÐ8SÔ[`×[fÑ[fÔg€LÜ—=‘= Q¨Q°jÀ*Ð5MÔUZ×U`ÑU`Ôa€LÜ—*‘*˜Z¨¨C°¼E¿K¹KÔH€KÜ—j‘j ¬%¯+©+Ô6€Oá4GØ�l K°ó5Ñ1ÐÐ'¨ô (¨
Ð4DÐFeÓfÐØÐ 0Ð2BÀHÐN_ÐaqÐr€FÙ%6¸Ð%?Ñ"€M�?ãà×.Ñ.¨Ð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à�o‰oØà 0× 6Ñ 6Ó 8Ø 0× 6Ñ 6Ó 8Ø 0× 6Ñ 6Ó 8Ø Ÿ™Ó(Ø!2×!8Ñ!8Ó!:Ø 0× 6Ñ 6Ó 8ñ	
ó
€Gô $ LÓ1ò J‰ˆˆ;Ü�‰Ð)¨;¸À¹
×8HÑ8HÕIðJð .5Ñ*ÐÐ*Ü	‡M�M×Ñ˜}¬e¯l©lÐ;LÓ.MÐTXÐ_cÐÔdÜ	‡M�M×Ñ˜´·±Ð=PÓ0QÐX\ÐcgÐÔhÜ	Ð*¨?Ð*;Ð
<Õ=ùò3 Kùò Ns   ÅK=Æ+L)TF)ÚloggingrT   r1   Úimage_encoderr   r   r   r   Úsam2.modeling.sam2_baser   r   Ú	getLoggerr-   rN   ÚModuler	   Ústrr0   rh   r…   © r   r   ú<module>r�      sŸ   ðó
 Û ã ß CÝ ,Ý ,Ý à	ˆ×	Ñ	˜8Ó	$€ô>.�b—i‘iô >.ðJ -1ØñB?ØðB?àðB?ð ðB?ð &*ó	B?ðJ9>Øð9>àð9>ð ð9>ð &*ô	9>r   