§
    ‚Štj½[ ã                   óÐ  — d dl mZmZ d dlmZ d dlmZ d dlZd dlm	c 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 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"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d
dl)m*Z*m+Z+m,Z, d
dl-m.Z.m/Z/ d
dl0m1Z1 d
dl2m3Z3m4Z4m5Z5m6Z6 d
dl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZP ddlQmRZRmSZS ddlTmUZU dd lVmWZWmXZX  e6jY        eZ¦  «        Z[ e5d!¬"¦  «        e G d#„ d$e¦  «        ¦   «         ¦   «         Z\ e5d%¬"¦  «        e G d&„ d'eW¦  «        ¦   «         ¦   «         Z] e5d(¬"¦  «        e G d)„ d*e+¦  «        ¦   «         ¦   «         Z^ e5d+¬"¦  «        e G d,„ d-e+¦  «        ¦   «         ¦   «         Z_ e5d.¬"¦  «        e G d/„ d0eU¦  «        ¦   «         ¦   «         Z`	 d€d2eja        d3ebececf         d4edd5ebeja        eja        f         fd6„Ze	 d€d7eja        d2eja        d3ebececf         d4edd5eja        f
d8„Zfd�d:eja        d;ecd5eja        fd<„Zgd:eja        d5ebeja        eja        f         fd=„Zh	 d�d>eja        d:eja        d?ecd5eja        fd@„Zi G dA„ dBe;dC¬D¦  «        Zj G dE„ dFe:¦  «        Zk e5dG¬H¦  «        e G dI„ dJe¦  «        ¦   «         ¦   «         Zl e5dK¬H¦  «        e G dL„ dMe=¦  «        ¦   «         ¦   «         Zm G dN„ dOeA¦  «        Zn G dP„ dQeG¦  «        Zo G dR„ dSeL¦  «        Zp G dT„ dUe?¦  «        Zq G dV„ dWeD¦  «        Zr G dX„ dYeC¦  «        Zs G dZ„ d[eP¦  «        Zt G d\„ d]e	ju        ¦  «        Zv G d^„ d_eN¦  «        Zw G d`„ dae	ju        ¦  «        Zx G db„ dce	ju        ¦  «        Zy G dd„ deeF¦  «        Zz G df„ dgeB¦  «        Z{ G dh„ dieE¦  «        Z| G dj„ dke@¦  «        Z} e5dG¬H¦  «         G dl„ dmez¦  «        ¦   «         Z~ e5dndo¬p¦  «         G dq„ drez¦  «        ¦   «         Z e5dsdt¬p¦  «         G du„ dvez¦  «        ¦   «         Z€ e5dwdx¬p¦  «         G dy„ dzez¦  «        ¦   «         Z� e5d{d|¬p¦  «         G d}„ d~ez¦  «        ¦   «         Z‚g d¢ZƒdS )‚é    )ÚCallableÚIterable)Ú	dataclass)ÚUnionN)Ústrict)Únn)Ú
functional)ÚTorchvisionBackend)ÚDINOv3ViTBackboneOutputé   )Úinitialization)ÚACT2FN)ÚPreTrainedConfig)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚChannelDimensionÚ
ImageInputÚPILImageResamplingÚSizeDictÚ#get_image_size_for_max_height_widthÚmake_list_of_images)ÚBaseModelOutputWithPoolingÚModelOutputÚSemanticSegmenterOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Ú
TensorTypeÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleé   )ÚBeitImageProcessorÚBeitImageProcessorKwargs)ÚDINOv3ViTConfig)
ÚDINOv3ViTAttentionÚDINOv3ViTBackboneÚDINOv3ViTEmbeddingsÚDINOv3ViTEncoderÚDINOv3ViTLayerÚDINOv3ViTLayerScaleÚDINOv3ViTModelÚDINOv3ViTPreTrainedModelÚDINOv3ViTRopePositionEmbeddingÚapply_rotary_pos_emb)Úeager_attention_forward)ÚLlamaRMSNorm)ÚMask2FormerPredictionBlock)Ú"PPOCRV5ServerDetConvBatchnormLayer)Úbox_xywh_to_cxcywhÚbox_xywh_to_xyxy)ÚImageMattingOutput)ÚVitPoseEstimatorOutputÚ	flip_backz·
    Output type of [`Sapiens2Backbone`], extending [`BackboneOutput`] with optional CLS tokens from
    each selected feature stage (used when `config.return_class_token=True`).
    )Úcustom_introc                   ó   — e Zd ZdS )ÚSapiens2BackboneOutputN©Ú__name__Ú
__module__Ú__qualname__© ó    úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/sapiens2/modular_sapiens2.pyr?   r?   H   s   € € € € € ð 	€DrE   r?   z6
    Class for outputs of pose estimation models.
    c                   ó   — e Zd ZdZdS )ÚSapiens2PoseEstimatorOutputaÔ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Pose estimation loss.
    heatmaps (`torch.FloatTensor` of shape `(batch_size, num_keypoints, height, width)`):
        Heatmaps as predicted by the model.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each stage) of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states
        (also called feature maps) of the model at the output of each stage.
    N)rA   rB   rC   Ú__doc__rD   rE   rF   rH   rH   S   s   € € € € € ð	ð 	ð 	ð 	rE   rH   z8
    Class for outputs of normal estimation models.
    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
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )ÚSapiens2NormalEstimatorOutputa  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Normal estimation loss.
    normals (`torch.FloatTensor` of shape `(batch_size, num_labels, height, width)`):
        Raw normal map predictions as output by the model (unnormalized).
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage)
        of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states of the model at the output of
        each layer plus the initial embedding outputs.
    attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one per layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights after the attention softmax.
    NÚlossÚnormals.Úhidden_statesÚ
attentions)rA   rB   rC   rI   rL   ÚtorchÚFloatTensorÚ__annotations__rM   rN   ÚtuplerO   rD   rE   rF   rK   rK   f   s’   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø(,€GˆUÔ Ñ%Ð,Ð,Ñ,Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;rE   rK   z:
    Class for outputs of pointmap estimation models.
    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ej        df         dz  ed<   dZeej        df         dz  ed<   dS )	ÚSapiens2PointmapEstimatorOutputaÄ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Pointmap estimation loss.
    pointmaps (`torch.FloatTensor` of shape `(batch_size, 3, height, width)`):
        Per-pixel 3D XYZ coordinate predictions in canonical camera space.
    scales (`torch.FloatTensor` of shape `(batch_size, 1)`, *optional*):
        Canonical focal length / actual focal length ratio. `None` when no scale branch is configured.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage)
        of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states of the model at the output of
        each layer plus the initial embedding outputs.
    attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one per layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights after the attention softmax.
    NrL   Ú	pointmapsÚscales.rN   rO   )rA   rB   rC   rI   rL   rP   rQ   rR   rV   rW   rN   rS   rO   rD   rE   rF   rU   rU   �   sª   € € € € € € ðð ð  &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø*.€IˆuÔ  4Ñ'Ð.Ð.Ñ.Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;rE   rU   z4
    Class for outputs of image matting models.
    c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚSapiens2ImageMattingOutputaN  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Loss.
    alphas (`torch.FloatTensor` of shape `(batch_size, 1, height, width)`):
        Estimated alpha values.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each stage) of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states
        (also called feature maps) of the model at the output of each stage.
    foregrounds (`torch.FloatTensor` of shape `(batch_size, 3, height, width)`):
        Pre-multiplied RGB foreground predictions in `[0, 1]` (sigmoid-activated).
    NÚforegrounds)rA   rB   rC   rI   rZ   rP   rQ   rR   rD   rE   rF   rY   rY   Ÿ   s6   € € € € € € ðð ð -1€K�Ô" TÑ)Ð0Ð0Ñ0Ð0Ð0rE   rY   ç      ô?ÚboxesÚoutput_sizeÚpaddingÚreturnc                 ó@  — |                       d¦  «        \  }}}}t          j        ||gd¬¦  «        }||z  }||z  }	|\  }
}||
z  }t          j        ||	|z  k    d         t          j        |||z  gd¬¦  «        t          j        |	|z  |	gd¬¦  «        ¦  «        }||fS )aS  Compute crop center and scale from bounding boxes, applying padding and aspect ratio correction.

    Accepts either a single box `(4,)` or multiple boxes `(num_boxes, 4)` and returns center/scale with a matching
    leading dimension.

    Args:
        boxes (`torch.Tensor` of shape `(4,)` or `(num_boxes, 4)`): Bounding box in
            (center-x, center-y, width, height) format, with values in absolute pixel coordinates.
        output_size (`tuple[int, int]`): Target output size as `(height, width)`, used to compute
            the aspect ratio for scale correction.
        padding (`float`, *optional*, defaults to `1.25`): Multiplicative factor applied to the
            bounding box dimensions, adding context around the region of interest.

    Returns:
        `tuple[torch.Tensor, torch.Tensor]`: A pair `(center, scale)` where `center` has shape
        `(..., 2)` with (x, y) in input-image pixel coordinates, and `scale` has shape `(..., 2)`
        with (width, height) in input-image pixels representing the dimensions of the padded,
        aspect-ratio-corrected crop window.
    éÿÿÿÿ©Údim).N)ÚunbindrP   ÚstackÚwhere)r\   r]   r^   Úcenter_xÚcenter_yÚwidthÚheightÚcenterÚscaled_widthÚscaled_heightÚoutput_heightÚoutput_widthÚaspect_ratioÚscales                 rF   Úboxes_to_crop_paramsrr   ¶   sÅ   € ð0 ).¯ª°RÑ(8Ô(8Ñ%€Hˆh˜˜vÝŒ[˜( HÐ-°2Ð6Ñ6Ô6€FØ˜7‘?€LØ˜WÑ$€MØ"-Ñ€M�<Ø -Ñ/€LÝŒKØ	˜¨Ñ4Ò	4°iÔ@ÝŒ�\ <°,Ñ#>Ð?ÀRÐHÑHÔHÝŒ�] \Ñ1°=ÐAÀrÐJÑJÔJñô €Eð
 �5ˆ=ÐrE   Úimagec           	      óH  — |\  }}| j         \  }}}t          |||¬¦  «        \  }	}
|	                     d¦  «        \  }}|
                     d¦  «        \  }}|dz
  |z  }|dz
  |z  }t          j        ||¦  «        dk     }t          j        t          j        |t          j        | j        ¬¦  «        t          j        |t          j        | j        ¬¦  «        d¬¦  «        \  }}||dd…ddf         z  |dd…ddf         z   d	|dd…ddf         z  z
  }||dd…ddf         z  |dd…ddf         z   d	|dd…ddf         z  z
  }t          j	        d
|z  |dz
  z  dz
  d
|z  |dz
  z  dz
  gd¬¦  «        }|j         d         }t          j
        ||||| j        | j        ¬¦  «        }|                      d¦  «        }|df| dffD ]c\  }}|                     ¦   «         rJt          j        |                     |                     ¦   «         ddd¦  «        ||         |dd¬¦  «        ||<   Œd|S )aR  Crops and resizes bounding box regions from the input image to the target output size.

    Applies padding and aspect ratio correction to each crop before resizing.
    Uses bilinear interpolation for downscaling and bicubic for upscaling.

    This implementation is equivalent to the cv2 affine warp with rotation=0 used in the original
    Sapiens2 codebase. Rotation is always zero because we don't support rotated bounding boxes.

    Args:
        image (`torch.Tensor`): Input image tensor of shape `(C, H, W)` in float32.
        boxes (`torch.Tensor`): Bounding boxes in (center-x, center-y, width, height) format,
            shape `(num_boxes, 4)`, with values in absolute pixel coordinates.
        output_size (`tuple[int, int]`): Target output size as `(height, width)`.
        padding (`float`, *optional*, defaults to `1.25`): Multiplicative factor applied to the
            bounding box dimensions before cropping, adding context around the region of interest.

    Returns:
        `torch.Tensor`: Cropped and resized images of shape `(num_boxes, C, output_height, output_width)`.
    )r]   r^   ra   é   ç      ð?©ÚdtypeÚdeviceÚij)ÚindexingNç      à?g       @rb   r   ©ry   rx   ÚbilinearÚbicubicÚzerosT)ÚmodeÚpadding_modeÚalign_corners)Úshaperr   rd   rP   ÚminimumÚmeshgridÚarangeÚfloat32ry   re   Úemptyrx   Ú	unsqueezeÚanyÚFÚgrid_sampleÚexpandÚsum)rs   r\   r]   r^   rn   ro   Únum_channelsÚinput_heightÚinput_widthrk   rq   rg   rh   Úboxes_widthÚboxes_heightÚscale_xÚscale_yÚis_bilinearÚgrid_yÚgrid_xÚin_xÚin_yÚgridsÚ	num_boxesÚoutputÚimage_4dÚmaskr�   s                               rF   Úcrop_and_resizer¡   Ü   s‚  € ð2 #.Ñ€M�<Ø.3¬kÑ+€L�, Ý(¨¸KÐQXÐYÑYÔY�M€FˆEØŸš rÑ*Ô*Ñ€HˆhØ %§¢¨RÑ 0Ô 0Ñ€K�à˜aÑ ;Ñ.€GØ˜qÑ  LÑ0€GÝ”- ¨Ñ1Ô1°CÒ7€Kå”^ÝŒ�]­%¬-ÀÄÐMÑMÔMÝŒ�\­¬¸u¼|ÐLÑLÔLØðñ ô �N€FˆFð
 �G˜A˜A˜A˜t T˜MÔ*Ñ*¨X°a°a°a¸¸t°mÔ-DÑDÀsÈ[ÐYZÐYZÐYZÐ\`ÐbfÐYfÔMgÑGgÑg€DØ�G˜A˜A˜A˜t T˜MÔ*Ñ*¨X°a°a°a¸¸t°mÔ-DÑDÀsÈ\ÐZ[ÐZ[ÐZ[Ð]aÐcgÐZgÔMhÑGhÑh€DåŒK˜˜t™ {°Q¡Ñ7¸#Ñ=¸sÀT¹zÈ\Ð\]ÑM]Ñ?^ÐadÑ?dÐeÐkmÐnÑnÔn€Eà”˜A”€IÝŒ[˜ L°-ÀÐV[ÔVbÐjoÔjuÐvÑvÔv€Fð �Š˜qÑ!Ô!€HØ# ZÐ0°K°<ÀÐ2KÐLð ð ‰
ˆˆdØ�8Š8‰:Œ:ð 	Ýœ=Ø—’ §¢¡
¤
¨B°°BÑ7Ô7Ø�d”ØØ$Ø"ðñ ô ˆF�4‰Løð €MrE   é   ÚheatmapsÚkernelc                 ó2  — |dz  dk    s|dk    rt          d¦  «        ‚d|dz
  dz  dz
  z  dz   }|dz
  dz  }|                      d¬	¦  «        }t          j        | ||||fd
d¬¦  «        }t	          j        |||g||g¬¦  «        }|dd…|| …|| …f         }|                     d¬	¦  «        }t          j        |dk    |t          j        |¦  «        ¦  «        }	t          j        |dk    ||	z  t          j        |¦  «        ¦  «        }
||
dd…ddf         z  S )a¬  Gaussian blur per-keypoint heatmap, preserving the original max value.

    Matches cv2.GaussianBlur with sigma=0 which means that the sigma is automatically
    computed from the kernel size.

    Args:
        heatmaps: Shape `(K, height, width)`.
        kernel: Odd integer kernel size for the Gaussian blur. Must be greater than 1.

    Returns:
        `torch.Tensor`: Blurred heatmaps of the same shape as the input.
    r&   r   ru   z2Kernel size must be an odd integer greater than 1.g333333Ó?r|   gš™™™™™é?)ru   r&   rb   Úconstantç        )r�   Úvalue)Úkernel_sizeÚsigmaN)	Ú
ValueErrorÚamaxrŒ   ÚpadÚtvFÚgaussian_blurrP   rf   Ú	ones_like)r£   r¤   rª   ÚborderÚorigin_maxesÚpaddedÚblurredÚresultÚresult_maxesÚ
safe_maxesrq   s              rF   Úgaussian_blur_preserve_maxr¸     sC  € ð ��z�Q‚€˜& Aš+˜+ÝÐMÑNÔNÐNØ�F˜Q‘J #Ñ%¨Ñ)Ñ*¨SÑ0€EØ�q‰j˜QÑ€FØ—=’= V�=Ñ,Ô,€Lõ ŒU�8˜f f¨f°fÐ=ÀJÐVYÐZÑZÔZ€FÝÔ °V¸VÐ4DÈUÐTYÈNÐ[Ñ[Ô[€GØ�Q�Q�Q˜ ˜w˜¨°¨w¨Ð6Ô7€Fà—;’; 6�;Ñ*Ô*€LÝ”˜\¨AÒ-¨|½U¼_È\Ñ=ZÔ=ZÑ[Ô[€JÝŒK˜ qÒ(¨,¸Ñ*CÅUÄ_ÐUaÑEbÔEbÑcÔc€EØ�E˜!˜!˜!˜T 4˜-Ô(Ñ(Ð(rE   c           	      óÈ  — | j         \  }}}}| j        }|                      ||d¦  «        }|                     d¬¦  «        }|                     d¬¦  «        }||z                       ¦   «         }	||z                       ¦   «         }
t          j        |                     d¦  «        dk    t          j	        |	|
gd¬¦  «        t          j
        ||dfd|¬¦  «        ¦  «        }||fS )aC  Predict keypoint locations and confidence scores from heatmaps.

    Args:
        heatmaps: Shape `(num_persons, num_keypoints, height, width)`.

    Returns:
        locations: `(num_persons, num_keypoints, 2)` x/y in heatmap pixel coordinates.
        scores: `(num_persons, num_keypoints)` per-keypoint confidence.
    ra   rb   r§   r&   g      ð¿©ry   )r„   ry   Úreshaper¬   ÚargmaxÚfloatrP   rf   rŠ   re   Úfull)r£   Únum_personsÚnum_keypointsÚ_Úheatmap_widthry   Úheatmap_flatÚscoresÚ
flat_indexÚlocations_xÚlocations_yÚ	locationss               rF   Úget_keypoint_predictionsrÉ   9  sð   € ð 4<´>Ñ0€K�  =ØŒ_€FØ×#Ò# K°ÀÑCÔC€LØ×Ò 2ÐÑ&Ô&€FØ×$Ò$¨Ð$Ñ,Ô,€JØ Ñ-×4Ò4Ñ6Ô6€KØ Ñ.×5Ò5Ñ7Ô7€KÝ”Ø×Ò˜ÑÔ˜sÒ"ÝŒ�[ +Ð.°BÐ7Ñ7Ô7ÝŒ
�K °Ð2°DÀÐHÑHÔHñô €Ið
 �fÐÐrE   Ú	keypointsÚblur_kernel_sizec                 ó�  ‡‡— |j         \  }}}}|j        }t          |                     ||z  ||¦  «        |¦  «                             ||||¦  «        }|                     dd¦  «                             ¦   «         }t          j        |dd¬¦  «        }|                     ¦   «         Š|dz   }	|dz   }
|	|
z  }||z  }| dd…dd…df          	                    ¦   «         d	z   | dd…dd…d	f          	                    ¦   «         d	z   |
z  z   Š‰|t          j        ||t          j	        ¬
¦  «        ddd…f         z  z   Š‰|t          j        ||t          j	        ¬
¦  «        dd…df         z  z   Š‰                     d¦  «        Šdd	d|
|
 |
d	z   |
d	z    dœ}ˆˆfd„|                     ¦   «         D ¦   «         }d|d         |d         z
  z  }d|d         |d         z
  z  }|d         d|d         z  z
  |d         z   }|d         d|d         z  z
  |d         z   }d|d         |d         z
  |d         z
  |d         z   |d         z   |d         z
  |d         z
  |d         z   z  }t          j        |j        ¦  «        j        }||z   }||z   }||z  ||z  z
  }||z  ||z  z
  |z  }| |z  ||z  z   |z  }| t          j        ||gd¬¦  «        z
  S )aI  Sub-pixel refinement via Hessian on log-heatmaps (UDP Dark Pose).

    Args:
        keypoints: Shape `(num_persons, num_keypoints, 2)` x/y in heatmap pixel coordinates.
        heatmaps: Shape `(num_persons, num_keypoints, height, width)`.

    Returns:
        `(num_persons, num_keypoints, 2)` refined keypoint locations.
    gü©ñÒMbP?g      I@)ru   ru   ru   ru   Ú	replicate)r�   r&   Nr   ru   r}   ra   )©r   r   ©r   ru   ©r   ra   ©ru   r   ©ra   r   ©ru   ru   ©ra   ra   c                 ó8   •— i | ]\  \  }}}||f‰‰|z            “ŒS rD   rD   )Ú.0ÚdxÚdyÚoffsetÚheatmaps_flattenedÚindexs       €€rF   ú
<dictcomp>z6post_dark_unbiased_data_processing.<locals>.<dictcomp>}  s>   ø€ ð ð ð Ù9I¹¸"¸bÀ6ˆˆRˆÐ$ U¨V¡^Ô4ðð ð rE   r|   rÏ   rÐ   rÑ   rÒ   rÎ   rÓ   rÔ   rb   )r„   ry   r¸   r»   ÚclampÚlogrŒ   r­   ÚflattenÚlongrP   r‡   rŠ   ÚitemsÚfinforx   ÚepsÚcat)rÊ   r£   rË   r¿   rÀ   Úheatmap_heightrÂ   ry   Úheatmaps_paddedÚpadded_heightÚpadded_widthÚkeypoint_strideÚperson_strideÚposition_to_index_offsetÚheatmap_valuesÚ
gradient_xÚ
gradient_yÚ
hessian_xxÚ
hessian_yyÚ
hessian_xyrã   ÚdeterminantÚoffset_xÚoffset_yrÚ   rÛ   s                           @@rF   Ú"post_dark_unbiased_data_processingrõ   R  s—  øø€ ð AIÄÑ=€K� °ØŒ_€Få)Ø×Ò˜ }Ñ4°nÀmÑTÔTÐVfñô ç‚gˆk˜=¨.¸-ÑHÔHð ð �~Š~˜d DÑ)Ô)×-Ò-Ñ/Ô/€Hå”e˜H l¸ÐEÑEÔE€OØ(×0Ò0Ñ2Ô2Ðà" QÑ&€MØ  1Ñ$€LØ# lÑ2€OØ! OÑ3€Mà�a�a�a˜˜˜˜A�gÔ×#Ò#Ñ%Ô%¨Ñ)¨Y°q°q°q¸!¸!¸!¸Q°wÔ-?×-DÒ-DÑ-FÔ-FÈÑ-JÈlÑ,ZÑZ€EØ�O¥e¤l°=ÈÕW\ÔWaÐ&bÑ&bÔ&bÐcgÐijÐijÐijÐcjÔ&kÑkÑk€EØ�M¥E¤L°ÀVÕSXÔS]Ð$^Ñ$^Ô$^Ð_`Ð_`Ð_`ÐbfÐ_fÔ$gÑgÑg€EØ�OŠO˜BÑÔ€Eð ØØØØ�Ø˜qÑ Ø  1Ñ$Ð%ð ð  Ððð ð ð ð ØMe×MkÒMkÑMmÔMmðñ ô €Nð ˜ tÔ,¨~¸eÔ/DÑDÑE€JØ˜ tÔ,¨~¸eÔ/DÑDÑE€Jà Ô%¨¨N¸4Ô,@Ñ(@Ñ@À>ÐRWÔCXÑX€JØ Ô%¨¨N¸4Ô,@Ñ(@Ñ@À>ÐRWÔCXÑX€JØØ�tÔØ
˜Ô
ñ	à
˜Ô
ñ	ð ˜Ô
ñ	ð ˜Ô
ñ		ð
 ˜Ô
ñ	 ð ˜Ô
ñ	 ð ˜Ô
 ñ	!ñ	€Jõ Œ+�jÔ&Ñ
'Ô
'Ô
+€CØ˜cÑ!€JØ˜cÑ!€JØ˜zÑ)¨J¸Ñ,CÑC€KØ˜ZÑ'¨*°zÑ*AÑAÀ[ÑP€HØ�˜jÑ(¨:¸
Ñ+BÑBÀkÑQ€HØ•u”y (¨HÐ!5¸2Ð>Ñ>Ô>Ñ>Ð>rE   c                   ó   — e Zd ZdS )ÚSapiens2ImageProcessorKwargsNr@   rD   rE   rF   r÷   r÷   š  ó   € € € € € Ø€DrE   r÷   F)Útotalc            "       ó4  ‡ — e Zd ZeZej        ZeZ	e
ZdddœZdZdee         fˆ fd„Ze	 	 d/ded	edz  d
eeee                           dz  dee         def
d„¦   «         Z	 d0ded	edz  d
eeee                           dz  dededeez  dz  deedf         dz  defˆ fd„Z	 	 	 d1deej                 dededddedededededeee         z  dz  deee         z  dz  dedz  ded ed
eeee                           dz  deej                 f d!„Z	 	 	 	 	 d2d
eeee                           d#e d$edz  d%eee!e e f                  z  dz  d&eee!e e f                  z  dz  deee"eej        f                           fd'„Z#	 	 	 d3d%eee!e e f                  z  dz  d&eee!e e f                  z  dz  d(edz  dee"eej        f                  fd)„Z$	 	 	 d3d%eee!e e f                  z  dz  d&eee!e e f                  z  dz  d(edz  dee"eej        f                  fd*„Z%	 	 d/d&eee!e e f                  z  dz  d+edz  dee"eej        f                  fd,„Z&d-ej        d%eee!e e f                  z  dz  d&eee!e e f                  z  dz  d(edz  deej                 f
d.„Z'ˆ xZ(S )4ÚSapiens2ImageProcessoré   i   )rj   ri   FÚkwargsc                 ó:   •—  t          ¦   «         j        di |¤Ž d S ©NrD   )ÚsuperÚ__init__©Úselfrý   Ú	__class__s     €rF   r  zSapiens2ImageProcessor.__init__§  s&   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"rE   NÚimagesÚsegmentation_mapsr\   r_   c                 ó*   — t          j        |||fi |¤ŽS )a  
        segmentation_maps (`ImageInput`, *optional*):
            The segmentation maps to preprocess.
        boxes (`list[list[list[float]]]` or `np.ndarray`, *optional*):
            List or array of bounding boxes for each image. Each box should be a list of 4 floats
            representing the bounding box coordinates in COCO format
            (top_left_x, top_left_y, width, height). When provided, each person crop is
            affine-warped to the model input size instead of resizing the full image.
        )r
   Ú
preprocess)r  r  r  r\   rý   s        rF   r  z!Sapiens2ImageProcessor.preprocessª  s#   € õ" "Ô,¨VÐ5FÈÐXÐXÐQWÐXÐXÐXrE   Údo_convert_rgbÚinput_data_formatÚreturn_tensorsry   ztorch.devicec           
      óP   •— ||d<    t          ¦   «         j        | f||||||dœ|¤ŽS )z"Handle extra inputs beyond images.r\   )r  r  r	  r
  r  ry   )r   Ú_preprocess_image_like_inputs)
r  r  r  r\   r	  r
  r  ry   rý   r  s
            €rF   r  z4Sapiens2ImageProcessor._preprocess_image_like_inputs½  sR   ø€ ð  ˆˆw‰Ø4�u‰wŒwÔ4Øð	
àØ/Ø)Ø/Ø)Øð	
ð 	
ð ð	
ð 	
ð 		
rE   Ú	do_resizeÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚdo_center_cropÚ	crop_sizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdisable_groupingÚdo_reduce_labelsÚdo_padc           	      óÂ  — |�¥|d         |d         f}g }t          ||¦  «        D ]~\  }}t          j        |t          j        d¬¦  «        }t          t          j        |t          j        |j        ¬¦  «        ¦  «        }|                     t          |||¬¦  «        ¦  «         Œ|}d}|r|  
                    |¦  «        }t          ||¬¦  «        \  }}i }|                     ¦   «         D ]p\  }}|rd|rKt          |d         |d         ¬¦  «        }|                      |||¦  «        }|                      ||¦  «        }n|                      |||¦  «        }|||<   Œqt!          ||¦  «        }t          ||¬¦  «        \  }}i }|                     ¦   «         D ]<\  }}|r|                      ||¦  «        }|                      ||||	|
|¦  «        }|||<   Œ=t!          ||¦  «        S )	Nrj   ri   F©rx   rq   rw   )r\   r]   )r  )Ú
max_heightÚ	max_width)Úzipr®   Úto_dtype_imagerP   rˆ   r8   Útensorry   Úextendr¡   Úreduce_labelr   rá   r   ÚresizeÚcenter_cropr   Úrescale_and_normalize)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r\   rý   r]   Úcropsrs   Úimage_boxesÚboxes_tensorÚgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr„   Ústacked_imagesÚaspect_ratio_sizeÚresized_imagesÚprocessed_images_groupeds                                 rF   Ú_preprocessz"Sapiens2ImageProcessor._preprocessÕ  s=  € ð& ÐØ œ>¨4°¬=Ð9ˆKØˆEÝ&)¨&°%Ñ&8Ô&8ð bð bÑ"��{ÝÔ*¨5½¼ÈUÐSÑSÔS�Ý1µ%´,¸{ÕRWÔR_ÐhmÔhtÐ2uÑ2uÔ2uÑvÔv�Ø—’�_¨U¸,ÐT_Ð`Ñ`Ô`ÑaÔaÐaÐaØˆFØˆIàð 	/Ø×&Ò& vÑ.Ô.ˆFå/DÀVÐ^nÐ/oÑ/oÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ò%9Ñ%;Ô%;ð 		;ð 		;Ñ!ˆE�>Øð QØð Qå(0¸DÀ¼NÐVZÐ[bÔVcÐ(dÑ(dÔ(dÐ%Ø%)§[¢[°ÐARÐT\Ñ%]Ô%]�NØ%)×%5Ò%5°nÀdÑ%KÔ%K�N�Nà%)§[¢[°ÀÀxÑ%PÔ%P�NØ,:Ð" 5Ñ)Ð)Ý'Ð(>Ð@TÑUÔUˆå/DÀ^ÐfvÐ/wÑ/wÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>Øð MØ!%×!1Ò!1°.À)Ñ!LÔ!L�Ø!×7Ò7Ø 
¨N¸LÈ*ÐV_ñô ˆNð /=Ð$ UÑ+Ð+åÐ6Ð8LÑMÔMÐMrE   r¢   r©   Ú	thresholdÚsource_sizesÚtarget_sizesc                 ó®  ‡‡!— t          |t          j        ¦  «        r|                     ¦   «         }t          |t          j        ¦  «        r|                     ¦   «         }t	          ‰¦  «        }|�|€t          d¦  «        ‚|�"|t	          |¦  «        k    rt          d¦  «        ‚|�"|t	          |¦  «        k    rt          d¦  «        ‚|j        }	|�|	|j        z   dz  }	|	j        }
|	j        \  }}}}|dk    rd„ ‰D ¦   «         S t          j	        d„ ‰D ¦   «         t          j
        |
¬	¦  «        }|	                     ¦   «         }	t          |	¦  «        \  }}t          ||	|¬
¦  «        }t          t          |¦  «        | j        d         | j        d         f¬¦  «        \  }}t          j	        |dz
  |dz
  gt          j
        |
¬	¦  «        }||z  |dd…ddd…f         z  |dd…ddd…f         z   d|dd…ddd…f         z  z
  }t#          |¦  «        }|�Œ|�Št          j	        d„ t%          ||¦  «        D ¦   «         t          j
        |
¬	¦  «        Š!t          j        ˆˆ!fd„t)          |¦  «        D ¦   «         ¦  «        }||dd…ddd…f         z  }||dd…g d¢f         z  }g }t)          |¦  «        D ]h}||         }||         }t          j        ||
¬¦  «        }|�||k    }||         }||         }||         }|                     |||||         dœ¦  «         Œig }d}‰D ]6}t	          |¦  «        } |                     |||| z   …         ¦  «         || z  }Œ7|S )a  
        Converts the output of [`Sapiens2ForPoseEstimation`] into keypoint predictions in image space.

        Args:
            outputs (`Sapiens2PoseEstimatorOutput`):
                Raw outputs of the model. `outputs.heatmaps` must have shape
                `(N_total, num_keypoints, heatmap_height, heatmap_width)` where
                `N_total = sum(len(b) for b in boxes)`.
            boxes (`list[list[list[float]]]` or `np.ndarray`):
                List or array of bounding boxes for each image in absolute pixel coordinates. Each box
                should be a list of 4 floats representing the bounding box coordinates in COCO format
                (top_left_x, top_left_y, width, height). Must match the `boxes` argument passed to
                `preprocess`.
            outputs_flipped (`Sapiens2PoseEstimatorOutput`, *optional*):
                Outputs from running the model on horizontally flipped inputs. When provided, heatmaps
                are averaged with `outputs` before keypoint extraction to improve accuracy:
                `avg_heatmaps = (outputs.heatmaps + outputs_flipped.heatmaps) / 2`.
            kernel_size (`int`, *optional*, defaults to 11):
                Kernel size for the Gaussian blur used in UDP Dark Pose refinement.
            threshold (`float`, *optional*):
                Score threshold. Keypoints with scores at or below this value are
                filtered out from the result dictionaries.
            source_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Original `(height, width)` of each image in pixels. Required when `target_sizes` is
                provided, as the source coordinate space for scaling keypoints and bounding boxes.
            target_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Desired output `(height, width)` coordinate space for each image. When provided
                alongside `source_sizes`, keypoint coordinates and bounding boxes are scaled from
                source to target space.

        Returns:
            `list[list[dict]]`: Outer list is over images, inner list is over persons.
            Each dict contains:
            - `keypoints` (`torch.FloatTensor` of shape `(num_keypoints, 2)`): absolute x/y coordinates in
              the source image space, or in target space if `target_sizes` is provided.
            - `scores` (`torch.FloatTensor` of shape `(num_keypoints,)`): per-keypoint confidence.
            - `labels` (`torch.LongTensor` of shape `(num_keypoints,)`): keypoint indices.
            - `bbox` (`torch.FloatTensor` of shape `(4,)`): bounding box in absolute (x_min, y_min, x_max, y_max)
               format, in the same coordinate space as `keypoints`.
        NzA`source_sizes` must be provided when `target_sizes` is specified.zHMake sure that you pass in as many source sizes as the number of images.zHMake sure that you pass in as many target sizes as the number of images.r&   r   c                 ó   — g | ]}g ‘ŒS rD   rD   )rÖ   rÁ   s     rF   ú
<listcomp>zGSapiens2ImageProcessor.post_process_pose_estimation.<locals>.<listcomp>W  s   € Ð&Ð&Ð&˜1�BÐ&Ð&Ð&rE   c                 ó   — g | ]	}|D ]}|‘ŒŒ
S rD   rD   )rÖ   r(  Úboxs      rF   r7  zGSapiens2ImageProcessor.post_process_pose_estimation.<locals>.<listcomp>[  s%   € ÐAÐAÐA�[°[ÐAÐA¨cˆSÐAÐAÐAÐArE   rw   )rÊ   r£   rË   rj   ri   )r]   ru   r|   c                 ó4   — g | ]\  \  }}\  }}||z  ||z  g‘ŒS rD   rD   )rÖ   Úsource_heightÚsource_widthÚtarget_heightÚtarget_widths        rF   r7  zGSapiens2ImageProcessor.post_process_pose_estimation.<locals>.<listcomp>s  sE   € ð ð ð áTÑ5˜¨Ñ7T¸À|ð " LÑ0°-À-Ñ2OÐPðð ð rE   c                 ó”   •— g | ]D}‰|                               d ¦  «                             t          ‰|         ¦  «        d¦  «        ‘ŒES )r   r&   )rŠ   rŽ   Úlen)rÖ   Úimage_indexr\   Úper_image_scales     €€rF   r7  zGSapiens2ImageProcessor.post_process_pose_estimation.<locals>.<listcomp>|  sZ   ø€ ð ð ð à#ð $ KÔ0×:Ò:¸1Ñ=Ô=×DÒDÅSÈÈ{ÔI[ÑE\ÔE\Ð^_Ñ`Ô`ðð ð rE   )r   ru   r   ru   rº   )rÊ   rÄ   ÚlabelsÚbbox)Ú
isinstancerP   ÚTensorÚtolistr@  r«   r£   ry   r„   r!  rˆ   r½   rÉ   rõ   rr   r8   r  r9   r  rä   Úranger‡   Úappend)"r  Úoutputsr\   Úoutputs_flippedr©   r2  r3  r4  Ú
num_imagesr£   ry   Únum_total_personsrÀ   rå   rÂ   r)  Úall_keypointsÚ
all_scoresÚcentersrW   Úheatmap_sizeÚ	all_boxesÚper_person_scaleÚperson_resultsÚperson_indexrÊ   rÄ   rC  Úkeeprµ   Úperson_offsetr(  Únum_persons_in_imagerB  s"     `                              @rF   Úpost_process_pose_estimationz3Sapiens2ImageProcessor.post_process_pose_estimation  s@  øø€ õd �l¥E¤LÑ1Ô1ð 	1Ø'×.Ò.Ñ0Ô0ˆLÝ�l¥E¤LÑ1Ô1ð 	1Ø'×.Ò.Ñ0Ô0ˆLå˜‘Z”Zˆ
àÐ#¨Ð(<ÝÐ`ÑaÔaÐaØÐ#¨
µc¸,Ñ6GÔ6GÒ(GÐ(GÝÐgÑhÔhÐhØÐ#¨
µc¸,Ñ6GÔ6GÒ(GÐ(GÝÐgÑhÔhÐhàÔ#ˆØÐ&Ø  ?Ô#;Ñ;¸qÑ@ˆHà”ˆØJRÌ.ÑGÐ˜=¨.¸-à Ò!Ð!Ø&Ð& Ð&Ñ&Ô&Ð&õ ”|ØAÐA EÐAÑAÔAÍÌÐ_eð
ñ 
ô 
ˆð —>’>Ñ#Ô#ˆõ %=¸XÑ$FÔ$FÑ!ˆ�zÝ:Ø#¨hÈð
ñ 
ô 
ˆõ
 /Ý˜|Ñ,Ô,¸4¼9ÀXÔ;NÐPTÔPYÐZaÔPbÐ:cð
ñ 
ô 
‰ˆ�õ ”| ]°QÑ%6¸ÈÑ8JÐ$KÕSXÔS`ÐioÐpÑpÔpˆà˜LÑ(¨6°!°!°!°T¸1¸1¸1°*Ô+=Ñ=ÀÈÈÈÈ4ÐQRÐQRÐQRÈ
Ô@SÑSÐVYÐ\bÐcdÐcdÐcdÐfjÐlmÐlmÐlmÐcmÔ\nÑVnÑnð 	õ % \Ñ2Ô2ˆ	àÐ#¨Ð(@å#œlðð åX[Ð\hÐjvÑXwÔXwðñ ô õ ”mØðñ ô ˆOõ  %œyðð ð ð ð å',¨ZÑ'8Ô'8ðñ ô ñ ô  Ðð *Ð,<¸Q¸Q¸QÀÀaÀaÀa¸ZÔ,HÑHˆMØ!Ð$4°Q°Q°Q¸¸¸°_Ô$EÑEˆIàˆÝ!Ð"3Ñ4Ô4ð 	ð 	ˆLØ% lÔ3ˆIØ Ô-ˆFÝ”\ -¸Ð?Ñ?Ô?ˆFàÐ$Ø 	Ò)�Ø% dœO�	Ø œ�Ø œ�à×!Ò!Ø'°6ÀVÐU^Ð_kÔUlÐmÐmñô ð ð ð
 ˆØˆØ ð 	2ð 	2ˆKÝ#& {Ñ#3Ô#3Ð Ø�MŠM˜.¨¸ÐI]Ñ9]Ð)]Ô^Ñ_Ô_Ð_ØÐ1Ñ1ˆMˆMØˆrE   Údo_remove_paddingc                 ó†   — t          j        |j        ddd¬¦  «        }|                      ||||¬¦  «        }d„ |D ¦   «         S )a´  
        Converts the output of [`Sapiens2ForNormalEstimation`] into L2-normalized surface normal maps.

        Args:
            outputs (`Sapiens2NormalEstimatorOutput`):
                Raw outputs of the model.
            source_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Original `(height, width)` of each image before preprocessing. When provided,
                the padding added during preprocessing is removed and predictions are resized back
                to the original image size (unless `target_sizes` overrides the final size).
            target_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Requested final `(height, width)` for each prediction. When provided, used as the
                resize target instead of `source_sizes`. Resized with bilinear interpolation after
                L2 normalization.
            do_remove_padding (`bool`, *optional*):
                Whether to crop away the zero-padding added during preprocessing before resizing.
                Defaults to `True` when `source_sizes` is provided, `False` otherwise.

        Returns:
            `list[dict[str, torch.Tensor]]` of length `batch_size`. Each dict has a `"normals"` key
            mapping to a tensor of shape `(3, height, width)` with L2-normalized unit vectors in
            `[-1, 1]` per channel (XYZ surface normals).
        r&   ru   g:Œ0âŽyE>)Úprc   rã   ©Úmapsr3  r4  rZ  c                 ó   — g | ]}d |i‘ŒS )rM   rD   ©rÖ   rµ   s     rF   r7  zISapiens2ImageProcessor.post_process_normal_estimation.<locals>.<listcomp>¿  s   € Ð:Ð:Ð:¨�˜FÐ#Ð:Ð:Ð:rE   )rŒ   Ú	normalizerM   Ú_post_process_maps)r  rJ  r3  r4  rZ  rM   Úresultss          rF   Úpost_process_normal_estimationz5Sapiens2ImageProcessor.post_process_normal_estimation�  sX   € õ< ”+˜gœo°¸¸tÐDÑDÔDˆØ×)Ò)Ø |À,Ðbsð *ñ 
ô 
ˆð ;Ð:°'Ð:Ñ:Ô:Ð:rE   c                 ó˜   — |j         }|j        �||j        dd…dd…ddf         z  }|                      ||||¬¦  «        }d„ |D ¦   «         S )aŒ  
        Converts the output of [`Sapiens2ForPointmapEstimation`] into pointmap tensors in image space.

        Args:
            outputs (`Sapiens2PointmapEstimatorOutput`):
                Raw outputs of the model.
            source_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Original `(height, width)` of each image before preprocessing. When provided,
                the padding added during preprocessing is removed and predictions are resized back
                to the original image size (unless `target_sizes` overrides the final size).
            target_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Requested final `(height, width)` for each prediction. Overrides `source_sizes`
                as the resize target.
            do_remove_padding (`bool`, *optional*):
                Whether to crop away the zero-padding added during preprocessing before resizing.
                Defaults to `True` when `source_sizes` is provided, `False` otherwise.

        Returns:
            `list[dict[str, torch.Tensor]]` of length `batch_size`. Each dict has a `"pointmap"` key
            mapping to a tensor of shape `(3, height, width)` with per-pixel 3D XYZ coordinates in
            canonical camera space, optionally divided by `outputs.scales` to convert to metric coordinates.
        Nr]  c                 ó   — g | ]}d |i‘ŒS )ÚpointmaprD   r`  s     rF   r7  zKSapiens2ImageProcessor.post_process_pointmap_estimation.<locals>.<listcomp>ä  s   € Ð;Ð;Ð;¨�˜VÐ$Ð;Ð;Ð;rE   )rV   rW   rb  )r  rJ  r3  r4  rZ  rV   rc  s          rF   Ú post_process_pointmap_estimationz7Sapiens2ImageProcessor.post_process_pointmap_estimationÁ  sp   € ð: Ô%ˆ	ØŒ>Ð%Ø! G¤N°1°1°1°a°a°a¸¸tÐ3CÔ$DÑDˆIØ×)Ò)Ø¨ÀLÐduð *ñ 
ô 
ˆð <Ð;°7Ð;Ñ;Ô;Ð;rE   Úbackgroundsc                 óÌ  ‡‡‡‡— t          ‰t          j        ¦  «        r‰                     ¦   «         Š|j        j        d         }|j        j        Š|j        j        Š‰�"|t          ‰¦  «        k    rt          d¦  «        ‚‰du pt          ˆfd„‰D ¦   «         ¦  «        }g Š|�St          |¦  «        }t          |¦  «        dk    r"t          |¦  «        |k    rt          d¦  «        ‚ˆˆfd„|D ¦   «         Š‰ pt          ˆfd„‰D ¦   «         ¦  «        }t          j        |j        |j        gd¬	¦  «        }‰�F|rDt          ‰d         ¦  «        }	t          j        ||	d
dd¬¦  «        }|                     dd¦  «        }g }
|ró|rñ|dd…dd…f         }|dd…dd…f         }dg|z  }‰ršt          j        ‰¦  «        }|j        dd…         |j        dd…         k    r&t          j        ||j        dd…         d
dd¬¦  «        }|d|z
  |z  z                        dd¦  «        }t'          j        |t          j        d¬¦  «        }t-          |||¦  «        D ]\  }}}|
                     |||dœ¦  «         Œ �nnt1          t          |¦  «        ¦  «        D �]P}||         }‰rP|sNt          j        |                     d¦  «        ‰|         d
dd¬¦  «        d         }|                     dd¦  «        }|dd…         }|dd…         }d}‰rÂt          ‰¦  «        dk    r‰d         n‰|         }|j        dd…         |j        dd…         k    r?t          j        |                     d¦  «        |j        dd…         d
dd¬¦  «        d         }|d|z
  |z  z                        dd¦  «        }t'          j        |t          j        d¬¦  «        }|
                     |||dœ¦  «         �ŒR|
S )a   
        Converts the output of [`Sapiens2ForImageMatting`] into alpha mattes and foreground maps.

        Args:
            outputs (`Sapiens2ImageMattingOutput`):
                Raw outputs of the model.
            target_sizes (`torch.Tensor` or `list[tuple[int, int]]` of length `batch_size`, *optional*):
                Requested final `(height, width)` for each prediction. Resized with bilinear
                interpolation. If unset, predictions are returned at the model output resolution.
            backgrounds (`ImageInput`, *optional*):
                Background image(s) to composite over. Can be a single image (applied to every item
                in the batch) or a list of images, one per batch item. Accepts PIL images, numpy
                arrays, or torch tensors of any dtype; integer types (e.g. uint8) are scaled to
                `[0, 1]` automatically. When provided, each result dict gains a `"composite"` key
                with the composited image as a uint8 tensor in `[0, 255]`.

        Returns:
            `list[dict]` of length `batch_size`. Each dict has:
            - `"alpha"` (`torch.Tensor` of shape `(1, height, width)`): alpha values in `[0, 1]`.
            - `"foreground"` (`torch.Tensor` of shape `(3, height, width)`): pre-multiplied RGB in `[0, 1]`.
            - `"composite"` (`torch.Tensor` of shape `(3, height, width)` or `None`): foreground composited
              over `backgrounds` as a uint8 tensor in `[0, 255]`; `None` when `backgrounds` is not provided.
        r   Nz\Make sure that you pass in as many target sizes as the batch dimension of the matting outputc              3   ód   •K  — | ]*}t          |¦  «        t          ‰d          ¦  «        k    V — Œ+dS ©r   N©rS   )rÖ   r  r4  s     €rF   ú	<genexpr>zDSapiens2ImageProcessor.post_process_image_matting.<locals>.<genexpr>  sK   øè è € ð =
ð =
Ø6:�E�$‰KŒK�5 ¨a¤Ñ1Ô1Ò1ð=
ð =
ð =
ð =
ð =
ð =
rE   ru   z[Make sure that you pass in as many backgrounds as the batch dimension of the matting outputc                 óˆ   •— g | ]>}t          j        t          j        |¦  «        ‰d ¬¦  «                             ‰¦  «        ‘Œ?S )Tr  )r®   r   Úto_imageÚto)rÖ   Úbackground_imagery   rx   s     €€rF   r7  zESapiens2ImageProcessor.post_process_image_matting.<locals>.<listcomp>  sV   ø€ ð "ð "ð "à$õ Ô"¥3¤<Ð0@Ñ#AÔ#AÈÐVZÐ[Ñ[Ô[×^Ò^Ð_eÑfÔfð"ð "ð "rE   c              3   ód   •K  — | ]*}|j         d d…         ‰d         j         d d…         k    V — Œ+dS )éþÿÿÿNr   )r„   )rÖ   Ú
backgroundÚbackground_tensorss     €rF   rn  zDSapiens2ImageProcessor.post_process_image_matting.<locals>.<genexpr>  s_   øè è € ð C
ð C
ØJTˆJÔ˜R˜S˜SÔ!Ð%7¸Ô%:Ô%@ÀÀÀÔ%EÒEðC
ð C
ð C
ð C
ð C
ð C
rE   rb   r~   F©r  r�   rƒ   Ú	antialiasr§   rv   r   rt  Tr  )Ú
foregroundÚalphaÚ	composite)rE  rP   rF  rG  rZ   r„   ry   rx   r@  r«   Úallr   rä   ÚalphasrS   rŒ   ÚinterpolaterÝ   re   r®   r   Úuint8r  rI  rH  rŠ   )r  rJ  r4  ri  Ú
batch_sizeÚall_target_sizes_equalÚbackground_listÚall_background_sizes_equalÚmattingÚtarget_sizerµ   rZ   r}  Ú
compositesru  ry  rz  r{  rÛ   Úmatting_itemrv  ry   rx   s     `                 @@@rF   Úpost_process_image_mattingz1Sapiens2ImageProcessor.post_process_image_mattingæ  s  øøøø€ õ: �l¥E¤LÑ1Ô1ð 	1Ø'×.Ò.Ñ0Ô0ˆLàÔ(Ô.¨qÔ1ˆ
ØÔ$Ô+ˆØÔ#Ô)ˆàÐ#Ø�S Ñ.Ô.Ò.Ð.Ý Ørñô ð ð ".°Ð!5ð "
½ð =
ð =
ð =
ð =
Ø>Jð=
ñ =
ô =
ñ :
ô :
Ðð  ÐØÐ"Ý1°+Ñ>Ô>ˆOÝ�?Ñ#Ô# qÒ(Ð(­S°Ñ-AÔ-AÀZÒ-OÐ-OÝ Øqñô ð ð"ð "ð "ð "ð "à(7ð"ñ "ô "Ðð *<Ð%;ð &
½sð C
ð C
ð C
ð C
ØXjðC
ñ C
ô C
ñ @
ô @
Ð"õ ”)˜WÔ0°'´.ÐAÀqÐIÑIÔIˆàÐ#Ð(>Ð#Ý ¨Q¤Ñ0Ô0ˆKÝ”mØØ ØØ#Øðñ ô ˆGð —m’m C¨Ñ-Ô-ˆGàˆØ!ð ;	bÐ&@ð ;	bà! ! ! ! R a R %œ.ˆKØ˜Q˜Q˜Q   ˜U”^ˆFØ˜ *Ñ,ˆJØ!ð [Ý"œ[Ð);Ñ<Ô<�
ØÔ# B C CÔ(¨G¬M¸"¸#¸#Ô,>Ò>Ð>Ý!"¤Ø"Ø$œ]¨2¨3¨3Ô/Ø'Ø&+Ø"'ð"ñ "ô "�Jð *¨Q°©Z¸:Ñ,EÑE×LÒLÈSÐRUÑVÔV�
Ý Ô/°
Å%Ä+ÐUYÐZÑZÔZ�
å03°KÀÈÑ0TÔ0Tð ð Ñ,�
˜E 9Ø—’à&0Ø!&Ø%.ðð ñô ð ð ñõ �s 7™|œ|Ñ,Ô,ð bñ b�Ø& uœ~�àð @Ð(>ð @Ý#$¤=Ø$×.Ò.¨qÑ1Ô1Ø)¨%Ô0Ø'Ø&+Ø"'ð$ñ $ô $ð ô$�Lð $0×#5Ò#5°c¸3Ñ#?Ô#?�Là)¨"¨1¨"Ô-�
Ø$ Q R RÔ(�Ø �	à%ð ]Ý:=Ð>PÑ:QÔ:QÐUVÒ:VÐ:VÐ!3°AÔ!6Ð!6Ð\nÐotÔ\u�JØ!Ô'¨¨¨Ô,°Ô0BÀ2À3À3Ô0GÒGÐGÝ%&¤]Ø&×0Ò0°Ñ3Ô3Ø!-Ô!3°B°C°CÔ!8Ø!+Ø*/Ø&+ð&ñ &ô &ð ô&˜
ð ",¨q°5©y¸JÑ.FÑ!F× MÒ MÈcÐSVÑ WÔ W�IÝ #Ô 2°9ÅEÄKÐW[Ð \Ñ \Ô \�Ià—’¨ZÀ%ÐV_Ð`Ð`ÑaÔaÐaÑaàˆrE   r^  c                 ó|  ‡‡— t          |t          j        ¦  «        r|                     ¦   «         }t          |t          j        ¦  «        r|                     ¦   «         }|€|d u}|r|€t	          d¦  «        ‚|�/t          |¦  «        t          |¦  «        k    rt	          d¦  «        ‚|�/t          |¦  «        t          |¦  «        k    rt	          d¦  «        ‚| j        d         }| j        d         }g Š|ry|D ]v\  }}t          ||f||¦  «        \  }	}
|	|k     r||	z
  dz  nd}|
|k     r||
z
  dz  nd}‰                     |||t          |	|¦  «        z   |t          |
|¦  «        z   f¦  «         Œw‰ pt          ˆfd„‰D ¦   «         ¦  «        }g Š|�d	„ |D ¦   «         Šn|�d
„ |D ¦   «         Š‰ pt          ˆfd„‰D ¦   «         ¦  «        }g }|rV|rT|r!‰d         \  }}}}|d d …d d …||…||…f         }‰rt          j        |‰d         ddd¬¦  «        }t          |¦  «        }n–t          t          |¦  «        ¦  «        D ]y}||         }|r‰|         \  }}}}|d d …||…||…f         }‰r8t          j        |                     d¦  «        ‰|         ddd¬¦  «        d         }|                     |¦  «         Œz|S )Nz>`source_sizes` must be provided when `do_remove_padding=True`.zUMake sure that you pass in as many source sizes as the batch dimension of the outputszUMake sure that you pass in as many target sizes as the batch dimension of the outputsrj   ri   r&   r   c              3   ó0   •K  — | ]}|‰d          k    V — ŒdS rl  rD   )rÖ   Úcropr'  s     €rF   rn  z<Sapiens2ImageProcessor._post_process_maps.<locals>.<genexpr>—  s,   øè è € Ð*NÐ*NÀ¨4°5¸´8Ò+;Ð*NÐ*NÐ*NÐ*NÐ*NÐ*NrE   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rD   rm  ©rÖ   r  s     rF   r7  z=Sapiens2ImageProcessor._post_process_maps.<locals>.<listcomp>›  ó   € Ð@Ð@Ð@¨4�5 ™;œ;Ð@Ð@Ð@rE   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rD   rm  r�  s     rF   r7  z=Sapiens2ImageProcessor._post_process_maps.<locals>.<listcomp>�  rŽ  rE   c              3   ó0   •K  — | ]}|‰d          k    V — ŒdS rl  rD   )rÖ   r  Úfinal_sizess     €rF   rn  z<Sapiens2ImageProcessor._post_process_maps.<locals>.<genexpr>ž  s-   øè è € Ð6fÐ6fÐRV°t¸{È1¼~Ò7MÐ6fÐ6fÐ6fÐ6fÐ6fÐ6frE   r~   Frw  )rE  rP   rF  rG  r«   r@  r  r   rI  Úminr|  rŒ   r~  ÚlistrH  rŠ   )r  r^  r3  r4  rZ  Úmodel_heightÚmodel_widthÚoriginal_heightÚoriginal_widthÚ
new_heightÚ	new_widthÚpad_topÚpad_leftÚall_crops_equalÚall_final_sizes_equalrµ   ÚtopÚleftÚbottomÚrightrÛ   Úmap_itemr'  r‘  s                         @@rF   rb  z)Sapiens2ImageProcessor._post_process_mapso  s£  øø€ õ �l¥E¤LÑ1Ô1ð 	1Ø'×.Ò.Ñ0Ô0ˆLÝ�l¥E¤LÑ1Ô1ð 	1Ø'×.Ò.Ñ0Ô0ˆLØÐ$Ø ,°DÐ 8ÐØð 	_ Ð!5ÝÐ]Ñ^Ô^Ð^àÐ#­¨D©	¬	µS¸Ñ5FÔ5FÒ(FÐ(FÝÐtÑuÔuÐuØÐ#­¨D©	¬	µS¸Ñ5FÔ5FÒ(FÐ(FÝÐtÑuÔuÐuà”y Ô*ˆØ”i Ô(ˆàˆØð 	Ø3?ð ð Ñ/� Ý(KØ$ nÐ5°|À[ñ)ô )Ñ%�
˜Ið ?IÈ<Ò>WÐ>W˜<¨*Ñ4¸Ñ:Ð:Ð]^�Ø=FÈÒ=TÐ=T˜K¨)Ñ3¸Ñ9Ð9ÐZ[�Ø—’àØ Ø¥# j°,Ñ"?Ô"?Ñ?Ø ¥3 y°+Ñ#>Ô#>Ñ>ð	ñô ð ð ð $˜)ÐN¥sÐ*NÐ*NÐ*NÐ*NÈÐ*NÑ*NÔ*NÑ'NÔ'NˆàˆØÐ#Ø@Ð@°<Ð@Ñ@Ô@ˆKˆKØÐ%Ø@Ð@°<Ð@Ñ@Ô@ˆKØ$/ Ð fµ3Ð6fÐ6fÐ6fÐ6fÐZeÐ6fÑ6fÔ6fÑ3fÔ3fÐàˆØð "	(Ð4ð "	(à ð :Ø+0°¬8Ñ(��T˜6 5Ø˜A˜A˜A˜q˜q˜q # f *¨d°5¨jÐ8Ô9�àð Ý”}ØØ$ QœØ#Ø"'Ø#ðñ ô �õ ˜$‘Z”ZˆFˆFõ �s 4™yœyÑ)Ô)ð (ð (�Ø œ;�à$ð CØ/4°U¬|Ñ,�C˜˜v uØ'¨¨¨¨3¨v¨:°t¸E°zÐ(AÔB�Hàð Ý œ}Ø ×*Ò*¨1Ñ-Ô-Ø(¨Ô/Ø'Ø&+Ø"'ð ñ  ô  ð ô �Hð —’˜hÑ'Ô'Ð'Ð'àˆrE   ©NN©N)FFN)Nr¢   NNN©NNN))rA   rB   rC   r÷   Úvalid_kwargsr   ÚBILINEARr  r   r  r   r  r  r  r    r  r#   r   r“  r½   r   r  Úboolr   Ústrr!   r   r  rP   rF  r   r1  ÚintrS   ÚdictrY  rd  rh  rˆ  rb  Ú__classcell__©r  s   @rF   rû   rû   ž  s©  ø€ € € € € Ø/€Là!Ô*€HØ&€JØ$€IØ SÐ)Ð)€DØ€Fð# Ð(DÔ!Eð #ð #ð #ð #ð #ð #ð ð 04Ø04ð	Yð YàðYð &¨Ñ,ðYð �D˜˜eœÔ%Ô&¨Ñ-ð	Yð
 Ð5Ô6ðYð 
ðYð Yð Yñ „^ðYð4 59ð
ð 
àð
ð &¨Ñ,ð
ð �D˜˜eœÔ%Ô&¨Ñ-ð	
ð
 ð
ð ,ð
ð ˜jÑ(¨4Ñ/ð
ð �c˜>Ð)Ô*¨TÑ1ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
ðL "'ØØ04ð!8Nð 8Nà�U”\Ô"ð8Nð ð8Nð ð	8Nð
 Lð8Nð ð8Nð ð8Nð ð8Nð ð8Nð ð8Nð ˜D œKÑ'¨$Ñ.ð8Nð ˜4 œ;Ñ&¨Ñ-ð8Nð  ™+ð8Nð ð8Nð ð8Nð  �D˜˜eœÔ%Ô&¨Ñ-ð!8Nð$ 
ˆeŒlÔ	ð%8Nð 8Nð 8Nð 8Nð| ØØ"&ØBFØBFðLð Lð �D˜˜eœÔ%Ô&ðLð
 ðLð ˜4‘<ðLð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ðLð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ðLð 
ˆd�4˜˜Uœ\Ð)Ô*Ô+Ô	,ðLð Lð Lð Lðb CGØBFØ)-ð";ð ";ð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ð";ð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ð	";ð
   $™;ð";ð 
ˆd�3˜œÐ$Ô%Ô	&ð";ð ";ð ";ð ";ðN CGØBFØ)-ð#<ð #<ð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ð#<ð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ð	#<ð
   $™;ð#<ð 
ˆd�3˜œÐ$Ô%Ô	&ð#<ð #<ð #<ð #<ðP CGØ)-ð	Gð Gð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ðGð   $Ñ&ð	Gð
 
ˆd�3˜œÐ$Ô%Ô	&ðGð Gð Gð GðRVàŒlðVð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ðVð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?ð	Vð
   $™;ðVð 
ˆeŒlÔ	ðVð Vð Vð Vð Vð Vð Vð VrE   rû   zfacebook/sapiens2-seg-0.4b)Ú
checkpointc                   óÂ  ‡ — e Zd ZU dZdZdZdZee         dz  e	d<   dZ
ee         dz  e	d<   dZee	d<   dZedz  e	d	<   dZee         dz  e	d
<   dZee         dz  e	d<   dZee	d<   dZee         dz  e	d<   dZee         dz  e	d<   dZee	d<   dZedz  e	d<   dZee         dz  e	d<   ˆ fd„Zdeee         z  eeef         z  deee         z  eeef         z  ddfd„Zˆ xZS )ÚSapiens2HeadConfigal	  
    upsample_out_channels (`list[int]`, *optional*):
        Output channel counts for each upsample block.
        The first block takes `hidden_size` channels as input; subsequent blocks use the previous output.
    upsample_kernel_sizes (`list[int]`, *optional*):
        Kernel size for each upsample block. Auto-filled with `[4, ...]` when
        `upsample_out_channels` is set but this is `None`.
        Must have the same length as `upsample_out_channels`.
    upsample_kernel_size (`int`, defaults to 4):
        Default kernel size for upsample blocks when `upsample_kernel_sizes` is not set.
    use_pixel_shuffle (`bool`, *optional*):
        Whether the upsample head uses pixel-shuffle upsampling instead of transposed convolutions.
        When `None` (default), the head uses transposed convolutions.
    conv_out_channels (`list[int]`, *optional*):
        Output channel counts for the refinement conv layers that follow the upsample blocks.
    conv_kernel_sizes (`list[int]`, *optional*):
        Kernel size for each refinement conv layer. Auto-filled with `[1, ...]` when
        `conv_out_channels` is set but this is `None`.
        Must have the same length as `conv_out_channels`.
    conv_kernel_size (`int`, defaults to 1):
        Default kernel size for conv layers when `conv_kernel_sizes` is not set.
    scale_conv_out_channels (`list[int]`, *optional*):
        Output channel counts for the stride-2 conv layers used to predict the focal-length scale.
        When `None` (default), no scale branch is built.
    scale_conv_kernel_sizes (`list[int]`, *optional*):
        Kernel size for each scale conv layer. Auto-filled with `[1, ...]` when
        `scale_conv_out_channels` is set but this is `None`.
        Must have the same length as `scale_conv_out_channels`.
    scale_conv_kernel_size (`int`, defaults to 1):
        Default kernel size for scale conv layers when `scale_conv_kernel_sizes` is not set.
    scale_final_input_size (`int`, *optional*):
        Flattened feature size passed into the scale MLP.
        When `None` (default), it is automatically inferred from `image_size` and `patch_size`
        in the parent [`Sapiens2Config`].
    scale_final_hidden_sizes (`list[int]`, *optional*):
        Hidden-layer sizes for the MLP that maps flattened scale features to the scalar scale output.
        When `None` (default), no scale branch is built.
    Úsapiens2_headÚhead_configNÚupsample_out_channelsÚupsample_kernel_sizesé   Úupsample_kernel_sizeÚuse_pixel_shuffleÚconv_out_channelsÚconv_kernel_sizesru   Úconv_kernel_sizeÚscale_conv_out_channelsÚscale_conv_kernel_sizesÚscale_conv_kernel_sizeÚscale_final_input_sizeÚscale_final_hidden_sizesc                 óZ  •— | j         �)| j        €"| j        gt          | j         ¦  «        z  | _        | j        �)| j        €"| j        gt          | j        ¦  «        z  | _        | j        �)| j        €"| j	        gt          | j        ¦  «        z  | _         t          ¦   «         j        di |¤Ž d S rÿ   )r³  r´  r¶  r@  r¸  r¹  rº  r»  r¼  r½  r   Ú__post_init__r  s     €rF   rÁ  z Sapiens2HeadConfig.__post_init__  s³   ø€ ØÔ%Ð1°dÔ6PÐ6XØ*.Ô*CÐ)DÅsÈ4ÔKeÑGfÔGfÑ)fˆDÔ&ØÔ!Ð-°$Ô2HÐ2PØ&*Ô&;Ð%<½sÀ4ÔCYÑ?ZÔ?ZÑ%ZˆDÔ"ØÔ'Ð3¸Ô8TÐ8\Ø,0Ô,GÐ+HÍ3ÈtÔOkÑKlÔKlÑ+lˆDÔ(Ø�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'rE   Ú
image_sizeÚ
patch_sizer_   c                 ó¦  — | j         €| j        �| j        €d S t          |t          t
          f¦  «        r|n||f\  }}t          |t          ¦  «        r|n|d         }t          |t          ¦  «        r|n|d         }||z  }||z  }| j        D ],}	|	dz
  dz  }
|d|
z  z   |	z
  dz  dz   }|d|
z  z   |	z
  dz  dz   }Œ-||z  | j        d         z  | _         d S )Nr   ru   r&   ra   )r¾  r»  r¼  rE  r“  rS   rª  )r  rÂ  rÃ  Úimage_heightÚimage_widthÚpatch_heightÚpatch_widthÚfeatures_heightÚfeatures_widthr©   r^   s              rF   Ú_init_scale_final_input_sizez/Sapiens2HeadConfig._init_scale_final_input_size  s  € ð Ô'Ð3ØÔ+Ð3ØÔ+Ð3àˆFÝ2<¸ZÍ$ÕPUÈÑ2WÔ2WÐ$u J JÐ^hÐjtÐ]uÑ!ˆ�kÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ$.¨z½3Ñ$?Ô$?ÐR�j�jÀZÐPQÄ]ˆØ&¨,Ñ6ˆØ$¨Ñ3ˆØÔ7ð 	Sð 	SˆKØ" Q‘¨1Ñ,ˆGØ.°°W±Ñ<¸{ÑJÈqÑPÐSTÑTˆOØ,¨q°7©{Ñ:¸[ÑHÈQÑNÐQRÑRˆNˆNØ&5¸Ñ&FÈÔIeÐfhÔIiÑ&iˆÔ#Ð#Ð#rE   )rA   rB   rC   rI   Ú
model_typeÚbase_config_keyr³  r“  rª  rR   r´  r¶  r·  r¨  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÁ  rS   rË  r¬  r­  s   @rF   r°  r°  È  sË  ø€ € € € € € ð%ð %ðN !€JØ#€Oà.2Ð˜4 œ9 tÑ+Ð2Ð2Ñ2Ø.2Ð˜4 œ9 tÑ+Ð2Ð2Ñ2Ø !Ð˜#Ð!Ð!Ñ!Ø%)Ð�t˜d‘{Ð)Ð)Ñ)Ø*.Ð�t˜C”y 4Ñ'Ð.Ð.Ñ.Ø*.Ð�t˜C”y 4Ñ'Ð.Ð.Ñ.ØÐ�cÐÐÑØ04Ð˜T #œY¨Ñ-Ð4Ð4Ñ4Ø04Ð˜T #œY¨Ñ-Ð4Ð4Ñ4Ø"#Ð˜CÐ#Ð#Ñ#Ø)-Ð˜C $™JÐ-Ð-Ñ-Ø15Ð˜d 3œi¨$Ñ.Ð5Ð5Ñ5ð(ð (ð (ð (ð (ðjØ  S¤	™/¨E°#°s°(¬OÑ;ðjØILÈtÐTWÌyÉÐ[`ÐadÐfiÐaiÔ[jÑIjðjà	ðjð jð jð jð jð jð jð jrE   r°  zfacebook/sapiens2-pretrain-0.4bc                   óž  ‡ — e Zd ZU dZdZdeiZdZee	d<   dZ
ee	d<   dZee	d	<   d
Zee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee         dz  e	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZeee                  dz  e	d <   dZee z  dz  e	d<    e!¦   «         Z" e!¦   «         Z#ˆ fd!„Z$ˆ xZ%S )"ÚSapiens2ConfiguF  
    rope_theta (`float`, *optional*, defaults to 100.0):
        The base period of the RoPE embeddings.
    query_bias (`bool`, *optional*, defaults to `True`):
        Whether to add a bias to the query projection.
    key_bias (`bool`, *optional*, defaults to `False`):
        Whether to add a bias to the key projection.
    value_bias (`bool`, *optional*, defaults to `True`):
        Whether to add a bias to the value projection.
    proj_bias (`bool`, *optional*, defaults to `True`):
        Whether to add a bias to the output projection.
    layerscale_value (`float`, *optional*, defaults to 1.0):
        Initial value to use for layer scale.
    use_gated_mlp (`bool`, *optional*, defaults to `False`):
        Whether to use the SwiGLU feedforward neural network.
    num_register_tokens (`int`, *optional*, defaults to 0):
        The number of register tokens.
    pos_embed_shift (`float`, *optional*):
        Amount to randomly shift position embedding coordinates in [-shift, shift],
        applied only in training mode if not `None`.
    pos_embed_jitter (`float`, *optional*):
        Amount to randomly jitter position embedding coordinates in log-uniform value in [1/jitter, jitter],
        applied only in training mode if not `None`.
    pos_embed_rescale (`float`, *optional*, defaults to 2.0):
        Amount to randomly rescale position embedding coordinates in log-uniform value in [1/rescale, rescale],
        applied only in training mode if not `None`.
    reshape_hidden_states (`bool`, *optional*, defaults to `True`):
        Whether to reshape the hidden states to spatial dimensions when used as backbone.
    use_mask_token (`bool`, *optional*, defaults to `False`):
        Whether to use a mask token in the embeddings (needed for masked image modeling pretraining).
    rms_norm_eps (`float`, *optional*, defaults to 1e-6):
        Epsilon for the RMS normalization layers.
    normalize_backbone_outputs (`bool`, *optional*, defaults to `True`):
        Whether to apply RMSNorm to the backbone `feature_maps` and `cls_tokens` outputs before
        returning them from the forward pass. Only applies when the model is used as a backbone.
    use_qk_norm (`bool`, *optional*, defaults to `True`):
        Whether to apply RMSNorm to queries and keys before RoPE in attention layers.
    num_key_value_heads_per_layer (`list[int]`, *optional*):
        Number of key/value heads for each transformer layer. Setting a layer's value equal to
        `num_attention_heads` gives full multi-head attention; a smaller value gives grouped-query
        attention. Defaults to `num_attention_heads` for the first `num_first_full_attention_layers`
        and last `num_last_full_attention_layers` layers and `num_key_valueattention_heads` for all other
        layers.
    num_key_value_attention_heads (`int`):
        Number of key/value heads for layers that use grouped-query attention when `num_key_value_heads_per_layer`
        is not set. Ignored when `num_key_value_heads_per_layer` is set.
    num_first_full_attention_layers (`int`, *optional*, defaults to 8):
        Number of leading transformer layers that use full multi-head attention.
        Only used when `num_key_value_heads_per_layer` is `None`.
    num_last_full_attention_layers (`int`, *optional*, defaults to 8):
        Number of trailing transformer layers that use full multi-head attention.
        Only used when `num_key_value_heads_per_layer` is `None`.
    semantic_loss_ignore_index (`int`, *optional*, defaults to 255):
        Label index ignored when computing the segmentation loss.
    flip_pairs (`list[list[int]]`, *optional*):
        Pairs of keypoint indices that are mirrored horizontally (e.g., left ear â†” right ear).
        Each pair is a two-element list `[left_index, right_index]`. Used for test-time
        horizontal flip augmentation in pose estimation: pass these pairs to the second
        forward call so the model flips heatmaps back before returning them.
    head_config (`Sapiens2HeadConfig`, *optional*):
        Configuration for the decode head. See [`Sapiens2HeadConfig`] for the available options.
    Úsapiens2r²  rü   Úhidden_sizeé   Únum_hidden_layersé   Únum_attention_headsi   Úintermediate_sizeFÚuse_mask_tokenTÚuse_gated_mlpÚsiluÚ
hidden_actg�íµ ÷Æ°>Úrms_norm_epsÚnormalize_backbone_outputsé   Únum_register_tokensÚkey_biasÚuse_qk_normNÚnum_key_value_heads_per_layerÚnum_key_value_attention_headsÚnum_first_full_attention_layersÚnum_last_full_attention_layerséÿ   Úsemantic_loss_ignore_indexÚ
flip_pairsc                 óN  •‡ — ‰ j         €%ˆ fd„t          ‰ j        ¦  «        D ¦   «         ‰ _         t          ‰ j        t
          ¦  «        rt          di ‰ j        ¤Ž‰ _        ‰ j        �&‰ j                             ‰ j        ‰ j	        ¬¦  «          t          ¦   «         j        di |¤Ž d S )Nc                 óh   •— g | ].}|‰j         k     s|‰j        ‰j        z
  k    r‰j        n‰j        ‘Œ/S rD   )rã  rÓ  rä  rÕ  râ  )rÖ   Úlayer_indexr  s     €rF   r7  z0Sapiens2Config.__post_init__.<locals>.<listcomp>~  s_   ø€ ð 2ð 2ð 2ð  ð	   $Ô"FÒFÐFØ" dÔ&<¸tÔ?bÑ&bÒbÐbð Ô(Ð(ð
 Ô7ð2ð 2ð 2rE   )rÂ  rÃ  rD   )rá  rH  rÓ  rE  r²  r«  r°  rË  rÂ  rÃ  r   rÁ  r  s   ` €rF   rÁ  zSapiens2Config.__post_init__|  sÄ   øø€ ØÔ-Ð5ð2ð 2ð 2ð 2õ $)¨Ô)?Ñ#@Ô#@ð2ñ 2ô 2ˆDÔ.õ �dÔ&­Ñ-Ô-ð 	FÝ1ÐEÐE°DÔ4DÐEÐEˆDÔØÔÐ'ØÔ×9Ò9ÀTÄ_ÐaeÔapÐ9ÑqÔqÐqØ�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'rE   )&rA   rB   rC   rI   rÌ  r°  Úsub_configsrÑ  rª  rR   rÓ  rÕ  rÖ  r×  r¨  rØ  rÚ  r©  rÛ  r½   rÜ  rÞ  rß  rà  rá  r“  râ  rã  rä  ræ  rç  r²  r«  ÚAttributeErrorÚlayer_norm_epsÚapply_layernormrÁ  r¬  r­  s   @rF   rÏ  rÏ     sÌ  ø€ € € € € € ð=ð =ð~ €JØ Ð"4Ð5€Kà€K�ÐÐÑØÐ�sÐÐÑØ!Ð˜Ð!Ð!Ñ!Ø!Ð�sÐ!Ð!Ñ!Ø €N�DÐ Ð Ñ Ø€M�4ÐÐÑØ€J�ÐÐÑØ€L�%ÐÐÑØ'+Ð Ð+Ð+Ñ+Ø Ð˜Ð Ð Ñ Ø€HˆdÐÐÑØ€K�ÐÐÑØ6:Ð! 4¨¤9¨tÑ#3Ð:Ð:Ñ:Ø)*Ð! 3Ð*Ð*Ñ*Ø+,Ð# SÐ,Ð,Ñ,Ø*+Ð" CÐ+Ð+Ñ+Ø&)Ð Ð)Ð)Ñ)Ø)-€J��T˜#”Y” $Ñ&Ð-Ð-Ñ-Ø48€KÐ# dÑ*¨TÑ1Ð8Ð8Ñ8à#�^Ñ%Ô%€NØ$�nÑ&Ô&€Oð(ð (ð (ð (ð (ð (ð (ð (ð (rE   rÏ  c                   ób   ‡ — e Zd Zdefˆ fd„Zddej        dej        dz  dej        fˆ fd„Zˆ xZS )	ÚSapiens2EmbeddingsÚconfigc                 óÀ   •— t          ¦   «                              |¦  «         |j        r-t          j        t          j        dd|j        ¦  «        ¦  «        nd | _        d S )Nru   )	r   r  r×  r   Ú	ParameterrP   r€   rÑ  Ú
mask_token©r  rñ  r  s     €rF   r  zSapiens2Embeddings.__init__�  sO   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØQWÔQfÐp�"œ,¥u¤{°1°a¸Ô9KÑ'LÔ'LÑMÔMÐMÐlpˆŒˆˆrE   NÚpixel_valuesÚbool_masked_posr_   c                 óx   •— |�| j         €t          d¦  «        ‚t          ¦   «                              ||¦  «        S )Nz:bool_masked_pos requires use_mask_token=True in the config)rô  r«   r   Úforward)r  rö  r÷  r  s      €rF   rù  zSapiens2Embeddings.forward“  s7   ø€ ØÐ&¨4¬?Ð+BÝÐYÑZÔZÐZÝ‰wŒw�Š˜|¨_Ñ=Ô=Ð=rE   r¤  ©	rA   rB   rC   rÏ  r  rP   rF  rù  r¬  r­  s   @rF   rð  rð  Ž  s‘   ø€ € € € € ðq˜~ð qð qð qð qð qð qð>ð > E¤Lð >À5Ä<ÐRVÑCVð >ÐbgÔbnð >ð >ð >ð >ð >ð >ð >ð >ð >ð >rE   rð  c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚSapiens2RopePositionEmbeddingrñ  c                 óN  •— t          ¦   «                              | ¦  «         | `| `|j        }t          |t          ¦  «        r|n||f\  }}|j        }t          |t          ¦  «        r|n|d         }t          |t          ¦  «        r|n|d         }||z  | _        ||z  | _        d S )Nr   ru   )	r   r  Únum_patches_hÚnum_patches_wrÂ  rE  r   rÃ  rª  )	r  rñ  rÂ  Úimage_hÚimage_wrÃ  Úpatch_size_hÚpatch_size_wr  s	           €rF   r  z&Sapiens2RopePositionEmbedding.__init__š  sµ   ø€ Ý‰Œ×Ò˜ÑÔÐàÐØÐØÔ&ˆ
Ý)3°JÅÑ)IÔ)IÐg˜:˜:ÐPZÐ\fÐOgÑˆ�ØÔ&ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ$¨Ñ4ˆÔØ$¨Ñ4ˆÔÐÐrE   ©rA   rB   rC   rÏ  r  r¬  r­  s   @rF   rü  rü  ™  sD   ø€ € € € € ð5˜~ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5rE   rü  c                   ó   — e Zd ZdS )ÚSapiens2RMSNormNr@   rD   rE   rF   r  r  ¨  rø   rE   r  c                   óÄ   ‡ — e Zd Zdedefˆ fd„Z	 	 ddej        dej        dz  deej        ej        f         dz  de	e
         d	eej        ej        dz  f         f
d
„Zˆ xZS )ÚSapiens2Attentionrñ  Ú	layer_idxc                 óR  •— t          ¦   «                              |¦  «         | `| `|j        |         | _        | j        | j        z  | _        t          j	        | j
        | j        | j        z  |j        ¬¦  «        | _        t          j	        | j
        | j        | j        z  |j        ¬¦  «        | _        |j        rt          | j        |j        ¬¦  «        nt          j        ¦   «         | _        |j        rt          | j        |j        ¬¦  «        nt          j        ¦   «         | _        d S )N)Úbias©rã   )r   r  Úk_projÚv_projrá  Únum_key_value_headsÚ	num_headsÚnum_key_value_groupsr   ÚLinearÚ	embed_dimÚhead_dimrß  Ú
value_biasrà  r  rÛ  ÚIdentityÚq_normÚk_norm©r  rñ  r	  r  s      €rF   r  zSapiens2Attention.__init__­  sû   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆKØˆKØ#)Ô#GÈ	Ô#RˆÔ Ø$(¤N°dÔ6NÑ$NˆÔ!Ý”i ¤°Ô0HÈ4Ì=Ñ0XÐ_eÔ_nÐoÑoÔoˆŒÝ”i ¤°Ô0HÈ4Ì=Ñ0XÐ_eÔ_pÐqÑqÔqˆŒØQWÔQcÐv•o d¤m¸Ô9LÐMÑMÔMÐMÕikÔitÑivÔivˆŒØQWÔQcÐv•o d¤m¸Ô9LÐMÑMÔMÐMÕikÔitÑivÔivˆŒˆˆrE   NrN   Úattention_maskÚposition_embeddingsrý   r_   c                 ó4  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «        }|                      |¦  «        }|\  }
}t          |||
|¦  «        \  }}t          j        | j        j        t          ¦  «        } || |||	|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nra   ru   r&   r§   )ÚdropoutÚscaling)r„   r  Úq_projÚviewÚ	transposer  r  r  r  r3   r   Úget_interfacerñ  Ú_attn_implementationr4   Útrainingr  r  r»   Ú
contiguousÚo_proj)r  rN   r  r  rý   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                  rF   rù  zSapiens2Attention.forward¸  s»  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—{’{ <Ñ0Ô0ˆØ—[’[ Ñ,Ô,ˆ
à&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(rE   r£  )rA   rB   rC   rÏ  rª  r  rP   rF  rS   r    r"   rù  r¬  r­  s   @rF   r  r  ¬  sÙ   ø€ € € € € ð	w˜~ð 	w¸#ð 	wð 	wð 	wð 	wð 	wð 	wð /3ØHLð	#)ð #)à”|ð#)ð œ tÑ+ð#)ð # 5¤<°´Ð#=Ô>ÀÑEð	#)ð
 Ð+Ô,ð#)ð 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð#)ð #)ð #)ð #)ð #)ð #)ð #)ð #)rE   r  c                   ó   — e Zd ZdS )ÚSapiens2LayerScaleNr@   rD   rE   rF   r2  r2  Þ  rø   rE   r2  c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚSapiens2Layerrñ  r	  c                 ó&  •— t          ¦   «                              |¦  «         t          ||¬¦  «        | _        t	          |j        |j        ¬¦  «        | _        t	          |j        |j        ¬¦  «        | _        t          j
        ¦   «         | _        d S )N©r	  r  )r   r  r  Ú	attentionr  rÑ  rÛ  Únorm1Únorm2r   r  Úlayer_scale2r  s      €rF   r  zSapiens2Layer.__init__ã  sw   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý*¨6¸YÐGÑGÔGˆŒÝ$ VÔ%7¸VÔ=PÐQÑQÔQˆŒ
Ý$ VÔ%7¸VÔ=PÐQÑQÔQˆŒ
ÝœK™MœMˆÔÐÐrE   )rA   rB   rC   rÏ  rª  r  r¬  r­  s   @rF   r4  r4  â  sK   ø€ € € € € ð*˜~ð *¸#ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *rE   r4  c                   ó¶   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 ddeded	eeeef         z  d
edeeeef         z  ez  dedededededefˆ fd„Zdej	        dej	        fd„Z
ˆ xZS )ÚSapiens2ConvLayerru   r   rÙ  TFr&   Úin_channelsÚout_channelsr©   Ústrider^   ÚgroupsÚ
activationr  Úconvolution_transposeÚpixel_shuffleÚscale_factorc           	      ó¨  •— t          ¦   «                              ¦   «          |	r+t          j        ||
r||dz  z  n||||||¬¦  «        | _        n*t          j        ||
r||dz  z  n||||||¬¦  «        | _        |
rt          j        |¦  «        nt          j        ¦   «         | _        t          j	        |¦  «        | _
        t          |         | _        d S )Nr&   )r©   r?  r^   r  r@  )r   r  r   ÚConvTranspose2dÚconvolutionÚConv2dÚPixelShuffler  rC  ÚInstanceNorm2dÚnormr   Úact_fn)r  r=  r>  r©   r?  r^   r@  rA  r  rB  rC  rD  r  s               €rF   r  zSapiens2ConvLayer.__init__ì  sö   ø€ õ 	‰Œ×ÒÑÔÐØ ð 	Ý!Ô1ØØ2?ÐQ�˜|¨Q™Ñ.Ð.À\Ø'ØØØØð ñ  ô  ˆDÔÐõ  "œyØØ2?ÐQ�˜|¨Q™Ñ.Ð.À\Ø'ØØØØð ñ  ô  ˆDÔð ?LÐ^�Rœ_¨\Ñ:Ô:Ð:ÕQSÔQ\ÑQ^ÔQ^ˆÔÝÔ% lÑ3Ô3ˆŒ	Ý˜ZÔ(ˆŒˆˆrE   rN   r_   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r¤  )rG  rC  rK  rL  ©r  rN   s     rF   rù  zSapiens2ConvLayer.forward  sP   € Ø×(Ò(¨Ñ7Ô7ˆØ×*Ò*¨=Ñ9Ô9ˆØŸ	š	 -Ñ0Ô0ˆØŸš MÑ2Ô2ˆØÐrE   )	ru   ru   r   ru   rÙ  TFFr&   )rA   rB   rC   rª  rS   r©  r¨  r  rP   rF  rù  r¬  r­  s   @rF   r<  r<  ë  s  ø€ € € € € ð
 ./ØØ/0ØØ ØØ&+Ø#Øð%)ð %)àð%)ð ð%)ð ˜5  c œ?Ñ*ð	%)ð
 ð%)ð �u˜S #˜X”Ñ&¨Ñ,ð%)ð ð%)ð ð%)ð ð%)ð  $ð%)ð ð%)ð ð%)ð %)ð %)ð %)ð %)ð %)ðN U¤\ð °e´lð ð ð ð ð ð ð ð rE   r<  c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSapiens2Headrñ  c                 ó>  •‡— t          ¦   «                              ¦   «          ‰j        j        rt	          ‰j        ‰j        dd¬¦  «        nt          j        ¦   «         | _        ‰j        g‰j        j	        d d…         z   }t          j
        ˆfd„t          |‰j        j	        ‰j        j        ¦  «        D ¦   «         ¦  «        | _        ‰j        j	        d         g‰j        j        d d…         z   }t          j
        ˆfd„t          |‰j        j        ‰j        j        ¦  «        D ¦   «         ¦  «        | _        ‰j        j        r‰j        j        d         n$‰j        j	        r‰j        j	        d         n‰j        }t          j        |‰j        d¬¦  «        | _        d S )Nr   ru   ©r©   r^   ra   c              3   ó  •K  — | ]z\  }}}t          |||‰j        j        rd nd‰j        j        r|d z
  dz  nd t          ‰j        j        ¦  «        t          ‰j        j        ¦  «        ‰j        j         ¬¦  «        V — Œ{dS )ru   r&   )r©   r?  r^   r  rC  rB  N)r<  r²  r·  r¨  ©rÖ   Úin_chÚout_chr©   rñ  s       €rF   rn  z(Sapiens2Head.__init__.<locals>.<genexpr>$  s´   øè è € ð -
ð -
ñ +��v˜{õ ØØØ'Ø"Ô.Ô@ÐG�q�qÀaØ28Ô2DÔ2VÐ]˜ q™¨QÑ.Ð.Ð\]Ý˜&Ô,Ô>Ñ?Ô?Ý" 6Ô#5Ô#GÑHÔHØ*0Ô*<Ô*NÐ&Nð	ñ 	ô 	ð-
ð -
ð -
ð -
ð -
ð -
rE   c              3   ón   •K  — | ]/\  }}}t          |||‰j        j        r|d z
  dz  nd¬¦  «        V — Œ0dS )ru   r&   r   rR  N)r<  r²  r·  rT  s       €rF   rn  z(Sapiens2Head.__init__.<locals>.<genexpr>6  st   øè è € ð 
)
ð 
)
ñ +��v˜{õ ØØØ'Ø28Ô2DÔ2VÐ]˜ q™¨QÑ.Ð.Ð\]ð	ñ ô ð
)
ð 
)
ð 
)
ð 
)
ð 
)
ð 
)
rE   )r©   )r   r  r²  r·  r<  rÑ  r   r  Ú
input_convr³  Ú
ModuleListr  r´  Úupsample_layersr¸  r¹  Úconv_layersrH  Ú
num_labelsÚ	predictor)r  rñ  Úupsample_in_channelsÚconv_in_channelsÚpredictor_inr  s    `   €rF   r  zSapiens2Head.__init__  sÌ  øø€ Ý‰Œ×ÒÑÔÐð Ô!Ô3ðÕ˜fÔ0°&Ô2DÐRSÐ]^Ð_Ñ_Ô_Ð_å”‘”ð 	Œð
 !'Ô 2Ð3°fÔ6HÔ6^Ð_bÐ`bÐ_bÔ6cÑcÐÝ!œ}ð -
ð -
ð -
ð -
õ /2Ø$ØÔ"Ô8ØÔ"Ô8ñ/ô /ð-
ñ -
ô -
ñ  
ô  
ˆÔð" #Ô.ÔDÀRÔHÐIÈFÔL^ÔLpÐqtÐrtÐqtÔLuÑuÐÝœ=ð 
)
ð 
)
ð 
)
ð 
)
õ /2Ø  &Ô"4Ô"FÈÔHZÔHlñ/ô /ð
)
ñ 
)
ô 
)
ñ 

ô 

ˆÔð Ô!Ô3ð$ˆFÔÔ0°Ô4Ð4ð Ô!Ô7ð$�Ô#Ô9¸"Ô=Ð=àÔ#ð 	õ œ <°Ô1BÐPQÐRÑRÔRˆŒˆˆrE   rN   r_   c                 óª   — |                       |¦  «        }| j        D ]} ||¦  «        }Œ| j        D ]} ||¦  «        }Œ|                      |¦  «        S r¤  )rX  rZ  r[  r]  ©r  rN   Úlayers      rF   rù  zSapiens2Head.forwardJ  sk   € ØŸš¨Ñ6Ô6ˆØÔ)ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÔ%ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØ�~Š~˜mÑ,Ô,Ð,rE   rú  r­  s   @rF   rP  rP    sr   ø€ € € € € ð,S˜~ð ,Sð ,Sð ,Sð ,Sð ,Sð ,Sð\- U¤\ð -°e´lð -ð -ð -ð -ð -ð -ð -ð -rE   rP  c                   ó0   — e Zd Zdededej        ddfd„ZdS )ÚSapiens2PointmapFinalLayerBlockÚin_dimÚout_dimrA  r_   Nc                 ó    — t           j                             | ¦  «         t          j        t          j        ||¦  «        |g¦  «        | _        d S r¤  )r   ÚModuler  rY  r  Úlayers)r  rf  rg  rA  s       rF   r  z(Sapiens2PointmapFinalLayerBlock.__init__T  s>   € Ý
Œ	×Ò˜4Ñ Ô Ð Ý”m¥R¤Y¨v°wÑ%?Ô%?ÀÐ$LÑMÔMˆŒˆˆrE   )rA   rB   rC   rª  r   ri  r  rD   rE   rF   re  re  S  sP   € € € € € ðN˜sð N¨Sð N¸b¼ið NÈDð Nð Nð Nð Nð Nð NrE   re  c            	       óf   ‡ — e Zd Zddedeeef         dedefˆ fd„Zdej        d	ej        fd
„Z	ˆ xZ
S )ÚSapiens2PointmapFinalLayerru   rÙ  rf  Úhidden_sizesrg  rA  c                 ód  •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        t          ||d         t          |         ¬¦  «        | _        t          |d         |d         t          |         ¬¦  «        | _        t          j	        |d         |¦  «        | _
        d S )Nr   )rf  rg  rA  ru   )r   r  r   ÚFlattenrß   re  r   Úblock1Úblock2r  Úproj)r  rf  rm  rg  rA  r  s        €rF   r  z#Sapiens2PointmapFinalLayer.__init__Z  s•   ø€ Ý‰Œ×ÒÑÔÐÝ”z‘|”|ˆŒÝ5Ø <°¤?½vÀjÔ?Qð
ñ 
ô 
ˆŒõ 6Ø ”?¨L¸¬OÍÈzÔHZð
ñ 
ô 
ˆŒõ ”I˜l¨1œo¨wÑ7Ô7ˆŒ	ˆ	ˆ	rE   rN   r_   c                 óª   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        S r¤  )rß   rp  rq  rr  rN  s     rF   rù  z"Sapiens2PointmapFinalLayer.forwarde  sG   € ØŸš ]Ñ3Ô3ˆØŸš MÑ2Ô2ˆØŸš MÑ2Ô2ˆØ�yŠy˜Ñ'Ô'Ð'rE   )ru   rÙ  )rA   rB   rC   rª  rS   r©  r  rP   rF  rù  r¬  r­  s   @rF   rl  rl  Y  s�   ø€ € € € € ð	8ð 	8˜sð 	8°%¸¸S¸´/ð 	8ÈCð 	8Ðadð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð( U¤\ð (°e´lð (ð (ð (ð (ð (ð (ð (ð (rE   rl  c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSapiens2PointmapScaleHeadrñ  c                 óÎ  •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        |j        g|j        j        d d…         z   }t          ||j        j        |j        j	        ¦  «        D ]8\  }}}| j         
                    t          |||d|dz
  dz  ¬¦  «        ¦  «         Œ9t          |j        j        |j        j        |j        ¬¦  «        | _        d S )Nra   r&   ru   )r©   r?  r^   )rA  )r   r  r   rY  r[  rÑ  r²  r»  r  r¼  rI  r<  rl  r¾  r¿  rÚ  r]  )r  rñ  Úscale_in_channelsrU  rV  r©   r  s         €rF   r  z"Sapiens2PointmapScaleHead.__init__m  sù   ø€ Ý‰Œ×ÒÑÔÐÝœ=™?œ?ˆÔØ#Ô/Ð0°6Ô3EÔ3]Ð^aÐ_aÐ^aÔ3bÑbÐÝ*-ØØÔÔ6ØÔÔ6ñ+
ô +
ð 	ð 	Ñ&ˆE�6˜;ð
 Ô×#Ò#Ý! %¨¸[ÐQRÐ]hÐklÑ]lÐqrÑ\rÐsÑsÔsñô ð ð õ 4ØÔÔ5ØÔÔ7ØÔ(ð
ñ 
ô 
ˆŒˆˆrE   rN   r_   c                 óV   — | j         D ]} ||¦  «        }Œ|                      |¦  «        S r¤  )r[  r]  rb  s      rF   rù  z!Sapiens2PointmapScaleHead.forward  s7   € ØÔ%ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØ�~Š~˜mÑ,Ô,Ð,rE   rú  r­  s   @rF   ru  ru  l  sj   ø€ € € € € ð
˜~ð 
ð 
ð 
ð 
ð 
ð 
ð$- U¤\ð -°e´lð -ð -ð -ð -ð -ð -ð -ð -rE   ru  c                   óP   — e Zd ZdZdgZdgZ ej        ¦   «         dd„¦   «         ZdS )ÚSapiens2PreTrainedModelÚmodelÚperiodsrô  r_   Nc                 óö  — t          j        | |¦  «         t          |t          j        t          j        f¦  «        r(t          j        |j        d| j	        j
        ¬¦  «         d S t          |t          j        ¦  «        rt          j        |j        dd¬¦  «         d S t          |t          ¦  «        r…t          j        |j        d| j	        j
        ¬¦  «         |j	        j        dk    r&t          j        |j        d| j	        j
        ¬¦  «         |j	        j        rt          j        |j        ¦  «         d S d S t          |t(          ¦  «        r&t          j        |j        | j	        j        ¦  «         d S t          |t0          ¦  «        rQd|j        t5          j        ddd|j        z  t4          j        ¬	¦  «        z  z  }t          j        |j        |¦  «         d S t          |t@          tB          f¦  «        r„| "                    ¦   «         D ]q}t          |t          j        ¦  «        rt          j        |j        dd¬¦  «         Œ9t          |t          j        ¦  «        rt          j        |j        d
d¬¦  «         Œpd S d S )Nr§   )ÚmeanÚstdÚfan_outÚrelu)r�   Únonlinearityr   ru   rµ  )rx   Úfan_inÚlinear)#r   Ú_init_weightsrE  r   r  rH  ÚinitÚtrunc_normal_Úweightrñ  Úinitializer_rangerF  Úkaiming_normal_rð  Ú	cls_tokenrÞ  Úregister_tokensr×  Úzeros_rô  r2  Ú	constant_Úlambda1Úlayerscale_valuerü  ÚbaserP   r‡   r  rˆ   Úcopy_Úinv_freqrP  ru  Úmodules)r  Úmoduler“  Úhead_modules       rF   r…  z%Sapiens2PreTrainedModel._init_weights�  sb  € åÔ% d¨FÑ3Ô3Ð3Ý�f�rœy­"¬)Ð4Ñ5Ô5ð 	cÝÔ˜vœ}°3¸D¼KÔ<YÐZÑZÔZÐZÐZÐZÝ˜¥Ô 2Ñ3Ô3ð 	cÝÔ  ¤°YÈVÐTÑTÔTÐTÐTÐTÝ˜Õ 2Ñ3Ô3ð 	cÝÔ˜vÔ/°c¸t¼{Ô?\Ð]Ñ]Ô]Ð]ØŒ}Ô0°1Ò4Ð4ÝÔ" 6Ô#9ÀÈÌÔIfÐgÑgÔgÐgØŒ}Ô+ð /Ý”˜FÔ-Ñ.Ô.Ð.Ð.Ð.ð/ð /å˜Õ 2Ñ3Ô3ð 
	cÝŒN˜6œ>¨4¬;Ô+GÑHÔHÐHÐHÐHÝ˜Õ =Ñ>Ô>ð 	cØ˜6œ;­%¬,°q¸!¸QÀÄÑ=PÕX]ÔXeÐ*fÑ*fÔ*fÑfÑfˆHÝŒJ�v”¨Ñ1Ô1Ð1Ð1Ð1Ý˜¥Õ/HÐ IÑJÔJð 	cØ%Ÿ~š~Ñ/Ô/ð cð c�Ý˜k­2¬9Ñ5Ô5ð cÝÔ(¨Ô);À)ÐZ`ÐaÑaÔaÐaÐaÝ ­R¬YÑ7Ô7ð cÝÔ(¨Ô);À(ÐYaÐbÑbÔbÐbøð	cð 	cðcð crE   )r_   N)	rA   rB   rC   Úbase_model_prefixÚ"_keys_to_ignore_on_load_unexpectedÚ_keys_to_ignore_on_load_missingrP   Úno_gradr…  rD   rE   rF   rz  rz  …  sX   € € € € € ØÐð +5¨Ð&à'4 oÐ#à€U„]�_„_ðcð cð cñ „_ðcð cð crE   rz  c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚSapiens2Encoderrñ  c                 óº   •‡— t          ¦   «                              ‰¦  «         t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS )r6  )r4  )rÖ   r	  rñ  s     €rF   r7  z,Sapiens2Encoder.__init__.<locals>.<listcomp>«  s&   ø€ ÐiÐiÐi¸I�]˜6¨YÐ7Ñ7Ô7ÐiÐiÐirE   )r   r  r   rY  rH  rÓ  rc  rõ  s    `€rF   r  zSapiens2Encoder.__init__¨  sU   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”]ØiÐiÐiÐiÍÈvÔOgÑIhÔIhÐiÑiÔiñ
ô 
ˆŒ
ˆ
ˆ
rE   r  r­  s   @rF   rœ  rœ  §  sD   ø€ € € € € ð
˜~ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rE   rœ  c            	       ój   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dej        dz  dee         de	fˆ fd„Z
ˆ xZS )
ÚSapiens2Modelrñ  c                 óŠ   •— t          ¦   «                              |¦  «         t          |j        |j        ¬¦  «        | _        d S ©Nr  ©r   r  r  rÑ  rÛ  rK  rõ  s     €rF   r  zSapiens2Model.__init__°  ó9   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý# FÔ$6¸FÔ<OÐPÑPÔPˆŒ	ˆ	ˆ	rE   Nrö  r÷  rý   r_   c                 ó<   •—  t          ¦   «         j        |fd|i|¤ŽS )aØ  
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Only relevant for
            pre-training.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pretrain-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-pretrain-0.4b")

        >>> inputs = image_processor(images=image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> cls_token = outputs.pooler_output
        >>> cls_token.shape
        torch.Size([1, 1024])
        ```
        r÷  )r   rù  )r  rö  r÷  rý   r  s       €rF   rù  zSapiens2Model.forward´  s)   ø€ ð> �u‰wŒwŒ˜|ÐWÐW¸_ÐWÐPVÐWÐWÐWrE   r¤  )rA   rB   rC   rÏ  r  rP   rF  r    r"   r   rù  r¬  r­  s   @rF   r   r   ¯  s·   ø€ € € € € ðQ˜~ð Qð Qð Qð Qð Qð Qð 04ðXð Xà”lðXð œ¨Ñ,ðXð Ð+Ô,ð	Xð
 
$ðXð Xð Xð Xð Xð Xð Xð Xð Xð XrE   r   c                   óN   ‡ — e Zd Zdefˆ fd„Zdej        dee         de	fd„Z
ˆ xZS )ÚSapiens2Backbonerñ  c                 óŠ   •— t          ¦   «                              |¦  «         t          |j        |j        ¬¦  «        | _        d S r¢  r£  rõ  s     €rF   r  zSapiens2Backbone.__init__×  r¤  rE   rö  rý   r_   c                 ól  — |                      | j        j        j        j        ¦  «        }|                      |¦  «        }|                      |¦  «        }d|d<    | j        ||fi |¤Ž}|j        }|j        \  }}}	}
| j	        j
        }t          |t          ¦  «        r|n|d         }t          |t          ¦  «        r|n|d         }|	|z  }|
|z  }dt          | j	        dd¦  «        z   }t          | j	        dd¦  «        }g g }}t          t          | j        |¦  «        ¦  «        D ]Ö\  }\  }}| j	        j        r|                      |¦  «        }|| j        v r¤|r"|                     |dd…ddd…f         ¦  «         |dd…|d…dd…f         }| j	        j        rL|                     ||||j        d	         ¦  «                             dd
dd¦  «                             ¦   «         }n|}|                     |¦  «         Œ×t3          t5          |¦  «        |rt5          |¦  «        nd|j        |j        ¬¦  «        S )a2  
        Example:

        ```python
        >>> from transformers import AutoBackbone, AutoImageProcessor
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pretrain-0.4b")
        >>> model = AutoBackbone.from_pretrained("facebook/sapiens2-pretrain-0.4b")

        >>> inputs = image_processor(images=image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs, return_class_token=True)

        >>> outputs.feature_maps[0].shape
        torch.Size([1, 1024, 64, 48])
        >>> outputs.cls_tokens[0].shape
        torch.Size([1, 1024])
        ```
        TÚoutput_hidden_statesr   ru   rÞ  Úreturn_class_tokenFNra   r   r&   )Úfeature_mapsÚ
cls_tokensrN   rO   )rq  Ú
embeddingsÚpatch_embeddingsrˆ  rx   Úrope_embeddingsr{  rN   r„   rñ  rÃ  rE  rª  ÚgetattrÚ	enumerater  Ústage_namesrÜ  rK  Úout_featuresrI  Úreshape_hidden_statesr»   Úpermuter%  r?   rS   rO   )r  rö  rý   rN   r  rž   Ústage_hidden_statesr€  rÁ   rÅ  rÆ  rÃ  r  r  Únum_patches_heightÚnum_patches_widthÚ
num_prefixr«  r¬  r­  ÚidxÚ
stage_nameÚhidden_stateÚpatch_tokensÚfeature_maps                            rF   rù  zSapiens2Backbone.forwardÛ  sp  € ð6 $—’ t¤Ô'GÔ'NÔ'TÑUÔUˆØŸš¨Ñ5Ô5ˆØ"×2Ò2°<Ñ@Ô@Ðà)-ˆÐ%Ñ&Ø�”˜MÐ+>ÐIÐIÀ&ÐIÐIˆØ$Ô2Ðà3?Ô3EÑ0ˆ
�A�| [Ø”[Ô+ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ)¨\Ñ9ÐØ'¨<Ñ7Ðà� ¤Ð.CÀQÑGÔGÑGˆ
Ý$ T¤[Ð2FÈÑNÔNÐà#% r�jˆÝ/8½¸TÔ=MÐObÑ9cÔ9cÑ/dÔ/dð 	1ð 	1Ñ+ˆCÑ+�*˜lØŒ{Ô5ð 7Ø#Ÿyšy¨Ñ6Ô6�à˜TÔ.Ð.Ð.Ø%ð =Ø×%Ò% l°1°1°1°a¸¸¸°7Ô&;Ñ<Ô<Ð<Ø+¨A¨A¨A¨z¨{¨{¸A¸A¸AÐ,=Ô>�Ø”;Ô4ð /à$×,Ò,¨ZÐ9KÐM^Ð`lÔ`rÐsuÔ`vÑwÔwß š  A q¨!Ñ,Ô,ß#š™œð  �Kð #/�Kà×#Ò# KÑ0Ô0Ð0øå%Ý˜|Ñ,Ô,Ø,>ÐH•u˜ZÑ(Ô(Ð(ÀDØ Ô.ØÔ(ð	
ñ 
ô 
ð 	
rE   )rA   rB   rC   rÏ  r  rP   rF  r    r"   r?   rù  r¬  r­  s   @rF   r§  r§  Ö  sŽ   ø€ € € € € ðQ˜~ð Qð Qð Qð Qð Qð QðF
à”lðF
ð Ð+Ô,ðF
ð 
 ð	F
ð F
ð F
ð F
ð F
ð F
ð F
ð F
rE   r§  c                   ó†   ‡ — e Zd Zdefˆ fd„Zee	 d	dej        dej	        dz  de
e         defd„¦   «         ¦   «         Zˆ xZS )
ÚSapiens2ForSemanticSegmentationrñ  c                 óÚ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r¤  ©r   r  r\  r   r{  rP  Údecode_headÚ	post_initrõ  s     €rF   r  z(Sapiens2ForSemanticSegmentation.__init__&  óZ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ" 6Ñ*Ô*ˆŒ
Ý'¨Ñ/Ô/ˆÔØ�ŠÑÔÐÐÐrE   Nrö  rC  rý   r_   c                 óh  — |�| j         j        dk    rt          d¦  «        ‚ | j        |fi |¤Ž}|j        \  }}}}| j         j        }	t          |	t          ¦  «        r|	n|	d         }
t          |	t          ¦  «        r|	n|	d         }||
z  }||z  }|j        dd…d| j         j	        z   d…f         }| 
                    dd¦  «                             |d||¦  «        }|                      |¦  «        }d}|�"|                      ||| j         j        ¬¦  «        }t          |||j        |j        ¬¦  «        S )	aø  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth semantic segmentation maps for computing the loss.
            Indices should be in `[0, ..., config.num_labels - 1]`.
            If `config.num_labels > 1`, a classification loss is computed (Cross-Entropy).

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-seg-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-seg-0.4b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.logits.shape
        torch.Size([1, 29, 1024, 768])
        ```
        Nru   z/The number of labels should be greater than oner   r&   ra   )Úignore_index)rL   ÚlogitsrN   rO   )rñ  r\  r«   r{  r„   rÃ  rE  rª  Úlast_hidden_staterÞ  r!  r»   rÄ  Úloss_functionræ  r   rN   rO   )r  rö  rC  rý   rJ  r€  rÁ   rj   ri   rÃ  r  r  rÇ  rÈ  r¾  r¿  rÉ  rL   s                     rF   rù  z'Sapiens2ForSemanticSegmentation.forward-  sa  € ðB Ð $¤+Ô"8¸AÒ"=Ð"=ÝÐNÑOÔOÐOà�$”*˜\Ð4Ð4¨VÐ4Ð4ˆà'3Ô'9Ñ$ˆ
�A�v˜uØ”[Ô+ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ Ñ-ˆØ˜|Ñ+ˆàÔ0°°°°A¸¼Ô8WÑ4WÐ4YÐ4YÐ1YÔZˆØ"×,Ò,¨Q°Ñ2Ô2×:Ò:¸:ÀrÈ<ÐYdÑeÔeˆà×!Ò! +Ñ.Ô.ˆàˆØÐØ×%Ò% f¨fÀ4Ä;ÔCiÐ%ÑjÔjˆDå&ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rE   r¤  )rA   rB   rC   rÏ  r  r%   r#   rP   rQ   Ú
LongTensorr    r"   r   rù  r¬  r­  s   @rF   rÁ  rÁ  $  s°   ø€ € € € € ð˜~ð ð ð ð ð ð ð Øð +/ð9
ð 9
àÔ'ð9
ð Ô  4Ñ'ð9
ð Ð+Ô,ð	9
ð
 
!ð9
ð 9
ð 9
ñ „^ñ Ôð9
ð 9
ð 9
ð 9
ð 9
rE   rÁ  zfacebook/sapiens2-pose-0.4bz�
    The Sapiens2 model with a pose estimation head on top (a set of heatmap predictors on top of the hidden states output).
    )r®  r=   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
e         d	efd
„¦   «         ¦   «         Zˆ xZS )ÚSapiens2ForPoseEstimationrñ  c                 óÚ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r¤  rÃ  rõ  s     €rF   r  z"Sapiens2ForPoseEstimation.__init__r  rÆ  rE   Nrö  rç  rC  Úlabel_weightsrý   r_   c                 ó4  —  | j         |fi |¤Ž}|j        \  }}}	}
| j        j        }t	          |t
          ¦  «        r|n|d         }t	          |t
          ¦  «        r|n|d         }|	|z  }|
|z  }|j        dd…d| j        j        z   d…f         }|                     dd¦  «         	                    |d||¦  «        }|  
                    |¦  «        }|�t          ||¦  «        }d}|�t          j        |||¬¦  «        }t          |||j        |j        ¬¦  «        S )a   
        flip_pairs (`torch.Tensor` of shape `(num_pairs, 2)`, *optional*):
            Pairs of keypoints which are mirrored (for example, left ear -- right ear), used for
            test-time flip augmentation. When provided, the model assumes `pixel_values` contains
            horizontally-flipped images and calls `flip_back` on the output heatmaps to restore the
            original orientation.
        labels (`torch.FloatTensor` of shape `(batch_size, num_keypoints, height, width)`, *optional*):
            Heatmap ground truth for computing the loss.
        label_weights (`torch.FloatTensor` of shape `(batch_size, num_labels, 1, 1)` or `(batch_size, num_labels, height, width)`, *optional*):
            Visibility weights for each keypoint. Must be broadcastable to the shape of `labels`.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pose-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-pose-0.4b")

        >>> boxes = [[[270.8, 0.6, 294.1, 379.5]]]
        >>> inputs = image_processor(image, boxes=boxes, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.heatmaps.shape
        torch.Size([1, 308, 256, 192])
        ```
        r   ru   Nr&   ra   )rˆ  )rL   r£   rN   rO   )r{  r„   rñ  rÃ  rE  rª  rÊ  rÞ  r!  r»   rÄ  r<   rŒ   Úmse_lossrH   rN   rO   )r  rö  rç  rC  rÐ  rý   rJ  r€  rÁ   rj   ri   rÃ  r  r  rÇ  rÈ  r¾  r¿  r£   rL   s                       rF   rù  z!Sapiens2ForPoseEstimation.forwardy  sI  € ðR �$”*˜\Ð4Ð4¨VÐ4Ð4ˆà'3Ô'9Ñ$ˆ
�A�v˜uØ”[Ô+ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ Ñ-ˆØ˜|Ñ+ˆàÔ0°°°°A¸¼Ô8WÑ4WÐ4YÐ4YÐ1YÔZˆØ"×,Ò,¨Q°Ñ2Ô2×:Ò:¸:ÀrÈ<ÐYdÑeÔeˆà×#Ò# KÑ0Ô0ˆØÐ!Ý  ¨:Ñ6Ô6ˆHàˆØÐÝ”:˜h¨°}ÐEÑEÔEˆDå*ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rE   r¥  )rA   rB   rC   rÏ  r  r%   r#   rP   rQ   rF  r    r"   rH   rù  r¬  r­  s   @rF   rÎ  rÎ  k  sè   ø€ € € € € ð˜~ð ð ð ð ð ð ð Øð +/Ø+/Ø26ð@
ð @
àÔ'ð@
ð ”L 4Ñ'ð@
ð Ô! DÑ(ð	@
ð
 Ô(¨4Ñ/ð@
ð Ð+Ô,ð@
ð 
%ð@
ð @
ð @
ñ „^ñ Ôð@
ð @
ð @
ð @
ð @
rE   rÎ  zfacebook/sapiens2-normal-0.4bzƒ
    The Sapiens2 model with a normal estimation head on top (a PixelShuffle-based decoder that predicts surface normal maps).
    c                   ó†   ‡ — e Zd Zdefˆ fd„Zee	 d	dej        dej        dz  de	e
         defd„¦   «         ¦   «         Zˆ xZS )
ÚSapiens2ForNormalEstimationrñ  c                 óÚ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r¤  rÃ  rõ  s     €rF   r  z$Sapiens2ForNormalEstimation.__init__Å  rÆ  rE   Nrö  rC  rý   r_   c                 ó   —  | j         |fi |¤Ž}|j        \  }}}}| j        j        }	t	          |	t
          ¦  «        r|	n|	d         }
t	          |	t
          ¦  «        r|	n|	d         }||
z  }||z  }|j        dd…d| j        j        z   d…f         }|                     dd¦  «         	                    |d||¦  «        }|  
                    |¦  «        }d}|�t          d¦  «        ‚t          |||j        |j        ¬¦  «        S )ae  
        labels (`torch.FloatTensor` of shape `(batch_size, num_labels, height, width)`, *optional*):
            Ground-truth surface normal maps for computing the loss.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-normal-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-normal-0.4b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.normals.shape
        torch.Size([1, 3, 1024, 768])
        ```
        r   ru   Nr&   ra   úTraining is not yet supported)rL   rM   rN   rO   )r{  r„   rñ  rÃ  rE  rª  rÊ  rÞ  r!  r»   rÄ  ÚNotImplementedErrorrK   rN   rO   )r  rö  rC  rý   rJ  r€  rÁ   rj   ri   rÃ  r  r  rÇ  rÈ  r¾  r¿  rM   rL   s                     rF   rù  z#Sapiens2ForNormalEstimation.forwardÌ  s,  € ð> �$”*˜\Ð4Ð4¨VÐ4Ð4ˆà'3Ô'9Ñ$ˆ
�A�v˜uØ”[Ô+ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ Ñ-ˆØ˜|Ñ+ˆàÔ0°°°°A¸¼Ô8WÑ4WÐ4YÐ4YÐ1YÔZˆØ"×,Ò,¨Q°Ñ2Ô2×:Ò:¸:ÀrÈ<ÐYdÑeÔeˆà×"Ò" ;Ñ/Ô/ˆàˆØÐÝ%Ð&EÑFÔFÐFå,ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rE   r¤  )rA   rB   rC   rÏ  r  r%   r#   rP   rQ   r    r"   rK   rù  r¬  r­  s   @rF   rÔ  rÔ  ¾  s°   ø€ € € € € ð˜~ð ð ð ð ð ð ð Øð ,0ð4
ð 4
àÔ'ð4
ð Ô! DÑ(ð4
ð Ð+Ô,ð	4
ð
 
'ð4
ð 4
ð 4
ñ „^ñ Ôð4
ð 4
ð 4
ð 4
ð 4
rE   rÔ  zfacebook/sapiens2-pointmap-0.4bzÅ
    The Sapiens2 model with a pointmap head on top (a PixelShuffle-based decoder that predicts per-pixel 3D XYZ
    coordinates, plus an optional scale branch for focal-length normalization).
    c                   ó†   ‡ — e Zd Zdefˆ fd„Zee	 d	dej        dej        dz  de	e
         defd„¦   «         ¦   «         Zˆ xZS )
ÚSapiens2ForPointmapEstimationrñ  c                 ó6  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |j        �|j        j        �t          |¦  «        nt          j
        ¦   «         | _        |                      ¦   «          d S r¤  )r   r  r   r{  rP  rÄ  r²  r»  ru  r   r  Ú
scale_headrÅ  rõ  s     €rF   r  z&Sapiens2ForPointmapEstimation.__init__  sˆ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý" 6Ñ*Ô*ˆŒ
Ý'¨Ñ/Ô/ˆÔð Ô!Ð-°&Ô2DÔ2\Ð2hõ & fÑ-Ô-Ð-å”‘”ð 	Œð
 	�ŠÑÔÐÐÐrE   Nrö  rC  rý   r_   c                 ón  —  | j         |fi |¤Ž}|j        \  }}}}| j        j        }	t	          |	t
          ¦  «        r|	n|	d         }
t	          |	t
          ¦  «        r|	n|	d         }||
z  }||z  }|j        dd…d| j        j        z   d…f         }|                     dd¦  «         	                    |d||¦  «        }|  
                    |¦  «        }t	          | j        t          j        ¦  «        rdn|                      |¦  «        }d}|�t          d¦  «        ‚t          ||||j        |j        ¬¦  «        S )aW  
        labels (`torch.FloatTensor` of shape `(batch_size, 3, height, width)`, *optional*):
            Ground-truth pointmap for computing the loss.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pointmap-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-pointmap-0.4b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.pointmaps.shape
        torch.Size([1, 3, 1024, 768])
        ```
        r   ru   Nr&   ra   r×  )rL   rV   rW   rN   rO   )r{  r„   rñ  rÃ  rE  rª  rÊ  rÞ  r!  r»   rÄ  rÜ  r   r  rØ  rU   rN   rO   )r  rö  rC  rý   rJ  r€  rÁ   rj   ri   rÃ  r  r  rÇ  rÈ  r¾  r¿  rV   rW   rL   s                      rF   rù  z%Sapiens2ForPointmapEstimation.forward  sX  € ð> �$”*˜\Ð4Ð4¨VÐ4Ð4ˆà'3Ô'9Ñ$ˆ
�A�v˜uØ”[Ô+ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ Ñ-ˆØ˜|Ñ+ˆàÔ0°°°°A¸¼Ô8WÑ4WÐ4YÐ4YÐ1YÔZˆØ"×,Ò,¨Q°Ñ2Ô2×:Ò:¸:ÀrÈ<ÐYdÑeÔeˆà×$Ò$ [Ñ1Ô1ˆ	Ý# D¤OµR´[ÑAÔAÐc��ÀtÇÂÐWbÑGcÔGcˆàˆØÐÝ%Ð&EÑFÔFÐFå.ØØØØ!Ô/ØÔ)ð
ñ 
ô 
ð 	
rE   r¤  )rA   rB   rC   rÏ  r  r%   r#   rP   rQ   r    r"   rU   rù  r¬  r­  s   @rF   rÚ  rÚ    s°   ø€ € € € € ð	˜~ð 	ð 	ð 	ð 	ð 	ð 	ð Øð ,0ð6
ð 6
àÔ'ð6
ð Ô! DÑ(ð6
ð Ð+Ô,ð	6
ð
 
)ð6
ð 6
ð 6
ñ „^ñ Ôð6
ð 6
ð 6
ð 6
ð 6
rE   rÚ  zfacebook/sapiens2-matting-1bzœ
    The Sapiens2 model with a matting head on top (a PixelShuffle-based decoder that predicts a
    pre-multiplied RGB foreground and an alpha matte).
    c                   ó†   ‡ — e Zd Zdefˆ fd„Zee	 d	dej        dej        dz  de	e
         defd„¦   «         ¦   «         Zˆ xZS )
ÚSapiens2ForImageMattingrñ  c                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r¤  )r   r  r   r{  rP  rÄ  rÅ  rõ  s     €rF   r  z Sapiens2ForImageMatting.__init__[  sP   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý" 6Ñ*Ô*ˆŒ
Ý'¨Ñ/Ô/ˆÔØ�ŠÑÔÐÐÐrE   Nrö  rC  rý   r_   c                 ó^  —  | j         |fi |¤Ž}|j        \  }}}}| j        j        }	t	          |	t
          ¦  «        r|	n|	d         }
t	          |	t
          ¦  «        r|	n|	d         }||
z  }||z  }|j        dd…d| j        j        z   d…f         }|                     dd¦  «         	                    |d||¦  «        }|  
                    |¦  «                             ¦   «         }|dd…dd…f         }|dd…dd…f         }d}|�t          d¦  «        ‚t          ||||j        |j        ¬¦  «        S )	a¡  
        labels (`torch.FloatTensor` of shape `(batch_size, 4, height, width)`, *optional*):
            Ground-truth matting targets for computing the loss.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-matting-1b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-matting-1b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.alphas.shape
        torch.Size([1, 1, 1024, 768])
        >>> outputs.foregrounds.shape
        torch.Size([1, 3, 1024, 768])
        ```
        r   ru   Nr&   ra   r   r×  )rL   r}  rZ   rN   rO   )r{  r„   rñ  rÃ  rE  rª  rÊ  rÞ  r!  r»   rÄ  ÚsigmoidrØ  rY   rN   rO   )r  rö  rC  rý   rJ  r€  rÁ   rj   ri   rÃ  r  r  rÇ  rÈ  r¾  r¿  r„  rZ   r}  rL   s                       rF   rù  zSapiens2ForImageMatting.forwarda  sf  € ðB �$”*˜\Ð4Ð4¨VÐ4Ð4ˆà'3Ô'9Ñ$ˆ
�A�v˜uØ”[Ô+ˆ
Ý%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆÝ%/°
½CÑ%@Ô%@ÐS�z�zÀjÐQRÄmˆØ Ñ-ˆØ˜|Ñ+ˆàÔ0°°°°A¸¼Ô8WÑ4WÐ4YÐ4YÐ1YÔZˆØ"×,Ò,¨Q°Ñ2Ô2×:Ò:¸:ÀrÈ<ÐYdÑeÔeˆà×"Ò" ;Ñ/Ô/×7Ò7Ñ9Ô9ˆØ˜a˜a˜a  ! ˜e”nˆØ˜˜˜˜A˜B˜B˜”ˆàˆØÐÝ%Ð&EÑFÔFÐFå)ØØØ#Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rE   r¤  )rA   rB   rC   rÏ  r  r%   r#   rP   rQ   r    r"   rY   rù  r¬  r­  s   @rF   rß  rß  S  s°   ø€ € € € € ð˜~ð ð ð ð ð ð ð Øð ,0ð9
ð 9
àÔ'ð9
ð Ô! DÑ(ð9
ð Ð+Ô,ð	9
ð
 
$ð9
ð 9
ð 9
ñ „^ñ Ôð9
ð 9
ð 9
ð 9
ð 9
rE   rß  )rÏ  r°  rÁ  rÎ  rÔ  rÚ  rß  r   rz  r§  rû   )r[   )r¢   )„Úcollections.abcr   r   Údataclassesr   Útypingr   rP   Útorch.nn.functionalr   r	   rŒ   Úhuggingface_hub.dataclassesr   Útorchvision.transforms.v2r®   Ú&transformers.image_processing_backendsr
   Ú2transformers.models.dinov3_vit.modeling_dinov3_vitr   Ú r   r†  Úactivationsr   Úconfiguration_utilsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr   r   r   r   r   r   r   r   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr    Úutilsr!   r"   r#   r$   Úutils.genericr%   Úbeit.image_processing_beitr'   r(   Ú#dinov3_vit.configuration_dinov3_vitr)   Údinov3_vit.modeling_dinov3_vitr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   Úgemma2.modeling_gemma2r4   Úllama.modeling_llamar5   Ú mask2former.modeling_mask2formerr6   Ú0pp_ocrv5_server_det.modeling_pp_ocrv5_server_detr7   Úsam3.processing_sam3r8   r9   Úvitmatte.modeling_vitmatter:   Úvitpose.modeling_vitposer;   r<   Ú
get_loggerrA   Úloggerr?   rH   rK   rU   rY   rF  rS   rª  r½   rr   r¡   r¸   rÉ   rõ   r÷   rû   r°  rÏ  rð  rü  r  r  r2  r4  r<  ri  rP  re  rl  ru  rz  rœ  r   r§  rÁ  rÎ  rÔ  rÚ  rß  Ú__all__rD   rE   rF   ú<module>r     s  ðð /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à EÐ EÐ EÐ EÐ EÐ EØ VÐ VÐ VÐ VÐ VÐ Và &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð aÐ `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ -Ð -Ð -Ð -Ð -Ð -Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø /Ð /Ð /Ð /Ð /Ð /Ø IÐ IÐ IÐ IÐ IÐ IØ aÐ aÐ aÐ aÐ aÐ aØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð ð	ð 	ð 	ð 	ð 	Ð4ñ 	ô 	ñ „ñô ð	ð €ððñ ô ð
 ð
ð 
ð 
ð 
ð 
Ð"8ñ 
ô 
ñ „ñô ð
ð €ððñ ô ð
 ð<ð <ð <ð <ð < Kñ <ô <ñ „ñô ð<ð* €ððñ ô ð
 ð<ð <ð <ð <ð < kñ <ô <ñ „ñô ð<ð0 €ððñ ô ð
 ð1ð 1ð 1ð 1ð 1Ð!3ñ 1ô 1ñ „ñô ð1ð( ð#ð #ØŒ<ð#à�s˜C�x”ð#ð ð#ð ˆ5Œ<˜œÐ%Ô&ð	#ð #ð #ð #ðT ð	<ð <ØŒ<ð<àŒ<ð<ð �s˜C�x”ð<ð ð	<ð
 „\ð<ð <ð <ð <ð~)ð )¨¬ð )¸sð )ÈEÌLð )ð )ð )ð )ð< u¤|ð ¸¸e¼lÈEÌLÐ>XÔ8Yð ð ð ð ð4 NPðE?ð E?ØŒ|ðE?Ø',¤|ðE?ØGJðE?à
„\ðE?ð E?ð E?ð E?ðP	ð 	ð 	ð 	ð 	Ð#;À5ð 	ñ 	ô 	ð 	ðgð gð gð gð gÐ/ñ gô gð gðT €Ð7Ð8Ñ8Ô8ØðSjð Sjð Sjð Sjð SjÐ)ñ Sjô Sjñ „ñ 9Ô8ðSjðl €Ð<Ð=Ñ=Ô=Øði(ð i(ð i(ð i(ð i(�_ñ i(ô i(ñ „ñ >Ô=ði(ðX>ð >ð >ð >ð >Ð,ñ >ô >ð >ð5ð 5ð 5ð 5ð 5Ð$Bñ 5ô 5ð 5ð	ð 	ð 	ð 	ð 	�lñ 	ô 	ð 	ð/)ð /)ð /)ð /)ð /)Ð*ñ /)ô /)ð /)ðd	ð 	ð 	ð 	ð 	Ð,ñ 	ô 	ð 	ð*ð *ð *ð *ð *�Nñ *ô *ð *ð-ð -ð -ð -ð -Ð:ñ -ô -ð -ð`5-ð 5-ð 5-ð 5-ð 5-�2”9ñ 5-ô 5-ð 5-ðpNð Nð Nð Nð NÐ&@ñ Nô Nð Nð(ð (ð (ð (ð ( ¤ñ (ô (ð (ð&-ð -ð -ð -ð - ¤	ñ -ô -ð -ð2cð cð cð cð cÐ6ñ cô cð cðD
ð 
ð 
ð 
ð 
Ð&ñ 
ô 
ð 
ð$Xð $Xð $Xð $Xð $X�Nñ $Xô $Xð $XðNK
ð K
ð K
ð K
ð K
Ð(ñ K
ô K
ð K
ð\ €Ð7Ð8Ñ8Ô8ðC
ð C
ð C
ð C
ð C
Ð&=ñ C
ô C
ñ 9Ô8ðC
ðL €Ø,ððñ ô ðJ
ð J
ð J
ð J
ð J
Ð 7ñ J
ô J
ñô ðJ
ðZ €Ø.ððñ ô ð>
ð >
ð >
ð >
ð >
Ð"9ñ >
ô >
ñô ð>
ðB €Ø0ððñ ô ðD
ð D
ð D
ð D
ð D
Ð$;ñ D
ô D
ñô ðD
ðN €Ø-ððñ ô ðB
ð B
ð B
ð B
ð B
Ð5ñ B
ô B
ñô ðB
ðJð ð €€€rE   