
    hA                     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        k/var/www/html/eduruby.in/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"7OE!%6,1Jekk"o6JXY^YdYdXeefg
 !NtTY{m[\] 79 	:C))BC.CMMCA\]`]f]fgigj]k\lm !''QQ(89	: ..9 &/&8 "
Fw#(AB<5BQB<#? #'')"[[)9)=)=!)=)DEaHKF,1&M,@,@,BHMM..6Z7LZLXY[ ==0h-"S(O#45H%)XXfh%H"	?&*nnXy&J\J\^e&f#
O^^//**,@

 o&o&99!!###]^#' :%%%%fj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   
!))! YY! 99	!
 99! 
!  YY3,-;?S%,,EV@W;X	tC%&T#u||2C-D(EE	F  <@P:U\\"P: $tC$5678P: 
tC%&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:bii v:r   