Ë
    [²jŠ/  ã                   óª  — d dl Z d dlmZmZ d dlZd dlZd dlmZmZ ddlm	Z	 ddl
mZ ej                  j                  dedefd	„«       Zej                  j                  d
edefd„«       Z	 	 ddedededeeeef      deeeef      deeeeeef      f   fd„Z G d„ dej,                  «      Zdedee   dee   defd„Zdedee   dee   defd„Zy)é    N)ÚAnyÚOptional)ÚnnÚTensoré   )Ú	ImageList)Úpaste_masks_in_imageÚimageÚreturnc                 ó6   — ddl m} |j                  | «      dd  S )Nr   )Ú	operatorséþÿÿÿ)Ú
torch.onnxr   Úshape_as_tensor)r
   r   s     úe/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/models/detection/transform.pyÚ_get_shape_onnxr      s   € å$à×$Ñ$ UÓ+¨B¨CÐ0Ð0ó    Úvc                 ó   — | S ©N© )r   s    r   Ú_fake_cast_onnxr      s	   € ð €Hr   Úself_min_sizeÚself_max_sizeÚtargetÚ
fixed_sizec                 óœ  — t        j                  «       rt        | «      }nPt        j                  j                  «       r#t        j                  | j                  dd  «      }n| j                  dd  }d }d }d }|�|d   |d   g}�n%t        j                  j                  «       st        j                  «       rÉt        j                  |«      j                  t        j                  ¬«      }	t        j                  |«      j                  t        j                  ¬«      }
t        |«      }t        |«      }t        j                  ||	z  ||
z  «      }t        j                  «       rt        |«      }n9|j                  «       }n(t        |«      }	t        |«      }
t        ||	z  ||
z  «      }d}t        j                  j                   j#                  | d    ||d|d¬«      d   } |€| |fS d	|v ra|d	   }t        j                  j                   j#                  |d d …d f   j                  «       |||¬
«      d d …df   j%                  «       }||d	<   | |fS )Nr   r   r   )ÚdtypeTÚbilinearF)ÚsizeÚscale_factorÚmodeÚrecompute_scale_factorÚalign_cornersÚmasks)r    r!   r#   )ÚtorchvisionÚ_is_tracingr   ÚtorchÚjitÚis_scriptingÚtensorÚshapeÚminÚtoÚfloat32ÚmaxÚfloatr   Úitemr   Ú
functionalÚinterpolateÚbyte)r
   r   r   r   r   Úim_shaper    r!   r#   Úmin_sizeÚmax_sizeÚself_min_size_fÚself_max_size_fÚscaleÚmasks                  r   Ú_resize_image_and_masksr=      s  € ô ×ÑÔ Ü" 5Ó)‰Ü	�‰×	Ñ	Ô	!Ü—<‘< §¡¨B¨CÐ 0Ó1‰à—;‘;˜r˜sÐ#ˆà $€DØ$(€LØ-1ÐØÐØ˜1‘˜z¨!™}Ð-Šä�9‰9×!Ñ!Ô#¤{×'>Ñ'>Ô'@Ü—y‘y Ó*×-Ñ-´E·M±MÐ-ÓBˆHÜ—y‘y Ó*×-Ñ-´E·M±MÐ-ÓBˆHÜ# MÓ2ˆOÜ# MÓ2ˆOÜ—I‘I˜o°Ñ8¸/ÈHÑ:TÓUˆEä×&Ñ&Ô(Ü.¨uÓ5‘à$Ÿz™z›|‘ô ˜8“}ˆHÜ˜8“}ˆHÜ˜}¨xÑ7¸ÈÑ9QÓRˆLà!%Ðä�H‰H×Ñ×+Ñ+Øˆd‰ØØ!ØØ5Øð ,ó ð ñ	€Eð €~Ø�fˆ}Ðà�&ÑØ�g‰ˆÜ�x‰x×"Ñ"×.Ñ.Ø’�D�‰M×ÑÓ!¨¸<Ð`vð /ó 
â
ˆQˆ$ñç‘“ð 	ð ˆˆw‰Ø�&ˆ=Ðr   c                   ó  ‡ — e Zd ZdZ	 	 ddededee   dee   dedeeeef      de	fˆ fd	„Z
	 dd
ee   deeeeef         deeeeeeef         f   fd„Zdedefd„Zdee   defd„Z	 ddedeeeef      deeeeeef      f   fd„Zej(                  j*                  dd
ee   dedefd„«       Zdeee      dee   fd„Zdd
ee   dedefd„Zdeeeef      deeeef      deeeef      deeeef      fd„Zdefd„Zˆ xZS ) ÚGeneralizedRCNNTransformah  
    Performs input / target transformation before feeding the data to a GeneralizedRCNN
    model.

    The transformations it performs are:
        - input normalization (mean subtraction and std division)
        - input / target resizing to match min_size / max_size

    It returns a ImageList for the inputs, and a List[Dict[Tensor]] for the targets
    r7   r8   Ú
image_meanÚ	image_stdÚsize_divisibler   Úkwargsc                 óÖ   •— t         ‰| �  «        t        |t        t        f«      s|f}|| _        || _        || _        || _        || _	        || _
        |j                  dd«      | _        y )NÚ_skip_resizeF)ÚsuperÚ__init__Ú
isinstanceÚlistÚtupler7   r8   r@   rA   rB   r   ÚpoprE   )	Úselfr7   r8   r@   rA   rB   r   rC   Ú	__class__s	           €r   rG   z!GeneralizedRCNNTransform.__init__b   sc   ø€ ô 	‰ÑÔÜ˜(¤T¬5 MÔ2Ø �{ˆHØ ˆŒØ ˆŒØ$ˆŒØ"ˆŒØ,ˆÔØ$ˆŒØ"ŸJ™J ~°uÓ=ˆÕr   ÚimagesÚtargetsr   c                 óÞ  — |D �cg c]  }|‘Œ }}|�;g }|D ]2  }i }|j                  «       D ]
  \  }}|||<   Œ |j                  |«       Œ4 |}t        t        |«      «      D ]q  }	||	   }
|�||	   nd }|
j	                  «       dk7  rt        d|
j                  › �«      ‚| j                  |
«      }
| j                  |
|«      \  }
}|
||	<   |€Œj|€Œm|||	<   Œs |D �cg c]  }|j                  dd  ‘Œ }}| j                  || j                  ¬«      }g }|D ]@  }t        j                  t        |«      dk(  d|› �«       |j                  |d   |d   f«       ŒB t        ||«      }||fS c c}w c c}w )	Né   zFimages is expected to be a list of 3d tensors of shape [C, H, W], got r   )rB   é   zMInput tensors expected to have in the last two elements H and W, instead got r   r   )ÚitemsÚappendÚrangeÚlenÚdimÚ
ValueErrorr,   Ú	normalizeÚresizeÚbatch_imagesrB   r(   Ú_assertr   )rL   rN   rO   ÚimgÚtargets_copyÚtÚdataÚkr   Úir
   Útarget_indexÚimage_sizesÚimage_sizes_listÚ
image_sizeÚ
image_lists                   r   Úforwardz GeneralizedRCNNTransform.forwardw   sÀ  € ð "(Ö(˜#’#Ð(ˆÐ(ØÐð
 57ˆLØò *�Ø*,�ØŸG™G›Iò  ‘D�A�qØ�D˜’Gð à×#Ñ# DÕ)ð	*ð
 #ˆGÜ”s˜6“{Ó#ò 
	*ˆAØ˜1‘IˆEØ)0Ð)<˜7 1š:À$ˆLà�y‰y‹{˜aÒÜ Ð#iÐjo×juÑjuÐivÐ!wÓxÐxØ—N‘N 5Ó)ˆEØ"&§+¡+¨e°\Ó"BÑˆE�<ØˆF�1‰IØÑ" |Ñ'?Ø)�˜’
ð
	*ð 28Ö8¨#�s—y‘y  ’~Ð8ˆÐ8Ø×"Ñ" 6¸$×:MÑ:MÐ"ÓNˆØ24ÐØ%ò 	DˆJÜ�M‰MÜ�J“ 1Ñ$Ø_Ð`jÐ_kÐlôð ×#Ñ# Z°¡]°J¸q±MÐ$BÕCð	Dô ˜vÐ'7Ó8ˆ
Ø˜7Ð"Ð"ùòI )ùò2 9s   …	E%ÃE*r
   c                 ó<  — |j                  «       st        d|j                  › d�«      ‚|j                  |j                  }}t	        j
                  | j                  ||¬«      }t	        j
                  | j                  ||¬«      }||d d …d d f   z
  |d d …d d f   z  S )NzOExpected input images to be of floating type (in range [0, 1]), but found type z instead©r   Údevice)Úis_floating_pointÚ	TypeErrorr   rk   r(   Ú	as_tensorr@   rA   )rL   r
   r   rk   ÚmeanÚstds         r   rY   z"GeneralizedRCNNTransform.normalize    s•   € Ø×&Ñ&Ô(Üð"Ø"'§+¡+ ¨hð8óð ð Ÿ™ U§\¡\ˆvˆÜ�‰˜tŸ™°eÀFÔKˆÜ�o‰o˜dŸn™n°EÀ&ÔIˆØ˜šQ  d˜]Ñ+Ñ+¨s²1°d¸D°=Ñ/AÑAÐAr   ra   c           
      ó¨   — t        t        j                  d«      j                  dt	        t        |«      «      «      j                  «       «      }||   S )z”
        Implements `random.choice` via torch ops, so it can be compiled with
        TorchScript and we use PyTorch's RNG (not native RNG)
        r   g        )Úintr(   ÚemptyÚuniform_r1   rV   r2   )rL   ra   Úindexs      r   Útorch_choicez%GeneralizedRCNNTransform.torch_choice«   s=   € ô
 ”E—K‘K “N×+Ñ+¨C´´s¸1³v³Ó?×DÑDÓFÓGˆØ�‰xˆr   r   c                 ó´  — |j                   dd  \  }}| j                  r,| j                  r||fS | j                  | j                  «      }n| j                  d   }t        ||| j                  || j                  «      \  }}|€||fS |d   }t        |||f|j                   dd  «      }||d<   d|v r&|d   }t        |||f|j                   dd  «      }||d<   ||fS )Nr   éÿÿÿÿÚboxesÚ	keypoints)
r,   ÚtrainingrE   rv   r7   r=   r8   r   Úresize_boxesÚresize_keypoints)rL   r
   r   ÚhÚwr    Úbboxrz   s           r   rZ   zGeneralizedRCNNTransform.resize³   sö   € ð
 �{‰{˜2˜3Ð‰ˆˆ1Ø�=Š=Ø× Ò Ø˜f�}Ð$Ø×$Ñ$ T§]¡]Ó3‰Dà—=‘= Ñ$ˆDÜ/°°t¸T¿]¹]ÈFÐTX×TcÑTcÓd‰ˆˆvàˆ>Ø˜&�=Ð à�g‰ˆÜ˜D 1 a &¨%¯+©+°b°cÐ*:Ó;ˆØˆˆw‰à˜&Ñ Ø˜{Ñ+ˆIÜ(¨°Q¸°F¸E¿K¹KÈÈÐ<LÓMˆIØ"+ˆF�;ÑØ�fˆ}Ðr   c                 ó8  — g }t        |d   j                  «       «      D ]�  }t        j                  t        j                  |D �cg c]  }|j
                  |   ‘Œ c}«      j                  t        j                  «      «      j                  t        j                  «      }|j                  |«       Œ’ |}t        j                  |d   j                  t        j                  «      |z  «      |z  j                  t        j                  «      |d<   t        j                  |d   j                  t        j                  «      |z  «      |z  j                  t        j                  «      |d<   t        |«      }g }|D ]€  }t        |t        |j
                  «      «      D �	�
cg c]
  \  }	}
|	|
z
  ‘Œ }}	}
t        j                  j                  j                  |d|d   d|d   d|d   f«      }|j                  |«       Œ‚ t        j                  |«      S c c}w c c}
}	w )Nr   r   rR   )rU   rW   r(   r0   Ústackr,   r.   r/   Úint64rT   ÚceilrJ   Úzipr   r3   Úpad)rL   rN   rB   r8   rb   r]   Ú
max_size_iÚstrideÚpadded_imgsÚs1Ús2ÚpaddingÚ
padded_imgs                r   Ú_onnx_batch_imagesz+GeneralizedRCNNTransform._onnx_batch_imagesÐ   s³  € àˆÜ�v˜a‘y—}‘}“Ó'ò 	(ˆAÜŸ™¤5§;¡;ÈÖ/OÀ°·	±	¸!³Ò/OÓ#P×#SÑ#SÔTY×TaÑTaÓ#bÓc×fÑfÔgl×grÑgrÓsˆJØ�O‰O˜JÕ'ð	(ð  ˆÜ—z‘z 8¨A¡;§>¡>´%·-±-Ó#@ÀFÑ"JÓKÈfÑT×XÑXÔY^×YdÑYdÓeˆ�‰Ü—z‘z 8¨A¡;§>¡>´%·-±-Ó#@ÀFÑ"JÓKÈfÑT×XÑXÔY^×YdÑYdÓeˆ�‰Ü˜“?ˆð
 ˆØò 	+ˆCÜ/2°8¼UÀ3Ç9Á9Ó=MÓ/N×O¡V R¨˜˜R›ÐOˆGÑOÜŸ™×,Ñ,×0Ñ0°°q¸'À!¹*ÀaÈÐQRÉÐUVÐX_Ð`aÑXbÐ6cÓdˆJØ×Ñ˜zÕ*ð	+ô
 �{‰{˜;Ó'Ð'ùò! 0Pùó Ps   ÁHÆHÚthe_listc                 ón   — |d   }|dd  D ]'  }t        |«      D ]  \  }}t        ||   |«      ||<   Œ Œ) |S )Nr   r   )Ú	enumerater0   )rL   r�   ÚmaxesÚsublistru   r2   s         r   Úmax_by_axisz$GeneralizedRCNNTransform.max_by_axisæ   sS   € Ø˜‘ˆØ  �|ò 	7ˆGÜ(¨Ó1ò 7‘��tÜ" 5¨¡<°Ó6��e’ñ7ð	7ð ˆr   c                 óÎ  — t        j                  «       r| j                  ||«      S | j                  |D �cg c]  }t	        |j
                  «      ‘Œ c}«      }t        |«      }t	        |«      }t        t        j                  t        |d   «      |z  «      |z  «      |d<   t        t        j                  t        |d   «      |z  «      |z  «      |d<   t        |«      g|z   }|d   j                  |d«      }t        |j
                  d   «      D ]L  }||   }||d |j
                  d   …d |j
                  d   …d |j
                  d   …f   j                  |«       ŒN |S c c}w )Nr   rR   r   )r&   r'   rŽ   r”   rI   r,   r1   rr   Úmathr„   rV   Únew_fullrU   Úcopy_)	rL   rN   rB   r]   r8   rˆ   Úbatch_shapeÚbatched_imgsrb   s	            r   r[   z%GeneralizedRCNNTransform.batch_imagesí   sL  € Ü×"Ñ"Ô$ð ×*Ñ*¨6°>ÓBÐBà×#Ñ#ÀÖ$G¸¤T¨#¯)©)¥_Ò$GÓHˆÜ�~Ó&ˆÜ˜“>ˆÜœ$Ÿ)™)¤E¨(°1©+Ó$6¸Ñ$?Ó@À6ÑIÓJˆ�‰Üœ$Ÿ)™)¤E¨(°1©+Ó$6¸Ñ$?Ó@À6ÑIÓJˆ�‰ä˜6“{�m hÑ.ˆØ˜a‘y×)Ñ)¨+°qÓ9ˆÜ�|×)Ñ)¨!Ñ,Ó-ò 	WˆAØ˜‘)ˆCØ˜˜N˜cŸi™i¨™l˜N¨N¨c¯i©i¸©l¨N¸N¸c¿i¹iÈ¹l¸NÐJÑK×QÑQÐRUÕVð	Wð Ðùò %Hs   ¶E"ÚresultÚimage_shapesÚoriginal_image_sizesc                 ó  — | j                   r|S t        t        |||«      «      D ]`  \  }\  }}}|d   }t        |||«      }|||   d<   d|v r|d   }	t	        |	||«      }	|	||   d<   d|v sŒG|d   }
t        |
||«      }
|
||   d<   Œb |S )Nry   r%   rz   )r{   r‘   r…   r|   r	   r}   )rL   r›   rœ   r�   rb   ÚpredÚim_sÚo_im_sry   r%   rz   s              r   Úpostprocessz$GeneralizedRCNNTransform.postprocess  sÀ   € ð �=Š=ØˆMÜ'0´°V¸\ÐK_Ó1`Ó'aò 	3Ñ#ˆAÑ#��d˜FØ˜‘MˆEÜ  ¨¨fÓ5ˆEØ!&ˆF�1‰I�gÑØ˜$‰Ø˜W™�Ü,¨U°E¸6ÓB�Ø%*��q‘	˜'Ñ"Ø˜dÒ"Ø  Ñ-�	Ü,¨Y¸¸fÓE�	Ø)2��q‘	˜+Ò&ð	3ð ˆr   c                 óÎ   — | j                   j                  › d�}d}||› d| j                  › d| j                  › d�z  }||› d| j                  › d| j
                  › d�z  }|d	z  }|S )
Nú(z
    zNormalize(mean=z, std=ú)zResize(min_size=z, max_size=z, mode='bilinear')z
))rM   Ú__name__r@   rA   r7   r8   )rL   Úformat_stringÚ_indents      r   Ú__repr__z!GeneralizedRCNNTransform.__repr__  s}   € ØŸ>™>×2Ñ2Ð3°1Ð5ˆØˆØ˜G˜9 O°D·O±OÐ3DÀFÈ4Ï>É>ÐJZÐZ[Ð\Ñ\ˆØ˜G˜9Ð$4°T·]±]°OÀ;ÈtÏ}É}ÈoÐ]oÐpÑpˆØ˜ÑˆØÐr   )é    Nr   )rª   )r¦   Ú
__module__Ú__qualname__Ú__doc__rr   rI   r1   r   rJ   r   rG   r   ÚdictÚstrr   rh   rY   rv   rZ   r(   r)   ÚunusedrŽ   r”   r[   r¢   r©   Ú__classcell__)rM   s   @r   r?   r?   V   s"  ø„ ñ	ð" !Ø04ñ>àð>ð ð>ð ˜‘Kð	>ð
 ˜‘;ð>ð ð>ð ˜U 3¨ 8™_Ñ-ð>ð õ>ð, RVñ'#Ø˜6‘lð'#Ø-5°d¸4ÀÀVÀÑ;LÑ6MÑ-Nð'#à	ˆy˜( 4¨¨S°&¨[Ñ(9Ñ#:Ñ;Ð;Ñ	<ó'#ðR	B˜vð 	B¨&ó 	Bð˜d 3™ið ¨Có ð /3ñàðð ˜˜c 6˜kÑ*Ñ+ðð 
ˆv�x  S¨& [Ñ 1Ñ2Ð2Ñ	3ó	ð: ‡Y�Y×Ññ(¨¨f©ð (Àsð (ÐTZò (ó ð(ð* D¨¨c©¡Oð ¸¸S¹	ó ñ 4¨¡<ð Àð Èfó ð(à�T˜#˜v˜+Ñ&Ñ'ðð ˜5  c ™?Ñ+ðð # 5¨¨c¨¡?Ñ3ð	ð
 
ˆd�3˜�;ÑÑ	 óð,˜#÷ r   r?   rz   Úoriginal_sizeÚnew_sizec           
      ó.  — t        ||«      D ��cg c]f  \  }}t        j                  |t        j                  | j                  ¬«      t        j                  |t        j                  | j                  ¬«      z  ‘Œh }}}|\  }}| j                  «       }t        j                  j                  «       rD|d d …d d …df   |z  }	|d d …d d …df   |z  }
t        j                  |	|
|d d …d d …df   fd¬«      }|S |dxx   |z  cc<   |dxx   |z  cc<   |S c c}}w )Nrj   r   r   rR   ©rW   ).r   ).r   )	r…   r(   r+   r/   rk   ÚcloneÚ_CÚ_get_tracing_stater‚   )rz   r²   r³   ÚsÚs_origÚratiosÚratio_hÚratio_wÚresized_dataÚresized_data_0Úresized_data_1s              r   r}   r}      s  € ô ˜X }Ó5÷ñ ˆAˆvô 	�‰�QœeŸm™m°I×4DÑ4DÔEÜ
�,‰,�v¤U§]¡]¸9×;KÑ;KÔ
Ló	Mð€Fñ ð
 Ñ€GˆWØ—?‘?Ó$€LÜ‡x�x×"Ñ"Ô$Ø%¢aª¨A gÑ.°Ñ8ˆØ%¢aª¨A gÑ.°Ñ8ˆÜ—{‘{ N°NÀLÒQRÒTUÐWXÐQXÑDYÐ#ZÐ`aÔbˆð Ðð 	�VÓ Ñ'ÓØ�VÓ Ñ'ÓØÐùós   �A+Dry   c           
      óœ  — t        ||«      D ��cg c]f  \  }}t        j                  |t        j                  | j                  ¬«      t        j                  |t        j                  | j                  ¬«      z  ‘Œh }}}|\  }}| j                  d«      \  }}	}
}||z  }|
|z  }
|	|z  }	||z  }t        j                  ||	|
|fd¬«      S c c}}w )Nrj   r   rµ   )r…   r(   r+   r/   rk   Úunbindr‚   )ry   r²   r³   r¹   rº   r»   Úratio_heightÚratio_widthÚxminÚyminÚxmaxÚymaxs               r   r|   r|   2  sÊ   € ô ˜X }Ó5÷ñ ˆAˆvô 	�‰�QœeŸm™m°E·L±LÔAÜ
�,‰,�v¤U§]¡]¸5¿<¹<Ô
Hó	Ið€Fñ ð
 !'Ñ€L�+Ø"Ÿ\™\¨!›_Ñ€Dˆ$��dà�+Ñ€DØ�+Ñ€DØ�,Ñ€DØ�,Ñ€DÜ�;‰;˜˜d D¨$Ð/°QÔ7Ð7ùós   �A+C)NN)r–   Útypingr   r   r(   r&   r   r   rg   r   Ú	roi_headsr	   r)   r°   r   r1   r   rr   r®   r¯   rJ   r=   ÚModuler?   rI   r}   r|   r   r   r   ú<module>rÌ      sS  ðÛ ß  ã Û ß å !Ý +ð ‡�×Ñð1˜6ð 1 fò 1ó ð1ð ‡�×Ñð�vð  %ò ó ðð +/Ø,0ñ:Øð:àð:ð ð:ð �T˜#˜v˜+Ñ&Ñ'ð	:ð
 ˜˜s C˜x™Ñ)ð:ð ˆ6�8˜D  f Ñ-Ñ.Ð.Ñ/ó:ôzG˜rŸy™yô GðT ð °t¸C±yð ÈDÐQTÉIð ÐZ`ó ð$8˜ð 8¨t°C©yð 8ÀDÈÁIð 8ÐRXô 8r   