Ë
    [²j÷…  ã                   ó‚  — d dl mZ d dlZd dlmc mZ d dlZd dlmZ d dlm	Z
mZ ddlmZ dej                  dej                  d	eej                     d
eej                     deej                  ej                  f   f
d„Zdej                  d	eej                     deej                     fd„Zd„ Zd„ Zd„ Zd„ Zej0                  j2                  d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zej0                  j@                  d„ «       Z!d„ Z"d„ Z#d„ Z$ej0                  j2                  d„ «       Z%d!d„Z& G d„ d ejN                  «      Z(y)"é    )ÚOptionalN)Únn)ÚboxesÚ	roi_aligné   )Ú_utilsÚclass_logitsÚbox_regressionÚlabelsÚregression_targetsÚreturnc                 ó¢  — t        j                  |d¬«      }t        j                  |d¬«      }t        j                  | |«      }t        j                  |dkD  «      d   }||   }| j
                  \  }}|j                  ||j                  d«      dz  d«      }t        j                  |||f   ||   dd¬«      }	|	|j                  «       z  }	||	fS )a  
    Computes the loss for Faster R-CNN.

    Args:
        class_logits (Tensor)
        box_regression (Tensor)
        labels (list[BoxList])
        regression_targets (Tensor)

    Returns:
        classification_loss (Tensor)
        box_loss (Tensor)
    r   ©Údiméÿÿÿÿé   gÇqÇq¼?Úsum)ÚbetaÚ	reduction)
ÚtorchÚcatÚFÚcross_entropyÚwhereÚshapeÚreshapeÚsizeÚsmooth_l1_lossÚnumel)
r	   r
   r   r   Úclassification_lossÚsampled_pos_inds_subsetÚ
labels_posÚNÚnum_classesÚbox_losss
             úe/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/models/detection/roi_heads.pyÚfastrcnn_lossr'      sÙ   € ô( �Y‰Y�v 1Ô%€FÜŸ™Ð#5¸1Ô=ÐäŸ/™/¨,¸Ó?Ðô
 $Ÿk™k¨&°1©*Ó5°aÑ8ÐØÐ/Ñ0€JØ!×'Ñ'�N€A€{Ø#×+Ñ+¨A¨~×/BÑ/BÀ2Ó/FÈ!Ñ/KÈQÓO€Nä×ÑØÐ.°
Ð:Ñ;ØÐ2Ñ3ØØô	€Hð ˜&Ÿ,™,›.Ñ(€Hà Ð(Ð(ó    Úxc                 ó4  — | j                  «       }| j                  d   }|D �cg c]  }|j                  d   ‘Œ }}t        j                  |«      }t        j                  ||j
                  ¬«      }|||f   dd…df   }|j                  |d¬«      }|S c c}w )a  
    From the results of the CNN, post process the masks
    by taking the mask corresponding to the class with max
    probability (which are of fixed size and directly output
    by the CNN) and return the masks in the mask field of the BoxList.

    Args:
        x (Tensor): the mask logits
        labels (list[BoxList]): bounding boxes that are used as
            reference, one for each image

    Returns:
        results (list[BoxList]): one BoxList for each image, containing
            the extra field mask
    r   ©ÚdeviceNr   )Úsigmoidr   r   r   Úaranger,   Úsplit)r)   r   Ú	mask_probÚ	num_masksÚlabelÚboxes_per_imageÚindexs          r&   Úmaskrcnn_inferencer5   8   s�   € ð  —	‘	“€Ið —‘˜‘
€IØ39Ö:¨%�u—{‘{ 1“~Ð:€OÐ:Ü�Y‰Y�vÓ€FÜ�L‰L˜¨6¯=©=Ô9€EØ˜% ˜-Ñ(ª¨D¨Ñ1€IØ—‘ °Q�Ó7€IàÐùò ;s   ¤Bc                 óÂ   — |j                  |«      }t        j                  |dd…df   |gd¬«      }| dd…df   j                  |«      } t        | |||fd«      dd…df   S )a%  
    Given segmentation masks and the bounding boxes corresponding
    to the location of the masks in the image, this function
    crops and resizes the masks in the position defined by the
    boxes. This prepares the masks for them to be fed to the
    loss computation as the targets.
    Nr   r   g      ð?r   )Útor   r   r   )Úgt_masksr   Úmatched_idxsÚMÚroiss        r&   Úproject_masks_on_boxesr<   U   sg   € ð  —?‘? 5Ó)€LÜ�9‰9�l¢1 d 7Ñ+¨UÐ3¸Ô;€DØš˜4˜Ñ ×#Ñ# DÓ)€HÜ�X˜t a¨ V¨SÓ1²!°Q°$Ñ7Ð7r(   c                 ó  — | j                   d   }t        ||«      D ��cg c]
  \  }}||   ‘Œ }}}t        |||«      D �	�
�cg c]  \  }	}
}t        |	|
||«      ‘Œ }}
}	}t        j                  |d¬«      }t        j                  |d¬«      }|j                  «       dk(  r| j                  «       dz  S t        j                  | t        j                  |j                   d   |j                  ¬«      |f   |«      }|S c c}}w c c}}
}	w )z¹
    Args:
        proposals (list[BoxList])
        mask_logits (Tensor)
        targets (list[BoxList])

    Return:
        mask_loss (Tensor): scalar tensor containing the loss
    r   r   r   r+   )r   Úzipr<   r   r   r   r   r   Ú binary_cross_entropy_with_logitsr.   r,   )Úmask_logitsÚ	proposalsr8   Ú	gt_labelsÚmask_matched_idxsÚdiscretization_sizeÚgt_labelÚidxsr   ÚmÚpÚiÚmask_targetsÚ	mask_losss                 r&   Úmaskrcnn_lossrL   d   s  € ð &×+Ñ+¨BÑ/ÐÜ36°yÐBSÓ3T×U¡ ¨4ˆh�t‹nÐU€FÑUäLOÐPXÐZcÐevÓLw÷ð ÙAHÀÀAÀqÔ˜q ! QÐ(;Õ<ð€Lò ô �Y‰Y�v 1Ô%€FÜ—9‘9˜\¨qÔ1€Lð ×ÑÓ˜qÒ Ø�‰Ó  1Ñ$Ð$ä×2Ñ2Ø”E—L‘L §¡¨a¡¸¿¹ÔGÈÐOÑPÐR^ó€Ið Ðùó! Vùôs   ŸC<ÁDc                 ód  — |d d …df   }|d d …df   }||d d …df   |d d …df   z
  z  }||d d …df   |d d …df   z
  z  }|d d …d f   }|d d …d f   }|d d …d f   }|d d …d f   }| d   }| d   }||d d …df   d d …d f   k(  }	||d d …df   d d …d f   k(  }
||z
  |z  }|j                  «       j                  «       }||z
  |z  }|j                  «       j                  «       }|dz
  ||	<   |dz
  ||
<   |dk\  |dk\  z  ||k  z  ||k  z  }| d   dkD  }||z  j                  «       }||z  |z   }||z  }||fS )Nr   r   é   é   ).r   ).r   ).rN   )ÚfloorÚlong)Ú	keypointsr;   Úheatmap_sizeÚoffset_xÚoffset_yÚscale_xÚscale_yr)   ÚyÚx_boundary_indsÚy_boundary_indsÚ	valid_locÚvisÚvalidÚlin_indÚheatmapss                   r&   Úkeypoints_to_heatmapr`   „   s£  € à’A�q�D‰z€HØ’A�q�D‰z€HØ˜d¢1 a 4™j¨4²°1°©:Ñ5Ñ6€GØ˜d¢1 a 4™j¨4²°1°©:Ñ5Ñ6€Gàš˜4˜Ñ €HØš˜4˜Ñ €HØ’a˜�gÑ€GØ’a˜�gÑ€Gà�&Ñ€AØ�&Ñ€Aà˜4¢ 1 ™:¢a¨ gÑ.Ñ.€OØ˜4¢ 1 ™:¢a¨ gÑ.Ñ.€Oà	
ˆX‰˜Ñ €AØ	�‰‹	�‰Ó€AØ	
ˆX‰˜Ñ €AØ	�‰‹	�‰Ó€Aà%¨Ñ)€A€oÑØ%¨Ñ)€A€oÑà�a‘˜A ™FÑ# q¨<Ñ'7Ñ8¸AÀÑ<LÑM€IØ
�FÑ
˜aÑ
€CØ˜‰_×"Ñ"Ó$€Eà�,Ñ Ñ"€GØ˜‰€Hà�Uˆ?Ðr(   c                 óê  — t        j                  | j                  d«      t         j                  ¬«      }||z  }	||z  }
t	        j
                  |d d …d f   t        |«      t        |«      fdd¬«      d d …df   }t        j                  |j                  d«      t         j                  ¬«      }|j                  |d«      j                  d¬	«      }||z  }||z
  |z  }t        j                  d
t         j                  ¬«      |j                  t         j                  ¬«      z   |	j                  t         j                  ¬«      z  }t        j                  d
t         j                  ¬«      |j                  t         j                  ¬«      z   |
j                  t         j                  ¬«      z  }||j                  t         j                  ¬«      z   }||j                  t         j                  ¬«      z   }t        j                  |j                  t         j                  ¬«      }t        j                  |j                  t         j                  ¬«      |j                  t         j                  ¬«      |j                  t         j                  ¬«      gd«      }||z  |z   dz   }t        j                  |«      }|j                  t         j                  ¬«      |z  }|j!                  d|j                  t         j                  ¬«      «      j!                  d|j                  t         j                  ¬«      «      j#                  d«      j!                  d|j                  t         j                  ¬«      «      }||fS )Nr   ©ÚdtypeÚbicubicF©r   ÚmodeÚalign_cornersr   rN   r   r   ç      à?)r   Úscalar_tensorr   Úint64r   ÚinterpolateÚintr   ÚargmaxÚtensorÚfloat32r7   Úonesr   Ústackr.   Úindex_selectÚview)ÚmapsÚmaps_iÚroi_map_widthÚroi_map_heightÚwidths_iÚ	heights_iÚ
offset_x_iÚ
offset_y_iÚnum_keypointsÚwidth_correctionÚheight_correctionÚroi_mapÚwÚposÚx_intÚy_intr)   rX   Úxy_preds_i_0Úxy_preds_i_1Úxy_preds_i_2Ú
xy_preds_iÚbaseÚindÚend_scores_is                            r&   Ú_onnx_heatmaps_to_keypointsr‹   ¨   s§  € ô ×'Ñ'¨¯	©	°!«¼E¿K¹KÔH€Mà -Ñ/ÐØ! NÑ2Ðä�m‰mØŠq�$ˆw‰œs >Ó2´C¸Ó4FÐGÈiÐglôâˆ€dñ€Gô 	×Ñ˜GŸL™L¨›O´5·;±;Ô?€AØ
�/‰/˜-¨Ó
,×
3Ñ
3¸Ð
3Ó
:€Cà�!‰G€EØ�5‰[˜QÑ€Eä	�‰�c¤§¡Ô	/°%·(±(ÄÇÁ°(Ó2OÑ	OÐSc×SfÑSfÜ�m‰mð Tgó Tñ 	€Aô 
�‰�c¤§¡Ô	/°%·(±(ÄÇÁ°(Ó2OÑ	OÐSd×SgÑSgÜ�m‰mð Thó Tñ 	€Að �z—}‘}¬5¯=©=�}Ó9Ñ9€LØ�z—}‘}¬5¯=©=�}Ó9Ñ9€LÜ—:‘:˜l×0Ñ0¼¿¹ÔF€LÜ—‘à�O‰O¤%§-¡-ˆOÓ0Ø�O‰O¤%§-¡-ˆOÓ0Ø�O‰O¤%§-¡-ˆOÓ0ð	
ð
 	
ó€Jð ˜=Ñ(¨=Ñ8¸1Ñ<€DÜ
�,‰,�}Ó
%€CØ
�&‰&”u—{‘{ˆ&Ó
# dÑ
*€Cà×Ñ˜Q §¡¬u¯{©{ Ó ;Ó<ß	‰�a˜Ÿ™¬¯©˜Ó4Ó	5ß	‰ˆb‹ß	‰�a˜Ÿ™¤e§k¡k˜Ó2Ó	3ð	 ð �|Ð#Ð#r(   c	                 ó(  — t        j                  ddt        |«      ft         j                  | j                  ¬«      }	t        j                  dt        |«      ft         j                  | j                  ¬«      }
t        t        |j                  d«      «      «      D ]ò  }t        | | |   ||   ||   ||   ||   ||   ||   «      \  }}t        j                  |	j                  t         j                  ¬«      |j                  d«      j                  t         j                  ¬«      fd«      }	t        j                  |
j                  t         j                  ¬«      |j                  t         j                  ¬«      j                  d«      fd«      }
Œô |	|
fS )Nr   rO   ©rc   r,   rb   )r   Úzerosrl   ro   r,   Úranger   r‹   r   r7   Ú	unsqueeze)rt   r;   Úwidths_ceilÚheights_ceilÚwidthsÚheightsrT   rU   r|   Úxy_predsÚ
end_scoresrI   r‡   rŠ   s                 r&   Ú _onnx_heatmaps_to_keypoints_loopr—   Û   sO  € ô �{‰{˜A˜q¤# mÓ"4Ð5¼U¿]¹]ÐSW×S^ÑS^Ô_€HÜ—‘˜a¤ ]Ó!3Ð4¼E¿M¹MÐRV×R]ÑR]Ô^€Jä”3�t—y‘y “|Ó$Ó%ò 
ˆÜ#>Ø�$�q‘'˜; q™>¨<¸©?¸FÀ1¹IÀwÈqÁzÐS[Ð\]ÑS^Ð`hÐijÑ`kó$
Ñ ˆ
�Lô —9‘9˜hŸk™k´·±˜kÓ>À
×@TÑ@TÐUVÓ@W×@ZÑ@ZÔaf×anÑanÐ@ZÓ@oÐpÐrsÓtˆÜ—Y‘YØ�]‰]¤§¡ˆ]Ó/°·±ÄuÇ}Á}°Ó1U×1_Ñ1_Ð`aÓ1bÐcÐefó
‰
ð
ð �ZÐÐr(   c                 ó¼  — |dd…df   }|dd…df   }|dd…df   |dd…df   z
  }|dd…df   |dd…df   z
  }|j                  d¬«      }|j                  d¬«      }|j                  «       }|j                  «       }| j                  d   }t        j                  «       rNt        | |||||||t        j                  |t        j                  ¬«      «	      \  }	}
|	j                  ddd«      |
fS t        j                  t        |«      d|ft        j                  | j                  ¬«      }	t        j                  t        |«      |ft        j                  | j                  ¬«      }
t        t        |«      «      D �]L  }t        ||   j!                  «       «      }t        ||   j!                  «       «      }||   |z  }||   |z  }t#        j$                  | |   dd…df   ||fd	d
¬«      dd…df   }|j                  d   }|j'                  |d«      j)                  d¬«      }||z  }t        j*                  ||z
  |d¬«      }|j-                  «       dz   |z  }|j-                  «       dz   |z  }|||   z   |	|ddd…f<   |||   z   |	|ddd…f<   d|	|ddd…f<   |t        j.                  ||j                  ¬«      ||f   |
|dd…f<   �ŒO |	j                  ddd«      |
fS )aŠ  Extract predicted keypoint locations from heatmaps.

    Args:
        maps (Tensor[K, N, H, W]): The predicted heatmaps, where K is the number of RoIs,
            N is the number of keypoints, and H, W are the heatmap spatial dimensions.
        rois (Tensor[K, 4]): The RoI boxes in ``(x1, y1, x2, y2)`` format.

    Returns:
        tuple:
            - **xy_preds** (Tensor[K, N, 3]): The predicted keypoint locations, where the last
              dimension contains ``(x, y, v)`` with x, y being coordinates and v being visibility (always 1).
            - **scores** (Tensor[K, N]): The heatmap scores at the predicted keypoint locations.
    Nr   r   rN   rO   ©Úminrb   r�   rd   Fre   r   r   rP   )Úrounding_moderh   r+   )ÚclampÚceilr   ÚtorchvisionÚ_is_tracingr—   r   ri   rj   ÚpermuterŽ   Úlenro   r,   r�   rl   Úitemr   rk   r   rm   ÚdivÚfloatr.   )rt   r;   rT   rU   r“   r”   r‘   r’   r|   r•   r–   rI   rv   rw   r}   r~   r   r€   r�   r‚   rƒ   r)   rX   s                          r&   Úheatmaps_to_keypointsr¥   í   sä  € ð& ’A�q�D‰z€HØ’A�q�D‰z€Hà’!�Q�$‰Z˜$šq !˜t™*Ñ$€FØ’1�a�4‰j˜4¢ 1 ™:Ñ%€GØ�\‰\˜aˆ\Ó €FØ�m‰m ˆmÓ"€GØ—+‘+“-€KØ—<‘<“>€Là—J‘J˜q‘M€Mä×ÑÔ Ü?ØØØØØØØØÜ×Ñ ´U·[±[ÔAó
 
Ñˆ�*ð ×Ñ  1 aÓ(¨*Ð4Ð4ä�{‰{œC ›I q¨-Ð8ÄÇÁÐVZ×VaÑVaÔb€HÜ—‘œc $›i¨Ð7¼u¿}¹}ÐUY×U`ÑU`Ôa€JÜ”3�t“9Óó eˆÜ˜K¨™N×/Ñ/Ó1Ó2ˆÜ˜\¨!™_×1Ñ1Ó3Ó4ˆØ! !™9 }Ñ4ÐØ# A™J¨Ñ7ÐÜ—-‘-Ø�‰G’A�t�GÑ N°MÐ#BÈÐbgô
â
ˆQˆ$ñˆð �M‰M˜!ÑˆØ�o‰o˜m¨RÓ0×7Ñ7¸AÐ7Ó>ˆà�a‘ˆÜ—	‘	˜# ™+ q¸Ô@ˆð �[‰[‹]˜SÑ Ð$4Ñ4ˆØ�[‰[‹]˜SÑ Ð$5Ñ5ˆØ ¨¡™Oˆ��A’q�ÑØ ¨¡™Oˆ��A’q�ÑØˆ��A’q�ÑØ"¤5§<¡<°ÀgÇnÁnÔ#UÐW\Ð^cÐ#cÑdˆ
�1’a�4Óð+eð. ×Ñ˜A˜q !Ó$ jÐ0Ð0r(   c                 óÎ  — | j                   \  }}}}||k7  rt        d|› d|› �«      ‚|}g }	g }
t        |||«      D ][  \  }}}||   }t        |||«      \  }}|	j	                  |j                  d«      «       |
j	                  |j                  d«      «       Œ] t        j                  |	d¬«      }t        j                  |
d¬«      j                  t        j                  ¬«      }
t        j                  |
«      d   }
|j                  «       dk(  st        |
«      dk(  r| j                  «       dz  S | j                  ||z  ||z  «      } t        j                  | |
   ||
   «      }|S )Nz_keypoint_logits height and width (last two elements of shape) should be equal. Instead got H = z	 and W = r   r   r   rb   )r   Ú
ValueErrorr>   r`   Úappendrs   r   r   r7   Úuint8r   r   r¡   r   r   r   )Úkeypoint_logitsrA   Úgt_keypointsÚkeypoint_matched_idxsr#   ÚKÚHÚWrD   r_   r]   Úproposals_per_imageÚgt_kp_in_imageÚmidxÚkpÚheatmaps_per_imageÚvalid_per_imageÚkeypoint_targetsÚkeypoint_losss                      r&   Úkeypointrcnn_lossr¸   6  st  € à ×&Ñ&�J€A€qˆ!ˆQØˆA‚vÜØmÐnoÐmpÐpyÐz{Ðy|Ð}ó
ð 	
ð ÐØ€HØ€EÜ58¸ÀLÐRgÓ5hò /Ñ1Ð˜^¨TØ˜DÑ!ˆÜ.BÀ2ÐGZÐ\oÓ.pÑ+Ð˜OØ�‰Ð*×/Ñ/°Ó3Ô4Ø�‰�_×)Ñ)¨"Ó-Õ.ð	/ô —y‘y ¨qÔ1ÐÜ�I‰I�e Ô#×&Ñ&¬U¯[©[Ð&Ó9€EÜ�K‰K˜Ó˜qÑ!€Eð ×ÑÓ 1Ò$¬¨E«
°aªØ×"Ñ"Ó$ qÑ(Ð(à%×*Ñ*¨1¨q©5°!°a±%Ó8€Oä—O‘O O°EÑ$:Ð<LÈUÑ<SÓT€MØÐr(   c                 ó  — g }g }|D �cg c]  }|j                  d«      ‘Œ }}| j                  |d¬«      }t        ||«      D ]6  \  }}t        ||«      \  }	}
|j	                  |	«       |j	                  |
«       Œ8 ||fS c c}w )Nr   r   )r   r/   r>   r¥   r¨   )r)   r   Úkp_probsÚ	kp_scoresÚboxr3   Úx2ÚxxÚbbÚkp_probÚscoress              r&   Úkeypointrcnn_inferencerÂ   U  sŽ   € à€HØ€Ià.3Ö4 s�s—x‘x •{Ð4€OÐ4Ø	
�‰� aˆÓ	(€Bä�b˜%“.ò !‰ˆˆBÜ/°°BÓ7‰ˆ�Ø�‰˜Ô Ø×Ñ˜Õ ð!ð
 �YÐÐùò 5s   ‰A?c                 óž  — | d d …df   | d d …df   z
  dz  }| d d …df   | d d …df   z
  dz  }| d d …df   | d d …df   z   dz  }| d d …df   | d d …df   z   dz  }|j                  t        j                  ¬«      |z  }|j                  t        j                  ¬«      |z  }||z
  }||z
  }||z   }||z   }	t        j                  ||||	fd«      }
|
S )NrN   r   rh   rO   r   rb   )r7   r   ro   rq   )r   ÚscaleÚw_halfÚh_halfÚx_cÚy_cÚ
boxes_exp0Ú
boxes_exp1Ú
boxes_exp2Ú
boxes_exp3Ú	boxes_exps              r&   Ú_onnx_expand_boxesrÎ   e  só   € à’A�q�D‰k˜E¢! Q $™KÑ'¨3Ñ.€FØ’A�q�D‰k˜E¢! Q $™KÑ'¨3Ñ.€FØ’�A�‰;˜šq !˜t™Ñ$¨Ñ
+€CØ’�A�‰;˜šq !˜t™Ñ$¨Ñ
+€Cà�Y‰YœUŸ]™]ˆYÓ+¨eÑ3€FØ�Y‰YœUŸ]™]ˆYÓ+¨eÑ3€Fà�v‘€JØ�v‘€JØ�v‘€JØ�v‘€JÜ—‘˜Z¨°ZÀÐLÈaÓP€IØÐr(   c                 ó”  — t        j                  «       rt        | |«      S | d d …df   | d d …df   z
  dz  }| d d …df   | d d …df   z
  dz  }| d d …df   | d d …df   z   dz  }| d d …df   | d d …df   z   dz  }||z  }||z  }t        j                  | «      }||z
  |d d …df<   ||z   |d d …df<   ||z
  |d d …df<   ||z   |d d …df<   |S )NrN   r   rh   rO   r   )rž   rŸ   rÎ   r   Ú
zeros_like)r   rÄ   rÅ   rÆ   rÇ   rÈ   rÍ   s          r&   Úexpand_boxesrÑ   z  s  € ä×ÑÔ Ü! %¨Ó/Ð/Ø’A�q�D‰k˜E¢! Q $™KÑ'¨3Ñ.€FØ’A�q�D‰k˜E¢! Q $™KÑ'¨3Ñ.€FØ’�A�‰;˜šq !˜t™Ñ$¨Ñ
+€CØ’�A�‰;˜šq !˜t™Ñ$¨Ñ
+€Cà
ˆe�O€FØ
ˆe�O€Fä× Ñ  Ó'€IØ˜F‘l€IŠa�ˆd�OØ˜F‘l€IŠa�ˆd�OØ˜F‘l€IŠa�ˆd�OØ˜F‘l€IŠa�ˆd�OØÐr(   c                 óØ   — t        j                  | d|z  z   «      j                  t         j                  «      t        j                  | «      j                  t         j                  «      z  S )NrN   )r   rn   r7   ro   )r:   Úpaddings     r&   Úexpand_masks_tracing_scalerÔ   Ž  sI   € ô �<‰<˜˜A ™K™Ó(×+Ñ+¬E¯M©MÓ:¼U¿\¹\È!»_×=OÑ=OÔPU×P]ÑP]Ó=^Ñ^Ð^r(   c                 óÚ   — | j                   d   }t        j                  j                  «       rt	        ||«      }nt        |d|z  z   «      |z  }t        j                  | |fdz  «      }||fS )Nr   rN   r   )r   r   Ú_CÚ_get_tracing_staterÔ   r¤   r   Úpad)ÚmaskrÓ   r:   rÄ   Úpadded_masks        r&   Úexpand_masksrÛ   ”  sc   € à�
‰
�2‰€AÜ‡x�x×"Ñ"Ô$Ü*¨1¨gÓ6‰ä�a˜!˜g™+‘oÓ&¨Ñ*ˆÜ—%‘%˜˜w˜j¨1™nÓ-€KØ˜ÐÐr(   c                 ó6  — d}t        |d   |d   z
  |z   «      }t        |d   |d   z
  |z   «      }t        |d«      }t        |d«      }| j                  d«      } t        j                  | ||fdd¬«      } | d   d   } t        j                  ||f| j                  | j                  ¬	«      }t        |d   d«      }t        |d   dz   |«      }	t        |d   d«      }
t        |d   dz   |«      }| |
|d   z
  ||d   z
  …||d   z
  |	|d   z
  …f   ||
|…||	…f<   |S )
Nr   rN   r   rO   )r   r   r   r   ÚbilinearFre   r�   )
rl   ÚmaxÚexpandr   rk   r   rŽ   rc   r,   rš   )rÙ   r¼   Úim_hÚim_wÚ	TO_REMOVEr€   ÚhÚim_maskÚx_0Úx_1Úy_0Úy_1s               r&   Úpaste_mask_in_imageré   Ÿ  sD  € à€IÜˆC�‰F�S˜‘V‰O˜iÑ'Ó(€AÜˆC�‰F�S˜‘V‰O˜iÑ'Ó(€AÜˆAˆq‹	€AÜˆAˆq‹	€Að �;‰;�~Ó&€Dô �=‰=˜ Q¨ F°È5ÔQ€DØ�‰7�1‰:€Dä�k‰k˜4 ˜,¨d¯j©jÀÇÁÔM€GÜ
ˆc�!‰f�a‹.€CÜ
ˆc�!‰f�q‰j˜$Ó
€CÜ
ˆc�!‰f�a‹.€CÜ
ˆc�!‰f�q‰j˜$Ó
€Cà $ c¨C°©F¡l°s¸SÀ¹V±|Ð%DÀsÈSÐQRÉVÁ|ÐX[Ð^aÐbcÑ^dÑXdÐFeÐ%eÑ f€GˆC�ˆG�S˜�WÐÑØ€Nr(   c                 ó°  — t        j                  dt         j                  ¬«      }t        j                  dt         j                  ¬«      }|d   |d   z
  |z   }|d   |d   z
  |z   }t        j                  t        j
                  ||f«      «      }t        j                  t        j
                  ||f«      «      }| j                  dd| j                  d«      | j                  d«      f«      } t        j                  | t        |«      t        |«      fdd¬«      } | d   d   } t        j                  t        j
                  |d   j                  d«      |f«      «      }t        j                  t        j
                  |d   j                  d«      |z   |j                  d«      f«      «      }	t        j                  t        j
                  |d   j                  d«      |f«      «      }
t        j                  t        j
                  |d   j                  d«      |z   |j                  d«      f«      «      }| |
|d   z
  ||d   z
  …||d   z
  |	|d   z
  …f   }t        j                  |
|j                  d«      «      }t        j                  ||z
  |j                  d«      «      }t        j
                  ||j                  t         j                  ¬«      |fd«      d|…d d …f   }t        j                  |j                  d«      |«      }t        j                  |j                  d«      ||	z
  «      }t        j
                  |||fd«      d d …d |…f   }|S )	Nr   rb   rN   r   rO   rÝ   Fre   )r   rp   rj   rŽ   rÞ   r   rß   r   r   rk   rl   r�   rš   r7   ro   )rÙ   r¼   rà   rá   ÚoneÚzeror€   rã   rå   ræ   rç   rè   Úunpaded_im_maskÚzeros_y0Úzeros_y1Úconcat_0Úzeros_x0Úzeros_x1rä   s                      r&   Ú_onnx_paste_mask_in_imageró   ¸  sÁ  € Ü
�*‰*�QœeŸk™kÔ
*€CÜ�;‰;�q¤§¡Ô,€DàˆA‰��Q‘‰˜#Ñ€AØˆA‰��Q‘‰˜#Ñ€AÜ�	‰	”%—)‘)˜Q ˜HÓ%Ó&€AÜ�	‰	”%—)‘)˜Q ˜HÓ%Ó&€Að �;‰;˜˜1˜dŸi™i¨›l¨D¯I©I°a«LÐ9Ó:€Dô �=‰=˜¤S¨£V¬S°«VÐ$4¸:ÐUZÔ[€DØ�‰7�1‰:€Dä
�)‰)”E—I‘I˜s 1™v×/Ñ/°Ó2°DÐ9Ó:Ó
;€CÜ
�)‰)”E—I‘I˜s 1™v×/Ñ/°Ó2°SÑ8¸$¿.¹.ÈÓ:KÐLÓMÓ
N€CÜ
�)‰)”E—I‘I˜s 1™v×/Ñ/°Ó2°DÐ9Ó:Ó
;€CÜ
�)‰)”E—I‘I˜s 1™v×/Ñ/°Ó2°SÑ8¸$¿.¹.ÈÓ:KÐLÓMÓ
N€Cà˜C # a¡&™L¨S°3°q±6©\Ð:¸SÀ3ÀqÁ6¹\ÈcÐTWÐXYÑTZÉlÐ<[Ð[Ñ\€Oô
 �{‰{˜3 × 4Ñ 4°QÓ 7Ó8€HÜ�{‰{˜4 #™: ×';Ñ';¸AÓ'>Ó?€HÜ�y‰y˜( O×$6Ñ$6¼U¿]¹]Ð$6Ó$KÈXÐVÐXYÓZÐ[\Ð]aÐ[aÒcdÐ[dÑe€Hä�{‰{˜8Ÿ=™=¨Ó+¨SÓ1€HÜ�{‰{˜8Ÿ=™=¨Ó+¨T°C©ZÓ8€HÜ�i‰i˜ 8¨XÐ6¸Ó:º1¸e¸t¸e¸8ÑD€GØ€Nr(   c                 óð   — t        j                  d||«      }t        | j                  d«      «      D ]A  }t	        | |   d   ||   ||«      }|j                  d«      }t        j                  ||f«      }ŒC |S ©Nr   )r   rŽ   r�   r   ró   r�   r   )Úmasksr   rà   rá   Ú
res_appendrI   Úmask_ress          r&   Ú_onnx_paste_masks_in_image_looprù   Ü  sw   € ä—‘˜Q  dÓ+€JÜ�5—:‘:˜a“=Ó!ò 7ˆÜ,¨U°1©X°a©[¸%À¹(ÀDÈ$ÓOˆØ×%Ñ% aÓ(ˆÜ—Y‘Y 
¨HÐ5Ó6‰
ð7ð Ðr(   c           
      óN  — t        | |¬«      \  } }t        ||«      j                  t        j                  ¬«      }|\  }}t        j                  «       r[t        | |t        j                  |t        j                  ¬«      t        j                  |t        j                  ¬«      «      d d …d f   S t        | |«      D ��cg c]  \  }}t        |d   |||«      ‘Œ }	}}t        |	«      dkD  r t        j                  |	d¬«      d d …d f   }
|
S | j                  dd||f«      }
|
S c c}}w )N)rÓ   rb   r   r   r   )rÛ   rÑ   r7   r   rj   rž   rŸ   rù   ri   r>   ré   r¡   rq   Ú	new_empty)rö   r   Ú	img_shaperÓ   rÄ   rà   rá   rG   ÚbÚresÚrets              r&   Úpaste_masks_in_imager   æ  s  € ä ¨wÔ7�L€Eˆ5Ü˜ Ó&×)Ñ)´·±Ð)Ó<€EØ�J€Dˆ$ä×ÑÔ Ü.Ø�5œ%×-Ñ-¨d¼%¿+¹+ÔFÌ×H[ÑH[Ð\`Ôhm×hsÑhsÔHtó
â
ˆTˆ'ñð 	ô ADÀEÈ5Ó@Q×
R¹¸¸1Ô˜q ™t Q¨¨dÕ3Ð
R€CÑ
RÜ
ˆ3ƒx�!‚|Ü�k‰k˜# 1Ô%¢a¨ gÑ.ˆð €Jð �o‰o˜q ! T¨4Ð0Ó1ˆØ€Jùó Ss   Â>D!c                   ó‚  ‡ — e Zd Zej                  ej
                  ej                  dœZ	 	 	 	 	 	 dˆ fd„	Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Z	 ddeeej(                  f   deej(                     deeeef      deeeeej(                  f         deeeeej(                  f      eeej(                  f   f   f
d„Zˆ xZS )ÚRoIHeads)Ú	box_coderÚproposal_matcherÚfg_bg_samplerc                 ó   •— t         ‰| �  «        t        j                  | _        t        j                  ||d¬«      | _        t        j                  ||«      | _	        |€d}t        j                  |«      | _        || _        || _        || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        y )NF)Úallow_low_quality_matches)ç      $@r  ç      @r	  )ÚsuperÚ__init__Úbox_opsÚbox_iouÚbox_similarityÚ	det_utilsÚMatcherr  ÚBalancedPositiveNegativeSamplerr  ÚBoxCoderr  Úbox_roi_poolÚbox_headÚbox_predictorÚscore_threshÚ
nms_threshÚdetections_per_imgÚmask_roi_poolÚ	mask_headÚmask_predictorÚkeypoint_roi_poolÚkeypoint_headÚkeypoint_predictor)Úselfr  r  r  Úfg_iou_threshÚbg_iou_threshÚbatch_size_per_imageÚpositive_fractionÚbbox_reg_weightsr  r  r  r  r  r  r  r  r  Ú	__class__s                     €r&   r  zRoIHeads.__init__ÿ  sÇ   ø€ ô. 	‰ÑÔä%Ÿo™oˆÔä )× 1Ñ 1°-ÀÐjoÔ pˆÔä&×FÑFÐG[Ð]nÓoˆÔàÐ#Ø5ÐÜ"×+Ñ+Ð,<Ó=ˆŒà(ˆÔØ ˆŒØ*ˆÔà(ˆÔØ$ˆŒØ"4ˆÔà*ˆÔØ"ˆŒØ,ˆÔà!2ˆÔØ*ˆÔØ"4ˆÕr(   c                 óR   — | j                   €y| j                  €y| j                  €yy©NFT)r  r  r  ©r  s    r&   Úhas_maskzRoIHeads.has_mask2  s0   € Ø×ÑÐ%ØØ�>‰>Ð!ØØ×ÑÐ&ØØr(   c                 óR   — | j                   €y| j                  €y| j                  €yyr'  )r  r  r  r(  s    r&   Úhas_keypointzRoIHeads.has_keypoint;  s2   € Ø×!Ñ!Ð)ØØ×ÑÐ%ØØ×"Ñ"Ð*ØØr(   c                 óÊ  — g }g }t        |||«      D �]K  \  }}}|j                  «       dk(  ru|j                  }	t        j                  |j
                  d   ft        j                  |	¬«      }
t        j                  |j
                  d   ft        j                  |	¬«      }nšt        j                  ||«      }| j                  |«      }|j                  d¬«      }
||
   }|j                  t        j                  ¬«      }|| j                  j                  k(  }d||<   || j                  j                  k(  }d||<   |j                  |
«       |j                  |«       �ŒN ||fS )Nr   r�   r™   rb   r   )r>   r   r,   r   rŽ   r   rj   r  r  r  rœ   r7   ÚBELOW_LOW_THRESHOLDÚBETWEEN_THRESHOLDSr¨   )r  rA   Úgt_boxesrB   r9   r   Úproposals_in_imageÚgt_boxes_in_imageÚgt_labels_in_imager,   Úclamped_matched_idxs_in_imageÚlabels_in_imageÚmatch_quality_matrixÚmatched_idxs_in_imageÚbg_indsÚignore_indss                   r&   Úassign_targets_to_proposalsz$RoIHeads.assign_targets_to_proposalsD  si  € àˆØˆÜILÈYÐX`ÐbkÓIló 	+ÑEÐÐ 1Ð3Eà ×&Ñ&Ó(¨AÒ-à+×2Ñ2�Ü05·±Ø'×-Ñ-¨aÑ0Ð2¼%¿+¹+Èfô1Ð-ô #(§+¡+Ð/A×/GÑ/GÈÑ/JÐ.LÔTY×T_ÑT_ÐhnÔ"o‘ô (/§¡Ð7HÐJ\Ó']Ð$Ø(,×(=Ñ(=Ð>RÓ(SÐ%à0E×0KÑ0KÐPQÐ0KÓ0RÐ-à"4Ð5RÑ"S�Ø"1×"4Ñ"4¼5¿;¹;Ð"4Ó"G�ð 0°4×3HÑ3H×3\Ñ3\Ñ\�Ø+,� Ñ(ð 4°t×7LÑ7L×7_Ñ7_Ñ_�Ø/1� Ñ,à×ÑÐ =Ô>Ø�M‰M˜/Ö*ð9	+ð: ˜VÐ#Ð#r(   c                 óÊ   — | j                  |«      \  }}g }t        t        ||«      «      D ]4  \  }\  }}t        j                  ||z  «      d   }|j                  |«       Œ6 |S rõ   )r  Ú	enumerater>   r   r   r¨   )	r  r   Úsampled_pos_indsÚsampled_neg_indsÚsampled_indsÚimg_idxÚpos_inds_imgÚneg_inds_imgÚimg_sampled_indss	            r&   Ú	subsamplezRoIHeads.subsampleg  su   € à-1×-?Ñ-?ÀÓ-GÑ*ÐÐ*ØˆÜ5>¼sÐCSÐUeÓ?fÓ5gò 	2Ñ1ˆGÑ1�l LÜ$Ÿ{™{¨<¸,Ñ+FÓGÈÑJÐØ×ÑÐ 0Õ1ð	2ð Ðr(   c                 óx   — t        ||«      D ��cg c]  \  }}t        j                  ||f«      ‘Œ }}}|S c c}}w ©N)r>   r   r   )r  rA   r/  ÚproposalÚgt_boxs        r&   Úadd_gt_proposalszRoIHeads.add_gt_proposalsp  s<   € äKNÈyÐZbÓKc×dÑ7G°xÀ”U—Y‘Y ¨&Ð1Õ2Ðdˆ	ÑdàÐùó es   �!6c                 óB  — |€t        d«      ‚t        |D �cg c]  }d|v ‘Œ c}«      st        d«      ‚t        |D �cg c]  }d|v ‘Œ c}«      st        d«      ‚| j                  «       r't        |D �cg c]  }d|v ‘Œ c}«      st        d«      ‚y y c c}w c c}w c c}w )Nútargets should not be Noner   z0Every element of targets should have a boxes keyr   z1Every element of targets should have a labels keyrö   z0Every element of targets should have a masks key)r§   Úallr)  )r  ÚtargetsÚts      r&   Úcheck_targetszRoIHeads.check_targetsv  sœ   € àˆ?ÜÐ9Ó:Ð:Ü¨'Ö2 Q�G˜q’LÒ2Ô3ÜÐOÓPÐPÜ¨7Ö3 a�H ’MÒ3Ô4ÜÐPÓQÐQØ�=‰=Œ?Ü¨gÖ6¨˜ 1šÒ6Ô7Ü Ð!SÓTÐTð 8ð ùò	 3ùâ3ùò 7s   —B½BÁ3Bc                 ó¾  — | j                  |«       |€t        d«      ‚|d   j                  }|d   j                  }|D �cg c]  }|d   j	                  |«      ‘Œ }}|D �cg c]  }|d   ‘Œ	 }}| j                  ||«      }| j                  |||«      \  }}	| j                  |	«      }
g }t        |«      }t        |«      D ]o  }|
|   }||   |   ||<   |	|   |   |	|<   ||   |   ||<   ||   }|j                  «       dk(  rt        j                  d||¬«      }|j                  |||      «       Œq | j                  j                  ||«      }|||	|fS c c}w c c}w )NrJ  r   r   r   )r   r   r�   )rN  r§   rc   r,   r7   rH  r9  rC  r¡   r�   r   r   rŽ   r¨   r  Úencode)r  rA   rL  rc   r,   rM  r/  rB   r9   r   r>  Úmatched_gt_boxesÚ
num_imagesÚimg_idrB  r1  r   s                    r&   Úselect_training_samplesz RoIHeads.select_training_samples‚  s�  € ð 	×Ñ˜7Ô#Øˆ?ÜÐ9Ó:Ð:Ø˜!‘×"Ñ"ˆØ˜1‘×$Ñ$ˆà29Ö:¨Q�A�g‘J—M‘M %Õ(Ð:ˆÐ:Ø*1Ö2 Q�Q�x“[Ð2ˆ	Ð2ð ×)Ñ)¨)°XÓ>ˆ	ð  $×?Ñ?À	È8ÐU^Ó_Ñˆ�fà—~‘~ fÓ-ˆØÐÜ˜“^ˆ
Ü˜JÓ'ò 		MˆFØ+¨FÑ3ÐØ )¨&Ñ 1Ð2BÑ CˆI�fÑØ# F™^Ð,<Ñ=ˆF�6‰NØ#/°Ñ#7Ð8HÑ#IˆL˜Ñ à (¨Ñ 0ÐØ ×&Ñ&Ó(¨AÒ-Ü$)§K¡K°¸eÈFÔ$SÐ!Ø×#Ñ#Ð$5°lÀ6Ñ6JÑ$KÕLð		Mð "Ÿ^™^×2Ñ2Ð3CÀYÓOÐØ˜,¨Ð0BÐBÐBùò1 ;ùÚ2s   ÁEÁ"Ec                 óL  — |j                   }|j                  d   }|D �cg c]  }|j                  d   ‘Œ }}| j                  j                  ||«      }	t	        j
                  |d«      }
|	j                  |d«      }|
j                  |d«      }g }g }g }t        |||«      D �]w  \  }}}t        j                  ||«      }t        j                  ||¬«      }|j                  dd«      j                  |«      }|d d …dd …f   }|d d …dd …f   }|d d …dd …f   }|j                  dd«      }|j                  d«      }|j                  d«      }t        j                  || j                   kD  «      d   }||   ||   ||   }}}t        j"                  |d¬«      }||   ||   ||   }}}t        j$                  |||| j&                  «      }|d | j(                   }||   ||   ||   }}}|j+                  |«       |j+                  |«       |j+                  |«       �Œz |||fS c c}w )Nr   r   r+   r   r   g{®Gáz„?)Úmin_size)r,   r   r  Údecoder   Úsoftmaxr/   r>   r  Úclip_boxes_to_imager   r.   rs   Ú	expand_asr   r   r  Úremove_small_boxesÚbatched_nmsr  r  r¨   )r  r	   r
   rA   Úimage_shapesr,   r$   Úboxes_in_imager3   Ú
pred_boxesÚpred_scoresÚpred_boxes_listÚpred_scores_listÚ	all_boxesÚ
all_scoresÚ
all_labelsr   rÁ   Úimage_shaper   ÚindsÚkeeps                         r&   Úpostprocess_detectionszRoIHeads.postprocess_detections¨  sD  € ð ×$Ñ$ˆØ"×(Ñ(¨Ñ,ˆàIRÖS°~˜>×/Ñ/°Ó2ÐSˆÐSØ—^‘^×*Ñ*¨>¸9ÓEˆ
ä—i‘i ¨bÓ1ˆà$×*Ñ*¨?¸AÓ>ˆØ&×,Ñ,¨_¸aÓ@Ðàˆ	Øˆ
Øˆ
Ü*-¨oÐ?OÐQ]Ó*^ó !	&Ñ&ˆE�6˜;Ü×/Ñ/°°{ÓCˆEô —\‘\ +°fÔ=ˆFØ—[‘[  BÓ'×1Ñ1°&Ó9ˆFð š!˜Q™R˜%‘LˆEØšA˜q™r˜E‘]ˆFØšA˜q™r˜E‘]ˆFð —M‘M " aÓ(ˆEØ—^‘^ BÓ'ˆFØ—^‘^ BÓ'ˆFô —;‘;˜v¨×(9Ñ(9Ñ9Ó:¸1Ñ=ˆDØ$)¨$¡K°¸±¸vÀd¹|˜6�6ˆEô ×-Ñ-¨e¸dÔCˆDØ$)¨$¡K°¸±¸vÀd¹|˜6�6ˆEô ×&Ñ& u¨f°f¸d¿o¹oÓNˆDàÐ1˜$×1Ñ1Ð2ˆDØ$)¨$¡K°¸±¸vÀd¹|˜6�6ˆEà×Ñ˜UÔ#Ø×Ñ˜fÔ%Ø×Ñ˜fÖ%ðC!	&ðF ˜* jÐ0Ð0ùò] Ts    H!ÚfeaturesrA   r]  rL  r   c                 ó<
  — |�é|D ]ä  }t         j                  t         j                  t         j                  f}|d   j                  |vrt        d|d   j                  › �«      ‚|d   j                  t         j                  k(  st        d|d   j                  › �«      ‚| j                  «       sŒª|d   j                  t         j                  k(  rŒËt        d|d   j                  › �«      ‚ | j                  r| j                  ||«      \  }}}}	nd}d}	d}| j                  |||«      }
| j                  |
«      }
| j                  |
«      \  }}g }i }| j                  r1|€t        d«      ‚|	€t        d	«      ‚t        ||||	«      \  }}||d
œ}nQ| j!                  ||||«      \  }}}t#        |«      }t%        |«      D ]   }|j'                  ||   ||   ||   dœ«       Œ" | j)                  «       �r…|D �cg c]  }|d   ‘Œ	 }}| j                  ry|€t        d«      ‚t#        |«      }g }g }t%        |«      D ]N  }t        j*                  ||   dkD  «      d   }|j'                  ||   |   «       |j'                  ||   |   «       ŒP nd}| j,                  �6| j-                  |||«      }| j/                  |«      }| j1                  |«      }nt3        d«      ‚i }| j                  rI|�|�|€t        d«      ‚|D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }}t5        |||||«      }d|i}n7|D � cg c]  } | d   ‘Œ	 }} t7        ||«      }!t9        |!|«      D ]
  \  }"} |"| d<   Œ |j;                  |«       | j<                  ��y| j>                  ��l| j@                  ��_|D �cg c]  }|d   ‘Œ	 }#}| j                  ryt#        |«      }g }#g }|€t        d«      ‚t%        |«      D ]N  }t        j*                  ||   dkD  «      d   }|#j'                  ||   |   «       |j'                  ||   |   «       ŒP nd}| j=                  ||#|«      }$| j?                  |$«      }$| jA                  |$«      }%i }&| j                  r4|�|€t        d«      ‚|D �cg c]  }|d   ‘Œ	 }'}tC        |%|#|'|«      }(d|(i}&n>|%�|#€t        d«      ‚tE        |%|#«      \  })}*t9        |)|*|«      D ]  \  }+},} |+| d<   |,| d<   Œ |j;                  |&«       ||fS c c}w c c}w c c}w c c} w c c}w c c}w )z´
        Args:
            features (List[Tensor])
            proposals (List[Tensor[N, 4]])
            image_shapes (List[Tuple[H, W]])
            targets (List[Dict])
        Nr   z-target boxes must of float type, instead got r   z.target labels must of int64 type, instead got rR   z1target keypoints must of float type, instead got zlabels cannot be Nonez!regression_targets cannot be None)Úloss_classifierÚloss_box_reg)r   r   rÁ   z/if in training, matched_idxs should not be Noner   z%Expected mask_roi_pool to be not NonezCtargets, pos_matched_idxs, mask_logits cannot be None when trainingrö   Ú	loss_maskz0if in trainning, matched_idxs should not be NonezJboth targets and pos_matched_idxs should not be None when in training modeÚloss_keypointzXboth keypoint_logits and keypoint_proposals should not be None when not in training modeÚkeypoints_scores)#r   r¤   ÚdoubleÚhalfrc   Ú	TypeErrorrj   r+  ro   ÚtrainingrT  r  r  r  r§   r'   ri  r¡   r�   r¨   r)  r   r  r  r  Ú	ExceptionrL   r5   r>   Úupdater  r  r  r¸   rÂ   )-r  rj  rA   r]  rL  rM  Úfloating_point_typesr9   r   r   Úbox_featuresr	   r
   ÚresultÚlossesrl  rm  r   rÁ   rR  rI   rH   Úmask_proposalsÚpos_matched_idxsrS  r�   Úmask_featuresr@   rn  r8   rB   Úrcnn_loss_maskÚrÚmasks_probsr0   Úkeypoint_proposalsÚkeypoint_featuresrª   ro  r«   Úrcnn_loss_keypointÚkeypoints_probsr»   Úkeypoint_probÚkpss-                                                r&   ÚforwardzRoIHeads.forwardã  sÛ  € ð ÐØò 	t�ä(-¯©´U·\±\Ä5Ç:Á:Ð'NÐ$Ø�W‘:×#Ñ#Ð+?Ñ?Ü#Ð&SÐTUÐV]ÑT^×TdÑTdÐSeÐ$fÓgÐgØ˜‘{×(Ñ(¬E¯K©KÒ7Ü#Ð&TÐUVÐW_ÑU`×UfÑUfÐTgÐ$hÓiÐiØ×$Ñ$Õ&Ø˜[™>×/Ñ/´5·=±=Ó@Ü'Ð*[Ð\]Ð^iÑ\j×\pÑ\pÐ[qÐ(rÓsÐsð	tð �=Š=ØBF×B^ÑB^Ð_hÐjqÓBrÑ?ˆI�| VÑ-?àˆFØ!%ÐØˆLà×(Ñ(¨°9¸lÓKˆØ—}‘} \Ó2ˆØ'+×'9Ñ'9¸,Ó'GÑ$ˆ�nà02ˆØˆØ�=Š=Øˆ~Ü Ð!8Ó9Ð9Ø!Ð)Ü Ð!DÓEÐEÜ,9¸,ÈÐX^Ð`rÓ,sÑ)ˆO˜\Ø)8È,ÑW‰Fà$(×$?Ñ$?ÀÈnÐ^gÐiuÓ$vÑ!ˆE�6˜6Ü˜U›ˆJÜ˜:Ó&ò �Ø—‘à!& q¡Ø"(¨¡)Ø"(¨¡)ñõðð �=‰=�?Ø28Ö9¨Q˜a ›jÐ9ˆNÐ9Ø�}Š}ØÐ'Ü$Ð%VÓWÐWô ! ›^�
Ø!#�Ø#%Ð Ü# JÓ/ò G�FÜŸ+™+ f¨V¡n°qÑ&8Ó9¸!Ñ<�CØ"×)Ñ)¨)°FÑ*;¸CÑ*@ÔAØ$×+Ñ+¨L¸Ñ,@ÀÑ,EÕFñGð
 $(Ð à×!Ñ!Ð-Ø $× 2Ñ 2°8¸^È\Ó Z�Ø $§¡¨}Ó =�Ø"×1Ñ1°-Ó@‘äÐ GÓHÐHàˆIØ�}Š}Ø�?Ð&6Ð&>À+ÐBUÜ$Ð%jÓkÐkà07Ö8¨1˜A˜g›JÐ8�Ð8Ø29Ö:¨Q˜Q˜x›[Ð:�	Ð:Ü!.¨{¸NÈHÐV_ÐaqÓ!r�Ø(¨.Ð9‘	à/5Ö6¨!˜!˜H›+Ð6�Ð6Ü0°¸fÓE�Ü$'¨°VÓ$<ò +‘L�I˜qØ!*�A�g’Jð+ð �M‰M˜)Ô$ð
 ×"Ñ"Ñ.Ø×"Ñ"Ñ.Ø×'Ñ'Ñ3à6<Ö!=° ! G£*Ð!=ÐÐ!=Ø�}Š}ä  ›^�
Ø%'Ð"Ø#%Ð ØÐ'Ü$Ð%WÓXÐXä# JÓ/ò G�FÜŸ+™+ f¨V¡n°qÑ&8Ó9¸!Ñ<�CØ&×-Ñ-¨i¸Ñ.?ÀÑ.DÔEØ$×+Ñ+¨L¸Ñ,@ÀÑ,EÕFñGð
 $(Ð à $× 6Ñ 6°xÐASÐUaÓ bÐØ $× 2Ñ 2Ð3DÓ EÐØ"×5Ñ5Ð6GÓHˆOàˆMØ�}Š}Ø�?Ð&6Ð&>Ü$Ð%qÓrÐrà8?Ö@°1  +£Ð@�Ð@Ü%6Ø#Ð%7¸ÐGWó&Ð"ð "1Ð2DÐ E‘à"Ð*Ð.@Ð.HÜ$Øróð ô .DÀOÐUgÓ-hÑ*� Ü-0°À)ÈVÓ-Tò 0Ñ)�M 3¨Ø%2�A�k‘NØ,/�AÐ(Ò)ð0ð �M‰M˜-Ô(à�vˆ~Ðùòs :ùò8 9ùÚ:ùò 7ùò ">ùò2  As$   Ç5T Ë:TÌT
Ì2TÎ!TÒT)NNNNNNrE  )Ú__name__Ú
__module__Ú__qualname__r  r  r  r  Ú__annotations__r  r)  r+  r9  rC  rH  rN  rT  ri  ÚdictÚstrr   ÚTensorÚlistÚtuplerl   r   r‡  Ú__classcell__)r%  s   @r&   r  r  ø  s  ø„ à×'Ñ'Ø%×-Ñ-Ø"×BÑBñ€Oð, ØØØØØõ+15òfòò!$òFòò
Uò$CòL91ð@ <@ñTà�s˜EŸL™LÐ(Ñ)ðTð ˜Ÿ™Ñ%ðTð ˜5  c ™?Ñ+ð	Tð
 ˜$˜t C¨¯©Ð$5Ñ6Ñ7Ñ8ðTð 
ˆt�D˜˜eŸl™lÐ*Ñ+Ñ,¨d°3¸¿¹Ð3DÑ.EÐEÑ	F÷Tr(   r  )r   ))Útypingr   r   Útorch.nn.functionalr   Ú
functionalr   rž   Útorchvision.opsr   r  r   Ú r   r  rŽ  r�  r�  r'   r5   r<   rL   r`   r‹   ÚjitÚ_script_if_tracingr—   r¥   r¸   rÂ   rÎ   rÑ   ÚunusedrÔ   rÛ   ré   ró   rù   r   ÚModuler  © r(   r&   ú<module>rœ     sb  ðÝ ã ß Ð Û Ý ß 7å !ð))Ø—,‘,ð))à—L‘Lð))ð �—‘Ñð))ð ˜UŸ\™\Ñ*ð	))ð
 ˆ5�<‰<˜Ÿ™Ð%Ñ&ó))ðX˜%Ÿ,™,ð °°U·\±\Ñ0Bð ÀtÈEÏLÉLÑGYó ò:8òò@!òH0$ðf ‡�×Ññ ó ð ò"F1òRò>ò ò*ð( ‡�×Ññ_ó ð_ò
òò2!ðH ‡�×Ññó ðóô$ˆr�y‰yõ r(   