§
    ‚Štj– ã                   ó  — d Z ddlmZ ddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ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(m)Z)m*Z*  e¦   «         rddl+m,Z,  e j-        e.¦  «        Z/dej        dej        fd„Z0dej        dej        fd„Z1ee G d„ de¦  «        ¦   «         ¦   «         Z2dedefd„Z3dedefd„Z4d „ Z5d!„ Z6 ed"¬#¦  «        e G d$„ d%e¦  «        ¦   «         ¦   «         Z7 ed&¬#¦  «        e G d'„ d(e¦  «        ¦   «         ¦   «         Z8 G d)„ d*e	j9        ¦  «        Z: G d+„ d,e	j9        ¦  «        Z;	 	 dRd.e	j9        d/ej        d0ej        d1ej        d2ej        dz  d3e<dz  d4e<d5ee         fd6„Z= G d7„ d8e	j9        ¦  «        Z> G d9„ d:e	j9        ¦  «        Z? G d;„ d<e¦  «        Z@e G d=„ d>e¦  «        ¦   «         ZA G d?„ d@e	j9        ¦  «        ZB G dA„ dBeA¦  «        ZC G dC„ dDeA¦  «        ZD G dE„ dFeA¦  «        ZE G dG„ dHeA¦  «        ZFe G dI„ dJeA¦  «        ¦   «         ZG G dK„ dLe	j9        ¦  «        ZH G dM„ dNe	j9        ¦  «        ZI G dO„ dPeA¦  «        ZJg dQ¢ZKdS )SzPyTorch OWLv2 model.é    )ÚCallable)Ú	dataclass)ÚAnyN)ÚTensorÚnné   )Úinitialization)ÚACT2FN)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚis_vision_availableÚloggingÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚOwlv2ConfigÚOwlv2TextConfigÚOwlv2VisionConfig)Úcenter_to_corners_formatÚlogitsÚreturnc                 óŽ   — t           j                             | t          j        t          | ¦  «        | j        ¬¦  «        ¦  «        S )N©Údevice)r   Ú
functionalÚcross_entropyÚtorchÚarangeÚlenr$   )r    s    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/owlv2/modeling_owlv2.pyÚcontrastive_lossr+   6   s3   € ÝŒ=×&Ò& v­u¬|½CÀ¹K¼KÐPVÔP]Ð/^Ñ/^Ô/^Ñ_Ô_Ð_ó    Ú
similarityc                 óX   — t          | ¦  «        }t          | j        ¦  «        }||z   dz  S )Ng       @)r+   ÚT)r-   Úcaption_lossÚ
image_losss      r*   Úimage_text_contrastive_lossr2   ;   s.   € Ý# JÑ/Ô/€LÝ! *¤,Ñ/Ô/€JØ˜:Ñ%¨Ñ,Ð,r,   c                   óÞ   — e Zd ZU dZ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j        dz  ed<   dZej        dz  ed<   dZeed<   dZeed	<   d
ee         fd„ZdS )ÚOwlv2OutputaÓ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
        Contrastive loss for image-text similarity.
    logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
        The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text
        similarity scores.
    logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
        The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image
        similarity scores.
    text_embeds (`torch.FloatTensor` of shape `(batch_size * num_max_text_queries, output_dim`):
        The text embeddings obtained by applying the projection layer to the pooled output of [`Owlv2TextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of
        [`Owlv2VisionModel`].
    text_model_output (tuple[`BaseModelOutputWithPooling`]):
        The output of the [`Owlv2TextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Owlv2VisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textÚtext_embedsÚimage_embedsÚtext_model_outputÚvision_model_outputr!   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS ©)r:   r;   N©ÚgetattrÚto_tuple©Ú.0ÚkÚselfs     €r*   ú	<genexpr>z'Owlv2Output.to_tuple.<locals>.<genexpr>a   óc   øè è € ð 
ð 
àð Ð LÐLÐLˆD�ŒGˆGÕRYÐZ^Ð`aÑRbÔRb×RkÒRkÑRmÔRmð
ð 
ð 
ð 
ð 
ð 
r,   ©ÚtupleÚkeys©rE   s   `r*   rA   zOwlv2Output.to_tuple`   óC   ø€ Ýð 
ð 
ð 
ð 
à—Y’Y‘[”[ð
ñ 
ô 
ñ 
ô 
ð 	
r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r'   ÚFloatTensorÚ__annotations__r6   r7   r8   r9   r:   r   r;   rI   r   rA   © r,   r*   r4   r4   A   sÞ   € € € € € € ðð ð( &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r,   r4   Útc                 óþ   — |                       ¦   «         r5| j        t          j        t          j        fv r| n|                      ¦   «         S | j        t          j        t          j        fv r| n|                      ¦   «         S ©N)	Úis_floating_pointÚdtyper'   Úfloat32Úfloat64ÚfloatÚint32Úint64Úint)rT   s    r*   Ú_upcastr_   h   se   € à×ÒÑÔð GØ”G¥¤­u¬}Ð=Ð=Ð=ˆqˆqÀ1Ç7Â7Á9Ä9ÐLà”G¥¤­U¬[Ð9Ð9Ð9ˆqˆq¸q¿uºu¹w¼wÐFr,   Úboxesc                 ó†   — t          | ¦  «        } | dd…df         | dd…df         z
  | dd…df         | dd…df         z
  z  S )a´  
    Computes the area of a set of bounding boxes, which are specified by its (x1, y1, x2, y2) coordinates.

    Args:
        boxes (`torch.FloatTensor` of shape `(number_of_boxes, 4)`):
            Boxes for which the area will be computed. They are expected to be in (x1, y1, x2, y2) format with `0 <= x1
            < x2` and `0 <= y1 < y2`.

    Returns:
        `torch.FloatTensor`: a tensor containing the area for each box.
    Né   r   r   r   )r_   )r`   s    r*   Úbox_arearc   q   sT   € õ �E‰NŒN€EØ�!�!�!�Q�$ŒK˜%    1 œ+Ñ%¨%°°°°1°¬+¸¸a¸a¸aÀ¸d¼Ñ*CÑDÐDr,   c                 óœ  — t          | ¦  «        }t          |¦  «        }t          j        | d d …d d d…f         |d d …d d…f         ¦  «        }t          j        | d d …d dd …f         |d d …dd …f         ¦  «        }||z
                       d¬¦  «        }|d d …d d …df         |d d …d d …df         z  }|d d …d f         |z   |z
  }||z  }	|	|fS )Nrb   r   ©Úminr   )rc   r'   Úmaxrf   Úclamp)
Úboxes1Úboxes2Úarea1Úarea2Úleft_topÚright_bottomÚwidth_heightÚinterÚunionÚious
             r*   Úbox_iours   ‚   sý   € Ý�VÑÔ€EÝ�VÑÔ€EåŒy˜    4¨¨!¨ Ô,¨f°Q°Q°Q¸¸¸°U¬mÑ<Ô<€HÝ”9˜V A A A t¨Q¨R¨R KÔ0°&¸¸¸¸A¸B¸B¸´-Ñ@Ô@€Là  8Ñ+×2Ò2°qÐ2Ñ9Ô9€LØ˜˜˜˜A˜A˜A˜q˜Ô! L°°°°A°A°A°q°Ô$9Ñ9€Eà�!�!�!�T�'ŒN˜UÑ" UÑ*€Eà
�%‰-€CØ�ˆ:Ðr,   c                 ón  — | dd…dd…f         | dd…dd…f         k                          ¦   «         st          d| › �¦  «        ‚|dd…dd…f         |dd…dd…f         k                          ¦   «         st          d|› �¦  «        ‚t          | |¦  «        \  }}t          j        | dd…ddd…f         |dd…dd…f         ¦  «        }t          j        | dd…ddd…f         |dd…dd…f         ¦  «        }||z
                       d¬¦  «        }|dd…dd…df         |dd…dd…df         z  }|||z
  |z  z
  S )zâ
    Generalized IoU from https://giou.stanford.edu/. The boxes should be in [x0, y0, x1, y1] (corner) format.

    Returns:
        `torch.FloatTensor`: a [N, M] pairwise matrix, where N = len(boxes1) and M = len(boxes2)
    Nrb   z<boxes1 must be in [x0, y0, x1, y1] (corner) format, but got z<boxes2 must be in [x0, y0, x1, y1] (corner) format, but got r   re   r   )ÚallÚ
ValueErrorrs   r'   rf   rg   rh   )ri   rj   rr   rq   Útop_leftÚbottom_rightro   Úareas           r*   Úgeneralized_box_iourz   “   s‚  € ð �1�1�1�a�b�b�5ŒM˜V A A A r¨ r Eœ]Ò*×/Ò/Ñ1Ô1ð bÝÐ`ÐX^Ð`Ð`ÑaÔaÐaØ�1�1�1�a�b�b�5ŒM˜V A A A r¨ r Eœ]Ò*×/Ò/Ñ1Ô1ð bÝÐ`ÐX^Ð`Ð`ÑaÔaÐaÝ˜ Ñ(Ô(�J€CˆåŒy˜    4¨¨!¨ Ô,¨f°Q°Q°Q¸¸¸°U¬mÑ<Ô<€HÝ”9˜V A A A t¨Q¨R¨R KÔ0°&¸¸¸¸A¸B¸B¸´-Ñ@Ô@€Là  8Ñ+×2Ò2°qÐ2Ñ9Ô9€LØ˜˜˜˜1˜1˜1˜a˜Ô  <°°°°1°1°1°a°Ô#8Ñ8€Dà�$˜‘, $Ñ&Ñ&Ð&r,   z5
    Output type of [`Owlv2ForObjectDetection`].
    )Úcustom_introc                   ó.  — 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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<   dZeed<   dee         fd„ZdS )ÚOwlv2ObjectDetectionOutputaà  
    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_patches, num_queries)`):
        Classification logits (including no-object) for all queries.
    objectness_logits (`torch.FloatTensor` of shape `(batch_size, num_patches, 1)`):
        The objectness logits of all image patches. OWL-ViT represents images as a set of image patches where the
        total number of patches is (image_size / patch_size)**2.
    pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_patches, 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 [`~Owlv2ImageProcessor.post_process_object_detection`] to retrieve the
        unnormalized bounding boxes.
    text_embeds (`torch.FloatTensor` of shape `(batch_size, num_max_text_queries, output_dim`):
        The text embeddings obtained by applying the projection layer to the pooled output of [`Owlv2TextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, patch_size, patch_size, output_dim`):
        Pooled output of [`Owlv2VisionModel`]. OWLv2 represents images as a set of image patches and computes image
        embeddings for each patch.
    class_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`):
        Class embeddings of all image patches. OWLv2 represents images as a set of image patches where the total
        number of patches is (image_size / patch_size)**2.
    text_model_output (tuple[`BaseModelOutputWithPooling`]):
        The output of the [`Owlv2TextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Owlv2VisionModel`].
    Nr5   Ú	loss_dictr    Úobjectness_logitsÚ
pred_boxesr8   r9   Úclass_embedsr:   r;   r!   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS r>   r?   rB   s     €r*   rF   z6Owlv2ObjectDetectionOutput.to_tuple.<locals>.<genexpr>Ý   rG   r,   rH   rK   s   `r*   rA   z#Owlv2ObjectDetectionOutput.to_tupleÜ   rL   r,   )rM   rN   rO   rP   r5   r'   rQ   rR   r~   Údictr    r   r€   r8   r9   r�   r:   r   r;   rI   r   rA   rS   r,   r*   r}   r}   «   s"  € € € € € € ðð ð> &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø!€Iˆt�d‰{Ð!Ð!Ñ!Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r,   r}   zL
    Output type of [`Owlv2ForObjectDetection.image_guided_detection`].
    c                   óü   — e Zd ZU dZ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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	<   dZeed
<   dee         fd„ZdS )Ú%Owlv2ImageGuidedObjectDetectionOutputa  
    logits (`torch.FloatTensor` of shape `(batch_size, num_patches, num_queries)`):
        Classification logits (including no-object) for all queries.
    image_embeds (`torch.FloatTensor` of shape `(batch_size, patch_size, patch_size, output_dim`):
        Pooled output of [`Owlv2VisionModel`]. OWLv2 represents images as a set of image patches and computes
        image embeddings for each patch.
    query_image_embeds (`torch.FloatTensor` of shape `(batch_size, patch_size, patch_size, output_dim`):
        Pooled output of [`Owlv2VisionModel`]. OWLv2 represents images as a set of image patches and computes
        image embeddings for each patch.
    target_pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_patches, 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 target image in the batch
        (disregarding possible padding). You can use [`~Owlv2ImageProcessor.post_process_object_detection`] to
        retrieve the unnormalized bounding boxes.
    query_pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_patches, 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 query image in the batch
        (disregarding possible padding). You can use [`~Owlv2ImageProcessor.post_process_object_detection`] to
        retrieve the unnormalized bounding boxes.
    class_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`):
        Class embeddings of all image patches. OWLv2 represents images as a set of image patches where the total
        number of patches is (image_size / patch_size)**2.
    text_model_output (tuple[`BaseModelOutputWithPooling`]):
        The output of the [`Owlv2TextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Owlv2VisionModel`].
    Nr    r9   Úquery_image_embedsÚtarget_pred_boxesÚquery_pred_boxesr�   r:   r;   r!   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS r>   r?   rB   s     €r*   rF   zAOwlv2ImageGuidedObjectDetectionOutput.to_tuple.<locals>.<genexpr>  rG   r,   rH   rK   s   `r*   rA   z.Owlv2ImageGuidedObjectDetectionOutput.to_tuple  rL   r,   )rM   rN   rO   rP   r    r'   rQ   rR   r9   r‡   rˆ   r‰   r�   r:   r   r;   rI   r   rA   rS   r,   r*   r†   r†   ã   sø   € € € € € € ðð ð8 (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø37Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r,   r†   c                   óz   ‡ — e Zd Zdefˆ fd„Zdej        dededej        fd„Zdd	ej	        d
e
dej        fd„Zˆ xZS )ÚOwlv2VisionEmbeddingsÚconfigc                 ób  •— t          ¦   «                              ¦   «          |j        | _        || _        |j        | _        t          j        t          j	        |j        ¦  «        ¦  «        | _
        t          j        |j        | j        |j        |j        d¬¦  «        | _        |j        |j        z  dz  | _        | j        dz   | _        t          j        | j        | j        ¦  «        | _        |                      dt          j        | j        ¦  «                             d¦  «        d¬¦  «         d S )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasrb   r   Úposition_ids©r   éÿÿÿÿ©Ú
persistent)ÚsuperÚ__init__Ú
patch_sizerŽ   Úhidden_sizeÚ	embed_dimr   Ú	Parameterr'   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚ
image_sizeÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr(   Úexpand©rE   rŽ   Ú	__class__s     €r*   r›   zOwlv2VisionEmbeddings.__init__  s  ø€ Ý‰Œ×ÒÑÔÐØ Ô+ˆŒØˆŒØÔ+ˆŒÝ!œ|­E¬K¸Ô8JÑ,KÔ,KÑLÔLˆÔå!œyØÔ+ØœØÔ)ØÔ$Øð 
ñ  
ô  
ˆÔð #Ô-°Ô1BÑBÀqÑHˆÔØ!Ô-°Ñ1ˆÔÝ"$¤,¨tÔ/AÀ4Ä>Ñ"RÔ"RˆÔØ×Ò˜^­U¬\¸$Ô:LÑ-MÔ-M×-TÒ-TÐU\Ñ-]Ô-]ÐjoÐÑpÔpÐpÐpÐpr,   Ú
embeddingsÚheightÚwidthr!   c                 óÚ  — |j         d         dz
  }| j        j                             d¦  «        }|j         d         dz
  }t          j                             ¦   «         s&||k    r ||k    r|                      | j        ¦  «        S |dd…dd…f         }|dd…dd…f         }|j         d         }	|| j        z  }
|| j        z  }t          |dz  ¦  «        }| 
                    d|||	¦  «        }|                     dddd¦  «        }t          j                             ||
|fdd	¬
¦  «        }|                     dddd¦  «                             dd|	¦  «        }t	          j        ||fd¬¦  «        S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   r   Nr—   g      à?r   rb   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)Úshaper©   ÚweightÚ	unsqueezer'   ÚjitÚ
is_tracingr•   rœ   r   ÚreshapeÚpermuter   r%   ÚinterpolateÚviewÚcat)rE   r®   r¯   r°   r¦   r©   r§   Úclass_pos_embedÚpatch_pos_embedr·   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r*   Úinterpolate_pos_encodingz.Owlv2VisionEmbeddings.interpolate_pos_encoding.  s‘  € ð !Ô& qÔ)¨AÑ-ˆØ!Ô4Ô;×EÒEÀaÑHÔHÐØ*Ô0°Ô3°aÑ7ˆõ Œy×#Ò#Ñ%Ô%ð 	>¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?Ø×*Ò*¨4Ô+<Ñ=Ô=Ð=à,¨Q¨Q¨Q°°°¨UÔ3ˆØ,¨Q¨Q¨Q°°°¨UÔ3ˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆåœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆåŒy˜/¨?Ð;ÀÐCÑCÔCÐCr,   FÚpixel_valuesrÇ   c                 óv  — |j         \  }}}}|                      |¦  «        }|                     d¦  «                             dd¦  «        }| j                             |dd¦  «        }t          j        ||gd¬¦  «        }	|r|	|                      |	||¦  «        z   }	n|	|  	                    | j
        ¦  «        z   }	|	S )Nrb   r   r—   r¶   )r¸   r¤   ÚflattenÚ	transposer¡   r«   r'   rÁ   rÇ   r©   r•   )
rE   rÈ   rÇ   Ú
batch_sizeÚ_r¯   r°   Úpatch_embedsr�   r®   s
             r*   ÚforwardzOwlv2VisionEmbeddings.forwardW  sÆ   € Ø'3Ô'9Ñ$ˆ
�A�v˜uØ×+Ò+¨LÑ9Ô9ˆØ#×+Ò+¨AÑ.Ô.×8Ò8¸¸AÑ>Ô>ˆàÔ+×2Ò2°:¸qÀ"ÑEÔEˆÝ”Y ¨lÐ;ÀÐCÑCÔCˆ
Ø#ð 	QØ# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà# d×&=Ò&=¸dÔ>OÑ&PÔ&PÑPˆJØÐr,   ©F)rM   rN   rO   r   r›   r'   r   r^   rÇ   rQ   ÚboolrÏ   Ú__classcell__©r­   s   @r*   r�   r�     sÂ   ø€ € € € € ðqÐ0ð qð qð qð qð qð qð*'D°5´<ð 'DÈð 'DÐUXð 'DÐ]bÔ]ið 'Dð 'Dð 'Dð 'DðRð  EÔ$5ð ÐQUð ÐbgÔbnð ð ð ð ð ð ð ð r,   r�   c            	       ó~   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej        dz  dej        dz  dej        dz  dej        fd„Z	ˆ xZ
S )
ÚOwlv2TextEmbeddingsrŽ   c                 ó\  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    dt          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )Nr•   r–   Fr˜   )rš   r›   r   r¨   Ú
vocab_sizer�   Útoken_embeddingÚmax_position_embeddingsr©   rª   r'   r(   r«   r¬   s     €r*   r›   zOwlv2TextEmbeddings.__init__g  sš   ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÑRÔRˆÔÝ"$¤,¨vÔ/MÈvÔOaÑ"bÔ"bˆÔð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r,   NÚ	input_idsr•   Úinputs_embedsr!   c                 óÊ   — |�|j         d         n|j         d         }|€| j        d d …d |…f         }|€|                      |¦  «        }|                      |¦  «        }||z   }|S )Nr—   éþÿÿÿ)r¸   r•   rØ   r©   )rE   rÚ   r•   rÛ   Ú
seq_lengthÚposition_embeddingsr®   s          r*   rÏ   zOwlv2TextEmbeddings.forwardq  s€   € ð -6Ð,A�Y”_ RÔ(Ð(À}ÔGZÐ[]ÔG^ˆ
àÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ Ø ×0Ò0°Ñ;Ô;ˆMà"×5Ò5°lÑCÔCÐØ"Ð%8Ñ8ˆ
àÐr,   ©NNN)rM   rN   rO   r   r›   r'   Ú
LongTensorrQ   r   rÏ   rÒ   rÓ   s   @r*   rÕ   rÕ   f  s¨   ø€ € € € € ð
˜ð 
ð 
ð 
ð 
ð 
ð 
ð .2Ø04Ø26ð	ð àÔ# dÑ*ðð Ô&¨Ñ-ðð Ô(¨4Ñ/ð	ð
 
Œðð ð ð ð ð ð ð r,   rÕ   ç        ÚmoduleÚ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—   ç      à¿rb   r   r¶   )ÚpÚtrainingr   )
r³   r'   ÚmatmulrË   r   r%   Úsoftmaxré   rî   Ú
contiguous)
rã   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ˆ fd„Z	 d	dej        dej        dz  dee         de	ej        ej        dz  f         fd„Z
ˆ xZS )
ÚOwlv2Attentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 ó‚  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        | j        z  | j        k    r t          d| j        › d| j        › d�¦  «        ‚| j        dz  | _	        |j
        | _        d| _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rì   F)rš   r›   rŽ   r�   rž   Únum_attention_headsÚ	num_headsÚhead_dimrv   ÚscaleÚattention_dropoutré   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projr¬   s     €r*   r›   zOwlv2Attention.__init__¦  s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØŒ=˜4œ>Ñ)¨T¬^Ò;Ð;Ýð'ÈdÌnð 'ð 'Ø”Nð'ð 'ð 'ñô ð ð ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr,   NÚhidden_statesrç   rê   r!   c                 ój  — |j         d d…         }g |¢d‘| j        ‘R } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        | j        sdn| j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )Nr—   r   rb   râ   )rè   ré   )r¸   rú   r  rÀ   rË   rÿ   r   r   Úget_interfacerŽ   Ú_attn_implementationrô   rû   rî   ré   r½   rñ   r  )rE   r  rç   rê   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfaceró   rò   s               r*   rÏ   zOwlv2Attention.forwardº  sl  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà6�t—{’{ =Ñ1Ô1Ô6¸ÐE×OÒOÐPQÐSTÑUÔUˆØ4�T—[’[ Ñ/Ô/Ô4°lÐC×MÒMÈaÐQRÑSÔSˆ
Ø6�t—{’{ =Ñ1Ô1Ô6¸ÐE×OÒOÐPQÐSTÑUÔUˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð ”JØ#œ}Ð>�C�C°$´,ð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r,   rV   )rM   rN   rO   rP   r›   r'   r   r   r   rI   rÏ   rÒ   rÓ   s   @r*   rö   rö   £  s©   ø€ € € € € ØGÐGðBð Bð Bð Bð Bð. /3ð)ð )à”|ð)ð œ tÑ+ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð)ð )ð )ð )ð )ð )ð )ð )r,   rö   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚOwlv2MLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S rV   )rš   r›   rŽ   r
   Ú
hidden_actÚactivation_fnr   rþ   r�   Úintermediate_sizeÚfc1Úfc2r¬   s     €r*   r›   zOwlv2MLP.__init__Þ  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr,   r  r!   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rV   )r  r  r  )rE   r  s     r*   rÏ   zOwlv2MLP.forwardå  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr,   )rM   rN   rO   r›   r'   r   rÏ   rÒ   rÓ   s   @r*   r  r  Ý  sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r,   r  c                   ól   ‡ — e Zd Zdeez  fˆ fd„Zdej        dej        dee	         dej
        fd„Zˆ xZS )ÚOwlv2EncoderLayerrŽ   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S ©N©Úeps)rš   r›   r�   rž   rö   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1r  ÚmlpÚlayer_norm2r¬   s     €r*   r›   zOwlv2EncoderLayer.__init__î  s   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝ'¨Ñ/Ô/ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜FÑ#Ô#ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÐÐr,   r  rç   rê   r!   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r  rç   rS   )r  r  r!  r   )rE   r  rç   rê   ÚresidualrÍ   s         r*   rÏ   zOwlv2EncoderLayer.forwardö  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr,   )rM   rN   rO   r   r   r›   r'   r   r   r   rQ   rÏ   rÒ   rÓ   s   @r*   r  r  í  s˜   ø€ € € € € ðSÐ0°?ÑBð Sð Sð Sð Sð Sð Sðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ð ð ð ð ð r,   r  c                   ó�   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdgZeedœZ ej        ¦   «         dej        fˆ fd„¦   «         Zˆ xZS )	ÚOwlv2PreTrainedModelrŽ   Úowlv2)ÚimageÚtextTr  )r  Ú
attentionsrã   c                 óö  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          ¦  «        r™t          j        |j        j	        d|dz  ¬¦  «         t          j        |j
        j	        d|dz  ¬¦  «         t          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         d	S t	          |t"          ¦  «        rÒt          j        |j        d|j        dz  |z  ¬¦  «         t          j        |j        j	        |j        j        |z  ¬¦  «         t          j        |j
        j	        |j        j        |z  ¬¦  «         t          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         d	S t	          |t,          ¦  «        r¯|j        dz  d|j        j        z  dz  z  |z  }|j        dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         d	S t	          |t8          ¦  «        r||j        j        dz  d|j        j        z  dz  z  |z  }d|j        j        z  dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         d	S t	          |t@          ¦  «        r|t          j        |j!        j	        |j"        dz  |z  ¬¦  «         t          j        |j#        j	        |j$        dz  |z  ¬¦  «         t          j%        |j&        | j        j'        ¦  «         d	S t	          |tP          ¦  «        r:t          j        |j)        | *                    |j+        |j,        ¦  «        ¦  «         d	S d	S )
zInitialize the weightsrâ   g{®Gáz”?)ÚmeanÚstdr—   r–   rì   )r,  rb   N)-rš   Ú_init_weightsrŽ   Úinitializer_factorÚ
isinstancerÕ   ÚinitÚnormal_rØ   r¹   r©   Úcopy_r•   r'   r(   r¸   r«   r�   r¡   rž   r¤   Úinitializer_rangerö   Únum_hidden_layersr  rÿ   r   r  r  r�   r  r  Ú
Owlv2ModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dimÚ	constant_Úlogit_scaleÚlogit_scale_init_valueÚOwlv2ForObjectDetectionÚbox_biasÚcompute_box_biasÚnum_patches_heightÚnum_patches_width)rE   rã   ÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdr­   s         €r*   r-  z"Owlv2PreTrainedModel._init_weights  s¾  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô/ˆÝ�fÕ1Ñ2Ô2ð  	vÝŒL˜Ô/Ô6¸SÀfÈtÁmÐTÑTÔTÐTÝŒL˜Ô2Ô9ÀÈÐRVÉÐWÑWÔWÐWÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ 5Ñ6Ô6ð 	vÝŒL˜Ô/°c¸vÔ?OÐQUÑ?UÐX^Ñ?^Ð_Ñ_Ô_Ð_ÝŒL˜Ô/Ô6¸F¼MÔ<[Ð^dÑ<dÐeÑeÔeÐeÝŒL˜Ô2Ô9¸v¼}Ô?^ÐagÑ?gÐhÑhÔhÐhÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜¥Ñ/Ô/ð 	vØ!Ô+¨TÑ1°q¸6¼=Ô;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"Ô,¨dÑ2°fÑ<ˆLÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ/°\ÐBÑBÔBÐBÐBÐBÝ˜¥Ñ)Ô)ð 	vØ!œ=Ô4°dÑ:ÀÀFÄMÔDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&œ-Ô3Ñ3¸Ñ<¸vÑEˆFÝŒL˜œÔ*°Ð7Ñ7Ô7Ð7ÝŒL˜œÔ*°Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥
Ñ+Ô+ð 	vÝŒLØÔ&Ô-ØÔ)¨4Ñ/°&Ñ8ðñ ô ð õ ŒLØÔ(Ô/ØÔ+¨TÑ1°FÑ:ðñ ô ð õ ŒN˜6Ô-¨t¬{Ô/QÑRÔRÐRÐRÐRÝ˜Õ 7Ñ8Ô8ð 	vÝŒJ�v”¨×(?Ò(?ÀÔ@YÐ[aÔ[sÑ(tÔ(tÑuÔuÐuÐuÐuð	vð 	vr,   )rM   rN   rO   r   rR   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendÚ_no_split_modulesr  rö   Ú_can_record_outputsr'   Úno_gradr   ÚModuler-  rÒ   rÓ   s   @r*   r%  r%    sº   ø€ € € € € € ð ÐÐÑØÐØ(ÐØ&*Ð#Ø€NØÐØÐØ"&ÐØ,Ð-Ðà*Ø$ðð Ðð
 €U„]�_„_ð$v B¤Ið $vð $vð $vð $vð $vñ „_ð$vð $vð $vð $vð $vr,   r%  c                   ó\   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej        dz  dee	         de
fd„Zˆ xZS )
ÚOwlv2Encoderz¯
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`Owlv2EncoderLayer`].

    Args:
        config: Owlv2Config
    rŽ   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rS   )r  )rC   rÍ   rŽ   s     €r*   ú
<listcomp>z)Owlv2Encoder.__init__.<locals>.<listcomp>T  s"   ø€ Ð$hÐ$hÐ$hÀ1Õ%6°vÑ%>Ô%>Ð$hÐ$hÐ$hr,   F)	rš   r›   rŽ   r   Ú
ModuleListÚranger4  ÚlayersÚgradient_checkpointingr¬   s    `€r*   r›   zOwlv2Encoder.__init__Q  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$hÐ$hÐ$hÐ$hÍÈfÔNfÑHgÔHgÐ$hÑ$hÔ$hÑiÔiˆŒØ&+ˆÔ#Ð#Ð#r,   Nrç   rê   r!   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)Úlast_hidden_state)rX  r   )rE   rÛ   rç   rê   r  Úencoder_layers         r*   rÏ   zOwlv2Encoder.forwardW  s^   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
r,   rV   )rM   rN   rO   rP   r   r›   r'   r   r   r   r   rÏ   rÒ   rÓ   s   @r*   rR  rR  H  s—   ø€ € € € € ðð ð,˜{ð ,ð ,ð ,ð ,ð ,ð ,ð /3ð
ð 
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r,   rR  c                   óÎ   ‡ — e Zd Zdefˆ fd„Ze ed¬¦  «        e	 	 	 ddej	        dz  dej	        dz  dej	        dz  d	e
e         d
eez  f
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚOwlv2TextTransformerrŽ   c                 ó  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          |¦  «        | _        t          j        ||j	        ¬¦  «        | _
        |                      ¦   «          d S r  )rš   r›   r�   rÕ   r®   rR  Úencoderr   r  r  Úfinal_layer_normÚ	post_init)rE   rŽ   rž   r­   s      €r*   r›   zOwlv2TextTransformer.__init__l  ss   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ&ˆ	Ý-¨fÑ5Ô5ˆŒÝ# FÑ+Ô+ˆŒÝ "¤¨Y¸FÔ<QÐ RÑ RÔ RˆÔð 	�ŠÑÔÐÐÐr,   F©Útie_last_hidden_statesNrÚ   rç   r•   rê   r!   c                 óV  — |                      ¦   «         }|                     d|d         ¦  «        }|                      ||¬¦  «        }t          | j        ||d¬¦  «        }|                     dd¦  «          | j        d||ddœ|¤Ž}|j        }|                      |¦  «        }|t          j
        |j        d         |j        ¬	¦  «        |                     t          j        ¦  «                             d¬
¦  «                             |j        ¦  «        f         }	t!          ||	¬¦  «        S )a|  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)
        r—   )rÚ   r•   N)rŽ   rÛ   rç   Úpast_key_valuesrý   T)rÛ   rç   rý   r   r#   r¶   ©r[  Úpooler_outputrS   )r³   rÀ   r®   r   rŽ   Úpopr`  r[  ra  r'   r(   r¸   r$   Útor^   Úargmaxr   )
rE   rÚ   rç   r•   rê   r  r  Úencoder_outputsr[  Úpooled_outputs
             r*   rÏ   zOwlv2TextTransformer.forwardw  sK  € ð   —n’nÑ&Ô&ˆØ—N’N 2 {°2¤Ñ7Ô7ˆ	ØŸš°)È,˜ÑWÔWˆå+Ø”;Ø'Ø)Ø ð	
ñ 
ô 
ˆð 	�
Š
�; Ñ%Ô%Ð%Ø+7¨4¬<ð ,
Ø'Ø)Øð,
ð ,
ð ð	,
ð ,
ˆð ,Ô=ÐØ ×1Ò1Ð2CÑDÔDÐð *ÝŒLÐ*Ô0°Ô3Ð<MÔ<TÐUÑUÔUØ�LŠL�œÑ#Ô#×*Ò*¨rÐ*Ñ2Ô2×5Ò5Ð6GÔ6NÑOÔOðQô
ˆõ
 *Ø/Ø'ð
ñ 
ô 
ð 	
r,   rà   )rM   rN   rO   r   r›   r   r   r   r'   r   r   r   rI   r   rÏ   rÒ   rÓ   s   @r*   r^  r^  k  sè   ø€ € € € € ð	˜ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð *.Ø.2Ø,0ð	-
ð -
à”< $Ñ&ð-
ð œ tÑ+ð-
ð ”l TÑ)ð	-
ð
 Ð+Ô,ð-
ð 
Ð+Ñ	+ð-
ð -
ð -
ñ „^ñ 3Ô2ñ  Ôð-
ð -
ð -
ð -
ð -
r,   r^  c                   ó°   ‡ — e Zd ZU eed<   dZdefˆ fd„Zdej        fd„Z	d„ Z
e	 	 ddej        dz  d	ej        dz  d
ee         deez  fd„¦   «         Zˆ xZS )ÚOwlv2TextModelrŽ   )r(  c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S rV   )rš   r›   r^  Ú
text_modelrb  r¬   s     €r*   r›   zOwlv2TextModel.__init__¯  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý.¨vÑ6Ô6ˆŒà�ŠÑÔÐÐÐr,   r!   c                 ó$   — | j         j        j        S rV   ©rq  r®   rØ   rK   s    r*   Úget_input_embeddingsz#Owlv2TextModel.get_input_embeddingsµ  s   € ØŒÔ)Ô9Ð9r,   c                 ó(   — || j         j        _        d S rV   rs  )rE   ræ   s     r*   Úset_input_embeddingsz#Owlv2TextModel.set_input_embeddings¸  s   € Ø5:ˆŒÔ"Ô2Ð2Ð2r,   NrÚ   rç   rê   c                 ó"   —  | j         d||dœ|¤ŽS )a×  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)

        Examples:
        ```python
        >>> from transformers import AutoProcessor, Owlv2TextModel

        >>> model = Owlv2TextModel.from_pretrained("google/owlv2-base-patch16")
        >>> processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16")
        >>> inputs = processor(
        ...     text=[["a photo of a cat", "a photo of a dog"], ["photo of a astranaut"]], return_tensors="pt"
        ... )
        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states
        ```©rÚ   rç   rS   )rq  )rE   rÚ   rç   rê   s       r*   rÏ   zOwlv2TextModel.forward»  s4   € ð6 ˆtŒð 
ØØ)ð
ð 
ð ð
ð 
ð 	
r,   ©NN)rM   rN   rO   r   rR   rG  r›   r   rP  rt  rv  r   r'   r   r   r   rI   r   rÏ   rÒ   rÓ   s   @r*   ro  ro  «  sñ   ø€ € € € € € ØÐÐÑØ Ðð˜ð ð ð ð ð ð ð: b¤ið :ð :ð :ð :ð;ð ;ð ;ð ð *.Ø.2ð
ð 
à”< $Ñ&ð
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ð
ð 
ð 
ð 
ð 
r,   ro  c                   ó¦   ‡ — e Zd Zdefˆ fd„Ze ed¬¦  «        e	 ddej	        de
dz  dee         d	eez  fd
„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚOwlv2VisionTransformerrŽ   c                 óV  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _
        t	          j        |j        |j        ¬¦  «        | _        |                      ¦   «          d S r  )rš   r›   r�   r®   r   r  r�   r  Úpre_layernormrR  r`  Úpost_layernormrb  r¬   s     €r*   r›   zOwlv2VisionTransformer.__init__ß  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å/°Ñ7Ô7ˆŒÝœ\¨&Ô*<À&ÔBWÐXÑXÔXˆÔÝ# FÑ+Ô+ˆŒÝ œl¨6Ô+=À6ÔCXÐYÑYÔYˆÔð 	�ŠÑÔÐÐÐr,   Frc  rÈ   rÇ   Nrê   r!   c                 óF  — | j         j        j        j        }|                     |¦  «        }|                       ||¬¦  «        }|                      |¦  «        } | j        dd|i|¤Ž}|j        }|d d …dd d …f         }|                      |¦  «        }t          ||¬¦  «        S )N)rÇ   rÛ   r   rg  rS   )
r®   r¤   r¹   rX   rj  r}  r`  r[  r~  r   )	rE   rÈ   rÇ   rê   Úexpected_input_dtyper  rl  r[  rm  s	            r*   rÏ   zOwlv2VisionTransformer.forwardê  sË   € ð  $œÔ>ÔEÔKÐØ#—’Ð';Ñ<Ô<ˆàŸš¨ÐOg˜ÑhÔhˆØ×*Ò*¨=Ñ9Ô9ˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ)¨!¨!¨!¨Q°°°¨'Ô2ˆØ×+Ò+¨MÑ:Ô:ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r,   rÐ   )rM   rN   rO   r   r›   r   r   r   r'   rQ   rÑ   r   r   rI   r   rÏ   rÒ   rÓ   s   @r*   r{  r{  Þ  sË   ø€ € € € € ð	Ð0ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð 16ð
ð 
àÔ'ð
ð #'¨¡+ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ 3Ô2ñ  Ôð
ð 
ð 
ð 
ð 
r,   r{  c            
       ó˜   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej	        fd„Z
e	 	 ddej        dz  d	ed
ee         defd„¦   «         Zˆ xZS )ÚOwlv2VisionModelrŽ   rÈ   )r'  c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S rV   )rš   r›   r{  Úvision_modelrb  r¬   s     €r*   r›   zOwlv2VisionModel.__init__  sA   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý2°6Ñ:Ô:ˆÔà�ŠÑÔÐÐÐr,   r!   c                 ó$   — | j         j        j        S rV   )r„  r®   r¤   rK   s    r*   rt  z%Owlv2VisionModel.get_input_embeddings  s   € ØÔ Ô+Ô;Ð;r,   NFrÇ   rê   c                 ó"   —  | j         d||dœ|¤ŽS )a#  
        Examples:
        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, Owlv2VisionModel

        >>> model = Owlv2VisionModel.from_pretrained("google/owlv2-base-patch16")
        >>> processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16")
        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled CLS states
        ```©rÈ   rÇ   rS   )r„  )rE   rÈ   rÇ   rê   s       r*   rÏ   zOwlv2VisionModel.forward  s5   € ð8 !ˆtÔ ð 
Ø%Ø%=ð
ð 
ð ð
ð 
ð 	
r,   ©NF)rM   rN   rO   r   rR   Úmain_input_namerG  r›   r   rP  rt  r   r'   rQ   rÑ   r   r   r   rÏ   rÒ   rÓ   s   @r*   r‚  r‚  
  sÜ   ø€ € € € € € ØÐÐÑØ$€OØ!ÐðÐ0ð ð ð ð ð ð ð< b¤ið <ð <ð <ð <ð ð 26Ø).ð
ð 
àÔ'¨$Ñ.ð
ð #'ð
ð Ð+Ô,ð	
ð
 
$ð
ð 
ð 
ñ „^ð
ð 
ð 
ð 
ð 
r,   r‚  c                   ó”  ‡ — e Zd ZU eed<   defˆ fd„Zee	 ddej	        dej	        dz  de
e         deez  fd„¦   «         ¦   «         Zee	 dd
ej	        dede
e         deez  fd„¦   «         ¦   «         Zee	 	 	 	 	 	 ddej        dz  d
ej        dz  dej	        dz  dedz  dededz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )r5  rŽ   c                 ó  •— t          ¦   «                              |¦  «         |j        }|j        }|j        | _        |j        | _        |j        | _        t          |¦  «        | _	        t          |¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        t#          j        |j        ¦  «        ¦  «        | _        |                      ¦   «          d S )NF)r”   )rš   r›   Útext_configÚvision_configÚprojection_dimr�   r7  r9  r^  rq  r{  r„  r   rþ   r8  r6  rŸ   r'   Útensorr<  r;  rb  )rE   rŽ   rŒ  r�  r­   s       €r*   r›   zOwlv2Model.__init__@  sâ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ(ˆØÔ,ˆà$Ô3ˆÔØ)Ô5ˆÔØ -Ô 9ˆÔå.¨{Ñ;Ô;ˆŒÝ2°=ÑAÔAˆÔå!#¤¨4Ô+@À$ÔBUÐ\aÐ!bÑ!bÔ!bˆÔÝ!œy¨Ô)<¸dÔ>QÐX]Ð^Ñ^Ô^ˆÔÝœ<­¬°VÔ5RÑ(SÔ(SÑTÔTˆÔð 	�ŠÑÔÐÐÐr,   NrÚ   rç   rê   r!   c                 óh   —  | j         d||dœ|¤Ž}|j        }|                      |¦  «        |_        |S )a¶  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)

        Examples:
        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, Owlv2Model

        >>> model = Owlv2Model.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> inputs = processor(
        ...     text=[["a photo of a cat", "a photo of a dog"], ["photo of a astranaut"]], return_tensors="pt"
        ... )
        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```rx  rS   )rq  rh  r6  )rE   rÚ   rç   rê   Útext_outputsrm  s         r*   Úget_text_featureszOwlv2Model.get_text_featuresT  sX   € ð6 4C°4´?ð 4
ØØ)ð4
ð 4
ð ð4
ð 4
ˆð
 %Ô2ˆØ%)×%9Ò%9¸-Ñ%HÔ%HˆÔ"àÐr,   FrÈ   rÇ   c                 ód   —  | j         d||dœ|¤Ž}|                      |j        ¦  «        |_        |S )a–  
        Examples:
        ```python
        >>> import torch
        >>> from transformers.image_utils import load_image
        >>> from transformers import AutoProcessor, Owlv2Model

        >>> model = Owlv2Model.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16-ensemble")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = load_image(url)

        >>> inputs = processor(images=image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```r‡  rS   )r„  r8  rh  )rE   rÈ   rÇ   rê   Úvision_outputss        r*   Úget_image_featureszOwlv2Model.get_image_featuresy  sT   € ð2 6G°TÔ5Fð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð
 (,×'=Ò'=¸nÔ>ZÑ'[Ô'[ˆÔ$àÐr,   Úreturn_lossÚreturn_base_image_embedsc           	      ó~  —  | j         d	||dœ|¤Ž} | j        d	||dœ|¤Ž}	|	j        }
|                      |
¦  «        }
|j        }|                      |¦  «        }|t
          j                             |ddd¬¦  «        z  }|
t
          j                             |
ddd¬¦  «        z  }| j         	                    ¦   «          
                    |j        ¦  «        }t          j        ||                     ¦   «         ¦  «        |z  }|                     ¦   «         }d}|rt          |¦  «        }|}
t          ||||
||	|¬¦  «        S )
a…  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.
        return_base_image_embeds (`bool`, *optional*):
            Whether or not to return the base image embeddings.

        Examples:
        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, Owlv2Model

        >>> model = Owlv2Model.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> inputs = processor(text=[["a photo of a cat", "a photo of a dog"]], images=image, return_tensors="pt")
        >>> outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```r‡  rx  rb   r—   T)Úordr·   ÚkeepdimN)r5   r6   r7   r8   r9   r:   r;   rS   )r„  rq  rh  r6  r8  r'   ÚlinalgÚnormr;  Úexprj  r$   rï   rT   r2   r4   )rE   rÚ   rÈ   rç   r–  rÇ   r—  rê   r”  r‘  r8   r9   Útext_embeds_normr;  r7   r6   r5   s                    r*   rÏ   zOwlv2Model.forward›  s�  € ðF 6G°TÔ5Fð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð 4C°4´?ð 4
ØØ)ð4
ð 4
ð ð4
ð 4
ˆð #Ô0ˆØ×*Ò*¨;Ñ7Ô7ˆØ%Ô3ˆØ×-Ò-¨lÑ;Ô;ˆð $¥e¤l×&7Ò&7¸È!ÐQSÐ]aÐ&7Ñ&bÔ&bÑbˆØ&­¬×):Ò):¸;ÈAÐSUÐ_cÐ):Ñ)dÔ)dÑdÐð Ô&×*Ò*Ñ,Ô,×/Ò/°Ô0CÑDÔDˆåœ,Ð'7¸¿ºÑ9IÔ9IÑJÔJÈ[ÑXˆØ*×,Ò,Ñ.Ô.ÐàˆØð 	@Ý.¨Ñ?Ô?ˆDà&ˆåØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
r,   rV   rÐ   )NNNNFN)rM   rN   rO   r   rR   r›   r   r   r'   r   r   r   rI   r   r’  rÑ   r•  rá   rQ   r4   rÏ   rÒ   rÓ   s   @r*   r5  r5  ;  sü  ø€ € € € € € ð ÐÐÑð˜{ð ð ð ð ð ð ð( Øð /3ð!ð !à”<ð!ð œ tÑ+ð!ð Ð+Ô,ð	!ð
 
Ð+Ñ	+ð!ð !ð !ñ „^ñ Ôð!ðF Øð */ðð à”lðð #'ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôðð@ Øð .2Ø15Ø.2Ø#'Ø).Ø04ðK
ð K
àÔ# dÑ*ðK
ð Ô'¨$Ñ.ðK
ð œ tÑ+ð	K
ð
 ˜D‘[ðK
ð #'ðK
ð #'¨¡+ðK
ð Ð+Ô,ðK
ð 
�Ñ	ðK
ð K
ð K
ñ „^ñ ÔðK
ð K
ð K
ð K
ð K
r,   r5  c                   óN   ‡ — e Zd Zddedefˆ fd„Zdej        dej        fd„Z	ˆ xZ
S )	ÚOwlv2BoxPredictionHeadé   rŽ   Úout_dimc                 ó,  •— t          ¦   «                              ¦   «          |j        j        }t	          j        ||¦  «        | _        t	          j        ||¦  «        | _        t	          j        ¦   «         | _	        t	          j        ||¦  «        | _
        d S rV   )rš   r›   r�  r�   r   rþ   Údense0Údense1ÚGELUÚgeluÚdense2)rE   rŽ   r¢  r°   r­   s       €r*   r›   zOwlv2BoxPredictionHead.__init__í  sn   ø€ Ý‰Œ×ÒÑÔÐàÔ$Ô0ˆÝ”i  uÑ-Ô-ˆŒÝ”i  uÑ-Ô-ˆŒÝ”G‘I”IˆŒ	Ý”i  wÑ/Ô/ˆŒˆˆr,   Úimage_featuresr!   c                 óØ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rV   )r¤  r§  r¥  r¨  )rE   r©  Úoutputs      r*   rÏ   zOwlv2BoxPredictionHead.forwardö  s\   € Ø—’˜^Ñ,Ô,ˆØ—’˜6Ñ"Ô"ˆØ—’˜VÑ$Ô$ˆØ—’˜6Ñ"Ô"ˆØ—’˜VÑ$Ô$ˆØˆr,   )r¡  )rM   rN   rO   r   r^   r›   r'   r   rQ   rÏ   rÒ   rÓ   s   @r*   r   r   ì  sw   ø€ € € € € ð0ð 0˜{ð 0°Sð 0ð 0ð 0ð 0ð 0ð 0ð e¤lð °uÔ7Hð ð ð ð ð ð ð ð r,   r   c            	       ó|   ‡ — e Zd Zdefˆ fd„Zdej        dej        dz  dej        dz  deej                 fd„Z	ˆ xZ
S )	ÚOwlv2ClassPredictionHeadrŽ   c                 ól  •— t          ¦   «                              ¦   «          |j        j        }|j        j        | _        t          j        | j        |¦  «        | _        t          j        | j        d¦  «        | _	        t          j        | j        d¦  «        | _
        t          j        ¦   «         | _        d S )Nr   )rš   r›   rŒ  r�   r�  Ú	query_dimr   rþ   r¤  Úlogit_shiftr;  ÚELUÚelu)rE   rŽ   r¢  r­   s      €r*   r›   z!Owlv2ClassPredictionHead.__init__  sƒ   ø€ Ý‰Œ×ÒÑÔÐàÔ$Ô0ˆØÔ-Ô9ˆŒå”i ¤°Ñ8Ô8ˆŒÝœ9 T¤^°QÑ7Ô7ˆÔÝœ9 T¤^°QÑ7Ô7ˆÔÝ”6‘8”8ˆŒˆˆr,   r9   Úquery_embedsNÚ
query_maskr!   c                 ó   — |                       |¦  «        }|€L|j        }|j        d d…         \  }}t          j        ||| j        f¦  «                             |¦  «        }||fS |t          j                             |dd¬¦  «        dz   z  }|t          j                             |dd¬¦  «        dz   z  }t          j	        d||¦  «        }|  
                    |¦  «        }	|                      |¦  «        }
|                      |
¦  «        dz   }
||	z   |
z  }|�v|j        dk    rt          j        |d¬	¦  «        }t          j        |d
k    t          j        |j        ¦  «        j        |¦  «        }|                     t          j        ¦  «        }||fS )Nrb   r—   T)r·   rš  g�íµ ÷Æ°>z...pd,...qd->...pqr   rÝ   r¶   r   )r¤  r$   r¸   r'   Úzerosr¯  rj  r›  rœ  Úeinsumr°  r;  r²  Úndimrº   ÚwhereÚfinforX   rf   rY   )rE   r9   r³  r´  Úimage_class_embedsr$   rÌ   r¦   Úpred_logitsr°  r;  s              r*   rÏ   z Owlv2ClassPredictionHead.forward  s”  € ð "Ÿ[š[¨Ñ6Ô6ÐØÐØ'Ô.ˆFØ&8Ô&>¸rÀ¸rÔ&BÑ#ˆJ˜Ýœ+ z°;ÀÄÐ&OÑPÔP×SÒSÐTZÑ[Ô[ˆKØÐ!3Ð4Ð4ð 0µ5´<×3DÒ3DÐEWÐ]_ÐimÐ3DÑ3nÔ3nÐquÑ3uÑvÐØ#¥u¤|×'8Ò'8¸È2ÐW[Ð'8Ñ'\Ô'\Ð_cÑ'cÑdˆõ ”lÐ#7Ð9KÈ\ÑZÔZˆð ×&Ò& |Ñ4Ô4ˆØ×&Ò& |Ñ4Ô4ˆØ—h’h˜{Ñ+Ô+¨aÑ/ˆØ" [Ñ0°KÑ?ˆàÐ!ØŒ Ò"Ð"Ý"œ_¨Z¸RÐ@Ñ@Ô@�
åœ+ j°A¢oµu´{À;ÔCTÑ7UÔ7UÔ7YÐ[fÑgÔgˆKØ%Ÿ.š.­¬Ñ7Ô7ˆKàÐ/Ð0Ð0r,   )rM   rN   rO   r   r›   r'   rQ   r   rI   rÏ   rÒ   rÓ   s   @r*   r­  r­     s˜   ø€ € € € € ð	˜{ð 	ð 	ð 	ð 	ð 	ð 	ð!1àÔ'ð!1ð Ô'¨$Ñ.ð!1ð ”L 4Ñ'ð	!1ð
 
ˆuÔ Ô	!ð!1ð !1ð !1ð !1ð !1ð !1ð !1ð !1r,   r­  c                   óü  ‡ — e Zd ZU eed<   defˆ fd„Zedededej	        fd„¦   «         Z
dej        dej        fd„Zdededej	        fd	„Z	 ddej        dej        dedej        fd„Z	 	 d dej        dej        dz  dej	        dz  deej                 fd„Z	 ddej	        dej        dej	        dedee         deej                 fd„Z	 ddej        dedee         deej                 fd„Z	 ddej        dej        dedej        fd„Zee	 	 d!dej        dej        dz  dedee         def
d„¦   «         ¦   «         Zee	 	 d!dej	        dej        dej	        dz  dedee         defd„¦   «         ¦   «         Zˆ xZS )"r=  rŽ   c                 ó¾  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          |¦  «        | _        t          |d¬¦  «        | _        t          j
        |j        j        |j        j        ¬¦  «        | _        t          j        ¦   «         | _        || _        | j        j        j        | j        j        j        z  | _        | j        j        j        | j        j        j        z  | _        |                      d|                      | j        | j        ¦  «        d¬¦  «         |                      ¦   «          d S )Nr   )r¢  r  r>  Fr˜   )rš   r›   r5  r&  r­  Ú
class_headr   Úbox_headÚobjectness_headr   r  r�  r�   r  Ú
layer_normÚSigmoidÚsigmoidrŽ   r¥   rœ   r@  rA  rª   r?  rb  r¬   s     €r*   r›   z Owlv2ForObjectDetection.__init__3  s   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å Ñ'Ô'ˆŒ
Ý2°6Ñ:Ô:ˆŒÝ.¨vÑ6Ô6ˆŒÝ5°fÀaÐHÑHÔHˆÔåœ, vÔ';Ô'GÈVÔMaÔMpÐqÑqÔqˆŒÝ”z‘|”|ˆŒØˆŒØ"&¤+Ô";Ô"FÈ$Ì+ÔJcÔJnÑ"nˆÔØ!%¤Ô!:Ô!EÈÌÔIbÔImÑ!mˆÔØ×ÒØ˜×-Ò-¨dÔ.EÀtÔG]Ñ^Ô^Ðkpð 	ñ 	
ô 	
ð 	
ð
 	�ŠÑÔÐÐÐr,   r@  rA  r!   c                 óf  — t          j        d|dz   t           j        ¬¦  «        }t          j        d| dz   t           j        ¬¦  «        }t          j        ||d¬¦  «        \  }}t          j        ||fd¬¦  «        }|dxx         |z  cc<   |dxx         | z  cc<   |                     dd	¦  «        }|S )
Nr   )rX   Úxy)Úindexingr—   r¶   ©.r   ©.r   rb   )r'   r(   rY   ÚmeshgridÚstackrÀ   )r@  rA  Úx_coordinatesÚy_coordinatesÚxxÚyyÚbox_coordinatess          r*   Ú!normalize_grid_corner_coordinatesz9Owlv2ForObjectDetection.normalize_grid_corner_coordinatesG  sË   € õ œ QÐ(9¸AÑ(=ÅUÄ]ÐSÑSÔSˆÝœ QÐ(:¸QÑ(>ÅeÄmÐTÑTÔTˆÝ” ¨}ÀtÐLÑLÔL‰ˆˆBõ  œ+ r¨2 h°BÐ7Ñ7Ô7ˆØ˜ÐÐÔÐ#4Ñ4ÐÐÑØ˜ÐÐÔÐ#5Ñ5ÐÐÑð *×.Ò.¨r°1Ñ5Ô5ˆàÐr,   r©  c                 óh   — |                      ¦   «         }|                      |¦  «        }|d         }|S )a#  Predicts the probability that each image feature token is an object.

        Args:
            image_features (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_dim)`)):
                Features extracted from the image.
        Returns:
            Objectness scores.
        rÈ  )ÚdetachrÁ  )rE   r©  r   s      r*   Úobjectness_predictorz,Owlv2ForObjectDetection.objectness_predictorY  s:   € ð (×.Ò.Ñ0Ô0ˆØ ×0Ò0°Ñ@Ô@ÐØ-¨fÔ5ÐØ Ð r,   c                 ó¸  — |                       ||¦  «        }t          j        |dd¦  «        }t          j        |dz   ¦  «        t          j        | dz   ¦  «        z
  }t          j        |d¦  «        }|dxx         |z  cc<   |dxx         |z  cc<   t          j        |dz   ¦  «        t          j        | dz   ¦  «        z
  }t          j        ||gd¬¦  «        }|S )Nrâ   g      ð?g-Cëâ6?rÈ  rÉ  r—   r¶   )rÑ  r'   ÚclipÚlogÚlog1pÚ	full_likerÁ   )rE   r@  rA  rÐ  Úbox_coord_biasÚbox_sizeÚbox_size_biasr>  s           r*   r?  z(Owlv2ForObjectDetection.compute_box_biash  sð   € à×@Ò@ÐASÐUfÑgÔgˆÝœ* _°c¸3Ñ?Ô?ˆõ œ ?°TÑ#9Ñ:Ô:½U¼[È/ÐIYÐ\`ÑI`Ñ=aÔ=aÑaˆõ ”? >°3Ñ7Ô7ˆØ�ÐÐÔÐ-Ñ-ÐÐÑØ�ÐÐÔÐ.Ñ.ÐÐÑÝœ	 (¨T¡/Ñ2Ô2µU´[À(ÀÈTÑAQÑ5RÔ5RÑRˆõ ”9˜n¨mÐ<À"ÐEÑEÔEˆØˆr,   FÚimage_featsÚfeature_maprÇ   c                 óð   — |                       |¦  «        }|r#|j        \  }}}}|                      ||¦  «        }n| j        }|                     |j        ¦  «        }||z  }|                      |¦  «        }|S )a  
        Args:
            image_feats:
                Features extracted from the image, returned by the `image_text_embedder` method.
            feature_map:
                A spatial re-arrangement of image_features, also returned by the `image_text_embedder` method.
            interpolate_pos_encoding:
                Whether to interpolate the pre-trained position encodings.
        Returns:
            pred_boxes:
                List of predicted boxes (cxcywh normalized to 0, 1) nested within a dictionary.
        )rÀ  r¸   r?  r>  rj  r$   rÄ  )	rE   rÝ  rÞ  rÇ   r€   rÍ   r@  rA  r>  s	            r*   Úbox_predictorz%Owlv2ForObjectDetection.box_predictor{  s‡   € ð& —]’] ;Ñ/Ô/ˆ
ð $ð 	%Ø:EÔ:KÑ7ˆAÐ!Ð#4°aØ×,Ò,Ð-?ÐARÑSÔSˆHˆHà”}ˆHà—;’;˜{Ô1Ñ2Ô2ˆØ�hÑˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr,   Nr³  r´  c                 ó>   — |                       |||¦  «        \  }}||fS )a8  
        Args:
            image_feats:
                Features extracted from the `image_text_embedder`.
            query_embeds:
                Text query embeddings.
            query_mask:
                Must be provided with query_embeddings. A mask indicating which query embeddings are valid.
        )r¿  )rE   rÝ  r³  r´  r¼  r»  s         r*   Úclass_predictorz'Owlv2ForObjectDetection.class_predictor�  s,   € ð -1¯OªO¸KÈÐWaÑ,bÔ,bÑ)ˆÐ(àÐ/Ð0Ð0r,   rÚ   rÈ   rç   rê   c                 ó@  —  | j         d||||dœ|¤Ž}|r5|j        \  }}}}	|| j        j        j        z  }
|	| j        j        j        z  }n| j        }
| j        }|j        d         }| j         j         	                    |¦  «        }t          j        |d d …d d…d d …f         |d d …d d…f         j        ¦  «        }|d d …dd …d d …f         |z  }|                      |¦  «        }|j        d         |
||j        d         f}|                     |¦  «        }|d         }|||fS )N)rÈ   rÚ   rç   rÇ   r   r   r—   éüÿÿÿrS   )r&  r¸   rŽ   r�  rœ   r@  rA  r;   r„  r~  r'   Úbroadcast_torÂ  r½   )rE   rÚ   rÈ   rç   rÇ   rê   ÚoutputsrÍ   r¯   r°   r@  rA  r[  r9   Úclass_token_outÚnew_sizer8   s                    r*   Úimage_text_embedderz+Owlv2ForObjectDetection.image_text_embedder±  s€  € ð �$”*ð 
Ø%ØØ)Ø%=ð	
ð 
ð
 ð
ð 
ˆð $ð 	7Ø".Ô"4ÑˆAˆq�&˜%Ø!'¨4¬;Ô+DÔ+OÑ!OÐØ %¨¬Ô)BÔ)MÑ MÐÐà!%Ô!8ÐØ $Ô 6Ðð $Ô7¸Ô:ÐØ”zÔ.×=Ò=Ð>OÑPÔPˆõ  Ô,¨\¸!¸!¸!¸R¸a¸RÀÀÀ¸(Ô-CÀ\ÐRSÐRSÐRSÐUXÐVXÐUXÐRXÔEYÔE_Ñ`Ô`ˆð $ A A A q r r¨1¨1¨1 HÔ-°Ñ?ˆØ—’ |Ñ4Ô4ˆð Ô˜qÔ!ØØØÔ˜rÔ"ð	
ˆð $×+Ò+¨HÑ5Ô5ˆØ˜b”kˆà˜\¨7Ð3Ð3r,   c                 ó*  —  | j         j        d||dœ|¤Ž}|r5|j        \  }}}}|| j        j        j        z  }|| j        j        j        z  }	n| j        }| j        }	|d         }
| j         j                             |
¦  «        }t          j
        |d d …d d…d d …f         |d d …d d…f         j        ¦  «        }|d d …dd …d d …f         |z  }|                      |¦  «        }|j        d         ||	|j        d         f}|                     |¦  «        }||fS )Nr‡  r   r   r—   rS   )r&  r„  r¸   rŽ   r�  rœ   r@  rA  r~  r'   rå  rÂ  r½   )rE   rÈ   rÇ   rê   r”  rÍ   r¯   r°   r@  rA  r[  r9   rç  rè  s                 r*   Úimage_embedderz&Owlv2ForObjectDetection.image_embedderá  sn  € ð 6M°T´ZÔ5Lð 6
Ø%Ð@Xð6
ð 6
Ø\bð6
ð 6
ˆð $ð 	7Ø".Ô"4ÑˆAˆq�&˜%Ø!'¨4¬;Ô+DÔ+OÑ!OÐØ %¨¬Ô)BÔ)MÑ MÐÐà!%Ô!8ÐØ $Ô 6Ðð +¨1Ô-ÐØ”zÔ.×=Ò=Ð>OÑPÔPˆõ  Ô,¨\¸!¸!¸!¸R¸a¸RÀÀÀ¸(Ô-CÀ\ÐRSÐRSÐRSÐUXÐVXÐUXÐRXÔEYÔE_Ñ`Ô`ˆð $ A A A q r r¨1¨1¨1 HÔ-°Ñ?ˆØ—’ |Ñ4Ô4ˆð Ô˜qÔ!ØØØÔ˜rÔ"ð	
ˆð $×+Ò+¨HÑ5Ô5ˆà˜nÐ-Ð-r,   Úquery_image_featuresÚquery_feature_mapc                 óØ  — |                       |¦  «        \  }}|                      |||¦  «        }t          |¦  «        }g }g }	|j        }
t	          |j        d         ¦  «        D �]Q}t          j        g d¢g|
¬¦  «        }||         }t          ||¦  «        \  }}t          j	        |d         dk    ¦  «        rt          ||¦  «        }t          j        |¦  «        dz  }|d         |k                         ¦   «         }|                     ¦   «         r£||         |                     d¦  «                 }t          j        ||         d¬¦  «        }t          j        d||¦  «        }|t          j        |¦  «                 }|                     ||         |         ¦  «         |	                     |¦  «         �ŒS|r)t          j        |¦  «        }t          j        |	¦  «        }nd	\  }}|||fS )
Nr   )r   r   r   r   r#   râ   gš™™™™™é?r   )Úaxiszd,id->iry  )râ  rà  r   r$   rW  r¸   r'   r�  rs   ru   rz   rg   ÚnonzeroÚnumelÚsqueezer+  r·  ÚargminÚappendrË  )rE   rì  rí  rÇ   rÍ   r�   r€   Úpred_boxes_as_cornersÚbest_class_embedsÚbest_box_indicesÚpred_boxes_deviceÚiÚeach_query_boxÚeach_query_pred_boxesÚiousÚiou_thresholdÚselected_indsÚselected_embeddingsÚmean_embedsÚmean_simÚbest_box_indr³  Úbox_indicess                          r*   Úembed_image_queryz)Owlv2ForObjectDetection.embed_image_query  sô  € ð ×.Ò.Ð/CÑDÔD‰ˆˆ<Ø×'Ò'Ð(<Ð>OÐQiÑjÔjˆ
Ý 8¸Ñ DÔ DÐð ÐØÐØ1Ô8ÐåÐ+Ô1°!Ô4Ñ5Ô5ð 	6ñ 	6ˆAÝ"œ\¨<¨<¨<¨.ÐARÐSÑSÔSˆNØ$9¸!Ô$<Ð!Ý˜nÐ.CÑDÔD‰GˆD�!õ Œy˜˜aœ CšÑ(Ô(ð RÝ*¨>Ð;PÑQÔQ�õ "œI d™OœO¨cÑ1ˆMà! !œW¨Ò5×>Ò>Ñ@Ô@ˆMØ×"Ò"Ñ$Ô$ð 6Ø&2°1¤o°m×6KÒ6KÈAÑ6NÔ6NÔ&OÐ#Ý#œj¨°a¬¸qÐAÑAÔA�Ý œ<¨	°;Ð@SÑTÔT�Ø,­U¬\¸(Ñ-CÔ-CÔD�Ø!×(Ò(¨°a¬¸Ô)FÑGÔGÐGØ ×'Ò'¨Ñ5Ô5Ð5ùàð 	3Ý œ;Ð'8Ñ9Ô9ˆLÝœ+Ð&6Ñ7Ô7ˆKˆKà(2Ñ%ˆL˜+à˜[¨*Ð4Ð4r,   Úquery_pixel_valuesc           
      óÄ  — |                       ||¬¦  «        d         } | j         d||dœ|¤Ž\  }}|j        \  }}	}
}t          j        |||	|
z  |f¦  «        }|j        \  }}	}
}t          j        |||	|
z  |f¦  «        }|                      |||¦  «        \  }}}|                      ||¬¦  «        \  }}|                      |||¦  «        }t          ||||||d|¬¦  «        S )a”  
        query_pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values of query image(s) to be detected. Pass in one query image per target image.

        Examples:
        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> import torch
        >>> from transformers import AutoProcessor, Owlv2ForObjectDetection

        >>> processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-base-patch16-ensemble")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> query_url = "http://images.cocodataset.org/val2017/000000001675.jpg"
        >>> with httpx.stream("GET", query_url) as response:
        ...     query_image = Image.open(BytesIO(response.read()))
        >>> inputs = processor(images=image, query_images=query_image, return_tensors="pt")

        >>> # forward pass
        >>> with torch.no_grad():
        ...     outputs = model.image_guided_detection(**inputs)

        >>> target_sizes = torch.Tensor([image.size[::-1]])

        >>> # Convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
        >>> results = processor.post_process_image_guided_detection(
        ...     outputs=outputs, threshold=0.9, nms_threshold=0.3, target_sizes=target_sizes
        ... )
        >>> i = 0  # Retrieve predictions for the first image
        >>> boxes, scores = results[i]["boxes"], results[i]["scores"]
        >>> for box, score in zip(boxes, scores):
        ...     box = [round(i, 2) for i in box.tolist()]
        ...     print(f"Detected similar object with confidence {round(score.item(), 3)} at location {box}")
        Detected similar object with confidence 0.938 at location [327.31, 54.94, 547.39, 268.06]
        Detected similar object with confidence 0.959 at location [5.78, 360.65, 619.12, 366.39]
        Detected similar object with confidence 0.902 at location [2.85, 360.01, 627.63, 380.8]
        Detected similar object with confidence 0.985 at location [176.98, -29.45, 672.69, 182.83]
        Detected similar object with confidence 1.0 at location [6.53, 14.35, 624.87, 470.82]
        Detected similar object with confidence 0.998 at location [579.98, 29.14, 615.49, 489.05]
        Detected similar object with confidence 0.985 at location [206.15, 10.53, 247.74, 466.01]
        Detected similar object with confidence 0.947 at location [18.62, 429.72, 646.5, 457.72]
        Detected similar object with confidence 0.996 at location [523.88, 20.69, 586.84, 483.18]
        Detected similar object with confidence 0.998 at location [3.39, 360.59, 617.29, 499.21]
        Detected similar object with confidence 0.969 at location [4.47, 449.05, 614.5, 474.76]
        Detected similar object with confidence 0.966 at location [31.44, 463.65, 654.66, 471.07]
        Detected similar object with confidence 0.924 at location [30.93, 468.07, 635.35, 475.39]
        ```r‡  r   )rÝ  r³  N)r9   r‡   rˆ   r‰   r    r�   r:   r;   rS   )rë  r¸   r'   r½   r  râ  rà  r†   )rE   rÈ   r  rÇ   rê   rí  rÞ  r”  rÌ   r@  rA  Ú
hidden_dimrÝ  Úquery_image_featsr³  r÷  r‰   r¼  r�   rˆ   s                       r*   Úimage_guided_detectionz.Owlv2ForObjectDetection.image_guided_detection7  sg  € ð| !×/Ò/Ø+ÐF^ð 0ñ 
ô 
à
ôÐð ': dÔ&9ð '
Ø%Ø%=ð'
ð '
ð ð'
ð '
Ñ#ˆ�^ð ITÔHYÑEˆ
Ð&Ð(9¸:Ý”m K°*Ð>PÐSdÑ>dÐfpÐ1qÑrÔrˆàHYÔH_ÑEˆ
Ð&Ð(9¸:Ý!œMØ 
Ð,>ÐARÑ,RÐT^Ð_ñ
ô 
Ðð <@×;QÒ;QØÐ0Ð2Jñ<
ô <
Ñ8ˆÐ&Ð(8ð
 '+×&:Ò&:À{ÐamÐ&:Ñ&nÔ&nÑ#ˆ�lð !×.Ò.¨{¸KÐIaÑbÔbÐå4Ø$Ø0Ø/Ø-ØØ%Ø"Ø .ð	
ñ 	
ô 	
ð 		
r,   c           
      ó  —  | j         d||||dœ|¤Ž\  }}}|j        }	|j        }
|j        \  }}}}t	          j        ||||z  |f¦  «        }|j        d         |z  }|                     |||j        d         ¦  «        }|                     |||j        d         ¦  «        }|d         dk    }|                      |||¦  «        \  }}|                      |¦  «        }|                      |||¦  «        }t          |||||||	|
¬¦  «        S )a	  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`, *optional*):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids).

        Examples:
        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> import torch

        >>> from transformers import Owlv2Processor, Owlv2ForObjectDetection

        >>> processor = Owlv2Processor.from_pretrained("google/owlv2-base-patch16-ensemble")
        >>> model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-base-patch16-ensemble")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> text_labels = [["a photo of a cat", "a photo of a dog"]]
        >>> inputs = processor(text=text_labels, images=image, return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> # Target image sizes (height, width) to rescale box predictions [batch_size, 2]
        >>> target_sizes = torch.tensor([(image.height, image.width)])
        >>> # Convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
        >>> results = processor.post_process_grounded_object_detection(
        ...     outputs=outputs, target_sizes=target_sizes, threshold=0.1, text_labels=text_labels
        ... )
        >>> # Retrieve predictions for the first image for the corresponding text queries
        >>> result = results[0]
        >>> boxes, scores, text_labels = result["boxes"], result["scores"], result["text_labels"]
        >>> for box, score, text_label in zip(boxes, scores, text_labels):
        ...     box = [round(i, 2) for i in box.tolist()]
        ...     print(f"Detected {text_label} with confidence {round(score.item(), 3)} at location {box}")
        Detected a photo of a cat with confidence 0.614 at location [341.67, 23.39, 642.32, 371.35]
        Detected a photo of a cat with confidence 0.665 at location [6.75, 51.96, 326.62, 473.13]
        ```)rÚ   rÈ   rç   rÇ   r   r—   rÈ  )r9   r8   r€   r    r   r�   r:   r;   rS   )
ré  r:   r;   r¸   r'   r½   râ  rÔ  rà  r}   )rE   rÚ   rÈ   rç   rÇ   rê   r³  rÞ  ræ  r‘  r”  rÌ   r@  rA  r  rÝ  Úmax_text_queriesr´  r¼  r�   r   r€   s                         r*   rÏ   zOwlv2ForObjectDetection.forward›  sj  € ðf .F¨TÔ-Eð .
ØØ%Ø)Ø%=ð	.
ð .
ð
 ð.
ð .
Ñ*ˆ�k 7ð Ô0ˆØ Ô4ˆàHSÔHYÑEˆ
Ð&Ð(9¸:Ý”m K°*Ð>PÐSdÑ>dÐfpÐ1qÑrÔrˆð %œ?¨1Ô-°Ñ;ÐØ#×+Ò+¨JÐ8HÈ,ÔJ\Ð]_ÔJ`ÑaÔaˆð ×%Ò% jÐ2BÀIÄOÐTVÔDWÑXÔXˆ	Ø˜vÔ&¨Ò*ˆ
ð '+×&:Ò&:¸;ÈÐV`Ñ&aÔ&aÑ#ˆ�lð !×5Ò5°kÑBÔBÐð ×'Ò'¨°[ÐBZÑ[Ô[ˆ
å)Ø$Ø$Ø!ØØ/Ø%Ø*Ø .ð	
ñ 	
ô 	
ð 		
r,   rÐ   ry  rˆ  )rM   rN   rO   r   rR   r›   Ústaticmethodr^   r'   r   rÑ  rQ   rÔ  r?  rÑ   rà  rI   râ  r   r   ré  rë  r  r   r   r†   r	  r}   rÏ   rÒ   rÓ   s   @r*   r=  r=  0  s¹  ø€ € € € € € ØÐÐÑð˜{ð ð ð ð ð ð ð( ð¸cð ÐVYð Ð^cÔ^jð ð ð ñ „\ðð !°5Ô3Dð !ÈÔIZð !ð !ð !ð !ð°3ð È3ð ÐSXÔS_ð ð ð ð ð. */ð	ð àÔ&ðð Ô&ðð #'ð	ð
 
Ô	ðð ð ð ðJ 26Ø*.ð	1ð 1àÔ&ð1ð Ô'¨$Ñ.ð1ð ”L 4Ñ'ð	1ð
 
ˆuÔ Ô	!ð1ð 1ð 1ð 1ð2 */ð-4ð -4à”<ð-4ð Ô'ð-4ð œð	-4ð
 #'ð-4ð Ð+Ô,ð-4ð 
ˆuÔ Ô	!ð-4ð -4ð -4ð -4ðf */ð'.ð '.àÔ'ð'.ð #'ð'.ð Ð+Ô,ð	'.ð
 
ˆuÔ Ô	!ð'.ð '.ð '.ð '.ð\ */ð	*5ð *5à#Ô/ð*5ð !Ô,ð*5ð #'ð	*5ð
 
Ô	ð*5ð *5ð *5ð *5ðX Øð 8<Ø).ð	`
ð `
àÔ'ð`
ð "Ô-°Ñ4ð`
ð #'ð	`
ð
 Ð+Ô,ð`
ð 
/ð`
ð `
ð `
ñ „^ñ Ôð`
ðD Øð
 /3Ø).ðZ
ð Z
à”<ðZ
ð Ô'ðZ
ð œ tÑ+ð	Z
ð
 #'ðZ
ð Ð+Ô,ðZ
ð 
$ðZ
ð Z
ð Z
ñ „^ñ ÔðZ
ð Z
ð Z
ð Z
ð Z
r,   r=  )r5  r%  ro  r‚  r=  )Nrâ   )LrP   Úcollections.abcr   Údataclassesr   Útypingr   r'   r   r   Ú r	   r0  Úactivationsr
   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_owlv2r   r   r   Útransformers.image_transformsr   Ú
get_loggerrM   Úloggerr+   r2   r4   r_   rc   rs   rz   r}   r†   rP  r�   rÕ   r[   rô   rö   r  r  r%  rR  r^  ro  r{  r‚  r5  r   r­  r=  Ú__all__rS   r,   r*   ú<module>r     sä  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð JÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pð ÐÑÔð GØFÐFÐFÐFÐFÐFð 
ˆÔ	˜HÑ	%Ô	%€ð`˜Uœ\ð `¨e¬lð `ð `ð `ð `ð
-¨E¬Lð -¸U¼\ð -ð -ð -ð -ð Ø
ð!
ð !
ð !
ð !
ð !
�+ñ !
ô !
ñ „ñ „ð!
ðJGˆvð G˜&ð Gð Gð Gð GðE�Fð E˜vð Eð Eð Eð Eð"ð ð ð"'ð 'ð 'ð0 €ððñ ô ð
 ð/
ð /
ð /
ð /
ð /
 ñ /
ô /
ñ „ñô ð/
ðd €ððñ ô ð
 ð*
ð *
ð *
ð *
ð *
¨Kñ *
ô *
ñ „ñô ð*
ð\Jð Jð Jð Jð J˜BœIñ Jô Jð Jð\ð ð ð ð ˜"œ)ñ ô ð ðL !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:6)ð 6)ð 6)ð 6)ð 6)�R”Yñ 6)ô 6)ð 6)ðtð ð ð ð ˆrŒyñ ô ð ð ð ð ð ð Ð2ñ ô ð ðB ð4vð 4vð 4vð 4vð 4v˜?ñ 4vô 4vñ „ð4vðp
ð 
ð 
ð 
ð 
�2”9ñ 
ô 
ð 
ðF<
ð <
ð <
ð <
ð <
Ð/ñ <
ô <
ð <
ð@/
ð /
ð /
ð /
ð /
Ð)ñ /
ô /
ð /
ðf(
ð (
ð (
ð (
ð (
Ð1ñ (
ô (
ð (
ðX.
ð .
ð .
ð .
ð .
Ð+ñ .
ô .
ð .
ðb ðk
ð k
ð k
ð k
ð k
Ð%ñ k
ô k
ñ „ðk
ð^ð ð ð ð ˜RœYñ ô ð ð(-1ð -1ð -1ð -1ð -1˜rœyñ -1ô -1ð -1ð`G
ð G
ð G
ð G
ð G
Ð2ñ G
ô G
ð G
ðT rÐ
qÐ
q€€€r,   