Ë
    ëÓ^jZÃ  ã                   ó   — d Z ddlZddlZddlmZmZmZ ddlZddlm	c 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ed	efd
„Z G d„ de	j*                  «      Zd!deded	efd„Z	 	 	 d"dededz  deeeef      ez  dz  ded	eeef   f
d„Z G d„ de	j*                  «      Z G d„ de	j*                  «      Z G d„ de	j*                  «      Zde	j*                  ded	e	j<                  fd„Zded	efd„Z de!d	eegef   fd „Z"y)#zTransformer class.é    N)ÚCallableÚOptionalÚSequence)ÚTensorÚnn)ÚBuilderArgs)ÚConditionalQueryInitializer)ÚMSDeformAttnÚdimÚreturnc                 ó   — t        d| «      S )z6Clamp a MultiheadAttention head count to at least one.é   )Úmax©r   s    úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/transformer.pyÚ_safe_multinormalizer      s   € äˆq�#‹;Ðó    c            
       óH   ‡ — e Zd ZdZdededededdf
ˆ fd„Zd	edefd
„Zˆ xZS )ÚMLPz5Very simple multi-layer perceptron (also called FFN).Ú	input_dimÚ
hidden_dimÚ
output_dimÚ
num_layersr   Nc                 ó¨   •— t         ‰| �  «        || _        |g|dz
  z  }t        j                  d„ t        |g|z   ||gz   «      D «       «      | _        y )Nr   c              3   óN   K  — | ]  \  }}t        j                  ||«      –— Œ y ­w©N)r   ÚLinear)Ú.0ÚnÚks      r   ú	<genexpr>zMLP.__init__.<locals>.<genexpr>*   s   è ø€ Ò#g¹¸¸1¤B§I¡I¨a°§OÑ#gùs   ‚#%)ÚsuperÚ__init__r   r   Ú
ModuleListÚzipÚlayers)Úselfr   r   r   r   ÚhÚ	__class__s         €r   r#   zMLP.__init__&   sS   ø€ Ü‰ÑÔØ$ˆŒØˆL˜J¨™NÑ+ˆÜ—m‘mÑ#gÄÀYÀKÐRSÁOÐUVÐZdÐYeÑUeÓ@fÔ#gÓgˆ�r   Úxc                 óª   — t        | j                  «      D ]:  \  }}|| j                  dz
  k  rt        j                   ||«      «      n ||«      }Œ< |S ©Nr   )Ú	enumerater&   r   ÚFÚrelu)r'   r*   ÚiÚlayers       r   ÚforwardzMLP.forward,   sM   € Ü! $§+¡+Ó.ò 	J‰HˆAˆuØ$%¨¯©¸!Ñ(;Ò$;”—‘‘u˜Q“xÔ ÁÀqÃ‰Að	Jàˆr   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr#   r   r2   Ú__classcell__©r)   s   @r   r   r   #   sI   ø„ Ù?ðh #ð h°3ð hÀCð hÐUXð hÐ]aõ hð˜ð  F÷ r   r   Ú
pos_tensorc           	      ó�  — dt         j                  z  }t        j                  || j                  | j
                  ¬«      }dd|dz  z  |z  z  }| d d …d d …df   |z  }| d d …d d …df   |z  }|d d …d d …d f   |z  }|d d …d d …d f   |z  }t        j                  |d d …d d …dd d…f   j                  «       |d d …d d …dd d…f   j                  «       fd¬«      j                  d«      }t        j                  |d d …d d …dd d…f   j                  «       |d d …d d …dd d…f   j                  «       fd¬«      j                  d«      }| j                  d«      dk(  rt        j                  ||fd¬«      }|S | j                  d«      d	k(  �r| d d …d d …df   |z  }	|	d d …d d …d f   |z  }
t        j                  |
d d …d d …dd d…f   j                  «       |
d d …d d …dd d…f   j                  «       fd¬«      j                  d«      }
| d d …d d …df   |z  }|d d …d d …d f   |z  }t        j                  |d d …d d …dd d…f   j                  «       |d d …d d …dd d…f   j                  «       fd¬«      j                  d«      }t        j                  |||
|fd¬«      }|S t        d
j                  | j                  d«      «      «      ‚)Né   ©ÚdtypeÚdevicei'  r   r   é   r   éÿÿÿÿé   zUnknown pos_tensor shape(-1):{})ÚmathÚpiÚtorchÚaranger>   r?   ÚstackÚsinÚcosÚflattenÚsizeÚcatÚ
ValueErrorÚformat)r:   r   ÚscaleÚdim_tÚx_embedÚy_embedÚpos_xÚpos_yÚposÚw_embedÚpos_wÚh_embedÚpos_hs                r   Úgen_sineembed_for_positionrZ   2   sÉ  € ð ”—‘‰K€EÜ�L‰L˜ J×$4Ñ$4¸Z×=NÑ=NÔO€EØ�a˜5 A™:Ñ&¨Ñ,Ñ-€EØššA˜q˜Ñ! EÑ)€GØššA˜q˜Ñ! EÑ)€GØ’A’q˜$�JÑ %Ñ'€EØ’A’q˜$�JÑ %Ñ'€EÜ�K‰K˜šq¢! Q T¨ T˜zÑ*×.Ñ.Ó0°%ºº1¸a¸dÀ¸d¸
Ñ2C×2GÑ2GÓ2IÐJÐPQÔR×ZÑZÐ[\Ó]€EÜ�K‰K˜šq¢! Q T¨ T˜zÑ*×.Ñ.Ó0°%ºº1¸a¸dÀ¸d¸
Ñ2C×2GÑ2GÓ2IÐJÐPQÔR×ZÑZÐ[\Ó]€EØ‡��rÓ˜aÒÜ�i‰i˜ ˜¨AÔ.ˆð €Jð 
�‰˜Ó	 Ó	!ØšQ¢ 1˜WÑ%¨Ñ-ˆØšš1˜d˜
Ñ# eÑ+ˆÜ—‘˜U¢1¢a¨¨¨A¨ :Ñ.×2Ñ2Ó4°eºAºqÀ!À$ÀQÀ$¸JÑ6G×6KÑ6KÓ6MÐNÐTUÔV×^Ñ^Ð_`ÓaˆàšQ¢ 1˜WÑ%¨Ñ-ˆØšš1˜d˜
Ñ# eÑ+ˆÜ—‘˜U¢1¢a¨¨¨A¨ :Ñ.×2Ñ2Ó4°eºAºqÀ!À$ÀQÀ$¸JÑ6G×6KÑ6KÓ6MÐNÐTUÔV×^Ñ^Ð_`ÓaˆÜ�i‰i˜  u¨eÐ4¸!Ô<ˆð €Jô Ð:×AÑAÀ*Ç/Á/ÐRTÓBUÓVÓWÐWr   ÚmemoryÚmemory_padding_maskÚspatial_shapesÚ	unsigmoidc                 ó¶  — g }d}| j                   \  }}}t        |«      D �]W  \  }\  }	}
|�h|dd…|||	|
z  z   …f   j                  ||	|
d«      }t        j                  |dd…dd…ddf    d«      }t        j                  |dd…ddd…df    d«      }n`t        j
                  | dd…ddf   t        j                  ¬«      |	z   }t        j
                  | dd…ddf   t        j                  ¬«      |
z   }t        j                  t        j                  d|	dz
  |	t        j                  | j                  ¬«      t        j                  d|
dz
  |
t        j                  | j                  ¬«      d¬«      \  }}t        j                  |j                  d«      |j                  d«      gd«      }t        j                  |j                  d«      |j                  d«      gd«      j                  dddd	«      }|j                  d«      d
z   |j                  «       z  }t        j                  |«      dz  d|z  z  }t        j                  ||fd«      j                  |dd«      }|j                  |«       ||	|
z  z  }�ŒZ t        j                  |d«      }|dkD  |dk  z  j!                  dd¬«      }|rdt        j"                  |d|z
  z  «      }|�*|j%                  |j                  d«      t        d«      «      }|j%                  | t        d«      «      }nH|�*|j%                  |j                  d«      t        d«      «      }|j%                  | t        d«      «      }| }|�*|j%                  |j                  d«      t        d«      «      }|j%                  | t        d«      «      }|j'                  | j(                  «      |j'                  | j(                  «      fS )zï
    Input:
        - memory: bs, \sum{hw}, d_model
        - memory_padding_mask: bs, \sum{hw}
        - spatial_shapes: nlevel, 2
    Output:
        - output_memory: bs, \sum{hw}, d_model
        - output_proposals: bs, \sum{hw}, 4
    r   Nr   ©r>   r=   Úij)ÚindexingrA   r<   g      à?gš™™™™™©?g       @rB   g{®Gáz„?g®Gáz®ï?T)ÚkeepdimÚinf)Úshaper-   ÚreshaperE   ÚsumÚ
zeros_likeÚlongÚmeshgridÚlinspaceÚfloat32r?   rL   Ú	unsqueezeÚfloatÚ	ones_likeÚappendÚallÚlogÚmasked_fillÚtor>   )r[   r\   r]   r^   Ú	proposalsÚ_curÚ
batch_sizeÚ_ÚlvlÚheightÚwidthÚmask_flatten_Úvalid_heightÚvalid_widthÚgrid_yÚgrid_xÚgridrO   Úproposals_gridÚwhÚproposalÚoutput_proposalsÚoutput_proposals_validÚoutput_memorys                           r   Úgen_encoder_output_proposalsrˆ   N   s¤  € ð €IØ€DØ—|‘|Ñ€J��1Ü )¨.Ó 9ó Ñˆ‰_ˆf�eØÐ*à/²°4¸4À&È5Á.Ñ;PÐ3QÐ0QÑR×ZÑZÐ[eÐgmÐotÐvwÓxˆMä Ÿ9™9 m²A²q¸!¸Q°JÑ&?Ð%?ÀÓCˆLÜŸ)™) ]²1°aº¸A°:Ñ%>Ð$>ÀÓB‰Kô !×+Ñ+¨F²1°a¸°7©OÄ5Ç:Á:ÔNÐQWÑWˆLÜ×*Ñ*¨6²!°Q¸°'©?Ä%Ç*Á*ÔMÐPUÑUˆKäŸ™Ü�N‰N˜1˜f q™j¨&¼¿¹ÈfÏmÉmÔ\Ü�N‰N˜1˜e a™i¨´e·m±mÈFÏMÉMÔZØô
‰ˆ�ô
 �y‰y˜&×*Ñ*¨2Ó.°×0@Ñ0@ÀÓ0DÐEÀrÓJˆô —	‘	˜;×0Ñ0°Ó4°l×6LÑ6LÈRÓ6PÐQÐSTÓU×]Ñ]Ð^`ÐbcÐefÐhiÓjˆØŸ.™.¨Ó+¨cÑ1°U·[±[³]ÑBˆä�_‰_˜^Ó,¨tÑ3°s¸C±xÑ@ˆÜ—9‘9˜n¨bÐ1°2Ó6×>Ñ>¸zÈ2ÈqÓQˆØ×Ñ˜Ô"Ø�˜‘ÑŠð5ô8 —y‘y ¨AÓ.ÐØ/°$Ñ6Ð;KÈdÑ;RÑS×XÑXÐY[ÐeiÐXÓjÐáÜ Ÿ9™9Ð%5¸Ð=MÑ9MÑ%NÓOÐØÐ*Ø/×;Ñ;Ð<O×<YÑ<YÐZ\Ó<]Ô_dÐejÓ_kÓlÐØ+×7Ñ7Ð9OÐ8OÔQVÐW\ÓQ]Ó^ÑàÐ*Ø/×;Ñ;Ð<O×<YÑ<YÐZ\Ó<]Ô_dÐefÓ_gÓhÐØ+×7Ñ7Ð9OÐ8OÔQVÐWXÓQYÓZÐà€MØÐ&Ø%×1Ñ1Ð2E×2OÑ2OÐPRÓ2SÔUZÐ[\ÓU]Ó^ˆØ!×-Ñ-Ð/EÐ.EÄuÈQÃxÓP€Mà×Ñ˜FŸL™LÓ)Ð+;×+>Ñ+>¸v¿|¹|Ó+LÐLÐLr   c            3       óX  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)dedededededed	ed
edededededededededededee   dz  dedededededdf2ˆ fd„Z	d„ Z
d„ Zdedefd „Z	 d*d!ee   d"ee   dz  d#ee   d$ed%ed&eeej                   z     dz  deedz  d'f   fd(„Zˆ xZS )+ÚTransformerzDTransformer with optional GroupPose keypoint decoder stream support.NÚd_modelÚsa_nheadÚca_nheadÚnum_queriesÚnum_decoder_layersÚdim_feedforwardÚdropoutÚ
activationÚnormalize_beforeÚreturn_intermediate_decÚ
group_detrÚ	two_stageÚnum_feature_levelsÚdec_n_pointsÚlite_refpoint_refineÚdecoder_norm_typeÚbbox_reparamÚuse_grouppose_keypointsÚnum_keypoints_per_classÚ grouppose_keypoint_dim_downscaleÚkeypoint_cross_attnÚinter_instance_kp_attnÚnum_registersÚdual_projector_kp_onlyr   c                 óà  •— t         ‰| �  «        d | _        || _        || _        |xs g | _        || _        t        |||||||	|||d||||¬«      }|dv sJ ‚d„ d„ dœ} ||   |«      }t        ||||
||||| j
                  |¬«
      | _	        || _
        |�rt        j                  t        |«      D �cg c]  }t        j                  ||«      ‘Œ c}«      | _        t        j                  t        |«      D �cg c]  }t        j                   |«      ‘Œ c}«      | _        |rŽ| j
                  r‚t%        | j
                  «      }|dkD  rh||z  }t'        |||¬«      | _        t'        |||¬«      | _        t        j                  t        |«      D �cg c]  }t-        |||d	«      ‘Œ c}«      | _        | j1                  «        |dkD  rjt        j2                  t5        j6                  ||«      j9                  «       «      | _        t        j2                  t5        j<                  |d
«      «      | _        || _         || _!        || _"        || _#        || _$        || _%        d| _&        y c c}w c c}w c c}w )NF)r•   r—   r˜   Úskip_self_attnÚenable_keypoint_processingrž   rŸ   r    )ÚLNÚIdentityc                 ó,   — t        j                  | «      S r   )r   Ú	LayerNorm©Úchannelss    r   ú<lambda>z&Transformer.__init__.<locals>.<lambda>Ê   s   € ¤2§<¡<°Ó#9€ r   c                 ó*   — t        j                  «       S r   )r   r§   rª   s    r   r¬   z&Transformer.__init__.<locals>.<lambda>Ë   s   € ¬¯©«€ r   )Úreturn_intermediater‹   r™   r›   r¥   r�   rž   r   )Úout_dimr<   rB   )'r"   r#   Úencoderrœ   r¢   r�   r¡   ÚTransformerDecoderLayerÚTransformerDecoderÚdecoderr–   r   r$   Úranger   Ú
enc_outputr©   Úenc_output_normrg   r	   Úkeypoint_query_initializerÚkeypoint_query_initializer_encr   Úenc_out_keypoint_embedÚ_reset_parametersÚ	ParameterrE   ÚemptyÚnormal_Úregister_tokensÚzerosÚregister_ref_pointsrŽ   r‹   Ú
dec_layersr•   r—   r›   Ú_export) r'   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    r¡   r¢   Údecoder_layerÚnormÚdecoder_normrx   Útotal_keypointsÚkeypoint_dimr)   s                                   €r   r#   zTransformer.__init__”   sa  ø€ ô6 	‰ÑÔØˆŒà'>ˆÔ$Ø&<ˆÔ#Ø'>Ò'DÀ"ˆÔ$Ø*ˆÔä/ØØØØØØØØ!Ø1Ø%Ø Ø'>Ø-MØ 3Ø#9ô
ˆð" !Ð$6Ñ6Ð6Ð6á9Ù6ñ
ˆð /�tÐ-Ñ.¨wÓ7ˆä)ØØØØ 7ØØ!5Ø%Ø'>Ø$(×$@Ñ$@Ø-Mô
ˆŒð #ˆŒÚÜ Ÿm™mÔRWÐXbÓRcÖ,dÈQ¬R¯Y©Y°wÀÕ-HÒ,dÓeˆDŒOÜ#%§=¡=ÔQVÐWaÓQbÖ1cÈA´"·,±,¸wÕ2GÒ1cÓ#dˆDÔ á&¨4×+GÒ+GÜ"% d×&BÑ&BÓ"C�Ø" QÒ&Ø#*Ð.NÑ#N�LÜ6QØ ¸,ô7�DÔ3ô ;VØ ¸,ô;�DÔ7ô 35·-±-ÜNSÐT^ÓN_Ö`Èœ˜\¨7°LÀ!ÕDÒ`ó3�DÔ/ð 	×ÑÔ ð ˜1ÒÜ#%§<¡<´·±¸MÈ7Ó0S×0[Ñ0[Ó0]Ó#^ˆDÔ Ü')§|¡|´E·K±KÀÈqÓ4QÓ'RˆDÔ$à&ˆÔØˆŒØ,ˆŒØ$ˆŒØ"4ˆÔØ(ˆÔàˆ�ùò? -eùÚ1cùò as   Â3I!Ã8I&ÆI+c                 ó   — d| _         y ©NT©rÂ   ©r'   s    r   ÚexportzTransformer.exportÿ   ó	   € Øˆ�r   c                 ó   — | j                  «       D ]5  }|j                  «       dkD  sŒt        j                  j	                  |«       Œ7 | j                  «       D ]#  }t        |t        «      sŒ|j                  «        Œ% y r,   )	Ú
parametersr   r   ÚinitÚxavier_uniform_ÚmodulesÚ
isinstancer
   rº   )r'   ÚpÚms      r   rº   zTransformer._reset_parameters  sd   € Ø—‘Ó"ò 	+ˆAØ�u‰u‹w˜‹{Ü—‘×'Ñ'¨Õ*ð	+ð —‘“ò 	&ˆAÜ˜!œ\Õ*Ø×#Ñ#Õ%ñ	&r   Úmaskc                 ó&  — |j                   \  }}}t        j                  |d d …d d …df    d«      }t        j                  |d d …dd d …f    d«      }|j                  «       |z  }|j                  «       |z  }t        j                  ||gd«      }	|	S )Nr   r   rA   )re   rE   rg   rn   rG   )
r'   rÖ   rx   rz   r{   r}   r~   Úvalid_ratio_hÚvalid_ratio_wÚvalid_ratios
             r   Úget_valid_ratiozTransformer.get_valid_ratio
  s‹   € ØŸ:™:Ñˆˆ6�5Ü—y‘y $¢qª!¨Q w¡- °Ó3ˆÜ—i‘i ¢a¨ªA g¡ °Ó2ˆØ$×*Ñ*Ó,¨vÑ5ˆØ#×)Ñ)Ó+¨eÑ3ˆÜ—k‘k =°-Ð"@À"ÓEˆØÐr   ÚsrcsÚmasksÚ
pos_embedsÚrefpoint_embedÚ
query_featÚcross_attn_srcs.c                 óØ  — g }|�g nd }g }	g }
|�g nd }t        t        ||«      «      D ]¸  \  }\  }}|j                  \  }}}}|
j                  ||f«       |j	                  d«      j                  dd«      }|j	                  d«      j                  dd«      }|	j                  |«       |j                  |«       |€Œ”||   j	                  d«      }|j                  |«       Œº t        j                  |d«      }|�It        j                  |d«      }t        j                  |D �cg c]  }| j                  |«      ‘Œ c}d«      }t        j                  |	d«      }	t        j                  |D �cg c]  }t        j                  |«      dd ‘Œ c}«      j                  |d   j                  t        j                  ¬«      }t        j                  |j                  d«      |j                  d«      j!                  d«      d d f«      }d }|�\g }|D ]?  }t#        |d|«      }|j                  |j	                  d«      j                  dd«      «       ŒA t        j                  |d«      }| j$                  �rmt'        |||
| j(                   ¬	«      \  }}g g g }}}| j*                  r| j,                  nd} t/        | «      D �]Ü  }! | j0                  |!    | j2                  |!   |«      «      }" | j4                  |!   |"«      }#| j(                  rm | j6                  |!   |"«      }$|$d
d d…f   |d
dd …f   z  |d
d d…f   z   }%|$d
dd …f   j9                  «       |d
dd …f   z  }&t        j:                  |%|&gd¬«      }'n | j6                  |!   |"«      |z   }'t=        | j>                  |#j                  d   «      }(t        j@                  |#jC                  d«      d   |(d¬«      d   })t        jD                  |'d|)jG                  d«      jI                  ddd«      «      }*|*jK                  «       }+t        jD                  |"d|)jG                  d«      jI                  dd| jL                  «      «      },|j                  |+«       |j                  |,«       |j                  |*«       �Œß t        j                  |d¬«      }t        j                  |d¬«      }t        j                  |d¬«      }d }-d }.d }/| j$                  �rn| jN                  �ratQ        | d«      �rTj                  \  }0}}| jS                  |«      }/| j(                  rnjU                  «       }1| j*                  rtW        | jX                  «      nd} |/j[                  | d¬«      }2|1j[                  | d¬«      }3g }4t/        | «      D ]Ž  }! | jX                  |!   |2|!   «      }5|3|!   d
dd …f   jG                  d«      }6|3|!   d
d d…f   jG                  d«      }7|5d
d d…f   |6z  |7z   }8|4j                  t        j                  |8|5d
dd …f   gd¬«      «       Œ� t        j                  |4d¬«      }-|-d
d d…f   jK                  «       }.| j\                  dkD  �rð|j                  d   }9|jG                  d«      j_                  |9dd«      ja                  «       }:|jG                  d«      j_                  |9dd«      ja                  «       }| j$                  r«j                  d   };|d
d |;…d d …f   }<|d
|;d …d d …f   }=| j(                  rZ|<d
d d…f   |d
dd …f   z  }>|>|d
d d…f   z   }>|<d
dd …f   j9                  «       |d
dd …f   z  }?t        j:                  |>|?gd¬«      }<n|<|z   }<t        j:                  |<|=gd¬«      }d }@| jb                  dkD  �rò| j*                  r| j,                  nd}A|:j                  d   |Az  }@| jd                  jG                  d«      j_                  |9dd«      }B| jf                  jG                  d«      j_                  |9dd«      }Cti        |:jk                  |@d¬«      «      }Dti        |jk                  |@d¬«      «      }Et        j                  |DD �Fcg c]  }Ft        j                  |FBgd¬«      ‘Œ c}Fd¬«      }:t        j                  ED �Fcg c]  }Ft        j                  |FCgd¬«      ‘Œ c}Fd¬«      }|.�¼|.j                  d   }G| jf                  d d …d d…f   jU                  «       }H|HjG                  d«      jG                  d«      j_                  |9d|Gd«      }Hti        |.jk                  @d¬«      «      }It        j                  |ID �Fcg c]  }Ft        j                  |FHgd¬«      ‘Œ c}Fd¬«      }.d }J| jN                  r(tQ        | d«      stm        d«      ‚| jo                  |:«      }J| jp                  r|�|}K|}Ln|�|n|}Kd }L| js                  |:K||	||||�|j                  Kjt                  «      n|J|.L¬«      }M| jN                  rtW        M«      dkD  r
Md d \  }N}O}Pn
Md d \  }N}Od }P| jb                  dkD  �r@��| j*                  r| j,                  nd}ANj                  d   |Az  }Qt        j                  |Njk                  |Qd¬«      D �cg c]  }|d d …d d …d @…d d …f   ‘Œ c}d¬«      }Nt        j                  Ojk                  Qd¬«      D �cg c]  }|d d …d d …d @…d d …f   ‘Œ c}d¬«      }OP�\t        j                  Pjk                  Qd¬«      D �cg c]  }|d d …d d …d @…f   ‘Œ c}d¬«      }Pn| j$                  sJ d«       ‚d }Nd }Od }PNOg}R| j$                  rORj                  «       | j(                  rRj                  «       n3Rj                  jU                  «       «       nRjw                  d d g«       | jN                  rARj                  P«       |Rj                  |-«       |Rj                  | j$                  r|/nd «       ty        R«      S c c}w c c}w c c}Fw c c}Fw c c}Fw c c}w c c}w c c}w )Nr<   r   rB   r   )r?   r>   )r   rA   Útensors)r^   .r   éþÿÿÿr·   z;use_grouppose_keypoints=True requires keypoint initializers)	Úmemory_key_padding_maskrU   Úrefpoints_unsigmoidÚlevel_start_indexr]   Úvalid_ratiosÚtgt_keypointsÚinit_kp_ref_xyÚkp_cross_attn_memoryr@   z,if not using decoder, two_stage must be True)=r-   r%   re   rp   rJ   Ú	transposerE   rL   rG   rÛ   Ú_shape_as_tensorrt   r?   ri   Ú	new_zerosÚprodÚcumsumÚgetattrr–   rˆ   r›   Útrainingr•   r´   r¶   rµ   Úenc_out_class_embedÚenc_out_bbox_embedÚexpÚconcatÚminrŽ   Útopkr   Úgatherrm   ÚrepeatÚdetachr‹   rœ   Úhasattrr¸   ÚsigmoidÚlenr¹   ÚchunkrÁ   ÚexpandÚ
contiguousr¡   r¾   rÀ   ÚlistÚsplitrM   r·   r¢   r³   r>   ÚextendÚtuple)Sr'   rÜ   rÝ   rÞ   rß   rà   rá   Úsrc_flattenÚmask_flattenÚlvl_pos_embed_flattenÚspatial_shapes_hwrè   ry   ÚsrcÚ	pos_embedrx   Úcr(   ÚwrÖ   r[   rÕ   r]   rç   Úcross_attn_memoryÚ
ca_flattenÚtensorr‡   r…   Úrefpoint_embed_tsÚ	memory_tsÚboxes_tsr•   Úg_idxÚoutput_memory_gidxÚ!enc_outputs_class_unselected_gidxÚenc_outputs_coord_delta_gidxÚenc_outputs_coord_cxcy_gidxÚenc_outputs_coord_wh_gidxÚ!enc_outputs_coord_unselected_gidxrø   Útopk_proposals_gidxÚrefpoint_embed_gidx_undetachÚrefpoint_embed_gidxÚtgt_undetach_gidxÚenc_kp_predictionsrê   Úkeypoint_memory_tsrw   Ú	boxes_refÚkp_mem_chunksÚboxes_chunksÚkp_pred_chunksÚkp_deltaÚref_whÚref_xyÚkp_xyÚbsÚtgtÚts_lenÚrefpoint_embed_ts_subsetÚrefpoint_embed_subsetÚrefpoint_embed_cxcyÚrefpoint_embed_whÚoriginal_num_queries_per_groupÚgroup_countÚreg_tgtÚreg_refÚ
tgt_chunksÚ
ref_chunksrÿ   Únum_keypointsÚ	reg_kp_xyÚkp_ref_chunksré   Údecoder_memoryrë   Údecoder_outputsÚhsÚ
referencesÚkeypoint_hsÚ
n_with_regÚreturn_valuessS                                                                                      r   r2   zTransformer.forward  sª  € ð ˆØ"Ð.‘r°DˆØ "ÐØ35ÐØ"Ð.‘r°DˆÜ%.¬s°4¸Ó/DÓ%Eò 
	*Ñ!ˆCÑ!�#�yØŸ™‰JˆAˆq�!�QØ×$Ñ$ a¨ VÔ,à—+‘+˜a“.×*Ñ*¨1¨aÓ0ˆCØ!×)Ñ)¨!Ó,×6Ñ6°q¸!Ó<ˆIØ!×(Ñ(¨Ô3Ø×Ñ˜sÔ#ØÑ Ø˜S‘z×)Ñ)¨!Ó,�Ø×#Ñ# DÕ)ð
	*ô —‘˜;¨Ó*ˆØÐÜ Ÿ9™9 \°1Ó5ˆLÜ Ÿ;™;ÈÖ'OÀA¨×(<Ñ(<¸QÕ(?Ò'OÐQRÓSˆLÜ %§	¡	Ð*?ÀÓ CÐô Ÿ™ÐRVÖ%WÈ3¤e×&<Ñ&<¸SÓ&AÀ!ÀAÒ&FÒ%WÓX×[Ñ[Ø˜‘7—>‘>¬¯©ð \ó 
ˆô "ŸI™I ~×'?Ñ'?ÀÓ'EÀ~×GZÑGZÐ[\ÓG]×GdÑGdÐefÓGgÐhkÐikÐGlÐ&mÓnÐð !ÐØÐ&ØˆJØ&ò E�Ü   i°Ó5�Ø×!Ñ! &§.¡.°Ó"3×"=Ñ"=¸aÀÓ"CÕDðEô !&§	¡	¨*°aÓ 8Ðà�>‹>Ü.JØ˜Ð&7Àt×GXÑGXÐCXô/Ñ+ˆMÐ+ð 68¸¸R¨(˜yÐØ,0¯MªM˜Ÿš¸qˆJÜ˜zÓ*ó ">�Ø%@ T×%9Ñ%9¸%Ñ%@ÐAWÀÇÁÐQVÑAWÐXeÓAfÓ%gÐ"à4S°D×4LÑ4LÈUÑ4SÐTfÓ4gÐ1Ø×$Ò$Ø3Q°4×3JÑ3JÈ5Ñ3QÐRdÓ3eÐ0à4°S¸"¸1¸"°WÑ=Ð@PÐQTÐVWÑVXÐQXÑ@YÑYÐ\lÐmpÐrtÐstÐrtÐmtÑ\uÑuð 0ð 1MÈSÐRSÑRTÈWÑ0U×0YÑ0YÓ0[Ð^nÐorÐtuÑtvÐovÑ^wÑ0wÐ-Ü8=¿¹Ø4Ð6OÐPÐVXô9Ñ5ð
 7˜×/Ñ/°Ñ6Ð7IÓJÐM]Ñ]ð 6ô ˜4×+Ñ+Ð-N×-TÑ-TÐUWÑ-XÓY�Ü&+§j¡jÐ1R×1VÑ1VÐWYÓ1ZÐ[\Ñ1]Ð_cÐijÔ&kÐlmÑ&nÐ#ä/4¯|©|Ø5°qÐ:M×:WÑ:WÐXZÓ:[×:bÑ:bÐcdÐfgÐijÓ:kó0Ð,ð 'C×&IÑ&IÓ&KÐ#ô %*§L¡LØ&¨Ð+>×+HÑ+HÈÓ+L×+SÑ+SÐTUÐWXÐZ^×ZfÑZfÓ+gó%Ð!ð "×(Ñ(Ð)<Ô=Ø× Ñ Ð!2Ô3Ø—‘Ð <Ö=ðE">ôH !&§	¡	Ð*;ÀÔ CÐäŸ	™	 )°Ô3ˆIÜ—y‘y ¨qÔ1ˆHà!ÐØˆØ!ÐØ�>‹>˜d×:Ó:¼wÀtÐMiÕ?jØ(Ÿ™ÑˆJ˜˜1Ø!%×!DÑ!DÀYÓ!OÐØ$(×$5Ò$5™¸8×;KÑ;KÓ;MˆIØ=A¿]º]œ˜T×8Ñ8Ô9ÐPQˆJà.×4Ñ4°ZÀQÐ4ÓGˆMØ$Ÿ?™?¨:¸1˜?Ó=ˆLØˆNÜ˜zÓ*ò U�Ø=˜4×6Ñ6°uÑ=¸mÈEÑ>RÓS�Ø% eÑ,¨S°!±"¨WÑ5×?Ñ?ÀÓC�Ø% eÑ,¨S°"°1°"¨WÑ5×?Ñ?ÀÓC�Ø   b q b Ñ)¨FÑ2°VÑ;�Ø×%Ñ%¤e§i¡i°¸ÀÀaÁbÀÑ8IÐ0JÐPRÔ&SÕTðUô "'§¡¨>¸qÔ!AÐØ/°°R°a°R°Ñ8×?Ñ?ÓAˆNà�?‰?˜QÓà—‘˜a‘ˆBØ×&Ñ& qÓ)×0Ñ0°°R¸Ó<×GÑGÓIˆCØ+×5Ñ5°aÓ8×?Ñ?ÀÀBÈÓK×VÑVÓXˆNØ�~Š~Ø*×0Ñ0°Ñ4�Ø+9¸#¸wÀ¸wÊ¸/Ñ+JÐ(Ø(6°s¸F¹GÂQ°Ñ(GÐ%à×$Ò$Ø*BÀ3ÈÈÈÀ7Ñ*KÐN_Ð`cÐefÑegÐ`gÑNhÑ*hÐ'Ø*=Ð@QÐRUÐWYÐXYÐWYÐRYÑ@ZÑ*ZÐ'Ø(@ÀÀaÁbÀÑ(I×(MÑ(MÓ(OÐRcÐdgÐijÑikÐdkÑRlÑ(lÐ%Ü/4¯|©|Ð=PÐRcÐ<dÐjlÔ/mÑ,à/GÐJ[Ñ/[Ð,ä!&§¡Ð/GÐI^Ð._ÐegÔ!h�ð .2Ð*Ø×!Ñ! AÓ%Ø15·²˜dŸošoÀA�Ø14·±¸1±ÀÑ1LÐ.Ø×.Ñ.×8Ñ8¸Ó;×BÑBÀ2ÀrÈ2ÓN�Ø×2Ñ2×<Ñ<¸QÓ?×FÑFÀrÈ2ÈrÓR�Ü! #§)¡)Ð,JÐPQ )Ó"RÓS�
Ü! .×"6Ñ"6Ð7UÐ[\Ð"6Ó"]Ó^�
Ü—i‘iÐQ[Ö \È¤§¡¨E°7Ð+;ÀÖ!CÒ \ÐbcÔd�Ü!&§¡Ð\fÖ+gÐSX¬E¯I©I°u¸gÐ6FÈAÖ,NÒ+gÐmnÔ!o�Ø!Ð-Ø$2×$8Ñ$8¸Ñ$;�MØ $× 8Ñ 8º¸B¸Q¸B¸Ñ ?× GÑ GÓ I�IØ )× 3Ñ 3°AÓ 6× @Ñ @ÀÓ C× JÑ JÈ2ÈrÐS`ÐbdÓ e�IÜ$(¨×)=Ñ)=Ð>\ÐbcÐ)=Ó)dÓ$e�MÜ%*§Y¡YÐboÖ/pÐY^´·	±	¸5À)Ð:LÐRSÖ0TÒ/pÐvwÔ%x�Nà ˆMØ×+Ò+Ü˜tÐ%AÔBÜ$Ð%bÓcÐcØ $× ?Ñ ?ÀÓ D�ð ×*Ò*Ð/@Ð/LØ!'�Ø'8Ñ$à6GÐ6SÑ!2ÐY_�Ø'+Ð$à"Ÿl™lØØØ(4Ø)Ø$2Ø"3Ø-ØFRÐF^˜\Ÿ_™_¨^×-AÑ-AÔBÐdpØ+Ø-Ø%9ð +ó ˆOð ×+Ò+´°OÓ0DÀqÒ0HØ.=¸b¸qÐ.AÑ+��J¡à!0°°!Ð!4‘��JØ"�ð ×!Ñ! AÓ%Ð*HÑ*TØ15·²˜dŸošoÀA�ØŸX™X a™[¨KÑ7�
Ü—Y‘YØJLÏ(É(ÐS]ÐcdÈ(ÓJeÖfÀQ�Q’qš!Ð<Ð<Ð<ºaÐ?Ó@ÒfØô�ô #ŸY™YØJT×JZÑJZÐ[eÐklÐJZÓJmÖnÀQ�Q’qš!Ð<Ð<Ð<ºaÐ?Ó@ÒnØô�
ð Ð*Ü"'§)¡)ØKV×K\ÑK\Ð]gÐmnÐK\ÓKoÖpÀa˜š1šaÐ!@Ð"@Ð!@Ð@ÓAÒpØô#‘Kð
 —>’>ÐQÐ#QÓQ�>ØˆBØˆJØˆKà˜ZÐ(ˆØ�>Š>Ø× Ñ  Ô+Ø× Ò Ø×$Ñ$ XÕ.à×$Ñ$ X×%5Ñ%5Ó%7Õ8à× Ñ  $¨ Ô.à×'Ò'Ø× Ñ  Ô-Ø× Ñ Ð!3Ô4Ø× Ñ °t·~²~Ñ!3È4ÔPä�]Ó#Ð#ùò] (Pùò &Xùòb !]ùÚ+gùò 0qùòT gùò oùò
 qs0   Ä$qÅ-q	á8 qâ4 qå2 qê6që;q"íq')i   é   r@  i,  é   é   g        r/   FFr   FrB   rB   Fr¦   FFNr   TFr   Fr   )r3   r4   r5   r6   r7   rn   ÚstrÚboolr  r#   rÌ   rº   r   rÛ   r   r   ÚModuler  r2   r8   r9   s   @r   rŠ   rŠ   ‘   s  ø„ ÙNð ØØØØ"#Ø#ØØ Ø!&Ø(-ØØØ"#ØØ%*Ø!%Ø"Ø(-Ø48Ø01Ø$(Ø',ØØ',ñ3iàðið ðið ð	ið
 ðið  ðið ðið ðið ðið ðið "&ðið ðið ðið  ðið ðið  #ð!ið" ð#ið$ ð%ið& "&ð'ið( "& c¡¨TÑ!1ð)ið* +.ð+ið, "ð-ið. !%ð/ið0 ð1ið2 !%ð3ið4 
õ5iòVò&ð Fð ¨vó ð  @Dñk$à�6‰lðk$ð �F‰|˜dÑ"ðk$ð ˜‘Lð	k$ð
 ðk$ð ðk$ð " &¨2¯9©9Ñ"4Ñ5¸Ñ<ðk$ð 
ˆv˜‰}˜cÐ!Ñ	"÷k$r   rŠ   c            "       óf  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 d$dddedej                  dz  deded	ed
ededee   dz  deddfˆ fd„Z	d%d„Z
defd„Zdededefd„Z	 	 	 	 	 	 	 	 	 	 	 	 d&dededee   dee   dee   dee   dee   dee   dee   dee   dee   dee   d ee   d!ee   deeed"f   z  fd#„Zˆ xZS )'r²   z'Decoder stack used by DETR transformer.NrÃ   r±   r   rÄ   r®   r‹   r™   r›   r¥   r�   rž   r   c                 ó¸  •— t         ‰| �  «        t        ||«      | _        || _        || _        || _        || _        || _        || _	        || _
        |	| _        |
| _        d | _        t        d|z  ||d«      | _        d | _        |rN|	rL||
z  }t#        j$                  t'        j(                  t+        |	«      |«      «      | _        | j-                  «        d| _        y )Nr<   F)r"   r#   Ú_get_clonesr&   r   r‹   rÄ   r®   r™   r›   r¥   r�   rž   Ú
bbox_embedr   Úref_point_headÚkeypoint_pos_embedr   r»   rE   Úrandnrg   Ú_create_keypoint_class_maskrÂ   )r'   rÃ   r   rÄ   r®   r‹   r™   r›   r¥   r�   rž   Úkp_dimr)   s               €r   r#   zTransformerDecoder.__init__  sÒ   ø€ ô 	‰ÑÔÜ! -°Ó<ˆŒØ$ˆŒØˆŒØˆŒ	Ø#6ˆÔ Ø$8ˆÔ!Ø(ˆÔØ*DˆÔ'Ø'>ˆÔ$Ø0PˆÔ-ð -1ˆŒä! ! g¡+¨w¸ÀÓCˆÔØ"&ˆÔÙ%Ñ*AØÐ @Ñ@ˆFÜ&(§l¡l´5·;±;¼sÐCZÓ?[Ð]cÓ3dÓ&eˆDÔ#Ø×,Ñ,Ô.Øˆ�r   c                 ó   — d| _         y rÉ   rÊ   rË   s    r   rÌ   zTransformerDecoder.export)  rÍ   r   c                 ó¬  — | j                   s't        j                  ddt        j                  ¬«      }nÙt	        | j                   «      }t        j                  d|z   d|z   t        j                  ¬«      }d}t        | j                   «      D ]~  \  }}|dk(  rŒ|t	        | j                   d| «      z   }||z   }t        | j                   «      D ];  \  }}	|	dk(  s||k(  rŒ|t	        | j                   d| «      z   }
|
|	z   }d|||…|
|…f<   Œ= Œ€ d| j                  v r|| j                  d<   | j                  S | j                  d|d¬«       | j                  S )zDCreate attention mask that blocks cross-class keypoint interactions.r   r`   r   NTÚkeypoint_class_mask)Ú
persistent)	r�   rE   r¿   rD  rg   r-   Ú_buffersÚregister_bufferrQ  )r'   rÖ   Útotal_kpÚoffsetÚclass_idx_iÚnum_kp_iÚstart_iÚend_iÚclass_idx_jÚnum_kp_jÚstart_jÚend_js               r   rM  z.TransformerDecoder._create_keypoint_class_mask,  s_  € à×+Ò+Ü—;‘;˜q !¬5¯:©:Ô6‰Dä˜4×7Ñ7Ó8ˆHÜ—;‘;˜q 8™|¨Q°©\ÄÇÁÔLˆDØˆFÜ)2°4×3OÑ3OÓ)Pò 
>Ñ%�˜XØ˜q’=ØØ ¤3 t×'CÑ'CÀLÀ[Ð'QÓ#RÑR�Ø (Ñ*�Ü-6°t×7SÑ7SÓ-Tò >Ñ)�K Ø 1’}¨°{Ò(BØ Ø$¤s¨4×+GÑ+GÈÈÐ+UÓ'VÑV�GØ# hÑ.�EØ9=�D˜ ˜¨°¨Ð5Ò6ñ>ð
>ð ! D§M¡MÑ1Ø37ˆD�M‰MÐ/Ñ0ð ×'Ñ'Ð'ð × Ñ Ð!6¸ÈÐ ÔNØ×'Ñ'Ð'r   ræ   Únew_refpoints_deltac                 óÚ   — | j                   rY|dd d…f   |ddd …f   z  |dd d…f   z   }|ddd …f   j                  «       |ddd …f   z  }t        j                  ||gd¬«      }|S ||z   }|S )N.r<   rA   r   )r›   rõ   rE   rö   )r'   ræ   r_  Únew_refpoints_cxcyÚnew_refpoints_whÚnew_refpoints_unsigmoids         r   Úrefpoints_refinez#TransformerDecoder.refpoints_refineF  s¯   € Ø×Òà# C¨¨!¨ GÑ,Ð/BÀ3ÈÉÀ7Ñ/KÑKÐNaÐbeÐgiÐhiÐgiÐbiÑNjÑjð ð  3°3¸¹°7Ñ;×?Ñ?ÓAÐDWÐX[Ð]^Ñ]_ÐX_ÑD`Ñ`ÐÜ&+§l¡lÐ4FÐHXÐ3YÐ_aÔ&bÐ#ð 'Ð&ð ':Ð<OÑ&OÐ#Ø&Ð&r   r*  r[   Útgt_maskÚmemory_maskÚtgt_key_padding_maskrå   rU   rç   r]   rè   ré   rê   rë   .c                 óž  ‡ ‡— |}g }|g}d }d }g }‰ j                   r˜‰ j                  sJ d«       ‚|€t        d«      ‚|€t        d«      ‚|}‰ j                  €J d«       ‚‰ j                  j	                  d«      j	                  d«      j                  |j                  d   |j                  d   dd«      }ˆ ˆfd„}‰ j                  r5‰ j                  r ||«      \  }}}}n ||j                  «       «      \  }}}}t        ‰ j                  «      D �]@  \  }}‰ j                  s5‰ j                  r ||«      \  }}}}n ||j                  «       «      \  }}}}d}|z  }‰ j                   r>|�< |||f|||||||dk(  |
|	||‰ j                  |d	œŽ}|\  }}|j                  |«       n ||||||||||dk(  |
|	¬
«      }‰ j                  sV‰ j                  |«      }‰ j                  ||«      }|‰ j                  dz
  k7  r|j                  |«       |j!                  «       }‰ j"                  s�Œ!|j                  ‰ j%                  |«      «       �ŒC ‰ j$                  �>‰ j%                  |«      }‰ j"                  r!|j'                  «        |j                  |«       ‰ j"                  �r‰ j(                  r1|d   } ‰ j                  �|d   }!n|}!‰ j                   r| |!|d   fS | |!fS g }"‰ j                  �I|"j                  t+        j,                  |«      «       |"j                  t+        j,                  |«      «       nD|"j                  t+        j,                  |«      «       |"j                  |j	                  d«      «       ‰ j                   r$|"j                  t+        j,                  |«      «       t/        |"«      S |j	                  d«      S )Nz1Keypoint processing requires lite_refpoint_refinezAKeypoint processing is enabled but tgt_keypoints was not providedzBKeypoint processing is enabled but init_kp_ref_xy was not providedz>keypoint_pos_embed must be initialized for keypoint processingr   r   rA   c                 óL  •— | dd d…f   }‰j                   r&t        |‰j                  dz  «      }|d d …d d …d f   }nR|d d …d d …d f   t        j                  ‰‰gd«      d d …d f   z  }t        |d d …d d …dd d …f   ‰j                  dz  «      }‰j                  |«      }||||fS )N.rB   r<   rA   r   )rÂ   rZ   r‹   rE   rL   rJ  )Ú	refpointsÚ
obj_centerÚquery_sine_embedÚrefpoints_inputÚ	query_posr'   rè   s        €€r   Úget_referencez1TransformerDecoder.forward.<locals>.get_reference{  sÁ   ø€ à" 3¨¨¨ 7Ñ+ˆJà�|Š|Ü#=¸jÈ$Ï,É,ÐZ[ÑJ[Ó#\Ð Ø",ªQ²°4¨ZÑ"8‘à",ªQ²°4¨ZÑ"8¼5¿9¹9ÀlÐT`ÐEaÐceÓ;fÒghÐjnÐgnÑ;oÑ"o�Ü#=¸oÊaÒQRÐTUÒWXÈjÑ>YÐ[_×[gÑ[gÐklÑ[lÓ#mÐ à×+Ñ+Ð,<Ó=ˆIØ˜°	Ð;KÐKÐKr   ©re  rf  rg  rå   rU   rn  rl  Úis_firstÚreference_pointsr]   rç   Úkeypoint_tgtÚkeypoint_posrQ  rë   )re  rf  rg  rå   rU   rn  rl  rq  rr  r]   rç   )r¥   r™   rM   rK  rm   r   re   r›   rý   r-   r&   rQ  rp   rI  rd  r   rû   r®   rÄ   ÚpoprÂ   rE   rG   r  )#r'   r*  r[   re  rf  rg  rå   rU   ræ   rç   r]   rè   ré   rê   rë   ÚoutputÚintermediateÚhs_refpoints_unsigmoidrs  Úkp_query_posÚintermediate_keypointsro  rk  rm  rn  rl  Úlayer_idr1   Úpos_transformationÚlayer_outputsr_  rc  r;  ÚrefÚresultss#   `          `                       r   r2   zTransformerDecoder.forwardQ  sô  ù€ ð& ˆàˆØ"5Ð!6ÐàˆØˆØ!#Ðà×*Ò*Ø×,Ò,ÐaÐ.aÓaÐ,ØÐ$Ü Ð!dÓeÐeØÐ%Ü Ð!eÓfÐfØ(ˆLØ×*Ñ*Ð6ÐxÐ8xÓxÐ6à×'Ñ'×1Ñ1°!Ó4ß‘˜1“ß‘˜×*Ñ*¨1Ñ-¨|×/AÑ/AÀ!Ñ/DÀbÈ"ÓMð õ	Lð ×$Ò$Ø× Ò ÙKXÐYlÓKmÑH�
˜O¨YÑ8HáKXÐYl×YtÑYtÓYvÓKwÑH�
˜O¨YÐ8Hä(¨¯©Ó5ó <	7‰OˆH�eØ×,Ò,Ø×$Ò$ÙO\Ð]pÓOqÑL�J °Ñ<LáO\Ø+×3Ñ3Ó5óPÑL�J °Ð<Lð
 "#ÐØ!Ð$6Ñ6ˆIà×.Ò.°<Ð3KÙ %ØØð!ð &Ø +Ø)=Ø,CØØ'Ø%5Ø&¨!™mØ%4Ø#1Ø&7Ø!-Ø!-Ø(,×(@Ñ(@Ø)=ò#!�ð& (5Ñ$�˜Ø&×-Ñ-¨lÕ;áØØØ%Ø +Ø)=Ø,CØØ'Ø%5Ø&¨!™mØ%4Ø#1Ø&7ô�ð  ×,Ò,Ø&*§o¡o°fÓ&=Ð#Ø*.×*?Ñ*?Ð@SÐUhÓ*iÐ'Ø˜tŸ™°Ñ2Ò2Ø*×1Ñ1Ð2IÔJØ&=×&DÑ&DÓ&FÐ#à×'Ô'Ø×#Ñ# D§I¡I¨fÓ$5Ö6ðy<	7ð| �9‰9Ð Ø—Y‘Y˜vÓ&ˆFØ×'Ò'Ø× Ñ Ô"Ø×#Ñ# FÔ+à×#Ó#Ø�|Š|Ø! "Ñ%�Ø—?‘?Ð.Ø0°Ñ4‘Cà-�Cà×2Ò2Ø˜sÐ$:¸2Ñ$>Ð>Ð>Ø˜3�w�àˆGØ�‰Ð*Ø—‘œuŸ{™{¨<Ó8Ô9Ø—‘œuŸ{™{Ð+AÓBÕCà—‘œuŸ{™{¨<Ó8Ô9Ø—‘Ð2×<Ñ<¸QÓ?Ô@à×.Ò.Ø—‘œuŸ{™{Ð+AÓBÔCä˜“>Ð!à×Ñ Ó"Ð"r   )NFé   FFFNr   )r   N)NNNNNNNNNNNN)r3   r4   r5   r6   r7   r   rE  rD  r  r#   rÌ   r   rM  rd  r   r  r2   r8   r9   s   @r   r²   r²     sê  ø„ Ù1ð "&Ø$)ØØ%*Ø"Ø+0Ø48Ø01ñ#à0ð#ð ð#ð �i‰i˜$Ñð	#ð
 "ð#ð ð#ð #ð#ð ð#ð %)ð#ð "& c¡¨TÑ!1ð#ð +.ð#ð 
õ#óJð(¨Vó (ð4	'°Fð 	'ÐQWð 	'Ð\bó 	'ð &*Ø(,Ø15Ø48Ø $Ø04à.2Ø+/Ø)-à*.Ø+/Ø15ñ#\#àð\#ð ð\#ð ˜6Ñ"ð	\#ð
 ˜fÑ%ð\#ð ' vÑ.ð\#ð "*¨&Ñ!1ð\#ð �fÑð\#ð & fÑ-ð\#ð $ FÑ+ð\#ð ! Ñ(ð\#ð ˜vÑ&ð\#ð   Ñ'ð\#ð  ! Ñ(ð!\#ð" ' vÑ.ð#\#ð$ 
�%˜ ˜Ñ$Ñ	$÷%\#r   r²   c            (       ó@  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 d*dededededededed	ed
edededededededdf ˆ fd„Zde	de
e	   de	fd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+de	de	de
e	   de
e	   de
e	   de
e	   de
e	   de
e	   de
e	   ded e
e	   d!e	dz  d"e	dz  d#e
e	   d$e
e	   d%e
e	   d&e
e	   de	ee	d'f   z  f$d(„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+de	de	de
e	   de
e	   de
e	   de
e	   de
e	   de
e	   de
e	   ded e
e	   d!e	dz  d"e	dz  d#e
e	   d$e
e	   d%e
e	   d&e
e	   de	ee	d'f   z  f$d)„Zˆ xZS ),r±   z9A single decoder layer with optional keypoint subnetwork.r‹   rŒ   r�   r�   r‘   r’   r“   r•   r—   r˜   r¤   r¥   rž   rŸ   r    r   Nc                 óØ  •— t         ‰| �  «        t        j                  |||d¬«      | _        t        j
                  |«      | _        t        j                  |«      | _        t        ||	||
¬«      | _
        || _        t        j                  ||«      | _        t        j
                  |«      | _        t        j                  ||«      | _        t        j                  |«      | _        t        j                  |«      | _        t        j
                  |«      | _        t        j
                  |«      | _        t)        |«      | _        || _        || _        || _        |xr || _        |xr || _        |�rñ||z  }|dkD  rt        j                  ||«      nt        j6                  «       | _        |dkD  rt        j                  ||«      nt        j6                  «       | _        |dkD  rt        j                  ||«      nt        j6                  «       | _        |dkD  rt        j                  ||«      nt        j6                  «       | _        t        j                  |tA        ||z  «      |d¬«      | _!        t        j
                  |«      | _"        t        j                  |«      | _#        t        j                  |«      | _$        t        j
                  |«      | _%        | j2                  r^t        j                  |tA        ||z  «      |d¬«      | _&        t        j
                  |«      | _'        t        j                  |«      | _(        | j4                  rTt        ||	tA        ||z  «      |
¬«      | _)        t        j
                  |«      | _*        t        j                  |«      | _+        t        j                  ||dz  |z  «      | _,        t        j
                  |«      | _-        t        j                  |dz  |z  |«      | _.        t        j
                  |«      | _/        t        j                  |«      | _0        t        jb                  te        jf                  d«      dz  «      | _4        d| _5        y )NT)Ú	embed_dimÚ	num_headsr‘   Úbatch_first)Ún_levelsÚn_headsÚn_pointsr   rB   g�íµ ÷Æ°>F)6r"   r#   r   ÚMultiheadAttentionÚ	self_attnÚDropoutÚdropout1r©   Únorm1r
   Ú
cross_attnÚnheadr   Úlinear1r‘   Úlinear2Únorm2Únorm3Údropout2Údropout3Ú_get_activation_fnr’   r“   r•   r¥   r    rŸ   r§   Úinst_in_projÚinst_pos_in_projÚinst_out_projÚmemory_in_projr   Úkp_inst_self_attnÚkp_inst_dropoutÚkp_inst_normÚkp_normÚ
kp_dropoutÚinter_inst_kp_attnÚinter_inst_kp_dropoutÚinter_inst_kp_normÚkp_cross_attnÚkp_cross_attn_dropoutÚkp_cross_attn_normÚ
kp_linear1Úkp_dropout2Ú
kp_linear3Úkp_dropout4Úkp_norm5r»   rE   ÚonesÚinstance_kp_layer_scalerÂ   )r'   r‹   rŒ   r�   r�   r‘   r’   r“   r•   r—   r˜   r¤   r¥   rž   rŸ   r    rN  r)   s                    €r   r#   z TransformerDecoderLayer.__init__ó  sy  ø€ ô$ 	‰ÑÔä×.Ñ.¸ÈHÐ^eÐswÔxˆŒÜŸ
™
 7Ó+ˆŒÜ—\‘\ 'Ó*ˆŒ
ô 'ØØ'ØØ!ô	
ˆŒð ˆŒ
ô —y‘y ¨/Ó:ˆŒÜ—z‘z 'Ó*ˆŒÜ—y‘y °'Ó:ˆŒä—\‘\ 'Ó*ˆŒ
Ü—\‘\ 'Ó*ˆŒ
äŸ
™
 7Ó+ˆŒÜŸ
™
 7Ó+ˆŒä,¨ZÓ8ˆŒØ 0ˆÔØ$ˆŒà*DˆÔ'Ø&<Ò&[ÐA[ˆÔ#Ø#6Ò#UÐ;UˆÔ â%ØÐ @Ñ@ˆFØ>^ÐabÒ>b¤§	¡	¨'°6Ô :Ôhj×hsÑhsÓhuˆDÔà.NÐQRÒ.R”—	‘	˜' 6Ô*ÔXZ×XcÑXcÓXeð Ô!ð @`ÐbcÒ?c¤§¡¨6°7Ô!;Ôik×itÑitÓivˆDÔØ@`ÐcdÒ@d¤"§)¡)¨G°VÔ"<Ôjl×juÑjuÓjwˆDÔÜ%'×%:Ñ%:Ø Ü.¨xÐ;[Ñ/[Ó\ØØ ô	&ˆDÔ"ô $&§:¡:¨gÓ#6ˆDÔ Ü "§¡¨WÓ 5ˆDÔÜŸ<™<¨Ó/ˆDŒLÜ Ÿj™j¨Ó1ˆDŒOà×*Ò*Ü*,×*?Ñ*?Ø$Ü2°8Ð?_Ñ3_Ó`Ø#Ø $ô	+�Ô'ô .0¯Z©Z¸Ó-@�Ô*Ü*,¯,©,°vÓ*>�Ô'à×'Ò'Ü%1ØØ/Ü0°Ð=]Ñ1]Ó^Ø)ô	&�Ô"ô .0¯Z©Z¸Ó-@�Ô*Ü*,¯,©,°vÓ*>�Ô'ä Ÿi™i¨°¸!±Ð?_Ñ0_Ó`ˆDŒOÜ!Ÿz™z¨'Ó2ˆDÔÜ Ÿi™i¨°!©Ð7WÑ(WÐY_Ó`ˆDŒOÜ!Ÿz™z¨'Ó2ˆDÔÜŸL™L¨Ó0ˆDŒMä+-¯<©<¼¿
¹
À1»ÈÑ8LÓ+MˆDÔ(Øˆ�r   r  rU   c                 ó   — |€|S ||z   S r   © )r'   r  rU   s      r   Úwith_pos_embedz&TransformerDecoderLayer.with_pos_embedX  s   € Ø˜ˆvÐ6¨&°3©,Ð6r   r*  r[   re  rf  rg  rå   rn  rl  rq  rr  r]   rç   rs  rt  rQ  rë   .c                 óÐ  — |j                   \  }}}||z   x}}|}| j                  rŸt        j                  |j	                  || j
                  z  d¬«      d¬«      }t        j                  |j	                  || j
                  z  d¬«      d¬«      }t        j                  |j	                  || j
                  z  d¬«      d¬«      }| j                  |||||d¬«      d   }| j                  r(t        j                  |j	                  |d¬«      d¬«      }|| j                  |«      z   }| j                  |«      }| j                  | j                  ||«      |||||«      }|| j                  |«      z   }| j                  |«      }| j                  | j                  | j                  | j!                  |«      «      «      «      }|| j#                  |«      z   }| j%                  |«      }| j&                  �ró|�|€t)        d«      ‚| j+                  |«      }| j-                  |«      }|j                   \  }}}}|j/                  d«      }t        j0                  |«      j/                  d«      }t        j                  ||gd¬«      } t        j                  ||gd¬«      }!| j3                  ||z  d|z   |«      } |!j3                  ||z  d|z   |«      }!| |!z   x}}| }| j5                  ||||d¬«      d   }"|"j3                  ||d|z   |«      }"|"d d …d d …dd d …f   }|"d d …d d …dd …d d …f   }#|| j7                  | j9                  |«      «      | j:                  z  z   }| j=                  |«      }|| j?                  |#«      z   }| jA                  |«      }| jB                  rÅ|jE                  dd«      j3                  ||z  ||«      }$|j/                  d«      jG                  ||||«      j3                  ||z  ||«      }%|$|%z   }|$}| jI                  |||d¬	«      d   }&|&jK                  ||||«      jE                  dd«      }&|| jM                  |&«      z   }| jO                  |«      }| jP                  �r| j                  ||j/                  d«      jG                  ||||«      «      }'|'j3                  |||z  |«      }'|j/                  d«      jG                  ||||j                   d   |j                   d
   «      j3                  |||z  |j                   d   |j                   d
   «      }(|�|n|})|| jS                  | jU                  |'|(| jW                  |)«      |||«      j3                  ||||«      «      z   }| jY                  |«      }|| j[                  | j]                  | j_                  | j                  | ja                  |«      «      «      «      «      z   }| jc                  |«      }||fS |S )Nr   r   r   F)Ú	attn_maskÚkey_padding_maskÚneed_weightszDKeypoint processing is enabled but keypoint_tgt/keypoint_pos missingr<   )r±  r³  )ÚkeyÚvaluer³  r@   )2re   rò   rE   rL   r  r•   rŠ  rŒ  r�  rŽ  r¯  r”  r’  r‘  r‘   r’   r�  r•  r“  r¥   rM   r—  r˜  rm   rh   rf   r›  rœ  r™  r¬  r�  rŸ  rž  r    rì   r   r   Úviewr¡  r¢  rŸ   r¤  r£  rš  r¥  r©  r¨  r§  r¦  rª  )*r'   r*  r[   re  rf  rg  rå   rU   rn  rl  rq  rr  r]   rç   rs  rt  rQ  rë   r)  rŽ   rx   Úqr    ÚvÚtgt2Ú
tgt_for_kpÚtgt_for_kp_posÚ	n_queriesÚnum_kprN  Útgt_expandedÚquery_expandedÚcombined_featÚcombined_posÚcombined_outÚkeypoint_tgt2Úswapped_keypoint_tgtÚswapped_keypoint_posÚswapped_outÚkeypoint_queryÚbbox_ref_for_kpÚ	kp_memorys*                                             r   Úforward_postz$TransformerDecoderLayer.forward_post[  sí  € ð* !ŸY™YÑˆˆK˜ð
 �i‘ÐˆˆAØˆØ�=Š=Ü—	‘	˜!Ÿ'™' +°·±Ñ"@Àa˜'ÓHÈaÔPˆAÜ—	‘	˜!Ÿ'™' +°·±Ñ"@Àa˜'ÓHÈaÔPˆAÜ—	‘	˜!Ÿ'™' +°·±Ñ"@Àa˜'ÓHÈaÔPˆAà�~‰~˜a  A°ÐL`Ðotˆ~ÓuÐvwÑxˆà�=Š=Ü—9‘9˜TŸZ™Z¨°˜ZÓ2¸Ô:ˆDà�D—M‘M $Ó'Ñ'ˆØ�j‰j˜‹oˆð �‰Ø×Ñ  YÓ/ØØØØØ#ó
ˆð �D—M‘M $Ó'Ñ'ˆØ�j‰j˜‹oˆØ�|‰|˜DŸL™L¨¯©¸¿¹ÀcÓ9JÓ)KÓLÓMˆØ�D—M‘M $Ó'Ñ'ˆØ�j‰j˜‹oˆà×*Ó*ØÐ# |Ð';Ü Ð!gÓhÐhà×*Ñ*¨3Ó/ˆJØ!×2Ñ2°9Ó=ˆNð ,8×+=Ñ+=Ñ(ˆAˆy˜& &à%×/Ñ/°Ó2ˆLÜ"×-Ñ-¨jÓ9×CÑCÀAÓFˆNä!ŸI™I |°\Ð&BÈÔJˆMÜ Ÿ9™9 n°lÐ%CÈÔKˆLà)×1Ñ1°"°{Ñ2BÀAÈÁJÐPVÓWˆMØ'×/Ñ/°°[Ñ0@À!ÀfÁ*ÈfÓUˆLØ! LÑ0Ð0ˆA�ØˆAà×1Ñ1°!°Q¸ÐEXÐglÐ1ÓmÐnoÑpˆLØ'×/Ñ/°°KÀÀVÁÈVÓTˆLØ¢¢1 aª 
Ñ+ˆDØ(ªªA¨q©r²1¨Ñ5ˆMà˜×,Ñ,¨T×-?Ñ-?ÀÓ-EÓFÈ×IeÑIeÑeÑeˆCØ×#Ñ# CÓ(ˆCØ'¨$¯/©/¸-Ó*HÑHˆLØŸ<™<¨Ó5ˆLð
 ×*Ò*Ø'3×'=Ñ'=¸aÀÓ'C×'KÑ'KÈBÐQWÉKÐYdÐflÓ'mÐ$à"×,Ñ,¨QÓ/ß‘V˜B ¨°VÓ<ß‘WØ˜V™Ø#Øóð %ð )Ð+?Ñ?�Ø(�Ø"×5Ñ5°a¸QÀaÐV[Ð5Ó\Ð]^Ñ_�Ø)×.Ñ.¨r°6¸;ÈÓO×YÑYÐZ[Ð]^Ó_�Ø+¨d×.HÑ.HÈÓ.UÑU�Ø#×6Ñ6°|ÓD�ð
 ×'Ó'Ø!%×!4Ñ!4Ø  .×":Ñ":¸1Ó"=×"DÑ"DÀRÈÐV\Ð^dÓ"eó"�ð "0×!7Ñ!7¸¸KÈ&Ñ<PÐRXÓ!Y�à$×.Ñ.¨qÓ1ß‘VØØ#ØØ(×.Ñ.¨qÑ1Ø(×.Ñ.¨qÑ1ó÷ ‘W˜R ¨vÑ!5Ð7G×7MÑ7MÈaÑ7PÐRb×RhÑRhÐijÑRkÓlð  ð 5IÐ4TÑ0ÐZ`�	Ø+¨d×.HÑ.HØ×&Ñ&Ø&Ø'Ø×+Ñ+¨IÓ6Ø&Ø)Ø/ó÷ ‘g˜b +¨v°vÓ>ó	/ñ 	 �ð  $×6Ñ6°|ÓD�ð
 (¨$×*:Ñ*:Ø—‘ × 0Ñ 0°·±ÀÇÁÐQ]ÓA^Ó1_Ó `Óaó+ñ ˆLð  Ÿ=™=¨Ó6ˆLð ˜Ð$Ð$àˆ
r   c                 óF   — | j                  |||||||||	|
|||||||¬«      S )Nrp  )rÊ  )r'   r*  r[   re  rf  rg  rå   rU   rn  rl  rq  rr  r]   rç   rs  rt  rQ  rë   s                     r   r2   zTransformerDecoderLayer.forward÷  sO   € ð( × Ñ ØØØØ#Ø!5Ø$;ØØØ-ØØ-Ø)Ø/Ø%Ø%Ø 3Ø!5ð# !ó 
ð 	
r   )rB  gš™™™™™¹?r/   Fr   rB   rB   FFr   TF)NNNNNNNFNNNNNNN)r3   r4   r5   r6   r7   rn   rC  rD  r#   r   r   r¯  r  rÊ  r2   r8   r9   s   @r   r±   r±   ð  s„  ø„ ÙCð  $ØØ Ø!&ØØ"#ØØ$Ø+0Ø01Ø$(Ø',ñ!càðcð ðcð ð	cð
 ðcð ðcð ðcð ðcð ðcð  ðcð ðcð ðcð %)ðcð +.ðcð "ðcð  !%ð!cð" 
õ#cðJ7 Vð 7°(¸6Ñ2Bð 7Àvó 7ð &*Ø(,Ø15Ø48Ø $Ø&*Ø-1ØØ-1Ø(,Ø+/à)-Ø)-Ø04Ø15ñ'ZàðZð ðZð ˜6Ñ"ð	Zð
 ˜fÑ%ðZð ' vÑ.ðZð "*¨&Ñ!1ðZð �fÑðZð ˜FÑ#ðZð # 6Ñ*ðZð ðZð # 6Ñ*ðZð  ™ðZð " D™=ðZð  ˜vÑ&ð!Zð" ˜vÑ&ð#Zð$ & fÑ-ð%Zð& ' vÑ.ð'Zð( 
�%˜ ˜Ñ$Ñ	$ó)Zð@ &*Ø(,Ø15Ø48Ø $Ø&*Ø-1ØØ-1Ø(,Ø+/Ø)-Ø)-Ø04Ø15ñ%&
àð&
ð ð&
ð ˜6Ñ"ð	&
ð
 ˜fÑ%ð&
ð ' vÑ.ð&
ð "*¨&Ñ!1ð&
ð �fÑð&
ð ˜FÑ#ð&
ð # 6Ñ*ð&
ð ð&
ð # 6Ñ*ð&
ð  ™ð&
ð " D™=ð&
ð ˜vÑ&ð&
ð  ˜vÑ&ð!&
ð" & fÑ-ð#&
ð$ ' vÑ.ð%&
ð& 
�%˜ ˜Ñ$Ñ	$÷'&
r   r±   ÚmoduleÚ
num_clonesc                 óŠ   — t        j                  t        |«      D �cg c]  }t        j                  | «      ‘Œ c}«      S c c}w r   )r   r$   r´   ÚcopyÚdeepcopy)rÌ  rÍ  r0   s      r   rH  rH     s-   € Ü�=‰=¼¸zÓ9JÖK°Aœ$Ÿ-™-¨Õ/ÒKÓLÐLùÒKs   �A Úargsc           
      óP  — t        | dd«      }t        di d| j                  “d| j                  “d| j                  “d| j
                  “d| j                  “d| j                  “d	| j                  “d
d“d| j                  “d|“d| j                  “d| j                  “d| j                  “d| j                  “d| j                  “dt        | dd«      “dt        | dg «      “dt        | dd«      “dt        | dd«      “dt        | dd«      “dt        | dd«      “dt        | dd«      “ŽS )Nr–   Fr‹   rŒ   r�   rŽ   r‘   r�   r�   r”   Tr•   r—   r˜   r™   rš   r›   rœ   r�   rž   r   rŸ   r    r¡   Únum_decoder_registersr   r¢   r®  )rñ   rŠ   r   Ú	sa_nheadsÚ	ca_nheadsrŽ   r‘   r�   rÁ   r•   r—   r˜   r™   rÅ   r›   )rÑ  r–   s     r   Úbuild_transformerrÖ  $  s~  € Ü˜˜k¨5Ó1€Iäò Ø—’ðà—’ðð —’ðð ×$Ò$ð	ð
 —’ðð ×,Ò,ðð  Ÿ?š?ðñ !%ðð —?’?ðñ ðð  ×2Ò2ðð ×&Ò&ðð "×6Ò6ðð ×+Ò+ðð ×&Ò&ðô" !(¨Ð.GÈÔ Oð#ô$ !(¨Ð.GÈÔ Lð%ô& *1°Ð7YÐ[\Ô)]ð'ô( $ DÐ*?ÀÔFð)ô*  ' tÐ-EÀuÔMð+ô, ˜dÐ$;¸QÔ?ð-ô.  ' tÐ-EÀuÔMð/ð r   r’   c                 óž   — | dk(  rt         j                  S | dk(  rt         j                  S | dk(  rt         j                  S t	        d| › d�«      ‚)z-Return an activation function given a string.r/   ÚgeluÚgluz$activation should be relu/gelu, not ú.)r.   r/   rØ  rÙ  ÚRuntimeError)r’   s    r   r–  r–  B  sJ   € à�VÒÜ�v‰vˆØ�VÒÜ�v‰vˆØ�UÒÜ�u‰uˆÜ
Ð=¸j¸\ÈÐKÓ
LÐLr   )é€   )NNT)#r6   rÏ  rC   Útypingr   r   r   rE   Útorch.nn.functionalr   Ú
functionalr.   r   Úrfdetr.models._typesr   Úrfdetr.models.heads.keypointsr	   Úrfdetr.models.ops.modulesr
   r7   r   rE  r   rZ   r  rD  rˆ   rŠ   r²   r±   r$   rH  rÖ  rC  r–  r®  r   r   ú<module>rã     sk  ðñ ã Û ß /Ñ /ã ß Ð ß å ,Ý EÝ 2ð˜cð  có ô
ˆ"�)‰)ô ñ¨6ð ¸ð Àfó ð< *.Ø@DØñ	@MØð@Mà $™ð@Mð ˜U 3¨ 8™_Ñ-°Ñ6¸Ñ=ð@Mð ð	@Mð
 ˆ6�6ˆ>Ñó@MôFm$�"—)‘)ô m$ô`l#˜Ÿ™ô l#ô^m
˜bŸi™iô m
ð`	M˜Ÿ	™	ð M¨sð M°r·}±}ó Mð˜Kð ¨Kó ð<M 3ð M¨8°V°H¸fÐ4DÑ+Eô Mr   