Ë
    [²jA  ã                   óv   — d Z ddlZddlmZ ddlmZmZ ddlZddlmZ ddl	m
Z
  G d„ d	ej                  «      Zy)
z,
Implements the Generalized R-CNN framework
é    N)ÚOrderedDict)ÚOptionalÚUnion)Únné   )Ú_log_api_usage_oncec                   ó  ‡ — e Zd ZdZdej
                  dej
                  dej
                  dej
                  ddf
ˆ fd„Zej                  j                  d	e
eej                  f   d
ee
eej                  f      dee
eej                  f   ee
eej                  f      f   fd„«       Z	 ddeej                     deee
eej                  f         dee
eej                  f   ee
eej                  f      f   fd„Zˆ xZS )ÚGeneralizedRCNNad  
    Main class for Generalized R-CNN.

    Args:
        backbone (nn.Module):
        rpn (nn.Module):
        roi_heads (nn.Module): takes the features + the proposals from the RPN and computes
            detections / masks from it.
        transform (nn.Module): performs the data transformation from the inputs to feed into
            the model
    ÚbackboneÚrpnÚ	roi_headsÚ	transformÚreturnNc                 ó~   •— t         ‰| �  «        t        | «       || _        || _        || _        || _        d| _        y )NF)ÚsuperÚ__init__r   r   r   r   r   Ú_has_warned)Úselfr   r   r   r   Ú	__class__s        €úl/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/models/detection/generalized_rcnn.pyr   zGeneralizedRCNN.__init__   s<   ø€ ô 	‰ÑÔÜ˜DÔ!Ø"ˆŒØ ˆŒØˆŒØ"ˆŒà ˆÕó    ÚlossesÚ
detectionsc                 ó"   — | j                   r|S |S ©N)Útraining)r   r   r   s      r   Úeager_outputszGeneralizedRCNN.eager_outputs,   s   € ð �=Š=ØˆMàÐr   ÚimagesÚtargetsc           	      óè  — | j                   r±|€t        j                  dd«       n˜|D ]“  }|d   }t        |t        j                  «      rOt        j                  t        |j                  «      dk(  xr |j                  d   dk(  d|j                  › d	�«       Œqt        j                  dd
t        |«      › d	�«       Œ• g }|D ]\  }|j                  dd }t        j                  t        |«      dk(  d|j                  dd › �«       |j                  |d   |d   f«       Œ^ | j                  ||«      \  }}|�›t        |«      D ]�  \  }}|d   }|dd…dd…f   |dd…dd…f   k  }	|	j                  «       sŒ3t        j                  |	j                  d¬«      «      d   d   }
||
   j                  «       }t        j                  dd|› d|› d	�«       Œ� | j                  |j                  «      }t        |t        j                  «      rt!        d|fg«      }| j#                  |||«      \  }}| j%                  |||j&                  |«      \  }}| j                  j)                  ||j&                  |«      }i }|j+                  |«       |j+                  |«       t        j,                  j/                  «       r,| j0                  st3        j4                  d«       d| _        ||fS | j7                  ||«      S )a  
        Args:
            images (list[Tensor]): images to be processed
            targets (list[dict[str, tensor]]): ground-truth boxes present in the image (optional)

        Returns:
            result (list[BoxList] or dict[Tensor]): the output from the model.
                During training, it returns a dict[Tensor] which contains the losses.
                During testing, it returns list[BoxList] contains additional fields
                like `scores`, `labels` and `mask` (for Mask R-CNN models).

        NFz0targets should not be none when in training modeÚboxesé   éÿÿÿÿé   z:Expected target boxes to be a tensor of shape [N, 4], got ú.z0Expected target boxes to be of type Tensor, got éþÿÿÿzJexpecting the last two dimensions of the Tensor to be H and W instead got r   é   )ÚdimzLAll bounding boxes should have positive height and width. Found invalid box z for target at index Ú0z=RCNN always returns a (Losses, Detections) tuple in scriptingT)r   ÚtorchÚ_assertÚ
isinstanceÚTensorÚlenÚshapeÚtypeÚappendr   Ú	enumerateÚanyÚwhereÚtolistr   Útensorsr   r   r   Úimage_sizesÚpostprocessÚupdateÚjitÚis_scriptingr   ÚwarningsÚwarnr   )r   r   r   Útargetr!   Úoriginal_image_sizesÚimgÚvalÚ
target_idxÚdegenerate_boxesÚbb_idxÚdegen_bbÚfeaturesÚ	proposalsÚproposal_lossesr   Údetector_lossesr   s                     r   ÚforwardzGeneralizedRCNN.forward5   sç  € ð" �=Š=ØˆÜ—‘˜eÐ%WÕXà%ò �FØ" 7™O�EÜ! %¬¯©Ô6ÜŸ™Ü §¡Ó,°Ñ1ÒJ°e·k±kÀ"±oÈÑ6JØXÐY^×YdÑYdÐXeÐefÐgõô
 Ÿ™Ø!ØNÌtÐTYË{ÈmÐ[\Ð]õðð 79ÐØò 	:ˆCØ—)‘)˜B˜C�.ˆCÜ�M‰MÜ�C“˜A‘Ø\Ð]`×]fÑ]fÐgiÐgjÐ]kÐ\lÐmôð !×'Ñ'¨¨Q©°°Q±Ð(8Õ9ð	:ð Ÿ.™.¨°Ó9‰ˆ�ð ÐÜ&/°Ó&8ò Ñ"�
˜FØ˜w™�Ø#(ª¨A©B¨¡<°5º¸B¸Q¸B¸±<Ñ#?Ð Ø#×'Ñ'Õ)ä"Ÿ[™[Ð)9×)=Ñ)=À!Ð)=Ó)DÓEÀaÑHÈÑK�FØ,1°&©M×,@Ñ,@Ó,B�HÜ—M‘MØð.Ø.6¨ZÐ7LÈZÈLÐXYð[õðð —=‘= §¡Ó0ˆÜ�h¤§¡Ô-Ü" S¨( OÐ#4Ó5ˆHØ%)§X¡X¨f°hÀÓ%HÑ"ˆ	�?Ø&*§n¡n°X¸yÈ&×J\ÑJ\Ð^eÓ&fÑ#ˆ
�OØ—^‘^×/Ñ/Ø˜×*Ñ*Ð,@ó
ˆ
ð ˆØ�‰�oÔ&Ø�‰�oÔ&ä�9‰9×!Ñ!Ô#Ø×#Ò#Ü—‘Ð]Ô^Ø#'�Ô Ø˜:Ð%Ð%à×%Ñ% f¨jÓ9Ð9r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚModuler   r*   r:   ÚunusedÚdictÚstrr-   Úlistr   r   r   ÚtuplerJ   Ú__classcell__)r   s   @r   r
   r
      sF  ø„ ñ
ð!à—)‘)ð!ð �Y‰Yð!ð —9‘9ð	!ð
 —9‘9ð!ð 
õ!ð  ‡Y�Y×ÑðØ˜3 §¡Ð,Ñ-ðØ;?ÀÀSÈ%Ï,É,ÐEVÑ@WÑ;Xðà	ˆt�C˜Ÿ™Ð%Ñ&¨¨T°#°u·|±|Ð2CÑ-DÑ(EÐEÑ	Fòó ðð <@ñP:à�U—\‘\Ñ"ðP:ð ˜$˜t C¨¯©Ð$5Ñ6Ñ7Ñ8ðP:ð 
ˆt�C˜Ÿ™Ð%Ñ&¨¨T°#°u·|±|Ð2CÑ-DÑ(EÐEÑ	F÷	P:r   r
   )rN   r<   Úcollectionsr   Útypingr   r   r*   r   Úutilsr   rO   r
   © r   r   ú<module>rZ      s0   ðñó Ý #ß "ã Ý å (ôv:�b—i‘iõ v:r   