Ë
    FêñimY  ã                  óÄ   — d Z ddlmZ ddlZddlZ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  G d„ dej$                  «      Z G d„ dej$                  «      Zy)zR
Transformer decoder.
Inspired from Pytorch's version, adds the pre-norm variant.
é    )ÚannotationsN)Únn)ÚRoIAlign)ÚMLP)Ú_get_clonesÚinverse_sigmoid)Ú	xywh2xyxyé   )Úgen_sineembed_for_positionc                  óœ   ‡ — e Zd ZdZ	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zed„ «       Zd„ Z	 	 	 	 	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„Zd„ Z	ˆ xZ
S )ÚTransformerDecoderLayerz[TransformerDecoderLayer is made up of self-attn, cross-attn, and feedforward network (FFN).c                ó"  •— t         ‰| �  «        || _        |dkD  rt        j                  |«      nt        j
                  «       | _        t        j                  |«      | _        || _	        |rjt        j                  |||¬«      | _        |dkD  rt        j                  |«      nt        j
                  «       | _        t        j                  |«      | _        t        j                  |||¬«      | _        |dkD  rt        j                  |«      nt        j
                  «       | _        t        j                  |«      | _        t        j"                  ||«      | _        t        j&                  «       | _        |dkD  rt        j                  |«      nt        j
                  «       | _        t        j"                  ||«      | _        |dkD  rt        j                  |«      nt        j
                  «       | _        t        j                  |«      | _        y)z'Initialize the TransformerDecoderLayer.r   )ÚdropoutN)ÚsuperÚ__init__Ú
cross_attnr   ÚDropoutÚIdentityÚdropout1Ú	LayerNormÚnorm1Úuse_text_cross_attentionÚMultiheadAttentionÚca_textÚcatext_dropoutÚcatext_normÚ	self_attnÚdropout2Únorm2ÚLinearÚlinear1ÚReLUÚ
activationÚdropout3Úlinear2Údropout4Únorm3)ÚselfÚd_modelÚdim_feedforwardr   Úcross_attentionÚn_headsr   Ú	__class__s          €úe/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/models/sam/sam3/decoder.pyr   z TransformerDecoderLayer.__init__   s^  ø€ ô 	‰ÑÔà)ˆŒØ/6¸ª{œŸ
™
 7Ô+ÄÇÁÃˆŒÜ—\‘\ 'Ó*ˆŒ
ð )AˆÔ%Ù#Ü×0Ñ0°¸'È7ÔSˆDŒLØ9@À1º¤"§*¡*¨WÔ"5Ì"Ï+É+Ë-ˆDÔÜ!Ÿ|™|¨GÓ4ˆDÔô ×.Ñ.¨w¸ÈÔQˆŒØ/6¸ª{œŸ
™
 7Ô+ÄÇÁÃˆŒÜ—\‘\ 'Ó*ˆŒ
ô —y‘y ¨/Ó:ˆŒÜŸ'™'›)ˆŒØ/6¸ª{œŸ
™
 7Ô+ÄÇÁÃˆŒÜ—y‘y °'Ó:ˆŒØ/6¸ª{œŸ
™
 7Ô+ÄÇÁÃˆŒÜ—\‘\ 'Ó*ˆ�
ó    c                ó   — |€| S | |z   S )z'Add positional embedding to the tensor.© )ÚtensorÚposs     r.   Úwith_pos_embedz&TransformerDecoderLayer.with_pos_embed>   s   € ð ˜ˆvÐ6¨&°3©,Ð6r/   c           	     óÌ   — | j                  | j                  | j                  | j                  |«      «      «      «      }|| j	                  |«      z   }| j                  |«      }|S )z!Feedforward network forward pass.)r%   r$   r#   r!   r&   r'   )r(   ÚtgtÚtgt2s      r.   Úforward_ffnz#TransformerDecoderLayer.forward_ffnC   sP   € à�|‰|˜DŸM™M¨$¯/©/¸$¿,¹,ÀsÓ:KÓ*LÓMÓNˆØ�D—M‘M $Ó'Ñ'ˆØ�j‰j˜‹oˆØˆ
r/   c           
     ó   — | j                  |||
|||«      \  }}| j                  r| j                  | j                  ||«      |j	                  |j
                  «      |j	                  |j
                  «      |¬«      d   }|| j                  |«      z   }| j                  |«      }|�:t        j                  |	dd…dd…dd…f   «      }t        j                  ||	gd¬«      }	| j                  | j                  ||«      | j                  ||«      ||	|�|j                  dd«      ndd¬«      d   }|| j                  |«      z   }| j                  |«      }| j                  |j	                  |j
                  «      «      }d}|�
|dd }|dd }||fS )z,Forward pass of the TransformerDecoderLayer.)Úkey_padding_maskr   Nr
   ©ÚdimF)ÚqueryÚkeyÚvalueÚ	attn_maskr:   Úneed_weights)Ú_apply_self_attentionr   r   r4   ÚtoÚdtyper   r   ÚtorchÚ
zeros_likeÚcatr   Ú	transposer   r   r8   )r(   r6   Útgt_query_posÚmemory_textÚtext_attention_maskÚmemoryÚmemory_key_padding_maskÚ
memory_posÚself_attn_maskÚcross_attn_maskÚdacÚdac_use_selfatt_lnÚpresence_tokenÚkwargsr7   Úpresence_token_maskÚpresence_token_outs                    r.   ÚforwardzTransformerDecoderLayer.forwardJ   s·  € ð. "×7Ñ7Ø� Ð%7¸Èó
Ñˆˆ]ð ×(Ò(Ø—<‘<Ø×#Ñ# C¨Ó7Ø—‘˜sŸy™yÓ)Ø—‘˜sŸy™yÓ)Ø!4ð	  ó ð
 ñˆDð ˜×+Ñ+¨DÓ1Ñ1ˆCØ×"Ñ" 3Ó'ˆCàÐ%Ü"'×"2Ñ"2°?Â1ÀbÀqÀbÊ!À8Ñ3LÓ"MÐÜ#Ÿi™iÐ)<¸oÐ(NÐTUÔVˆOð �‰Ø×%Ñ% c¨=Ó9Ø×#Ñ# F¨JÓ7ØØ%ØI`ÐIlÐ5×?Ñ?ÀÀ1ÔEÐrvØð ó 
ð ñˆð �D—M‘M $Ó'Ñ'ˆØ�j‰j˜‹oˆð ×Ñ˜sŸv™v f§l¡lÓ3Ó4ˆà!ÐØÐ%Ø!$ R a ÐØ�a�b�'ˆCàÐ&Ð&Ð&r/   c                ó(  — | j                   €|S |r>|j                  d   dz  dk(  sJ d«       ‚|j                  d   dz  }|d| }|d| }	||d }
n|}|}	|�Št        j                  ||gd¬«      }t        j                  t        j                  |«      |	gd¬«      j                  |j                  «      }	t        j                  t        j                  |«      |gd¬«      }| j                  ||	«      x}}| j                  ||||¬«      d   j                  |j                  «      }|| j                  |«      z   }|rC|s| j                  |«      }t        j                  |
fd¬«      }|r| j                  |«      }||fS |}| j                  |«      }||fS )z1Apply self-attention with optional DAC splitting.Nr   é   z#DAC requires even number of queriesr;   )r@   )
r   ÚshaperE   rG   rF   rC   rD   r4   r   r   )r(   r6   rI   rQ   rR   rS   rO   Únum_o2o_queriesÚtgt_o2oÚtgt_query_pos_o2oÚtgt_o2mÚqÚkr7   s                 r.   rB   z-TransformerDecoderLayer._apply_self_attentionŠ   s­  € à�>‰>Ð!ØˆJáà—9‘9˜Q‘< !Ñ# qÒ(ÐOÐ*OÓOÐ(Ø!Ÿi™i¨™l¨aÑ/ˆOØÐ*˜?Ð+ˆGØ -Ð.>¨Ð ?ÐØ˜/Ð*Ð+‰GàˆGØ -Ðð Ð%Ü—i‘i °Ð 9¸qÔAˆGÜ %§	¡	¬5×+;Ñ+;¸NÓ+KÐM^Ð*_ÐefÔ g× jÑ jØ—‘ó!Ðô "ŸI™I¤u×'7Ñ'7¸Ó'GÈÐ&WÐ]^Ô_ˆMð ×#Ñ# GÐ->Ó?Ð?ˆˆAØ�~‰~˜a  G°~ˆ~ÓFÀqÑI×LÑLÈSÏYÉYÓWˆØ˜DŸM™M¨$Ó/Ñ/ˆñ Ù%ØŸ*™* WÓ-�Ü—)‘)˜W gÐ.°AÔ6ˆCÙ!Ø—j‘j “o�ð
 �MÐ!Ð!ð ˆCØ—*‘*˜S“/ˆCà�MÐ!Ð!r/   )F)r)   Úintr*   ra   r   Úfloatr+   z	nn.Moduler,   ra   r   Úbool)NNNNNNNNFTN)r6   útorch.TensorrI   rd   rJ   rd   rK   rd   rL   rd   rM   rd   rN   rd   rO   rd   rP   rd   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústaticmethodr4   r8   rW   rB   Ú__classcell__©r-   s   @r.   r   r      sì   ø„ Ùeð */ð"+àð"+ð ð"+ð ð	"+ð
 #ð"+ð ð"+ð #'õ"+ðH ñ7ó ð7òð '+Ø$(Ø,0à#Ø04Ø#'à'+Ø(,àØØð#>'ð ð>'ð $ð	>'ð
 "ð>'ð *ð>'ð ð>'ð ".ð>'ð !ð>'ð %ð>'ð &ó>'ö@("r/   r   c                  óö   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zed„ «       Zd„ Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„Zˆ xZ	S )
ÚTransformerDecoderz2Transformer Decoder consisting of multiple layers.c                ó	  •— t         ‰| �  «        || _        t        ||«      | _        |�t        ||«      ndg|z  | _        || _        || _        |
| _        |
r
|| _	        |}n|	| _	        ||	z   }t        j                  |«      | _        || _        t        ||dd«      | _        t        j                   ||«      | _        d| _        d| _        || _        || _        || _        |rt        j                  |«      nd| _        d| _        |rt        ||dd«      | _        |rt        j                   ||«      | _        || _        |rÎt        j4                  j7                  | j                  j                  d   j8                  j:                  d«       t        j4                  j7                  | j                  j                  d   j<                  j:                  d«       t        j                   |d«      | _        |rt        j                   |d«      | _         |dv sJ ‚|| _!        |dk7  rh	 | j                  d   jD                  jF                  }|dk(  rdnd	}t        |||d	«      | _&        t        |||d	«      | _'        d| _(        d| _)        i | _*        |�tW        d
ddd¬«      nd| _,        |r&| j[                  «       D ]  }|j]                  d«       Œ d| _/        || _0        || _1        |rHt        j                   d|«      | _/        t        ||dd«      | _2        t        j                  |«      | _3        t        d	| j                  z  | j                  | j                  d	«      | _4        || _5        || _6        t        j4                  jo                  | j"                  j8                  j:                  «       | j$                  �=t        j4                  jo                  | j$                  j8                  j:                  «       | jX                  �J ‚| j                  sJ d«       ‚| j2                  sJ d«       ‚|| _8        d| _9        tu        | j                  «      D ]  \  }}||_;        Œ y# tH        $ r' | j                  d   jJ                  jF                  }Y �ŒAw xY w)z"Initialize the TransformerDecoder.Né   é   éÿÿÿÿr   )ÚnoneÚlogÚlinearÚbothrr   ru   rY   é   r
   T)Úoutput_sizeÚspatial_scaleÚsampling_ratioÚalignedFz support return_intermediate onlyzsupport box refine only)<r   r   r)   r   ÚlayersÚfine_layersÚ
num_layersÚnum_queriesrQ   Únum_o2m_queriesr   r   ÚnormÚreturn_intermediater   Ú
bbox_embedÚ	EmbeddingÚquery_embedÚinstance_query_embedÚinstance_query_reference_pointsÚuse_instance_queryÚnum_instancesÚuse_normed_output_consistentlyÚinstance_normÚinstance_bbox_embedÚ
box_refineÚinitÚ	constant_ÚweightÚdataÚbiasÚreference_pointsÚinstance_reference_pointsÚboxRPBÚcross_attn_imageÚ	num_headsÚAttributeErrorr   ÚboxRPB_embed_xÚboxRPB_embed_yÚcompilable_cord_cacheÚcompilable_stored_sizeÚcoord_cacher   Ú
roi_poolerÚ
parametersÚrequires_grad_rS   Úclamp_presence_logitsÚclamp_presence_logit_max_valÚpresence_token_headÚpresence_token_out_normÚref_point_headrR   Úuse_act_checkpointÚnormal_Úcompile_modeÚcompiledÚ	enumerateÚ	layer_idx)r(   r)   ÚfrozenÚinteraction_layerÚlayerr}   r~   r�   rŒ   r   rQ   r”   Úinstance_queryrˆ   rR   r¥   r§   rS   r    r¡   r‰   Úseparate_box_head_instanceÚseparate_norm_instanceÚtot_num_queriesÚnheadsÚn_inputÚprª   r-   s                               €r.   r   zTransformerDecoder.__init__¸   s	  ø€ ô: 	‰ÑÔØˆŒÜ! %¨Ó4ˆŒà:KÐ:WŒKÐ)¨:Ô6Ð^bÐ]cÐfpÑ]pð 	Ôð %ˆŒØ&ˆÔØˆŒÙØ#.ˆDÔ Ø)‰Oà#2ˆDÔ Ø)¨OÑ;ˆOÜ—L‘L Ó)ˆŒ	Ø#6ˆÔ Ü˜g w°°1Ó5ˆŒÜŸ<™<¨¸ÓAˆÔØ$(ˆÔ!Ø/3ˆÔ,Ø"0ˆÔØ*ˆÔØ.LˆÔ+á6LœRŸ\™\¨'Ô2ÐRVˆÔØ#'ˆÔ Ù%Ü'*¨7°G¸QÀÓ'BˆDÔ$ÙÜ(*¯©°]ÀGÓ(LˆDÔ%Ø$ˆŒÙÜ�G‰G×Ñ˜dŸo™o×4Ñ4°RÑ8×?Ñ?×DÑDÀaÔHÜ�G‰G×Ñ˜dŸo™o×4Ñ4°RÑ8×=Ñ=×BÑBÀAÔFä$&§L¡L°¸aÓ$@ˆDÔ!ÙÜ13·±¸mÈQÓ1O�Ô.àÐ:Ñ:Ð:Ð:ØˆŒØ�VÒð=ØŸ™ Q™×8Ñ8×BÑB�ð " VÒ+‘a°ˆGÜ"% g¨w¸ÀÓ"BˆDÔÜ"% g¨w¸ÀÓ"BˆDÔØ)-ˆDÔ&Ø*.ˆDÔ'Ø!ˆDÔð !Ð,ô  °!ÀBÐPTÕUàð 	Œñ
 Ø—_‘_Ó&ò (�Ø× Ñ  Õ'ð(ð #ˆÔØ%:ˆÔ"Ø,HˆÔ)ÙÜ"$§,¡,¨q°'Ó":ˆDÔÜ'*¨7°G¸QÀÓ'BˆDÔ$Ü+-¯<©<¸Ó+@ˆDÔ(ä! ! d§l¡lÑ"2°D·L±LÀ$Ç,Á,ÐPQÓRˆÔØ"4ˆÔØ"4ˆÔä
�‰�‰˜×(Ñ(×/Ñ/×4Ñ4Ô5Ø×$Ñ$Ð0Ü�G‰G�O‰O˜D×5Ñ5×<Ñ<×AÑAÔBà�‰Ð&Ð&Ð&Ø×'Ò'ÐKÐ)KÓKÐ'Ø�ŠÐ9Ð 9Ó9ˆà(ˆÔØˆŒô !*¨$¯+©+Ó 6ò 	(ÑˆI�uØ'ˆE�Oñ	(øô] "ò =ØŸ™ Q™×2Ñ2×<Ñ<“ð=ús   È!#Q Ñ,RÒRc                óz   — t        j                  d| ||¬«      | z  }t        j                  d|||¬«      |z  }||fS )z0Get normalized coordinates for height and width.r   )rD   Údevice)rE   Úarange)ÚHÚWr¶   rD   Úcoords_hÚcoords_ws         r.   Ú_get_coordszTransformerDecoder._get_coords3  sA   € ô —<‘<  1¨E¸&ÔAÀAÑEˆÜ—<‘<  1¨E¸&ÔAÀAÑEˆØ˜Ð!Ð!r/   c                ó<  — |\  }}t        |«      j                  dd«      }|j                  \  }}}| j                  €6| j	                  |||j
                  |j                  «      | _        ||f| _        t        j                  j                  «       s| j                  ||fk(  r| j                  \  }	}
ny|| j                  vr5| j	                  |||j
                  |j                  «      | j                  |<   | j                  |   \  }	}
|	j                  |fk(  sJ ‚|
j                  |fk(  sJ ‚|	j                  ddd«      |j                  ddd«      dd…dd…ddd…f   z
  }|j                  ||dd«      }|
j                  ddd«      |j                  ddd«      dd…dd…ddd…f   z
  }|j                  ||dd«      }| j                  dv rþ|d	z  }t        j                  |«      t        j                   t        j"                  |«      d
z   «      z  t%        j                   d	«      z  }|d	z  }t        j                  |«      t        j                   t        j"                  |«      d
z   «      z  t%        j                   d	«      z  }| j                  dk(  r|}|}n2t        j&                  ||gd¬«      }t        j&                  ||gd¬«      }| j(                  r| j*                  sJ d«       ‚| j-                  |¬«      }| j/                  |¬«      }t        j                  j                  «       s.|j                  dd |||fk(  sJ ‚|j                  dd |||fk(  sJ ‚|j1                  d«      |j1                  d«      z   }t        j                  j                  «       s|j                  dd ||||fk(  sJ ‚|j3                  dd«      }|j5                  dddd«      }|j7                  «       }t        j                  j                  «       s|j                  dd |||z  fk(  sJ ‚|S )zKGet the relative position bias (RPB) matrix for box-relative position bias.r   r
   Nrq   ro   rY   rp   )rs   ru   é   g      ð?rs   r;   z&activation ckpt not enabled in decoder)Úx)r	   rH   rZ   rš   r¼   r¶   rD   r›   rE   ÚcompilerÚis_dynamo_compilingrœ   ÚviewÚreshaper”   ÚsignÚlog2ÚabsÚnprG   Útrainingr¥   r˜   r™   Ú	unsqueezeÚflattenÚpermuteÚ
contiguous)r(   Úreference_boxesÚ	feat_sizer¸   r¹   Ú
boxes_xyxyÚbsr~   Ú_rº   r»   Údeltas_yÚdeltas_xÚdeltas_x_logÚdeltas_y_logÚBs                   r.   Ú_get_rpb_matrixz"TransformerDecoder._get_rpb_matrix:  så  € à‰ˆˆ1Ü˜Ó/×9Ñ9¸!¸QÓ?ˆ
Ø'×-Ñ-ÑˆˆK˜Ø×%Ñ%Ð-Ø)-×)9Ñ)9¸!¸QÀ×@VÑ@VÐXg×XmÑXmÓ)nˆDÔ&Ø+,¨a¨&ˆDÔ'ä�>‰>×-Ñ-Ô/°4×3NÑ3NØØðS
ò 4
ð
 "&×!;Ñ!;ÑˆH‘hð  × 0Ñ 0Ñ0Ø.2×.>Ñ.>¸qÀ!À_×E[ÑE[Ð]l×]rÑ]rÓ.s�× Ñ  Ñ+Ø!%×!1Ñ!1°)Ñ!<ÑˆH�hà—>‘> a TÒ)Ð)Ð)Ø—>‘> a TÒ)Ð)Ð)à—=‘=  B¨Ó*¨Z×-?Ñ-?ÀÀAÀqÓ-IÊ!ÊQÐPQÐRSÐTUÐPUÈ+Ñ-VÑVˆØ—=‘=  [°"°aÓ8ˆØ—=‘=  B¨Ó*¨Z×-?Ñ-?ÀÀAÀqÓ-IÊ!ÊQÐPQÐRSÐTUÐPUÈ+Ñ-VÑVˆØ—=‘=  [°"°aÓ8ˆà�;‰;˜/Ñ)Ø# a™<ˆLÜ Ÿ:™: lÓ3´e·j±jÄÇÁÈ<ÓAXÐ[^ÑA^Ó6_Ñ_Ôbd×biÑbiÐjkÓblÑlˆLà# a™<ˆLÜ Ÿ:™: lÓ3´e·j±jÄÇÁÈ<ÓAXÐ[^ÑA^Ó6_Ñ_Ôbd×biÑbiÐjkÓblÑlˆLØ�{‰{˜eÒ#Ø'�Ø'‘ä Ÿ9™9 h°Ð%=À2ÔF�Ü Ÿ9™9 h°Ð%=À2ÔF�à�=Š=Ø×*Ò*ÐTÐ,TÓTÐ*Ø×&Ñ&¨Ð&Ó2ˆØ×&Ñ&¨Ð&Ó2ˆä�~‰~×1Ñ1Ô3Ø—>‘> " 1Ð%¨"¨k¸1Ð)=Ò=Ð=Ð=Ø—>‘> " 1Ð%¨"¨k¸1Ð)=Ò=Ð=Ð=à×Ñ˜qÓ! H×$6Ñ$6°qÓ$9Ñ9ˆÜ�~‰~×1Ñ1Ô3Ø—7‘7˜2˜A�; 2 {°A°qÐ"9Ò9Ð9Ð9Ø�I‰I�a˜‹OˆØ�I‰I�a˜˜A˜qÓ!ˆØ�L‰L‹NˆÜ�~‰~×1Ñ1Ô3Ø—7‘7˜1˜2�; ;°°A±Ð"6Ò6Ð6Ð6Øˆr/   c                ó´
  — |�| j                   dk(  sJ d«       ‚|�|n| j                  }|rÈ|j                  d   | j                  k(  s4| j                  r&|j                  d   | j
                  j                  k(  sJ ‚|j                  ddd«      }|�c|j                  d   | j                  k(  s4| j                  r&|j                  d   | j
                  j                  k(  sJ ‚|j                  ddd«      }|j                  d   }g }g }d}| j                  rc|€]| j                  j                  j                  d«      }|r|j                  d|d«      n|j                  d|d«      }|j                  «       }|g}nd}d}|}d}| j                  �.|du r*| j                  j                  d   j                  d|d«      }| j                  }|r| j                   �| j                   }| j"                  }|r| j$                  �| j$                  }t'        | j(                  «      D �]™  \  }}|dd…dd…df   t+        j,                  |	|	gd«      ddd…f   z  }t/        |dd…dd…ddd…f   | j0                  «      }| j3                  |«      }| j                   dk7  rG|�E|j                  d   dk(  sJ d	«       ‚| j5                  ||d
   |d   f«      }|j7                  dd«      }| j8                  r| j:                  sJ d«       ‚ |d|||
|||||||| j<                  |dœ|xs i ¤||dœ¤Ž\  }}| j                  rÍt?        |«      } |€$| j@                  s	 ||«      }!nb | ||«      «      }!nS|d   }"|jC                  d«      |"k\  sJ ‚| j                  |d|" «      }# |||"d «      }$t+        j,                  |#|$gd¬«      }!|!| z   }%|%j                  «       }&|&jE                  «       }|| jF                  dz
  k7  r|jI                  |&«       ntK        d«      ‚|jI                   ||«      «       | j                  €�Œ|du s�Œ| jM                  | jO                  |«      «      jQ                  d«      }'| jR                  r(|'jU                  | jV                   | jV                  ¬«       |jI                  |'«       |jY                  «       }�Œœ | jZ                  sD| j\                  �8t+        j^                  | j`                  | j\                  d¬«      | _0        d| _-        t+        jb                  |«      t+        jb                  |«      | j                  �|du rt+        jb                  |«      |fS d|fS )z'Forward pass of the TransformerDecoder.Nrr   zOinputting a memory_mask in the presence of boxRPB is unexpected/not implementedr   rY   r
   Frq   z%only single scale support implemented)r   r   )r   r
   z3Activation checkpointing not enabled in the decoder)r6   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   )Úobj_roi_memory_featÚobj_roi_memory_maskÚQ_detr;   znot implemented yet)ÚminÚmaxT)ÚmodeÚ	fullgraphr1   )2r”   rQ   rZ   r~   r‡   r…   Únum_embeddingsÚrepeatrŒ   r’   r�   rÉ   ÚsigmoidrS   Úexpandr‚   r‹   r€   rŠ   r©   r{   rE   rG   r   r)   r¤   r×   rÊ   rÈ   r¥   rR   r   r‰   ÚsizeÚdetachr}   ÚappendÚNotImplementedErrorr¢   r£   Úsqueezer    Úclamp_r¡   Úcloner¨   r§   ÚcompilerW   Ústack)(r(   r6   rL   Útgt_maskÚmemory_maskrM   r3   rÍ   Úspatial_shapesÚvalid_ratiosrJ   rK   Ú	apply_dacÚis_instance_promptÚdecoder_extra_kwargsrÙ   rÚ   Úbox_head_trkrÐ   ÚintermediateÚintermediate_presence_logitsÚpresence_featsÚintermediate_ref_boxesÚoutputÚpresence_outÚbox_headÚout_normrª   r­   Úreference_points_inputÚquery_sine_embedÚ	query_posÚreference_before_sigmoidÚdelta_unsigrÛ   Údelta_unsig_detÚdelta_unsig_trkÚoutputs_unsigÚnew_reference_pointsÚ"intermediate_layer_presence_logitss(                                           r.   rW   zTransformerDecoder.forwardx  sª  € ð2 Ð"Ø—;‘; &Ò(ð ØaóÐ(ð "+Ð!6‘I¸D¿H¹Hˆ	ÙØ—I‘I˜a‘L D×$4Ñ$4Ò4Ø×'Ò'¨S¯Y©Y°q©\¸T×=VÑ=V×=eÑ=eÒ-eðð ð —*‘*˜Q  1Ó%ˆCð Ð*Ø'×-Ñ-¨aÑ0°D×4DÑ4DÒDØ×+Ò+°×1FÑ1FÀqÑ1IÈT×MfÑMf×MuÑMuÒ1uðð ð #2×"8Ñ"8¸¸A¸qÓ"A�à�Y‰Y�q‰\ˆØˆØ')Ð$Øˆà�?Š?ØÐ&à"&×"7Ñ"7×">Ñ">×"HÑ"HÈÓ"K�ÙFO /×"8Ñ"8¸¸BÀÔ"BÐUd×UkÑUkÐlmÐoqÐstÓUu�Ø"1×"9Ñ"9Ó";�Ø&5Ð%6Ñ"à"ˆOØ%)Ð"àˆØˆØ×ÑÐ*Ð/AÀUÑ/Jà×.Ñ.×5Ñ5°dÑ;×BÑBÀ1ÀbÈ"ÓMˆLà—?‘?ˆÙ $×":Ñ":Ð"FØ×/Ñ/ˆHà—9‘9ˆÙ $×"4Ñ"4Ð"@Ø×)Ñ)ˆHä )¨$¯+©+Ó 6ó P	6ÑˆI�uà¢¢1 d 
Ñ+¬e¯i©i¸À|Ð8TÐVXÓ.YÐZ^Ò`aÐZaÑ.bÑbð #ô  :Ø&¢qª!¨Q² zÑ2°D·L±Ló Ðð
 ×+Ñ+Ð,<Ó=ˆIà�{‰{˜fÒ$¨Ð)DØ%×+Ñ+¨AÑ.°!Ò3Ð\Ð5\Ó\Ð3Ø"×2Ñ2Ø#Ø# DÑ)¨>¸$Ñ+?Ð@ó�ð *×1Ñ1°!°QÓ7�Ø�}Š}Ø×.Ò.ÐeÐ0eÓeÐ.Ù#(ð $ØØ'Ø'Ø$7ØØ(?ØØ'Ø +ØØ#'×#:Ñ#:Ø+ñ$ð (Ò-¨2ð$ð %8Ø$7ó!$Ñ ˆF�Lð( �ŠÜ+:¸?Ó+KÐ(ØÐ'à×>Ò>Ù&.¨vÓ&6™á&.©x¸Ó/?Ó&@™ð 1°Ñ9�EØ!Ÿ;™; q›>¨UÒ2Ð2Ð2Ø&*§o¡o°f¸V¸e°nÓ&E�OÙ&2°6¸%¸&°>Ó&B�OÜ"'§)¡)¨_¸oÐ,NÐTUÔ"V�KØ +Ð.FÑ F�Ø'4×'<Ñ'<Ó'>Ð$à"6×"=Ñ"=Ó"?�Ø §¡°!Ñ 3Ò3Ø*×1Ñ1Ð2FÕGä)Ð*?Ó@Ð@à×Ñ¡¨Ó 0Ô1Ø×"Ñ"Ò.Ð3EÈÓ3Nà59×5MÑ5MØ×0Ñ0°Ó>ó6ç‘'˜"“+ð 3ð
 ×-Ò-Ø6×=Ñ=Ø!×>Ñ>Ð>Ø ×=Ñ=ð >ô ð
 -×3Ñ3Ð4VÔWØ!-×!3Ñ!3Ó!5’ðaP	6ðd �}Š} ×!2Ñ!2Ð!>Ü Ÿ=™=¨¯©¸D×<MÑ<MÐY]Ô^ˆDŒLØ ˆDŒMô �K‰K˜Ó%Ü�K‰KÐ.Ó/ð ×&Ñ&Ð2Ð7IÈUÑ7Rô —‘Ð8Ó9ð ð	
ð 		
ð àð	
ð 		
r/   )Fr   Frr   Fr
   TFNFTg      $@TFF)&r)   ra   r«   rc   r}   ra   r~   ra   r�   rc   rŒ   rc   r   ra   rQ   rc   r”   Ústrr®   rc   rˆ   ra   rR   rc   r¥   rc   rS   rc   r    rc   r¡   rb   r‰   rc   r¯   rc   r°   rc   )NNNNNNNNNNFNNNN)rí   rd   rî   rd   rM   rd   r3   rd   rÍ   rd   rï   rd   rð   rd   rJ   rd   rK   rd   rñ   zbool | Noneró   zdict | None)
re   rf   rg   rh   r   ri   r¼   r×   rW   rj   rk   s   @r.   rm   rm   µ   sÕ  ø„ Ù<ð !Ø ØØà$ð Ø#'Ø#(ØØ$Ø&*Ø.2Ø/3Ø+0Ø',ð5y(àðy(ð ðy(ð ðy(ð ðy(ð "ðy(ð ðy(ð ðy(ð ðy(ð ðy(ð ðy(ð" ð#y(ð$ !ð%y(ð& !ð'y(ð* ð+y(ð,  $ð-y(ð. ',ð/y(ð0 )-ð1y(ð2 %)ð3y(ð4 !%õ5y(ðv ñ"ó ð"ò<ðD "&Ø$(Ø04Ø Ø(,à'+Ø%)à$(Ø,0à!%Ø Ø,0à Ø Øð-j
ð ð	j
ð
 "ðj
ð ".ðj
ð ðj
ð &ðj
ð %ðj
ð #ðj
ð "ðj
ð *ðj
ð  ð!j
ð$ *÷%j
r/   rm   )rh   Ú
__future__r   ÚnumpyrÇ   rE   r   Útorchvision.ops.roi_alignr   Ú"ultralytics.nn.modules.transformerr   Úultralytics.nn.modules.utilsr   r   Úultralytics.utils.opsr	   Ú
model_miscr   ÚModuler   rm   r1   r/   r.   ú<module>r     sL   ðñõ
 #ã Û Ý Ý .å 2ß EÝ +å 2ô["˜bŸi™iô ["ô|m
˜Ÿ™õ m
r/   