§
    ‚ŠtjÄ ã                   ó   — d Z ddlZddlmZ ddlm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 dd	lmZ dd
lmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*  e#j+        e,¦  «        Z- e"d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z. e"d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z/ e"d¬¦  «        e G d„ de ¦  «        ¦   «         ¦   «         Z0 e"d¬¦  «        e G d„ d e ¦  «        ¦   «         ¦   «         Z1 G d!„ d"ej2        ¦  «        Z3d#„ Z4 G d$„ d%ej2        ¦  «        Z5 G d&„ d'ej2        ¦  «        Z6 G d(„ d)ej2        ¦  «        Z7	 	 dXd+ej2        d,ej8        d-ej8        d.ej8        d/ej8        dz  d0e9dz  d1e9d2ee!         fd3„Z: G d4„ d5ej2        ¦  «        Z; G d6„ d7ej2        ¦  «        Z< G d8„ d9ej2        ¦  «        Z= G d:„ d;e¦  «        Z> G d<„ d=e¦  «        Z? G d>„ d?ej2        ¦  «        Z@ G d@„ dAej2        ¦  «        ZA G dB„ dCej2        ¦  «        ZB G dD„ dEej2        ¦  «        ZCe" G dF„ dGe¦  «        ¦   «         ZD G dH„ dIeD¦  «        ZE G dJ„ dKeD¦  «        ZF e"dL¬¦  «         G dM„ dNeD¦  «        ¦   «         ZG G dO„ dPej2        ¦  «        ZH e"dQ¬¦  «         G dR„ dSeD¦  «        ¦   «         ZI e"dT¬¦  «         G dU„ dVeD¦  «        ¦   «         ZJg dW¢ZKdS )YzPyTorch DETR model.é    N)ÚCallable)Ú	dataclassé   )Úinitialization)ÚACT2FN)Úload_backbone)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ"BaseModelOutputWithCrossAttentionsÚSeq2SeqModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Ú#compile_compatible_method_lru_cache)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
DetrConfigaU  
    Base class for outputs of the DETR decoder. This class adds one attribute to BaseModelOutputWithCrossAttentions,
    namely an optional stack of intermediate decoder activations, i.e. the output of each decoder layer, each of them
    gone through a layernorm. This is useful when training the model with auxiliary decoding losses.
    )Úcustom_introc                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚDetrDecoderOutputa<  
    intermediate_hidden_states (`torch.FloatTensor` of shape `(config.decoder_layers, batch_size, num_queries, hidden_size)`, *optional*, returned when `config.auxiliary_loss=True`):
        Intermediate decoder activations, i.e. the output of each decoder layer, each of them gone through a
        layernorm.
    NÚintermediate_hidden_states©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__© ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/detr/modeling_detr.pyr   r   2   ó8   € € € € € € ðð ð <@Ð Ô 1°DÑ 8Ð?Ð?Ñ?Ð?Ð?r(   r   aS  
    Base class for outputs of the DETR encoder-decoder model. This class adds one attribute to Seq2SeqModelOutput,
    namely an optional stack of intermediate decoder activations, i.e. the output of each decoder layer, each of them
    gone through a layernorm. This is useful when training the model with auxiliary decoding losses.
    c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚDetrModelOutputa@  
    intermediate_hidden_states (`torch.FloatTensor` of shape `(config.decoder_layers, batch_size, sequence_length, hidden_size)`, *optional*, returned when `config.auxiliary_loss=True`):
        Intermediate decoder activations, i.e. the output of each decoder layer, each of them gone through a
        layernorm.
    Nr   r   r'   r(   r)   r,   r,   D   r*   r(   r,   z4
    Output type of [`DetrForObjectDetection`].
    c                   ó°  — e Zd ZU dZdZej        dz  ed<   dZe	dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZee	         dz  ed<   dZej        dz  ed<   dZeej                 dz  ed	<   dZeej                 dz  ed
<   dZeej                 dz  ed<   dZej        dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dS )ÚDetrObjectDetectionOutputaB  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` are provided)):
        Total loss as a linear combination of a negative log-likelihood (cross-entropy) for class prediction and a
        bounding box loss. The latter is defined as a linear combination of the L1 loss and the generalized
        scale-invariant IoU loss.
    loss_dict (`Dict`, *optional*):
        A dictionary containing the individual losses. Useful for logging.
    logits (`torch.FloatTensor` of shape `(batch_size, num_queries, num_classes + 1)`):
        Classification logits (including no-object) for all queries.
    pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_queries, 4)`):
        Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height). These
        values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding
        possible padding). You can use [`~DetrImageProcessor.post_process_object_detection`] to retrieve the
        unnormalized bounding boxes.
    auxiliary_outputs (`list[Dict]`, *optional*):
        Optional, only returned when auxiliary losses are activated (i.e. `config.auxiliary_loss` is set to `True`)
        and labels are provided. It is a list of dictionaries containing the two above keys (`logits` and
        `pred_boxes`) for each decoder layer.
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
        Sequence of hidden-states at the output of the last layer of the decoder of the model.
    NÚlossÚ	loss_dictÚlogitsÚ
pred_boxesÚauxiliary_outputsÚlast_hidden_stateÚdecoder_hidden_statesÚdecoder_attentionsÚcross_attentionsÚencoder_last_hidden_stateÚencoder_hidden_statesÚencoder_attentions)r    r!   r"   r#   r/   r$   r%   r&   r0   Údictr1   r2   r3   Úlistr4   r5   Útupler6   r7   r8   r9   r:   r'   r(   r)   r.   r.   V   s\  € € € € € € ðð ð, &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø!€Iˆt�d‰{Ð!Ð!Ñ!Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø+/Ð�t˜D”z DÑ(Ð/Ð/Ñ/Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ø8<Ð�e˜EÔ-Ô.°Ñ5Ð<Ð<Ñ<Ø:>Ð˜uÔ0°4Ñ7Ð>Ð>Ñ>Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ð>Ð>r(   r.   z1
    Output type of [`DetrForSegmentation`].
    c                   óÎ  — e Zd ZU dZdZej        dz  ed<   dZe	dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZej        dz  ed<   dZee	         dz  ed<   dZej        dz  ed	<   dZeej                 dz  ed
<   dZeej                 dz  ed<   dZeej                 dz  ed<   dZej        dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dS )ÚDetrSegmentationOutputaý  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` are provided)):
        Total loss as a linear combination of a negative log-likelihood (cross-entropy) for class prediction and a
        bounding box loss. The latter is defined as a linear combination of the L1 loss and the generalized
        scale-invariant IoU loss.
    loss_dict (`Dict`, *optional*):
        A dictionary containing the individual losses. Useful for logging.
    logits (`torch.FloatTensor` of shape `(batch_size, num_queries, num_classes + 1)`):
        Classification logits (including no-object) for all queries.
    pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_queries, 4)`):
        Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height). These
        values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding
        possible padding). You can use [`~DetrImageProcessor.post_process_object_detection`] to retrieve the
        unnormalized bounding boxes.
    pred_masks (`torch.FloatTensor` of shape `(batch_size, num_queries, height/4, width/4)`):
        Segmentation masks logits for all queries. See also
        [`~DetrImageProcessor.post_process_semantic_segmentation`] or
        [`~DetrImageProcessor.post_process_instance_segmentation`]
        [`~DetrImageProcessor.post_process_panoptic_segmentation`] to evaluate semantic, instance and panoptic
        segmentation masks respectively.
    auxiliary_outputs (`list[Dict]`, *optional*):
        Optional, only returned when auxiliary losses are activated (i.e. `config.auxiliary_loss` is set to `True`)
        and labels are provided. It is a list of dictionaries containing the two above keys (`logits` and
        `pred_boxes`) for each decoder layer.
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
        Sequence of hidden-states at the output of the last layer of the decoder of the model.
    Nr/   r0   r1   r2   Ú
pred_masksr3   r4   r5   r6   r7   r8   r9   r:   )r    r!   r"   r#   r/   r$   r%   r&   r0   r;   r1   r2   r@   r3   r<   r4   r5   r=   r6   r7   r8   r9   r:   r'   r(   r)   r?   r?   �   st  € € € € € € ðð ð8 &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø!€Iˆt�d‰{Ð!Ð!Ñ!Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø+/Ð�t˜D”z DÑ(Ð/Ð/Ñ/Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ø8<Ð�e˜EÔ-Ô.°Ñ5Ð<Ð<Ñ<Ø:>Ð˜uÔ0°4Ñ7Ð>Ð>Ñ>Ø=AÐ˜5 Ô!2Ô3°dÑ:ÐAÐAÑAØ:>Ð˜˜eÔ/Ô0°4Ñ7Ð>Ð>Ñ>Ð>Ð>r(   r?   c                   ó2   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚDetrFrozenBatchNorm2dzú
    BatchNorm2d where the batch statistics and the affine parameters are fixed.

    Copy-paste from torchvision.misc.ops with added eps before rqsrt, without which any other models than
    torchvision.models.resnet[18,34,50,101] produce nans.
    c                 óˆ  •— t          ¦   «                              ¦   «          |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         d S )NÚweightÚbiasÚrunning_meanÚrunning_var)ÚsuperÚ__init__Úregister_bufferr$   ÚonesÚzeros)ÚselfÚnÚ	__class__s     €r)   rI   zDetrFrozenBatchNorm2d.__init__»   s—   ø€ Ý‰Œ×ÒÑÔÐØ×Ò˜X¥u¤z°!¡}¤}Ñ5Ô5Ð5Ø×Ò˜V¥U¤[°¡^¤^Ñ4Ô4Ð4Ø×Ò˜^­U¬[¸©^¬^Ñ<Ô<Ð<Ø×Ò˜]­E¬J°q©M¬MÑ:Ô:Ð:Ð:Ð:r(   c           	      ón   •— |dz   }||v r||= t          ¦   «                              |||||||¦  «         d S )NÚnum_batches_tracked)rH   Ú_load_from_state_dict)
rM   Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsÚnum_batches_tracked_keyrO   s
            €r)   rR   z+DetrFrozenBatchNorm2d._load_from_state_dictÂ   s[   ø€ ð #)Ð+@Ñ"@ÐØ" jÐ0Ð0ØÐ2Ð3å‰Œ×%Ò%Ø˜ °¸ÀoÐWañ	
ô 	
ð 	
ð 	
ð 	
r(   c                 óB  — | j                              dddd¦  «        }| j                             dddd¦  «        }| j                             dddd¦  «        }| j                             dddd¦  «        }d}|||z                        ¦   «         z  }|||z  z
  }||z  |z   S )Nr   éÿÿÿÿgñhãˆµøä>)rD   ÚreshaperE   rG   rF   Úrsqrt)rM   ÚxrD   rE   rG   rF   ÚepsilonÚscales           r)   ÚforwardzDetrFrozenBatchNorm2d.forwardÍ   s°   € ð ”×$Ò$ Q¨¨A¨qÑ1Ô1ˆØŒy× Ò   B¨¨1Ñ-Ô-ˆØÔ&×.Ò.¨q°"°a¸Ñ;Ô;ˆØÔ(×0Ò0°°B¸¸1Ñ=Ô=ˆØˆØ˜+¨Ñ/×6Ò6Ñ8Ô8Ñ8ˆØ�l UÑ*Ñ*ˆØ�5‰y˜4ÑÐr(   )r    r!   r"   r#   rI   rR   rb   Ú__classcell__©rO   s   @r)   rB   rB   ³   sj   ø€ € € € € ðð ð;ð ;ð ;ð ;ð ;ð	
ð 	
ð 	
ð 	
ð 	
ð
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 r(   rB   c                 ól  — |                       ¦   «         D �]\  }}t          |t          j        ¦  «        r¼t	          |j        ¦  «        }|j        j        t          j        d¦  «        k    r||j         	                    |j        ¦  «         |j
         	                    |j
        ¦  «         |j         	                    |j        ¦  «         |j         	                    |j        ¦  «         || j        |<   t          t          |                     ¦   «         ¦  «        ¦  «        dk    rt#          |¦  «         �ŒdS )zš
    Recursively replace all `torch.nn.BatchNorm2d` with `DetrFrozenBatchNorm2d`.

    Args:
        model (torch.nn.Module):
            input model
    Úmetar   N)Únamed_childrenÚ
isinstanceÚnnÚBatchNorm2drB   Únum_featuresrD   Údevicer$   Úcopy_rE   rF   rG   Ú_modulesÚlenr<   ÚchildrenÚreplace_batch_norm)ÚmodelÚnameÚmoduleÚ
new_modules       r)   rq   rq   Ú   s  € ð ×,Ò,Ñ.Ô.ð 'ñ '‰ˆˆfÝ�f�bœnÑ-Ô-ð 		.Ý.¨vÔ/BÑCÔCˆJàŒ}Ô#¥u¤|°FÑ';Ô';Ò;Ð;ØÔ!×'Ò'¨¬Ñ6Ô6Ð6Ø”×%Ò% f¤kÑ2Ô2Ð2ØÔ'×-Ò-¨fÔ.AÑBÔBÐBØÔ&×,Ò,¨VÔ-?Ñ@Ô@Ð@à#-ˆEŒN˜4Ñ å�t�F—O’OÑ%Ô%Ñ&Ô&Ñ'Ô'¨!Ò+Ð+Ý˜vÑ&Ô&Ð&ùð'ð 'r(   c                   óF   ‡ — e Zd ZdZˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDetrConvEncoderzµ
    Convolutional backbone, using either the AutoBackbone API or one from the timm library.

    nn.BatchNorm2d layers are replaced by DetrFrozenBatchNorm2d as defined above.

    c                 ó0  •— t          ¦   «                              ¦   «          || _        t          |¦  «        }|j        | _        t          j        ¦   «         5  t          |¦  «         d d d ¦  «         n# 1 swxY w Y   d}t          |d¦  «        r	|j
        }d}|| _        |j        j        }d|v rd| j                             ¦   «         D ]L\  }}|r"d|vrd|vrd|vr|                     d¦  «         Œ)d|vrd	|vrd
|vr|                     d¦  «         ŒKd S d S )NFÚ	_backboneTÚresnetÚlayer2Úlayer3Úlayer4zstage.1zstage.2zstage.3)rH   rI   Úconfigr   ÚchannelsÚintermediate_channel_sizesr$   Úno_gradrq   Úhasattrry   rr   Úbackbone_configÚ
model_typeÚnamed_parametersÚrequires_grad_)rM   r~   ÚbackboneÚis_timm_modelÚbackbone_model_typers   Ú	parameterrO   s          €r)   rI   zDetrConvEncoder.__init__ú   s“  ø€ Ý‰Œ×ÒÑÔÐàˆŒå  Ñ(Ô(ˆØ*2Ô*;ˆÔ'õ Œ]‰_Œ_ð 	)ð 	)Ý˜xÑ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð
 ˆÝ�8˜[Ñ)Ô)ð 	!ØÔ)ˆHØ ˆMØˆŒ
à$Ô4Ô?ÐØÐ*Ð*Ð*Ø#'¤:×#>Ò#>Ñ#@Ô#@ð 8ð 8‘��iØ ð 8Ø tÐ+Ð+°ÀÐ0DÐ0DÈÐY]ÐI]ÐI]Ø!×0Ò0°Ñ7Ô7Ð7øà ¨Ð,Ð,°À$Ð1FÐ1FÈ9Ð\`ÐK`ÐK`Ø!×0Ò0°Ñ7Ô7Ð7øð +Ð*ð8ð 8s   ÁA3Á3A7Á:A7Úpixel_valuesÚ
pixel_maskc                 óv  — |                       |¦  «        }t          |t          ¦  «        r|j        }g }|D ]‚}t          j                             |d                               ¦   «         |j        dd …         ¬¦  «         	                    t          j        ¦  «        d         }|                     ||f¦  «         Œƒ|S )Néþÿÿÿ©Úsizer   )rr   rh   r;   Úfeature_mapsri   Ú
functionalÚinterpolateÚfloatÚshapeÚtor$   ÚboolÚappend)rM   r‹   rŒ   ÚfeaturesÚoutÚfeature_mapÚmasks          r)   rb   zDetrConvEncoder.forward  s²   € à—:’:˜lÑ+Ô+ˆÝ�h¥Ñ%Ô%ð 	-ØÔ,ˆHàˆØ#ð 	,ð 	,ˆKå”=×,Ò,¨Z¸Ô-=×-CÒ-CÑ-EÔ-EÈKÔL]Ð^`Ð^aÐ^aÔLbÐ,ÑcÔc×fÒfÕglÔgqÑrÔrÐstÔuˆDØ�JŠJ˜ TÐ*Ñ+Ô+Ð+Ð+Øˆ
r(   )	r    r!   r"   r#   rI   r$   ÚTensorrb   rc   rd   s   @r)   rw   rw   ò   sh   ø€ € € € € ðð ð8ð 8ð 8ð 8ð 8ð< E¤Lð ¸e¼lð ð ð ð ð ð ð ð r(   rw   c                   óP  ‡ — e Zd ZdZ	 	 	 	 ddededed	edz  fˆ fd
„Ze e	d¬¦  «        	 	 	 	 dde
j        de
j        ez  de
j        deded	edz  dede
j        dz  de
j        fd„¦   «         ¦   «         Z	 dde
j        de
j        ez  de
j        de
j        dz  de
j        f
d„Zˆ xZS )ÚDetrSinePositionEmbeddingz¬
    This is a more standard version of the position embedding, very similar to the one used by the Attention is all you
    need paper, generalized to work on images.
    é@   é'  FNÚnum_position_featuresÚtemperatureÚ	normalizera   c                 óÌ   •— t          ¦   «                              ¦   «          |�|du rt          d¦  «        ‚|| _        || _        || _        |€dt          j        z  n|| _        d S )NFz+normalize should be True if scale is passedé   )	rH   rI   Ú
ValueErrorr¢   r£   r¤   ÚmathÚpira   )rM   r¢   r£   r¤   ra   rO   s        €r)   rI   z"DetrSinePositionEmbedding.__init__,  sj   ø€ õ 	‰Œ×ÒÑÔÐØÐ ¨eÐ!3Ð!3ÝÐJÑKÔKÐKØ%:ˆÔ"Ø&ˆÔØ"ˆŒØ$) M�Q�œ‘[�[°uˆŒ
ˆ
ˆ
r(   r   ©Úmaxsizer•   rl   Údtyperœ   Úreturnc           
      ó   — | \  }}	}
}|€wt          j        d|
dz   ||¬¦  «        d d d …d f                              ||
|¦  «        }t          j        d|dz   ||¬¦  «        d d d d …f                              ||
|¦  «        }n?|                     |¦  «        }|                     d¦  «        }|                     d¦  «        }|r6d}||d d …dd …d d …f         |z   z  |z  }||d d …d d …dd …f         |z   z  |z  }t          j        |t           j        |¬¦  «                             |¦  «        }|dt          j        |dd¬¦  «        z  |z  z  }|d d …d d …d d …d f         |z  }|d d …d d …d d …d f         |z  }t          j        |d d …d d …d d …dd d…f                              ¦   «         |d d …d d …d d …dd d…f          	                    ¦   «         fd	¬
¦  «         
                    d¦  «        }t          j        |d d …d d …d d …dd d…f                              ¦   «         |d d …d d …d d …dd d…f          	                    ¦   «         fd	¬
¦  «         
                    d¦  «        }t          j        ||fd¬
¦  «                             dddd¦  «        }|S )Nr   )r¬   rl   r¦   g�íµ ÷Æ°>r\   Úfloor)Úrounding_moder   é   ©Údimr   )r$   ÚarangeÚexpandr–   ÚcumsumÚint64ÚdivÚstackÚsinÚcosÚflattenÚcatÚpermute)r•   rl   r¬   r¢   r¤   ra   r£   rœ   Ú
batch_sizeÚ_ÚheightÚwidthÚy_embedÚx_embedÚ
embed_maskÚepsÚdim_tÚpos_xÚpos_yÚposs                       r)   Úbuild_sine_position_embeddingz7DetrSinePositionEmbedding.build_sine_position_embedding;  s  € ð (-Ñ$ˆ
�A�v˜uØˆ<õ ”l 1 f¨q¡j¸ÀfÐMÑMÔMÈdÐTUÐTUÐTUÐW[ÈmÔ\×cÒcØ˜F Eñô ˆGõ ”l 1 e¨a¡i°uÀVÐLÑLÔLÈTÐSWÐYZÐYZÐYZÈ]Ô[×bÒbØ˜F Eñô ˆGˆGð Ÿš ™œˆJØ ×'Ò'¨Ñ*Ô*ˆGØ ×'Ò'¨Ñ*Ô*ˆGØð 	CØˆCØ ¨¨¨¨B¨C¨C°°°¨Ô!3°cÑ!9Ñ:¸UÑBˆGØ ¨¨¨¨A¨A¨A¨r¨s¨s¨Ô!3°cÑ!9Ñ:¸UÑBˆGå”Ð2½%¼+ÈfÐUÑUÔU×XÒXÐY^Ñ_Ô_ˆØ ¥E¤I¨e°QÀgÐ$NÑ$NÔ$NÑ NÐQfÑ fÑgˆà˜˜˜˜1˜1˜1˜a˜a˜a ˜Ô&¨Ñ.ˆØ˜˜˜˜1˜1˜1˜a˜a˜a ˜Ô&¨Ñ.ˆÝ”˜U 1 1 1 a a a¨¨¨¨A¨D¨q¨D =Ô1×5Ò5Ñ7Ô7¸¸q¸q¸qÀ!À!À!ÀQÀQÀQÈÈÈ1È¸}Ô9M×9QÒ9QÑ9SÔ9SÐTÐZ[Ð\Ñ\Ô\×dÒdÐefÑgÔgˆÝ”˜U 1 1 1 a a a¨¨¨¨A¨D¨q¨D =Ô1×5Ò5Ñ7Ô7¸¸q¸q¸qÀ!À!À!ÀQÀQÀQÈÈÈ1È¸}Ô9M×9QÒ9QÑ9SÔ9SÐTÐZ[Ð\Ñ\Ô\×dÒdÐefÑgÔgˆÝŒi˜ ˜¨AÐ.Ñ.Ô.×6Ò6°q¸!¸QÀÑBÔBˆØˆ
r(   c           
      ób   — |                       |||| j        | j        | j        | j        |¦  «        S ©N)rË   r¢   r¤   ra   r£   )rM   r•   rl   r¬   rœ   s        r)   rb   z!DetrSinePositionEmbedding.forwardg  s9   € ð ×1Ò1Ø�6˜5 $Ô"<¸d¼nÈdÌjÐZ^ÔZjÐlpñ
ô 
ð 	
r(   )r    r¡   FN)FNr¡   NrÍ   )r    r!   r"   r#   Úintr—   r”   rI   Ústaticmethodr   r$   ÚSizerl   Ústrr¬   r�   rË   rb   rc   rd   s   @r)   rŸ   rŸ   &  s¡  ø€ € € € € ðð ð &(Ø ØØ"ð=ð =à"ð=ð ð=ð ð	=ð
 �t‰|ð=ð =ð =ð =ð =ð =ð Ø(Ð(°Ð3Ñ3Ô3ð  Ø"Ø Ø$(ð(ð (ØŒzð(à”˜sÑ"ð(ð Œ{ð(ð  #ð	(ð
 ð(ð �t‰|ð(ð ð(ð Œl˜TÑ!ð(ð 
Œð(ð (ð (ñ 4Ô3ñ „\ð(ð^ %)ð	
ð 	
àŒzð	
ð ”˜sÑ"ð	
ð Œ{ð		
ð
 Œl˜TÑ!ð	
ð 
Œð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r(   rŸ   c                   ó˜   ‡ — e Zd ZdZdˆ fd„	Z ed¬¦  «        	 ddej        dej        e	z  d	ej
        d
ej        dz  fd„¦   «         Zˆ xZS )ÚDetrLearnedPositionEmbeddingzN
    This module learns positional embeddings up to a fixed maximum size.
    é   c                 ó°   •— t          ¦   «                              ¦   «          t          j        d|¦  «        | _        t          j        d|¦  «        | _        d S )Né2   )rH   rI   ri   Ú	EmbeddingÚrow_embeddingsÚcolumn_embeddings)rM   Úembedding_dimrO   s     €r)   rI   z%DetrLearnedPositionEmbedding.__init__x  sG   ø€ Ý‰Œ×ÒÑÔÐÝ œl¨2¨}Ñ=Ô=ˆÔÝ!#¤¨b°-Ñ!@Ô!@ˆÔÐÐr(   r   rª   Nr•   rl   r¬   rœ   c                 ó0  — |dd …         \  }}t          j        ||¬¦  «        }t          j        ||¬¦  «        }|                      |¦  «        }	|                      |¦  «        }
t          j        |	                     d¦  «                             |dd¦  «        |
                     d¦  «                             d|d¦  «        gd¬¦  «        }|                     ddd¦  «        }|                     d¦  «        }|                     |d         ddd¦  «        }|S )NrŽ   ©rl   r   r   r\   r²   r¦   )r$   r´   rÙ   rØ   r½   Ú	unsqueezeÚrepeatr¾   )rM   r•   rl   r¬   rœ   rÁ   rÂ   Úwidth_valuesÚheight_valuesÚx_embÚy_embrÊ   s               r)   rb   z$DetrLearnedPositionEmbedding.forward}  s  € ð ˜b˜c˜cœ
‰ˆ�Ý”| E°&Ð9Ñ9Ô9ˆÝœ V°FÐ;Ñ;Ô;ˆØ×&Ò& |Ñ4Ô4ˆØ×#Ò# MÑ2Ô2ˆÝŒi˜Ÿš¨Ñ+Ô+×2Ò2°6¸1¸aÑ@Ô@À%Ç/Â/ÐRSÑBTÔBT×B[ÒB[Ð\]Ð_dÐfgÑBhÔBhÐiÐoqÐrÑrÔrˆØ�kŠk˜!˜Q Ñ"Ô"ˆØ�mŠm˜AÑÔˆØ�jŠj˜˜qœ 1 a¨Ñ+Ô+ˆØˆ
r(   )rÔ   rÍ   )r    r!   r"   r#   rI   r   r$   rÐ   rl   rÑ   r¬   r�   rb   rc   rd   s   @r)   rÓ   rÓ   s  s¾   ø€ € € € € ðð ðAð Að Að Að Að Að
 )Ð(°Ð3Ñ3Ô3ð %)ðð àŒzðð ”˜sÑ"ðð Œ{ð	ð
 Œl˜TÑ!ðð ð ñ 4Ô3ðð ð ð ð r(   rÓ   ç        rt   ÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr\   ç      à¿r¦   r   r²   ©ÚpÚtrainingr   )
r�   r$   ÚmatmulÚ	transposeri   r’   Úsoftmaxré   rï   Ú
contiguous)
rt   rä   rå   ræ   rç   rè   ré   rê   Úattn_weightsÚattn_outputs
             r)   Úeager_attention_forwardrö   ’  sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r(   c                   óº   ‡ — e Zd ZdZ	 	 ddededededef
ˆ fd	„Z	 	 dde	j
        de	j
        d
z  de	j
        d
z  dee         dee	j
        e	j
        f         f
d„Zˆ xZS )ÚDetrSelfAttentionz¶
    Multi-headed self-attention from 'Attention Is All You Need' paper.

    In DETR, position embeddings are added to both queries and keys (but not values) in self-attention.
    rã   Tr~   Úhidden_sizeÚnum_attention_headsré   rE   c                 ó„  •— t          ¦   «                              ¦   «          || _        ||z  | _        | j        dz  | _        || _        d| _        t          j        |||¬¦  «        | _	        t          j        |||¬¦  «        | _
        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S ©Nrì   F©rE   ©rH   rI   r~   Úhead_dimrè   Úattention_dropoutÚ	is_causalri   ÚLinearÚk_projÚv_projÚq_projÚo_proj©rM   r~   rù   rú   ré   rE   rO   s         €r)   rI   zDetrSelfAttention.__init__µ  ó°   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ#Ð':Ñ:ˆŒØ”} dÑ*ˆŒØ!(ˆÔØˆŒå”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒˆˆr(   NÚhidden_statesrç   Úposition_embeddingsrê   r­   c                 ó¾  — |j         dd…         }g |¢d‘| j        ‘R }|�||z   n|}|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
t          j        | j	        j
        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )zZ
        Position embeddings are added to both queries and keys (but not values).
        Nr\   r   r¦   rã   ©ré   rè   ©r•   rÿ   r  Úviewrñ   r  r  r   Úget_interfacer~   Ú_attn_implementationrö   rï   r   rè   r]   ró   r  )rM   r	  rç   r
  rê   Úinput_shapeÚhidden_shapeÚquery_key_inputÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerõ   rô   s                 r)   rb   zDetrSelfAttention.forwardÉ  sŽ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆàATÐA`˜-Ð*=Ñ=Ð=Ðfsˆà—{’{ ?Ñ3Ô3×8Ò8¸ÑFÔF×PÒPÐQRÐTUÑVÔVˆØ—[’[ Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r(   ©rã   T©NN©r    r!   r"   r#   r   rÎ   r”   r—   rI   r$   r�   r   r   r=   rb   rc   rd   s   @r)   rø   rø   ®  s  ø€ € € € € ðð ð ØðEð EàðEð ðEð !ð	Eð
 ðEð ðEð Eð Eð Eð Eð Eð. /3Ø37ð	$)ð $)à”|ð$)ð œ tÑ+ð$)ð #œ\¨DÑ0ð	$)ð
 Ð+Ô,ð$)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð$)ð $)ð $)ð $)ð $)ð $)ð $)ð $)r(   rø   c                   óÞ   ‡ — e Zd ZdZ	 	 ddededededef
ˆ fd	„Z	 	 	 dde	j
        de	j
        de	j
        d
z  de	j
        d
z  de	j
        d
z  dee         dee	j
        e	j
        f         fd„Zˆ xZS )ÚDetrCrossAttentionzá
    Multi-headed cross-attention from 'Attention Is All You Need' paper.

    In DETR, queries get their own position embeddings, while keys get encoder position embeddings.
    Values don't get any position embeddings.
    rã   Tr~   rù   rú   ré   rE   c                 ó„  •— t          ¦   «                              ¦   «          || _        ||z  | _        | j        dz  | _        || _        d| _        t          j        |||¬¦  «        | _	        t          j        |||¬¦  «        | _
        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S rü   rþ   r  s         €r)   rI   zDetrCrossAttention.__init__ø  r  r(   Nr	  Úkey_value_statesrç   r
  Úencoder_position_embeddingsrê   r­   c                 ó
  — |j         dd…         }g |¢d‘| j        ‘R }|j         dd…         }	g |	¢d‘| j        ‘R }
|�||z   n|}|�||z   n|}|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |
¦  «                             dd¦  «        }|                      |¦  «                             |
¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        } || ||||f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )z¸
        Position embeddings logic:
        - Queries get position_embeddings
        - Keys get encoder_position_embeddings
        - Values don't get any position embeddings
        Nr\   r   r¦   rã   r  r  )rM   r	  r  rç   r
  r  rê   Úquery_input_shapeÚquery_hidden_shapeÚkv_input_shapeÚkv_hidden_shapeÚquery_inputÚ	key_inputr  r  r  r  rõ   rô   s                      r)   rb   zDetrCrossAttention.forward  sÞ  € ð *Ô/°°°Ô4ÐØDÐ0ÐD°"ÐD°d´mÐDÐDÐà)Ô/°°°Ô4ˆØ>˜NÐ>¨BÐ>°´Ð>Ð>ˆà=PÐ=\�mÐ&9Ñ9Ð9Ðboˆð +Ð6ð Ð:Ñ:Ð:à!ð 	ð —{’{ ;Ñ/Ô/×4Ò4Ð5GÑHÔH×RÒRÐSTÐVWÑXÔXˆØ—[’[ Ñ+Ô+×0Ò0°ÑAÔA×KÒKÈAÈqÑQÔQˆ
Ø—{’{Ð#3Ñ4Ô4×9Ò9¸/ÑJÔJ×TÒTÐUVÐXYÑZÔZˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)ÐAÐ+<ÐA¸bÐAÐAÐA×LÒLÑNÔNˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r(   r  ©NNNr  rd   s   @r)   r  r  ð  s%  ø€ € € € € ðð ð ØðEð EàðEð ðEð !ð	Eð
 ðEð ðEð Eð Eð Eð Eð Eð0 /3Ø37Ø;?ð1)ð 1)à”|ð1)ð  œ,ð1)ð œ tÑ+ð	1)ð
 #œ\¨DÑ0ð1)ð &+¤\°DÑ%8ð1)ð Ð+Ô,ð1)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð1)ð 1)ð 1)ð 1)ð 1)ð 1)ð 1)ð 1)r(   r  c                   óP   ‡ — e Zd Zdededefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚDetrMLPr~   rù   Úintermediate_sizec                 ó  •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        t          j        ||¦  «        | _        t          |j                 | _        |j	        | _	        |j
        | _
        d S rÍ   )rH   rI   ri   r  Úfc1Úfc2r   Úactivation_functionÚactivation_fnÚactivation_dropoutré   )rM   r~   rù   r*  rO   s       €r)   rI   zDetrMLP.__init__A  si   ø€ Ý‰Œ×ÒÑÔÐÝ”9˜[Ð*;Ñ<Ô<ˆŒÝ”9Ð.°Ñ<Ô<ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔØ”~ˆŒˆˆr(   r	  r­   c                 ó0  — |                       |                      |¦  «        ¦  «        }t          j                             || j        | j        ¬¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }|S )Nrí   )r/  r,  ri   r’   ré   r0  rï   r-  )rM   r	  s     r)   rb   zDetrMLP.forwardI  s}   € Ø×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØÐr(   )
r    r!   r"   r   rÎ   rI   r$   r�   rb   rc   rd   s   @r)   r)  r)  @  sy   ø€ € € € € ð&˜zð &¸ð &ÐPSð &ð &ð &ð &ð &ð &ð U¤\ð °e´lð ð ð ð ð ð ð ð r(   r)  c                   ó~   ‡ — e Zd Zdefˆ fd„Z	 d
dej        dej        dej        dz  dee         dej        f
d	„Z	ˆ xZ
S )ÚDetrEncoderLayerr~   c                 ó~  •— t          ¦   «                              ¦   «          |j        | _        t	          || j        |j        |j        ¬¦  «        | _        t          j	        | j        ¦  «        | _
        |j        | _        t          || j        |j        ¦  «        | _        t          j	        | j        ¦  «        | _        d S ©N)r~   rù   rú   ré   )rH   rI   Úd_modelrù   rø   Úencoder_attention_headsr   Ú	self_attnri   Ú	LayerNormÚself_attn_layer_normré   r)  Úencoder_ffn_dimÚmlpÚfinal_layer_norm©rM   r~   rO   s     €r)   rI   zDetrEncoderLayer.__init__R  s¢   ø€ Ý‰Œ×ÒÑÔÐØ!œ>ˆÔÝ*ØØÔ(Ø &Ô >ØÔ,ð	
ñ 
ô 
ˆŒõ %'¤L°Ô1AÑ$BÔ$BˆÔ!Ø”~ˆŒÝ˜6 4Ô#3°VÔ5KÑLÔLˆŒÝ "¤¨TÔ-=Ñ >Ô >ˆÔÐÐr(   Nr	  rç   Úspatial_position_embeddingsrê   r­   c                 óì  — |} | j         d|||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|}|                      |¦  «        }||z   }|                      |¦  «        }| j        r_t          j	        |¦  «         
                    ¦   «         s9t          j        |j        ¦  «        j        dz
  }t          j        || |¬¦  «        }|S )a[  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, hidden_size)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, target_len, source_len)` where padding elements are indicated by very large negative
                values.
            spatial_position_embeddings (`torch.FloatTensor`, *optional*):
                Spatial position embeddings (2D positional encodings of image locations), to be added to both
                the queries and keys in self-attention (but not to values).
        )r	  rç   r
  rí   iè  )ÚminÚmaxr'   )r8  ri   r’   ré   rï   r:  r<  r=  r$   ÚisfiniteÚallÚfinfor¬   rB  Úclamp)rM   r	  rç   r?  rê   ÚresidualrÀ   Úclamp_values           r)   rb   zDetrEncoderLayer.forward`  s  € ð" !ˆØ)˜4œ>ð 
Ø'Ø)Ø ;ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆà ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàŒ=ð 	^Ý”> -Ñ0Ô0×4Ò4Ñ6Ô6ð ^Ý#œk¨-Ô*=Ñ>Ô>ÔBÀTÑI�Ý %¤¨MÀ¸|ÐQ\Ð ]Ñ ]Ô ]�àÐr(   rÍ   ©r    r!   r"   r   rI   r$   r�   r   r   rb   rc   rd   s   @r)   r3  r3  Q  s¦   ø€ € € € € ð?˜zð ?ð ?ð ?ð ?ð ?ð ?ð$ <@ð	'ð 'à”|ð'ð œð'ð &+¤\°DÑ%8ð	'ð
 Ð+Ô,ð'ð 
Œð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r(   r3  c                   óÈ   ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dz  dej        dz  dej        dz  d	ej        dz  d
ee         dej        fd„Z	ˆ xZ
S )ÚDetrDecoderLayerr~   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        t	          || j        |j        |j        ¬¦  «        | _        |j        | _        t          j
        | j        ¦  «        | _        t          || j        |j        |j        ¬¦  «        | _        t          j
        | j        ¦  «        | _        t          || j        |j        ¦  «        | _        t          j
        | j        ¦  «        | _        d S r5  )rH   rI   r6  rù   rø   Údecoder_attention_headsr   r8  ré   ri   r9  r:  r  Úencoder_attnÚencoder_attn_layer_normr)  Údecoder_ffn_dimr<  r=  r>  s     €r)   rI   zDetrDecoderLayer.__init__‹  så   ø€ Ý‰Œ×ÒÑÔÐØ!œ>ˆÔå*ØØÔ(Ø &Ô >ØÔ,ð	
ñ 
ô 
ˆŒð ”~ˆŒå$&¤L°Ô1AÑ$BÔ$BˆÔ!Ý.ØØÔ(Ø &Ô >ØÔ,ð	
ñ 
ô 
ˆÔõ (*¤|°DÔ4DÑ'EÔ'EˆÔ$Ý˜6 4Ô#3°VÔ5KÑLÔLˆŒÝ "¤¨TÔ-=Ñ >Ô >ˆÔÐÐr(   Nr	  rç   r?  Ú"object_queries_position_embeddingsr9   Úencoder_attention_maskrê   r­   c           	      óà  — |} | j         d|||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|�^|} | j        d|||||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|}|                      |¦  «        }||z   }|  	                    |¦  «        }|S )a  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, hidden_size)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, target_len, source_len)` where padding elements are indicated by very large negative
                values.
            spatial_position_embeddings (`torch.FloatTensor`, *optional*):
                Spatial position embeddings (2D positional encodings from encoder) that are added to the keys only
                in the cross-attention layer (not to values).
            object_queries_position_embeddings (`torch.FloatTensor`, *optional*):
                Position embeddings for the object query slots. In self-attention, these are added to both queries
                and keys (not values). In cross-attention, these are added to queries only (not to keys or values).
            encoder_hidden_states (`torch.FloatTensor`):
                cross attention input to the layer of shape `(batch, seq_len, hidden_size)`
            encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
                `(batch, 1, target_len, source_len)` where padding elements are indicated by very large negative
                values.
        )r	  r
  rç   rí   N)r	  r  rç   r
  r  r'   )
r8  ri   r’   ré   rï   r:  rN  rO  r<  r=  )
rM   r	  rç   r?  rQ  r9   rR  rê   rG  rÀ   s
             r)   rb   zDetrDecoderLayer.forward¢  sF  € ð8 !ˆð *˜4œ>ð 
Ø'Ø BØ)ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆð !Ð,Ø$ˆHà0˜tÔ0ð  Ø+Ø!6Ø5Ø$FØ,Gð ð  ð ð ð  ÑˆM˜1õ œM×1Ò1°-À4Ä<ÐZ^ÔZgÐ1ÑhÔhˆMØ$ }Ñ4ˆMØ ×8Ò8¸ÑGÔGˆMð !ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàÐr(   )NNNNNrI  rd   s   @r)   rK  rK  Š  sú   ø€ € € € € ð?˜zð ?ð ?ð ?ð ?ð ?ð ?ð4 /3Ø;?ØBFØ59Ø6:ðAð Aà”|ðAð œ tÑ+ðAð &+¤\°DÑ%8ð	Að
 -2¬L¸4Ñ,?ðAð  %œ|¨dÑ2ðAð !&¤¨tÑ 3ðAð Ð+Ô,ðAð 
ŒðAð Að Að Að Að Að Að Ar(   rK  c                   óV   ‡ — e Zd ZdZd
dededefˆ fd„Zdej        dej        fd	„Z	ˆ xZ
S )ÚDetrConvBlockz5Basic conv block: Conv3x3 -> GroupNorm -> Activation.ÚreluÚin_channelsÚout_channelsÚ
activationc                 óö   •— t          ¦   «                              ¦   «          t          j        ||dd¬¦  «        | _        t          j        t          d|¦  «        |¦  «        | _        t          |         | _	        d S )Nr   r   ©Úkernel_sizeÚpaddingé   )
rH   rI   ri   ÚConv2dÚconvÚ	GroupNormrA  Únormr   rY  )rM   rW  rX  rY  rO   s       €r)   rI   zDetrConvBlock.__init__é  sa   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜k¨<ÀQÐPQÐRÑRÔRˆŒ	Ý”L¥ Q¨Ñ!5Ô!5°|ÑDÔDˆŒ	Ý  Ô,ˆŒˆˆr(   r_   r­   c                 óx   — |                       |                      |                      |¦  «        ¦  «        ¦  «        S rÍ   )rY  rb  r`  )rM   r_   s     r)   rb   zDetrConvBlock.forwardï  s*   € Ø�Š˜tŸyšy¨¯ª°1©¬Ñ6Ô6Ñ7Ô7Ð7r(   ©rV  ©r    r!   r"   r#   rÎ   rÑ   rI   r$   r�   rb   rc   rd   s   @r)   rU  rU  æ  sƒ   ø€ € € € € Ø?Ð?ð-ð - Cð -°sð -Èð -ð -ð -ð -ð -ð -ð8˜œð 8¨%¬,ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r(   rU  c            	       óh   ‡ — e Zd ZdZddedededefˆ fd„Zdej        d	ej        d
ej        fd„Z	ˆ xZ
S )ÚDetrFPNFusionStagez\Single FPN fusion stage combining low-resolution features with high-resolution FPN features.rV  Úfpn_channelsÚcurrent_channelsÚoutput_channelsrY  c                 ó¬   •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        t          |||¦  «        | _        d S )Nr   ©r\  )rH   rI   ri   r_  Úfpn_adapterrU  Úrefine)rM   rh  ri  rj  rY  rO   s        €r)   rI   zDetrFPNFusionStage.__init__ö  sL   ø€ Ý‰Œ×ÒÑÔÐÝœ9 \Ð3CÐQRÐSÑSÔSˆÔÝ#Ð$4°oÀzÑRÔRˆŒˆˆr(   r™   Úfpn_featuresr­   c                 óº   — |                       |¦  «        }t          j                             ||j        dd…         d¬¦  «        }|                      ||z   ¦  «        S )a?  
        Args:
            features: Current features to upsample, shape (B*Q, current_channels, H_in, W_in)
            fpn_features: FPN features at target resolution, shape (B*Q, fpn_channels, H_out, W_out)

        Returns:
            Fused and refined features, shape (B*Q, output_channels, H_out, W_out)
        rŽ   NÚnearest)r�   Úmode)rm  ri   r’   r“   r•   rn  )rM   r™   ro  s      r)   rb   zDetrFPNFusionStage.forwardû  sW   € ð ×'Ò'¨Ñ5Ô5ˆÝ”=×,Ò,¨X¸LÔ<NÈrÈsÈsÔ<SÐZcÐ,ÑdÔdˆØ�{Š{˜<¨(Ñ2Ñ3Ô3Ð3r(   rd  re  rd   s   @r)   rg  rg  ó  s    ø€ € € € € ØfÐfðSð S Sð S¸Cð SÐRUð SÐcfð Sð Sð Sð Sð Sð Sð
4 ¤ð 4¸E¼Lð 4ÈUÌ\ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r(   rg  c            	       ó�   ‡ — e Zd ZdZ	 ddedee         dedefˆ fd„Zdej	        d	ej	        d
eej	                 dej	        fd„Z
ˆ xZS )ÚDetrMaskHeadSmallConva+  
    Segmentation mask head that generates per-query masks using FPN-based progressive upsampling.

    Combines attention maps (spatial localization) with encoder features (semantics) and progressively
    upsamples through multiple scales, fusing with FPN features for high-resolution detail.
    rV  Úinput_channelsrh  rù   r.  c           
      óü  •— t          ¦   «                              ¦   «          |dz  dk    rt          d|› �¦  «        ‚t          |||¦  «        | _        t          ||dz  |¦  «        | _        t          j        t          |d         |dz  |dz  |¦  «        t          |d         |dz  |dz  |¦  «        t          |d         |dz  |dz  |¦  «        g¦  «        | _	        t          j
        |dz  ddd¬	¦  «        | _        d S )
Nr^  r   z+input_channels must be divisible by 8, got r¦   r±   r   é   r   r[  )rH   rI   r§   rU  Úconv1Úconv2ri   Ú
ModuleListrg  Ú
fpn_stagesr_  Úoutput_conv)rM   ru  rh  rù   r.  rO   s        €r)   rI   zDetrMaskHeadSmallConv.__init__  s  ø€ õ 	‰Œ×ÒÑÔÐØ˜AÑ Ò"Ð"ÝÐ[È>Ð[Ð[Ñ\Ô\Ð\å" >°>ÐCVÑWÔWˆŒ
Ý" >°;À!Ñ3CÐEXÑYÔYˆŒ
õ œ-å" <°¤?°KÀ1Ñ4DÀkÐUVÑFVÐXkÑlÔlÝ" <°¤?°KÀ1Ñ4DÀkÐUVÑFVÐXkÑlÔlÝ" <°¤?°KÀ1Ñ4DÀkÐUWÑFWÐYlÑmÔmðñ
ô 
ˆŒõ œ9 [°BÑ%6¸ÀqÐRSÐTÑTÔTˆÔÐÐr(   r™   Úattention_masksro  r­   c                 óâ  ‡— |j         d         Š|                     d¦  «                             d‰ddd¦  «                             dd¦  «        }|                     dd¦  «        }ˆfd„|D ¦   «         }t	          j        ||gd¬¦  «        }|                      |¦  «        }|                      |¦  «        }t          | j	        |¦  «        D ]\  }} |||¦  «        }Œ|  
                    |¦  «        S )a­  
        Args:
            features: Encoder output features, shape (batch_size, hidden_size, H, W)
            attention_masks: Cross-attention maps from decoder, shape (batch_size, num_queries, num_heads, H, W)
            fpn_features: List of 3 FPN features from low to high resolution, each (batch_size, C, H, W)

        Returns:
            Predicted masks, shape (batch_size * num_queries, 1, output_H, output_W)
        r   r\   r   c           	      ó�   •— g | ]B}|                      d ¦  «                             d‰ddd¦  «                             dd ¦  «        ‘ŒCS )r   r\   r   )rÝ   rµ   r¼   )Ú.0Úfpn_featÚnum_queriess     €r)   ú
<listcomp>z1DetrMaskHeadSmallConv.forward.<locals>.<listcomp>>  s[   ø€ ð 
ð 
ð 
ØX`ˆH×Ò˜qÑ!Ô!×(Ò(¨¨[¸"¸bÀ"ÑEÔE×MÒMÈaÐQRÑSÔSð
ð 
ð 
r(   r²   )r•   rÝ   rµ   r¼   r$   r½   rx  ry  Úzipr{  r|  )rM   r™   r}  ro  r	  Ú	fpn_stager�  r‚  s          @r)   rb   zDetrMaskHeadSmallConv.forward*  s  ø€ ð &Ô+¨AÔ.ˆð ×%Ò% aÑ(Ô(×/Ò/°°KÀÀRÈÑLÔL×TÒTÐUVÐXYÑZÔZˆØ)×1Ò1°!°QÑ7Ô7ˆð
ð 
ð 
ð 
Ødpð
ñ 
ô 
ˆõ œ	 8¨_Ð"=À1ÐEÑEÔEˆØŸ
š
 =Ñ1Ô1ˆØŸ
š
 =Ñ1Ô1ˆå#& t¤¸Ñ#EÔ#Eð 	?ð 	?ÑˆI�xØ%˜I m°XÑ>Ô>ˆMˆMà×Ò Ñ.Ô.Ð.r(   rd  )r    r!   r"   r#   rÎ   r<   rÑ   rI   r$   r�   rb   rc   rd   s   @r)   rt  rt  	  sÍ   ø€ € € € € ðð ð $*ðUð UàðUð ˜3”iðUð ð	Uð
 !ðUð Uð Uð Uð Uð Uð2/à”,ð/ð œð/ð ˜5œ<Ô(ð	/ð
 
Œð/ð /ð /ð /ð /ð /ð /ð /r(   rt  c            	       óv   ‡ — e Zd ZdZ	 	 ddedededefˆ fd„Z	 dd
ej	        dej	        dej	        d	z  fd„Z
ˆ xZS )ÚDetrMHAttentionMapzdThis is a 2D attention module, which only returns the attention softmax (no multiplication by value)rã   Trù   rú   ré   rE   c                 óø   •— t          ¦   «                              ¦   «          ||z  | _        | j        dz  | _        || _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S )Nrì   rý   )	rH   rI   rÿ   rè   r   ri   r  r  r  )rM   rù   rú   ré   rE   rO   s        €r)   rI   zDetrMHAttentionMap.__init__O  sr   ø€ õ 	‰Œ×ÒÑÔÐØ#Ð':Ñ:ˆŒØ”} dÑ*ˆŒØ!(ˆÔå”i ¨[¸tÐDÑDÔDˆŒÝ”i ¨[¸tÐDÑDÔDˆŒˆˆr(   Nr  r  rç   c                 óÒ  — g |j         d d…         ¢d‘| j        ‘R }|j         d         d| j        g|j         dd …         ¢R }|                      |¦  «                             |¦  «        }t          j                             || j        j         	                    d¦  «         	                    d¦  «        | j        j
        ¦  «                             |¦  «        }|j         \  }}}}	|j         \  }
}
}
}}||z  ||	f}||z  ||z  |	f}|||||f}|                     dd¦  «                             ¦   «                              |¦  «        }|                     ddddd¦  «                             ¦   «                              |¦  «        }t          j        || j        z  |                     dd¦  «        ¦  «                             |¦  «                             dd¦  «        }|�||z   }t          j                             |                     d¦  «        d¬¦  «                             |                     ¦   «         ¦  «        }t          j                             || j        | j        ¬	¦  «        }|S )
Nr\   r   rŽ   r   r¦   r   r±   r²   rí   )r•   rÿ   r  r  ri   r’   Úconv2dr  rD   rÝ   rE   rñ   ró   r¾   r$   rð   rè   rò   r¼   r�   ré   r   rï   )rM   r  r  rç   r"  Úkey_hidden_shaper¿   r‚  Ú	num_headsrÿ   rÀ   rÁ   rÂ   Úquery_shapeÚ	key_shapeÚattn_weights_shaperä   rå   rô   s                      r)   rb   zDetrMHAttentionMap.forward^  sZ  € ð K˜|Ô1°#°2°#Ô6ÐJ¸ÐJ¸D¼MÐJÐJÐØ&Ô,¨QÔ/°°T´]Ð[ÀZÔEUÐVXÐVYÐVYÔEZÐ[Ð[Ðà—{’{ <Ñ0Ô0×5Ò5Ð6HÑIÔIˆÝ”]×)Ò)Ø˜œÔ*×4Ò4°RÑ8Ô8×BÒBÀ2ÑFÔFÈÌÔHXñ
ô 
ç
Š$ÐÑ
 Ô
 ð 	ð 8DÔ7IÑ4ˆ
�K ¨HØ!+Ô!1Ñˆˆ1ˆa�˜Ø! IÑ-¨{¸HÐEˆØ )Ñ+¨V°e©^¸XÐFˆ	Ø(¨)°[À&È%ÐPÐà×&Ò& q¨!Ñ,Ô,×7Ò7Ñ9Ô9×>Ò>¸{ÑKÔKˆØ× Ò   A q¨!¨QÑ/Ô/×:Ò:Ñ<Ô<×AÒAÀ)ÑLÔLˆõ Œ\˜% $¤,Ñ.°·²¸aÀÑ0CÔ0CÑDÔD×JÒJÐK]Ñ^Ô^×hÒhÐijÐlmÑnÔnð 	ð Ð%Ø'¨.Ñ8ˆLå”}×,Ò,¨\×-AÒ-AÀ!Ñ-DÔ-DÈ"Ð,ÑMÔM×RÒRÐS_×SdÒSdÑSfÔSfÑgÔgˆÝ”}×,Ò,¨\¸TÔ=SÐ^bÔ^kÐ,ÑlÔlˆàÐr(   r  rÍ   )r    r!   r"   r#   rÎ   r”   r—   rI   r$   r�   rb   rc   rd   s   @r)   r‡  r‡  L  sÆ   ø€ € € € € ØnÐnð ØðEð EàðEð !ðEð ð	Eð
 ðEð Eð Eð Eð Eð Eð  koðð Ø!œLðØ6;´lðØTYÔT`ÐcgÑTgðð ð ð ð ð ð ð r(   r‡  c                   ó‚   ‡ — e Zd ZU eed<   dZdZdZg d¢ZdZ	dZ
dZdZdZdgZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )	ÚDetrPreTrainedModelr~   rr   r‹   )Úimage)rw   r3  rK  TzMdetr\.model\.backbone\.model\.layer\d+\.0\.downsample\.1\.num_batches_trackedc                 ó6  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          ¦  «        ro|                     ¦   «         D ]X}t	          |t          j        ¦  «        r<t          j
        |j        d¬¦  «         |j        �t          j        |j        d¦  «         ŒYd S t	          |t          ¦  «        r~t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        |¬¦  «         t          j        |j        j        |¬¦  «         d S t	          |t&          ¦  «        r>t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         d S d S )Nr   )Úar   )Úgain)rH   Ú_init_weightsr~   Úinit_xavier_stdrh   rt  Úmodulesri   r_  ÚinitÚkaiming_uniform_rD   rE   Ú	constant_r‡  Úzeros_r  r  Úxavier_uniform_rÓ   Úuniform_rØ   rÙ   )rM   rt   Ú
xavier_stdÚmrO   s       €r)   r–  z!DetrPreTrainedModel._init_weights�  sn  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ø”[Ô0ˆ
å�fÕ3Ñ4Ô4ð 	;à—^’^Ñ%Ô%ð 2ð 2�Ý˜a¥¤Ñ+Ô+ð 2ÝÔ)¨!¬(°aÐ8Ñ8Ô8Ð8Ø”vÐ)Ýœ q¤v¨qÑ1Ô1Ð1øð	2ð 2õ
 ˜Õ 2Ñ3Ô3ð 	;ÝŒK˜œÔ*Ñ+Ô+Ð+ÝŒK˜œÔ*Ñ+Ô+Ð+ÝÔ  ¤Ô!5¸JÐGÑGÔGÐGÝÔ  ¤Ô!5¸JÐGÑGÔGÐGÐGÐGÝ˜Õ <Ñ=Ô=ð 	;ÝŒM˜&Ô/Ô6Ñ7Ô7Ð7ÝŒM˜&Ô2Ô9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;r(   )r    r!   r"   r   r&   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_attention_backendÚ_supports_flex_attnÚ"_keys_to_ignore_on_load_unexpectedr$   r�   r–  rc   rd   s   @r)   r‘  r‘    sŸ   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØVÐVÐVÐØ&*Ð#Ø€NØÐØ"&ÐØÐàXð*Ð&ð €U„]�_„_ð;ð ;ð ;ð ;ñ „_ð;ð ;ð ;ð ;ð ;r(   r‘  c                   óv   ‡ — e Zd ZdZeedœZdefˆ fd„Ze	e
	 	 	 d	dee         defd„¦   «         ¦   «         Zˆ xZS )
ÚDetrEncoderzÛ
    Transformer encoder that processes a flattened feature map from a vision backbone, composed of a stack of
    [`DetrEncoderLayer`] modules.

    Args:
        config (`DetrConfig`): Model configuration object.
    )r	  Ú
attentionsr~   c                 óú   •‡— t          ¦   «                              ‰¦  «         ‰j        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r'   )r3  ©r€  rÀ   r~   s     €r)   rƒ  z(DetrEncoder.__init__.<locals>.<listcomp>´  ó"   ø€ Ð$dÐ$dÐ$dÀ!Õ%5°fÑ%=Ô%=Ð$dÐ$dÐ$dr(   )	rH   rI   ré   ri   rz  ÚrangeÚencoder_layersÚlayersÚ	post_initr>  s    `€r)   rI   zDetrEncoder.__init__°  sn   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à”~ˆŒÝ”mÐ$dÐ$dÐ$dÐ$dÅuÈVÔMbÑGcÔGcÐ$dÑ$dÔ$dÑeÔeˆŒð 	�ŠÑÔÐÐÐr(   Nrê   r­   c                 óØ   — |}t           j                             || j        | j        ¬¦  «        }t	          | j        ||¬¦  «        }| j        D ]} |||fd|i|¤Ž}Œt          |¬¦  «        S )a¢  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Flattened feature map (output of the backbone + projection layer) that is passed to the encoder.
            attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on padding pixel features. Mask values selected in `[0, 1]`:

                - 1 for pixel features that are real (i.e. **not masked**),
                - 0 for pixel features that are padding (i.e. **masked**).

                [What are attention masks?](../glossary#attention-mask)
            spatial_position_embeddings (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Spatial position embeddings (2D positional encodings) that are added to the queries and keys in each self-attention layer.
        rí   ©r~   Úinputs_embedsrç   r?  )r4   )ri   r’   ré   rï   r	   r~   r´  r   )rM   r¸  rç   r?  rê   r	  Úencoder_layers          r)   rb   zDetrEncoder.forward¹  s�   € ð. &ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå2Ø”;Ø'Ø)ð
ñ 
ô 
ˆð "œ[ð 	ð 	ˆMà)˜MØ˜~ðð ØKfðØjpðð ˆMˆMõ °Ð?Ñ?Ô?Ð?r(   r'  )r    r!   r"   r#   r3  rø   Ú_can_record_outputsr   rI   r   r   r   r   r   rb   rc   rd   s   @r)   r¬  r¬  ¥  s¿   ø€ € € € € ðð ð -=ÐL]Ð^Ð^Ðð˜zð ð ð ð ð ð ð  Øð ØØ$(ð	$@ð $@ð
 Ð+Ô,ð$@ð 
ð$@ð $@ð $@ñ „_ñ  Ôð$@ð $@ð $@ð $@ð $@r(   r¬  c                   ó~   ‡ — e Zd ZdZeeedœZdefˆ fd„Z	e
e	 	 	 	 	 	 d	dee         defd„¦   «         ¦   «         Zˆ xZS )
ÚDetrDecodera   
    Transformer decoder that refines a set of object queries. It is composed of a stack of [`DetrDecoderLayer`] modules,
    which apply self-attention to the queries and cross-attention to the encoder's outputs.

    Args:
        config (`DetrConfig`): Model configuration object.
    )r	  r­  r7   r~   c                 ó6  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        ‰j	        ¦  «        | _
        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r'   )rK  r°  s     €r)   rƒ  z(DetrDecoder.__init__.<locals>.<listcomp>õ  r±  r(   )rH   rI   ré   ri   rz  r²  Údecoder_layersr´  r9  r6  Ú	layernormrµ  r>  s    `€r)   rI   zDetrDecoder.__init__ñ  s�   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒå”mÐ$dÐ$dÐ$dÐ$dÅuÈVÔMbÑGcÔGcÐ$dÑ$dÔ$dÑeÔeˆŒåœ f¤nÑ5Ô5ˆŒð 	�ŠÑÔÐÐÐr(   Nrê   r­   c                 óÀ  — |�|}|�t          | j        ||¬¦  «        }|�|�t          | j        |||¬¦  «        }| j        j        rdnd}	t          | j        ¦  «        D ];\  }
} ||||||fd|i|¤Ž}| j        j        r|                      |¦  «        }|	|fz  }	Œ<|                      |¦  «        }| j        j        rt          j        |	¦  «        }	t          ||	¬¦  «        S )a
  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                The query embeddings that are passed into the decoder.

            attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on certain queries. Mask values selected in `[0, 1]`:

                - 1 for queries that are **not masked**,
                - 0 for queries that are **masked**.

                [What are attention masks?](../glossary#attention-mask)
            encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, encoder_sequence_length, hidden_size)`, *optional*):
                Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention
                of the decoder.
            encoder_attention_mask (`torch.LongTensor` of shape `(batch_size, encoder_sequence_length)`, *optional*):
                Mask to avoid performing cross-attention on padding pixel_values of the encoder. Mask values selected
                in `[0, 1]`:

                - 1 for pixels that are real (i.e. **not masked**),
                - 0 for pixels that are padding (i.e. **masked**).

            spatial_position_embeddings (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
                Spatial position embeddings (2D positional encodings from encoder) that are added to the keys in each cross-attention layer.
            object_queries_position_embeddings (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`, *optional*):
                Position embeddings for the object query slots that are added to the queries and keys in each self-attention layer.
        Nr·  )r~   r¸  rç   r9   r'   rR  )r4   r   )	r	   r~   Úauxiliary_lossÚ	enumerater´  rÀ  r$   r¹   r   )rM   r¸  rç   r9   rR  r?  rQ  rê   r	  ÚintermediateÚidxÚdecoder_layers               r)   rb   zDetrDecoder.forwardü  sG  € ðP Ð$Ø)ˆMàÐ%Ý6Ø”{Ø+Ø-ðñ ô ˆNð !Ð,Ð1GÐ1SÝ%>Ø”{Ø+Ø5Ø&;ð	&ñ &ô &Ð"ð "œ[Ô7ÐA�r�r¸Tˆõ #,¨D¬KÑ"8Ô"8ð 	1ð 	1ÑˆC�Ø)˜MØØØ+Ø2Ø%ðð ð (>ðð ðð ˆMð Œ{Ô)ð 1Ø $§¢¨}Ñ =Ô =�Ø Ð 0Ñ0�øð Ÿš }Ñ5Ô5ˆð Œ;Ô%ð 	5Ý œ; |Ñ4Ô4ˆLå °=Ð]iÐjÑjÔjÐjr(   ©NNNNNN)r    r!   r"   r#   rK  rø   r  rº  r   rI   r   r   r   r   r   rb   rc   rd   s   @r)   r¼  r¼  â  sÚ   ø€ € € € € ðð ð *Ø'Ø.ðð Ðð	˜zð 	ð 	ð 	ð 	ð 	ð 	ð  Øð ØØ"Ø#Ø$(Ø+/ðTkð Tkð Ð+Ô,ðTkð 
ðTkð Tkð Tkñ „_ñ  ÔðTkð Tkð Tkð Tkð Tkr(   r¼  z›
    The bare DETR Model (consisting of a backbone and encoder-decoder Transformer) outputting raw hidden-states without
    any specific head on top.
    c                   ó  ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 dde	j
        dz  de	j        dz  de	j
        dz  d	e	j
        dz  d
e	j
        dz  de	j
        dz  dee         dee	j
                 ez  fd„¦   «         ¦   «         Zˆ xZS )Ú	DetrModelr~   c                 óf  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        dk    rt          |j        dz  d¬¦  «        | _        n?|j        dk    rt          |j        dz  ¦  «        | _        nt          d|j        › �¦  «        ‚t          j        |j        |j        ¦  «        | _        t          j        | j        j        d         |j        d¬	¦  «        | _        t#          |¦  «        | _        t'          |¦  «        | _        |                      ¦   «          d S )
NÚsiner¦   T)r¤   ÚlearnedzNot supported r\   r   rl  )rH   rI   rw   r‡   Úposition_embedding_typerŸ   r6  Úposition_embeddingrÓ   r§   ri   r×   r‚  Úquery_position_embeddingsr_  r€   Úinput_projectionr¬  Úencoderr¼  Údecoderrµ  r>  s     €r)   rI   zDetrModel.__init__\  s  ø€ Ý‰Œ×Ò˜Ñ Ô Ð å'¨Ñ/Ô/ˆŒàÔ)¨VÒ3Ð3Ý&?ÀÄÐRSÑ@SÐ_cÐ&dÑ&dÔ&dˆDÔ#Ð#ØÔ+¨yÒ8Ð8Ý&BÀ6Ä>ÐUVÑCVÑ&WÔ&WˆDÔ#Ð#åÐN¨fÔ.LÐNÐNÑOÔOÐOÝ)+¬°fÔ6HÈ&Ì.Ñ)YÔ)YˆÔ&Ý "¤	¨$¬-Ô*RÐSUÔ*VÐX^ÔXfÐtuÐ vÑ vÔ vˆÔå" 6Ñ*Ô*ˆŒÝ" 6Ñ*Ô*ˆŒð 	�ŠÑÔÐÐÐr(   c                 óx   — | j         j                             ¦   «         D ]\  }}|                     d¦  «         Œd S )NF©r‡   rr   r…   r†   ©rM   rÀ   Úparams      r)   Úfreeze_backbonezDetrModel.freeze_backbonep  sG   € ØœÔ+×<Ò<Ñ>Ô>ð 	(ð 	(‰HˆAˆuØ× Ò  Ñ'Ô'Ð'Ð'ð	(ð 	(r(   c                 óx   — | j         j                             ¦   «         D ]\  }}|                     d¦  «         Œd S )NTrÔ  rÕ  s      r)   Úunfreeze_backbonezDetrModel.unfreeze_backbonet  sG   € ØœÔ+×<Ò<Ñ>Ô>ð 	'ð 	'‰HˆAˆuØ× Ò  Ñ&Ô&Ð&Ð&ð	'ð 	'r(   Nr‹   rŒ   Údecoder_attention_maskÚencoder_outputsr¸  Údecoder_inputs_embedsrê   r­   c           
      óÜ  — |€|€t          d¦  «        ‚|€î|j        \  }}	}
}|j        }|€t          j        ||
|f|¬¦  «        }|                      ||¦  «        }|d         \  }}|                      |¦  «        }|                     d¦  «                             dd¦  «        }|  	                    |j        ||j
        |¬¦  «                             d¦  «                             dd¦  «        }|                     d¦  «        }�n2|j        d         }|j        }|}|j        d         }t          |d	z  ¦  «        }|  	                    t          j        || j        j        ||g¦  «        ||j
        ¬
¦  «                             d¦  «                             dd¦  «        }|�tt          j                             |d                              ¦   «         ||f¬¦  «                             t          j        ¦  «        d         }|                     d¦  «        }n#t          j        ||f|t          j        ¬¦  «        }|€ | j        d|||dœ|¤Ž}| j        j                             d¦  «                             |dd¦  «        }|�|}nt          j        |¦  «        } | j        d|||||j        |dœ|¤Ž}t=          |j        |j        |j         |j!        |j        |j        |j         |j"        ¬¦  «        S )a  
        decoder_attention_mask (`torch.FloatTensor` of shape `(batch_size, num_queries)`, *optional*):
            Mask to avoid performing attention on certain object queries in the decoder. Mask values selected in `[0, 1]`:

            - 1 for queries that are **not masked**,
            - 0 for queries that are **masked**.
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing the flattened feature map (output of the backbone + projection layer), you
            can choose to directly pass a flattened representation of an image. Useful for bypassing the vision backbone.
        decoder_inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`, *optional*):
            Optionally, instead of initializing the queries with a tensor of zeros, you can choose to directly pass an
            embedded representation. Useful for tasks that require custom query initialization.

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, DetrModel
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/detr-resnet-50")
        >>> model = DetrModel.from_pretrained("facebook/detr-resnet-50")

        >>> # prepare image for the model
        >>> inputs = image_processor(images=image, return_tensors="pt")

        >>> # forward pass
        >>> outputs = model(**inputs)

        >>> # the last hidden states are the final query embeddings of the Transformer decoder
        >>> # these are of shape (batch_size, num_queries, hidden_size)
        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 100, 256]
        ```Nz8You have to specify either pixel_values or inputs_embedsrÜ   r\   r¦   r   ©r•   rl   r¬   rœ   r   g      à?)r•   rl   r¬   r�   ©rl   r¬   ©r¸  rç   r?  ©r¸  rç   r?  rQ  r9   rR  )r4   r5   r6   r7   r8   r9   r:   r   r'   )#r§   r•   rl   r$   rK   r‡   rÐ  r¼   rñ   rÎ  r¬   rÎ   rÐ   r~   r6  ri   r’   r“   r”   r–   r—   ÚlongrÑ  rÏ  rD   rÝ   rÞ   Ú
zeros_likerÒ  r4   r,   r	  r­  r7   r   )rM   r‹   rŒ   rÚ  rÛ  r¸  rÜ  rê   r¿   Únum_channelsrÁ   rÂ   rl   Úvision_featuresr›   rœ   Úprojected_feature_mapÚflattened_featuresr?  Úflattened_maskÚseq_lenÚfeat_dimrQ  ÚqueriesÚdecoder_outputss                            r)   rb   zDetrModel.forwardx  s;  € ðh Ð MÐ$9ÝÐWÑXÔXÐXàÐ Ø6BÔ6HÑ3ˆJ˜ f¨eØ!Ô(ˆFàÐ!Ý"œZ¨*°f¸eÐ)DÈfÐUÑUÔU�
Ø"Ÿmšm¨L¸*ÑEÔEˆOØ /°Ô 3ÑˆK˜ð %)×$9Ò$9¸+Ñ$FÔ$FÐ!Ø!6×!>Ò!>¸qÑ!AÔ!A×!KÒ!KÈAÈqÑ!QÔ!QÐà×'Ò'¨kÔ.?ÈÐVbÔVhÐosÐ'ÑtÔtß’˜‘”ß’˜1˜a‘”ð (ð
 "Ÿ\š\¨!™_œ_ˆN‰Nà&Ô,¨QÔ/ˆJØ"Ô)ˆFØ!.Ðð $Ô)¨!Ô,ˆGÝ˜7 C™<Ñ(Ô(ˆHð ×'Ò'Ýœ* j°$´+Ô2EÀxÐQYÐ%ZÑ[Ô[Ø!Ø'Ô-ð (ñ ô ÷
 ’˜‘”ß’˜1˜a‘”ð (ð Ð%Ý”}×0Ò0°¸DÔ1A×1GÒ1GÑ1IÔ1IÐQYÐ[cÐPdÐ0ÑeÔe×hÒhÕinÔisÑtÔtÐuvÔw�Ø!%§¢¨a¡¤��õ "'¤¨Z¸Ð,AÈ&ÕX]ÔXbÐ!cÑ!cÔ!c�àÐ"Ø*˜dœlð Ø0Ø-Ø,Gðð ð ð	ð ˆOð .2Ô-KÔ-R×-\Ò-\Ð]^Ñ-_Ô-_×-fÒ-fØ˜˜1ñ.
ô .
Ð*ð
 !Ð,Ø+ˆGˆGåÔ&Ð'IÑJÔJˆGð '˜$œ,ð 
Ø!Ø1Ø(CØ/QØ"1Ô"CØ#1ð
ð 
ð ð
ð 
ˆõ Ø-Ô?Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9Ø'6Ô'Qð	
ñ 	
ô 	
ð 		
r(   rÇ  )r    r!   r"   r   rI   r×  rÙ  r   r   r$   r%   Ú
LongTensorr   r   r=   r,   rb   rc   rd   s   @r)   rÉ  rÉ  U  sH  ø€ € € € € ð˜zð ð ð ð ð ð ð((ð (ð (ð'ð 'ð 'ð Øð 26Ø.2Ø;?Ø48Ø26Ø:>ðG
ð G
àÔ'¨$Ñ.ðG
ð Ô$ tÑ+ðG
ð !&Ô 1°DÑ 8ð	G
ð
 Ô*¨TÑ1ðG
ð Ô(¨4Ñ/ðG
ð  %Ô0°4Ñ7ðG
ð Ð+Ô,ðG
ð 
ˆuÔ Ô	! OÑ	3ðG
ð G
ð G
ñ Ôñ „^ðG
ð G
ð G
ð G
ð G
r(   rÉ  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚDetrMLPPredictionHeadz°
    Very simple multi-layer perceptron (MLP, also called FFN), used to predict the normalized center coordinates,
    height and width of a bounding box w.r.t. an image.

    c                 óÚ   •— t          ¦   «                              ¦   «          || _        |g|dz
  z  }t          j        d„ t          |g|z   ||gz   ¦  «        D ¦   «         ¦  «        | _        d S )Nr   c              3   óF   K  — | ]\  }}t          j        ||¦  «        V — Œd S rÍ   )ri   r  )r€  rN   Úks      r)   ú	<genexpr>z1DetrMLPPredictionHead.__init__.<locals>.<genexpr>  s0   è è € Ð#gÐ#g¹¸¸1¥B¤I¨a°¡O¤OÐ#gÐ#gÐ#gÐ#gÐ#gÐ#gr(   )rH   rI   Ú
num_layersri   rz  r„  r´  )rM   Ú	input_dimÚ
hidden_dimÚ
output_dimrô  ÚhrO   s         €r)   rI   zDetrMLPPredictionHead.__init__  so   ø€ Ý‰Œ×ÒÑÔÐØ$ˆŒØˆL˜J¨™NÑ+ˆÝ”mÐ#gÐ#gÅÀYÀKÐRSÁOÐUVÐZdÐYeÑUeÑ@fÔ@fÐ#gÑ#gÔ#gÑgÔgˆŒˆˆr(   c                 ó¼   — t          | j        ¦  «        D ]F\  }}|| j        dz
  k     r(t          j                              ||¦  «        ¦  «        n
 ||¦  «        }ŒG|S )Nr   )rÃ  r´  rô  ri   r’   rV  )rM   r_   ÚiÚlayers       r)   rb   zDetrMLPPredictionHead.forward  sd   € Ý! $¤+Ñ.Ô.ð 	Vð 	V‰HˆAˆuØ01°D´OÀaÑ4GÒ0GÐ0G•”×"Ò" 5 5¨¡8¤8Ñ,Ô,Ð,ÈUÈUÐSTÉXÌXˆAˆAØˆr(   )r    r!   r"   r#   rI   rb   rc   rd   s   @r)   rï  rï    sV   ø€ € € € € ðð ðhð hð hð hð hðð ð ð ð ð ð r(   rï  z™
    DETR Model (consisting of a backbone and encoder-decoder Transformer) with object detection heads on top, for tasks
    such as COCO detection.
    c                   ó  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 ddej        dej	        dz  dej        dz  dej        dz  dej        dz  d	ej        dz  d
e
e         dz  dee         deej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚDetrForObjectDetectionr~   c                 ó,  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        dz   ¦  «        | _        t          |j        |j        dd¬¦  «        | _
        |                      ¦   «          d S )Nr   r±   r   )rõ  rö  r÷  rô  )rH   rI   rÉ  rr   ri   r  r6  Ú
num_labelsÚclass_labels_classifierrï  Úbbox_predictorrµ  r>  s     €r)   rI   zDetrForObjectDetection.__init__  s�   ø€ Ý‰Œ×Ò˜Ñ Ô Ð õ ˜vÑ&Ô&ˆŒ
õ (*¤yØŒN˜FÔ-°Ñ1ñ(
ô (
ˆÔ$õ 4Ø”n°´ÈAÐZ[ð
ñ 
ô 
ˆÔð
 	�ŠÑÔÐÐÐr(   Nr‹   rŒ   rÚ  rÛ  r¸  rÜ  Úlabelsrê   r­   c                 ó8  —  | j         |f|||||dœ|¤Ž}	|	d         }
|                      |
¦  «        }|                      |
¦  «                             ¦   «         }d\  }}}|�}d\  }}| j        j        rC|	j        }|                      |¦  «        }|                      |¦  «                             ¦   «         }|                      ||| j        || j        ||¦  «        \  }}}t          ||||||	j
        |	j        |	j        |	j        |	j        |	j        |	j        ¬¦  «        S )aB  
        decoder_attention_mask (`torch.FloatTensor` of shape `(batch_size, num_queries)`, *optional*):
            Mask to avoid performing attention on certain object queries in the decoder. Mask values selected in `[0, 1]`:

            - 1 for queries that are **not masked**,
            - 0 for queries that are **masked**.
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing the flattened feature map (output of the backbone + projection layer), you
            can choose to directly pass a flattened representation of an image. Useful for bypassing the vision backbone.
        decoder_inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`, *optional*):
            Optionally, instead of initializing the queries with a tensor of zeros, you can choose to directly pass an
            embedded representation. Useful for tasks that require custom query initialization.
        labels (`list[Dict]` of len `(batch_size,)`, *optional*):
            Labels for computing the bipartite matching loss. List of dicts, each dictionary containing at least the
            following 2 keys: 'class_labels' and 'boxes' (the class labels and bounding boxes of an image in the batch
            respectively). The class labels themselves should be a `torch.LongTensor` of len `(number of bounding boxes
            in the image,)` and the boxes a `torch.FloatTensor` of shape `(number of bounding boxes in the image, 4)`.

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, DetrForObjectDetection
        >>> import torch
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/detr-resnet-50")
        >>> model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")

        >>> inputs = image_processor(images=image, return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
        >>> target_sizes = torch.tensor([image.size[::-1]])
        >>> results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)[
        ...     0
        ... ]

        >>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
        ...     box = [round(i, 2) for i in box.tolist()]
        ...     print(
        ...         f"Detected {model.config.id2label[label.item()]} with confidence "
        ...         f"{round(score.item(), 3)} at location {box}"
        ...     )
        Detected remote with confidence 0.998 at location [40.16, 70.81, 175.55, 117.98]
        Detected remote with confidence 0.996 at location [333.24, 72.55, 368.33, 187.66]
        Detected couch with confidence 0.995 at location [-0.02, 1.15, 639.73, 473.76]
        Detected cat with confidence 0.999 at location [13.24, 52.05, 314.02, 470.93]
        Detected cat with confidence 0.999 at location [345.4, 23.85, 640.37, 368.72]
        ```)rŒ   rÚ  rÛ  r¸  rÜ  r   r'  Nr  )r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   )rr   r   r  Úsigmoidr~   rÂ  r   Úloss_functionrl   r.   r4   r5   r6   r7   r8   r9   r:   )rM   r‹   rŒ   rÚ  rÛ  r¸  rÜ  r  rê   ÚoutputsÚsequence_outputr1   r2   r/   r0   r3   Úoutputs_classÚoutputs_coordrÄ  s                      r)   rb   zDetrForObjectDetection.forward/  se  € ðL �$”*Øð
à!Ø#9Ø+Ø'Ø"7ð
ð 
ð ð
ð 
ˆð " !œ*ˆð ×-Ò-¨oÑ>Ô>ˆØ×(Ò(¨Ñ9Ô9×AÒAÑCÔCˆ
à-=Ñ*ˆˆiÐ*ØÐØ+5Ñ(ˆM˜=ØŒ{Ô)ð LØ&ÔA�Ø $× <Ò <¸\Ñ JÔ J�Ø $× 3Ò 3°LÑ AÔ A× IÒ IÑ KÔ K�Ø15×1CÒ1CØ˜ ¤¨Z¸¼ÀmÐUbñ2ô 2Ñ.ˆD�)Ð.õ )ØØØØ!Ø/Ø%Ô7Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð
ñ 
ô 
ð 	
r(   rÇ  )r    r!   r"   r   rI   r   r   r$   r%   rí  r<   r;   r   r   r=   r.   rb   rc   rd   s   @r)   rý  rý    s:  ø€ € € € € ð˜zð ð ð ð ð ð ð" Øð /3Ø;?Ø48Ø26Ø:>Ø$(ðl
ð l
àÔ'ðl
ð Ô$ tÑ+ðl
ð !&Ô 1°DÑ 8ð	l
ð
 Ô*¨TÑ1ðl
ð Ô(¨4Ñ/ðl
ð  %Ô0°4Ñ7ðl
ð �T”
˜TÑ!ðl
ð Ð+Ô,ðl
ð 
ˆuÔ Ô	!Ð$=Ñ	=ðl
ð l
ð l
ñ Ôñ „^ðl
ð l
ð l
ð l
ð l
r(   rý  z•
    DETR Model (consisting of a backbone and encoder-decoder Transformer) with a segmentation head on top, for tasks
    such as COCO panoptic.
    c                   ó  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 ddej        dej	        dz  dej        dz  dej        dz  dej        dz  d	ej        dz  d
e
e         dz  dee         deej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚDetrForSegmentationr~   c                 ór  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        |j        }}| j        j        j        j        }t          ||z   |d d d…         dd …         ||j
        ¬¦  «        | _        t          ||d¬¦  «        | _        |                      ¦   «          d S )Nr\   éýÿÿÿ)ru  rh  rù   r.  rã   )ré   )rH   rI   rý  Údetrr6  r7  rr   r‡   r€   rt  r.  Ú	mask_headr‡  Úbbox_attentionrµ  )rM   r~   rù   Únumber_of_headsr€   rO   s        €r)   rI   zDetrForSegmentation.__init__§  sº   ø€ Ý‰Œ×Ò˜Ñ Ô Ð õ +¨6Ñ2Ô2ˆŒ	ð (.¤~°vÔ7U�_ˆØ%)¤Y¤_Ô%=Ô%XÐ"å.Ø&¨Ñ8Ø3°D°D°b°DÔ9¸"¸#¸#Ô>Ø#Ø &Ô :ð	
ñ 
ô 
ˆŒõ 1°¸oÐWZÐ[Ñ[Ô[ˆÔà�ŠÑÔÐÐÐr(   Nr‹   rŒ   rÚ  rÛ  r¸  rÜ  r  rê   r­   c                 óZ  — |j         \  }	}
}}|j        }|€t          j        |	||f|¬¦  «        }| j        j                             ||¦  «        }|d         \  }}| j        j                             |¦  «        }|                     d¦  «         	                    dd¦  «        }| j        j         
                    |j         ||j        |¬¦  «                             d¦  «         	                    dd¦  «        }|                     d¦  «        }|€ | j        j        j        d|||dœ|¤Ž}| j        j        j        j                             d¦  «                             |	dd¦  «        }|�|}nt          j        |¦  «        } | j        j        j        d|||||j        |d	œ|¤Ž}|d         }| j                             |¦  «        }| j                             |¦  «                             ¦   «         }|j         d
d…         \  }}|j         	                    dd¦  «                             |	| j        j        ||¦  «        }|                     |	||¦  «        }|�yt          j        |j        ¦  «        j        }t          j        |                     d¦  «                             d¦  «        t          j        d|j        |j        ¬¦  «        |¦  «        }|                      |||¬¦  «        }|                      |||d         d         |d         d         |d         d         g¬¦  «        }|                     |	| j        j        j         |j         d
         |j         d         ¦  «        } d\  }!}"}#|�ƒd\  }$}%| j        j!        rM|j"        }&| j                             |&¦  «        }$| j                             |&¦  «                             ¦   «         }%|  #                    ||||| | j        |$|%¦  «        \  }!}"}#tI          |!|"||| |#|j        |j%        |j&        |j'        |j        |j%        |j&        ¬¦  «        S )aN  
        decoder_attention_mask (`torch.FloatTensor` of shape `(batch_size, num_queries)`, *optional*):
            Mask to avoid performing attention on certain object queries in the decoder. Mask values selected in `[0, 1]`:

            - 1 for queries that are **not masked**,
            - 0 for queries that are **masked**.
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Kept for backward compatibility, but cannot be used for segmentation, as segmentation requires
            multi-scale features from the backbone that are not available when bypassing it with inputs_embeds.
        decoder_inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_queries, hidden_size)`, *optional*):
            Optionally, instead of initializing the queries with a tensor of zeros, you can choose to directly pass an
            embedded representation. Useful for tasks that require custom query initialization.
        labels (`list[Dict]` of len `(batch_size,)`, *optional*):
            Labels for computing the bipartite matching loss, DICE/F-1 loss and Focal loss. List of dicts, each
            dictionary containing at least the following 3 keys: 'class_labels', 'boxes' and 'masks' (the class labels,
            bounding boxes and segmentation masks of an image in the batch respectively). The class labels themselves
            should be a `torch.LongTensor` of len `(number of bounding boxes in the image,)`, the boxes a
            `torch.FloatTensor` of shape `(number of bounding boxes in the image, 4)` and the masks a
            `torch.FloatTensor` of shape `(number of bounding boxes in the image, height, width)`.

        Examples:

        ```python
        >>> import io
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> import torch
        >>> import numpy

        >>> from transformers import AutoImageProcessor, DetrForSegmentation
        >>> from transformers.image_transforms import rgb_to_id

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/detr-resnet-50-panoptic")
        >>> model = DetrForSegmentation.from_pretrained("facebook/detr-resnet-50-panoptic")

        >>> # prepare image for the model
        >>> inputs = image_processor(images=image, return_tensors="pt")

        >>> # forward pass
        >>> outputs = model(**inputs)

        >>> # Use the `post_process_panoptic_segmentation` method of the `image_processor` to retrieve post-processed panoptic segmentation maps
        >>> # Segmentation results are returned as a list of dictionaries
        >>> result = image_processor.post_process_panoptic_segmentation(outputs, target_sizes=[(300, 500)])

        >>> # A tensor of shape (height, width) where each value denotes a segment id, filled with -1 if no segment is found
        >>> panoptic_seg = result[0]["segmentation"]
        >>> panoptic_seg.shape
        torch.Size([300, 500])
        >>> # Get prediction score and segment_id to class_id mapping of each segment
        >>> panoptic_segments_info = result[0]["segments_info"]
        >>> len(panoptic_segments_info)
        5
        ```NrÜ   r\   r¦   r   rÞ  rà  r   rá  rŽ   rã   rß  )rç   )r™   r}  ro  r'  r  )r/   r0   r1   r2   r@   r3   r4   r5   r6   r7   r8   r9   r:   r'   )(r•   rl   r$   rK   r  rr   r‡   rÐ  r¼   rñ   rÎ  r¬   rÑ  rÏ  rD   rÝ   rÞ   rã  rÒ  r4   r   r  r  r  r~   r6  rE  rA  ÚwhereÚtensorr  r  r‚  rÂ  r   r  r?   r	  r­  r7   )'rM   r‹   rŒ   rÚ  rÛ  r¸  rÜ  r  rê   r¿   rä  rÁ   rÂ   rl   rå  r›   rœ   ræ  rç  r?  rè  rQ  rë  rì  r  r1   r2   Úmemoryrç   Ú	min_dtypeÚ	bbox_maskÚ	seg_masksr@   r/   r0   r3   r  r	  rÄ  s'                                          r)   rb   zDetrForSegmentation.forward¼  sd  € ðR 3?Ô2DÑ/ˆ
�L &¨%ØÔ$ˆàÐÝœ Z°¸Ð$?ÈÐOÑOÔOˆJàœ)œ/×2Ò2°<ÀÑLÔLˆØ+¨BÔ/Ñˆ�Tð !%¤	¤× @Ò @ÀÑ MÔ MÐØ2×:Ò:¸1Ñ=Ô=×GÒGÈÈ1ÑMÔMÐàŒIŒO×.Ò.Ø!Ô'°¸lÔ>PÐW[ð /ñ ô ÷ ŠW�Q‰ZŒZßŠY�q˜!‰_Œ_ð 	$ð Ÿš a™œˆàÐ"Ø5˜dœiœoÔ5ð Ø0Ø-Ø,Gðð ð ð	ð ˆOð .2¬Y¬_Ô-VÔ-]×-gÒ-gÐhiÑ-jÔ-j×-qÒ-qØ˜˜1ñ.
ô .
Ð*ð
 !Ð,Ø+ˆGˆGåÔ&Ð'IÑJÔJˆGà1˜$œ)œ/Ô1ð 
Ø!Ø1Ø(CØ/QØ"1Ô"CØ#1ð
ð 
ð ð
ð 
ˆð *¨!Ô,ˆà”×2Ò2°?ÑCÔCˆØ”Y×-Ò-¨oÑ>Ô>×FÒFÑHÔHˆ
à#Ô)¨"¨#¨#Ô.‰ˆ�Ø Ô2×<Ò<¸QÀÑBÔB×GÒGÈ
ÐTXÔT_ÔTgÐioÐqvÑwÔwˆØ'×,Ò,¨Z¸ÀÑGÔGˆàÐ%Ýœ F¤LÑ1Ô1Ô5ˆIÝ"œ[Ø×(Ò(¨Ñ+Ô+×5Ò5°aÑ8Ô8Ý”˜S¨¬¸f¼lÐKÑKÔKØñô ˆNð ×'Ò'¨¸ÐP^Ð'Ñ_Ô_ˆ	à—N’NØ*Ø%Ø)¨!Ô,¨QÔ/°ÀÔ1CÀAÔ1FÈÐXYÔHZÐ[\ÔH]Ð^ð #ñ 
ô 
ˆ	ð —^’^ J°´	Ô0@Ô0LÈiÌoÐ^`ÔNaÐclÔcrÐsuÔcvÑwÔwˆ
à-=Ñ*ˆˆiÐ*ØÐØ+5Ñ(ˆM˜=ØŒ{Ô)ð QØ.ÔI�Ø $¤	× AÒ AÀ,Ñ OÔ O�Ø $¤	× 8Ò 8¸Ñ FÔ F× NÒ NÑ PÔ P�Ø15×1CÒ1CØ˜ ¨
°JÀÄÈ]Ð\iñ2ô 2Ñ.ˆD�)Ð.õ &ØØØØ!Ø!Ø/Ø-Ô?Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð
ñ 
ô 
ð 	
r(   rÇ  )r    r!   r"   r   rI   r   r   r$   r%   rí  r<   r;   r   r   r=   r?   rb   rc   rd   s   @r)   r  r     s:  ø€ € € € € ð˜zð ð ð ð ð ð ð* Øð /3Ø;?Ø48Ø26Ø:>Ø$(ðl
ð l
àÔ'ðl
ð Ô$ tÑ+ðl
ð !&Ô 1°DÑ 8ð	l
ð
 Ô*¨TÑ1ðl
ð Ô(¨4Ñ/ðl
ð  %Ô0°4Ñ7ðl
ð �T”
˜TÑ!ðl
ð Ð+Ô,ðl
ð 
ˆuÔ Ô	!Ð$:Ñ	:ðl
ð l
ð l
ñ Ôñ „^ðl
ð l
ð l
ð l
ð l
r(   r  )rý  r  rÉ  r‘  )Nrã   )Lr#   r¨   Úcollections.abcr   Údataclassesr   r$   Útorch.nnri   Ú r   r™  Úactivationsr   Úbackbone_utilsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_detrr   Ú
get_loggerr    Úloggerr   r,   r.   r?   ÚModulerB   rq   rw   rŸ   rÓ   r�   r”   rö   rø   r  r)  r3  rK  rU  rg  rt  r‡  r‘  r¬  r¼  rÉ  rï  rý  r  Ú__all__r'   r(   r)   ú<module>r-     s  ðð Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð
 GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð ð ð ð ð JÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð ð@ð @ð @ð @ð @Ð:ñ @ô @ñ „ñô ð@ð €ððñ ô ð ð@ð @ð @ð @ð @Ð(ñ @ô @ñ „ñô ð@ð €ððñ ô ð
 ð"?ð "?ð "?ð "?ð "? ñ "?ô "?ñ „ñô ð"?ðJ €ððñ ô ð
 ð)?ð )?ð )?ð )?ð )?˜[ñ )?ô )?ñ „ñô ð)?ðX$ ð $ ð $ ð $ ð $ ˜BœIñ $ ô $ ð $ ðN'ð 'ð 'ð01ð 1ð 1ð 1ð 1�b”iñ 1ô 1ð 1ðhJ
ð J
ð J
ð J
ð J
 ¤	ñ J
ô J
ð J
ðZð ð ð ð  2¤9ñ ô ð ðJ !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8?)ð ?)ð ?)ð ?)ð ?)˜œ	ñ ?)ô ?)ð ?)ðDM)ð M)ð M)ð M)ð M)˜œñ M)ô M)ð M)ð`ð ð ð ð ˆbŒiñ ô ð ð"6ð 6ð 6ð 6ð 6Ð1ñ 6ô 6ð 6ðrYð Yð Yð Yð YÐ1ñ Yô Yð Yðx
8ð 
8ð 
8ð 
8ð 
8�B”Iñ 
8ô 
8ð 
8ð4ð 4ð 4ð 4ð 4˜œñ 4ô 4ð 4ð,@/ð @/ð @/ð @/ð @/˜BœIñ @/ô @/ð @/ðF0ð 0ð 0ð 0ð 0˜œñ 0ô 0ð 0ðf ð";ð ";ð ";ð ";ð ";˜/ñ ";ô ";ñ „ð";ðJ:@ð :@ð :@ð :@ð :@Ð%ñ :@ô :@ð :@ðzpkð pkð pkð pkð pkÐ%ñ pkô pkð pkðf €ððñ ô ðf
ð f
ð f
ð f
ð f
Ð#ñ f
ô f
ñô ðf
ðRð ð ð ð ˜BœIñ ô ð ð& €ððñ ô ð@
ð @
ð @
ð @
ð @
Ð0ñ @
ô @
ñô ð@
ðF €ððñ ô ðD
ð D
ð D
ð D
ð D
Ð-ñ D
ô D
ñô ðD
ðNð ð €€€r(   