
    kh                         d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddl
Z
ddl
mZmZ ddlmZ  G d d	ej                        Zy)
z,
Implements the Generalized R-CNN framework
    N)OrderedDict)DictListOptionalTupleUnion)nnTensor   )_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	        Z
d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        i/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/models/detection/generalized_rcnn.pyr   zGeneralizedRCNN.__init__   s:    D!" "     c                 "    | j                   r|S |S N)training)r   losses
detectionss      r   eager_outputszGeneralizedRCNN.eager_outputs&   s     ==Mr   c           	         | 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
isinstancer
   lenshapetypeappendr   	enumerateanywheretolistr   tensorsr   r   r   image_sizespostprocessupdatejitis_scriptingr   warningswarnr!   )r   imagestargetstargetr#   original_image_sizesimgval
target_idxdegenerate_boxesbb_idxdegen_bbfeatures	proposalsproposal_lossesr    detector_lossesr   s                     r   forwardzGeneralizedRCNN.forward.   s    ==e%WX% pF"7OE!%6,1Jekk"o6JXY^YdYdXeefg
 e/_`dej`k_llm-nop 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^^//
F<N<NPde
o&o&99!!###]^#' :%%%%fj99r   r   )__name__
__module____qualname____doc__r	   Moduler   r,   r;   unusedr!   rM   __classcell__)r   s   @r   r   r      sh    
! ! !ryy !]_]f]f !ko ! YY H:r   r   )rQ   r=   collectionsr   typingr   r   r   r   r   r,   r	   r
   utilsr   rR   r    r   r   <module>rY      s3     # 5 5   (g:bii g:r   