ó
    Eñi—3  ã                   óž  • S SK r S SKJr  S SKJr  S SKJrJrJrJ	r	  S SK
r
S SK
JrJr  SSKJr  SSKJr  SS	KJr  S
SKJr  S
SKJrJrJr  S
SKJr  S
SKJrJr  S
SKJrJ r   SSKJr!  SSK"J#r#  SSK$J%r%  SSK&J'r'J(r(  SS/r)S\*S\*S\*S\S\RV                  4   S\RX                  4
S jr-S\*S\*S\S\RV                  4   S\RX                  4S jr.S\RV                  4S  jr/ " S! S"\RV                  5      r0 " S# S$\(5      r1 " S% S&\(5      r2 " S' S(\RV                  5      r3S)\	\Rh                  \Rj                  4   S*\*S\S\RV                  4   4S+ jr6 " S, S\5      r7\" 5       \" S-\7Rp                  4S.\ Rr                  4S/9SS0S\ Rr                  SSS1.S2\\7   S3\:S4\\*   S5\\    S6\\*   S\\S\RV                  4      S7\S\'4S8 jj5       5       r;g)9é    N)ÚOrderedDict)Úpartial)ÚAnyÚCallableÚOptionalÚUnion)ÚnnÚTensoré   )ÚConv2dNormActivation)ÚObjectDetection)Ú_log_api_usage_onceé   )Ú	mobilenet)Úregister_modelÚWeightsÚWeightsEnum)Ú_COCO_CATEGORIES)Ú_ovewrite_value_paramÚhandle_legacy_interface)Úmobilenet_v3_largeÚMobileNet_V3_Large_Weightsé   )Ú_utils)ÚDefaultBoxGenerator)Ú_validate_trainable_layers)ÚSSDÚSSDScoringHeadÚ%SSDLite320_MobileNet_V3_Large_WeightsÚssdlite320_mobilenet_v3_largeÚin_channelsÚout_channelsÚkernel_sizeÚ
norm_layer.Úreturnc                 óŽ   • [         R                  " [        U U UU U[         R                  S9[         R                  " XS5      5      $ )N)r#   Úgroupsr$   Úactivation_layerr   )r	   Ú
Sequentialr   ÚReLU6ÚConv2d)r!   r"   r#   r$   s       Úa/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/detection/ssdlite.pyÚ_prediction_blockr-      sC   € ô �=Š=äØØØ#ØØ!ÜŸX™Xñ	
ô 	�	Š	�+¨QÓ/óð ó    c                 óš   • [         R                  nUS-  n[         R                  " [        XSX#S9[        UUSSUUUS9[        XASX#S95      $ )Nr   r   )r#   r$   r(   r   )r#   Ústrider'   r$   r(   )r	   r*   r)   r   )r!   r"   r$   Ú
activationÚintermediate_channelss        r,   Ú_extra_blockr3   0   sf   € Ü—‘€JØ(¨AÑ-ÐÜ�=Š=äØ¸AÈ*ñ	
ô 	Ø!Ø!ØØØ(Ø!Ø'ñ	
ô 	Ø!¸QÈ:ñ	
ó!ð r.   Úconvc                 ó`  • U R                  5        Hš  n[        U[        R                  5      (       d  M$  [        R                  R
                  R                  UR                  SSS9  UR                  c  Mf  [        R                  R
                  R                  UR                  S5        Mœ     g )Ng        ç¸…ëQ¸ž?)ÚmeanÚstd)
ÚmodulesÚ
isinstancer	   r+   ÚtorchÚinitÚnormal_ÚweightÚbiasÚ	constant_)r4   Úlayers     r,   Ú_normal_initrB   I   sj   € Ø—‘–ˆÜ�eœRŸY™Y×'Ó'Ü�H‰H�M‰M×!Ñ! %§,¡,°S¸dÐ!ÑCØ�z‰zÓ%Ü—‘—‘×'Ñ'¨¯
©
°CÖ8ò	  r.   c            
       óˆ   ^ • \ rS rSrS\\   S\\   S\S\S\R                  4   4U 4S jjr	S\\
   S	\\\
4   4S
 jrSrU =r$ )ÚSSDLiteHeadéQ   r!   Únum_anchorsÚnum_classesr$   .c                 óf   >• [         TU ]  5         [        XX45      U l        [	        XU5      U l        g ©N)ÚsuperÚ__init__ÚSSDLiteClassificationHeadÚclassification_headÚSSDLiteRegressionHeadÚregression_head)Úselfr!   rF   rG   r$   Ú	__class__s        €r,   rK   ÚSSDLiteHead.__init__R   s/   ø€ ô 	‰ÑÔÜ#<¸[ÐWbÓ#oˆÔ Ü4°[ÈzÓZˆÕr.   Úxr%   c                 óH   • U R                  U5      U R                  U5      S.$ )N)Úbbox_regressionÚ
cls_logits)rO   rM   )rP   rS   s     r,   ÚforwardÚSSDLiteHead.forwardY   s(   € à#×3Ñ3°AÓ6Ø×2Ñ2°1Ó5ñ
ð 	
r.   )rM   rO   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚlistÚintr   r	   ÚModulerK   r
   ÚdictÚstrrW   Ú__static_attributes__Ú__classcell__©rQ   s   @r,   rD   rD   Q   sl   ø† ð[Ø ™9ð[Ø37¸±9ð[ØKNð[Ø\dÐehÐjl×jsÑjsÐesÑ\t÷[ð
˜˜f™ð 
¨$¨s°F¨{Ñ*;÷ 
ò 
r.   rD   c            
       óf   ^ • \ rS rSrS\\   S\\   S\S\S\R                  4   4U 4S jjr	Sr
U =r$ )	rL   é`   r!   rF   rG   r$   .c           	      óÊ   >• [         R                  " 5       n[        X5       H$  u  pgUR                  [	        XcU-  SU5      5        M&     [        U5        [        TU ]  XS5        g )Nr   ©r	   Ú
ModuleListÚzipÚappendr-   rB   rJ   rK   )	rP   r!   rF   rG   r$   rV   ÚchannelsÚanchorsrQ   s	           €r,   rK   Ú"SSDLiteClassificationHead.__init__a   sV   ø€ ô —]’]“_ˆ
Ü!$ [Ö!>ÑˆHØ×ÑÔ/°ÈÑ:OÐQRÐT^Ó_Ö`ñ "?ä�ZÔ Ü‰Ñ˜Õ1r.   © ©rY   rZ   r[   r\   r]   r^   r   r	   r_   rK   rb   rc   rd   s   @r,   rL   rL   `   sG   ø† ð2Ø ™9ð2Ø37¸±9ð2ØKNð2Ø\dÐehÐjl×jsÑjsÐesÑ\t÷2õ 2r.   rL   c                   ób   ^ • \ rS rSrS\\   S\\   S\S\R                  4   4U 4S jjr	Sr
U =r$ )rN   ék   r!   rF   r$   .c           	      óÎ   >• [         R                  " 5       n[        X5       H%  u  pVUR                  [	        USU-  SU5      5        M'     [        U5        [        TU ]  US5        g )Né   r   rh   )rP   r!   rF   r$   Úbbox_regrl   rm   rQ   s          €r,   rK   ÚSSDLiteRegressionHead.__init__l   sS   ø€ Ü—=’=“?ˆÜ!$ [Ö!>ÑˆHØ�O‰OÔ-¨h¸¸G¹ÀQÈ
ÓSÖTñ "?ä�XÔÜ‰Ñ˜ 1Õ%r.   ro   rp   rd   s   @r,   rN   rN   k   s=   ø† ð& D¨¡Ið &¸DÀ¹Ið &ÐS[Ð\_Ðac×ajÑajÐ\jÑSk÷ &õ &r.   rN   c                   ó–   ^ • \ rS rSr  SS\R
                  S\S\S\R
                  4   S\S\4
U 4S jjjr	S	\
S
\\\
4   4S jrSrU =r$ )Ú SSDLiteFeatureExtractorMobileNetét   ÚbackboneÚc4_posr$   .Ú
width_multÚ	min_depthc                 ó|  >^^• [         TU ]  5         [        U 5        X   R                  (       a  [	        S5      e[
        R                  " [
        R                  " / US U QX   R                  S   P76 [
        R                  " X   R                  SS  /XS-   S  Q76 5      U l        UU4S jn[
        R                  " [        US   R                  U" S5      U5      [        U" S5      U" S5      U5      [        U" S5      U" S5      U5      [        U" S5      U" S5      U5      /5      n[        U5        Xpl        g )	Nz0backbone[c4_pos].use_res_connect should be Falser   r   c                 ó4   >• [        T[        U T-  5      5      $ rI   )Úmaxr^   )Údr}   r|   s    €€r,   Ú<lambda>Ú;SSDLiteFeatureExtractorMobileNet.__init__.<locals>.<lambda>‰   s   ø€ œc )¬S°°Z±Ó-@ÔAr.   éÿÿÿÿi   é   é€   )rJ   rK   r   Úuse_res_connectÚ
ValueErrorr	   r)   ÚblockÚfeaturesri   r3   r"   rB   Úextra)	rP   rz   r{   r$   r|   r}   Ú	get_depthr‹   rQ   s	       ``  €r,   rK   Ú)SSDLiteFeatureExtractorMobileNet.__init__u   s  ú€ ô 	‰ÑÔÜ˜DÔ!àÑ×+×+ÜÐOÓPÐPäŸšä�MŠMÐH˜8 G VÐ,ÐH¨hÑ.>×.DÑ.DÀQÑ.GÒHÜ�MŠM˜(Ñ*×0Ñ0°°Ð4ÐN°xÈÁ
ÀÐ7MÒNó
ˆŒõ Bˆ	Ü—’ä˜X b™\×6Ñ6¹	À#»È
ÓSÜ™Y s›^©Y°s«^¸ZÓHÜ™Y s›^©Y°s«^¸ZÓHÜ™Y s›^©Y°s«^¸ZÓHð	ó
ˆô 	�UÔà�
r.   rS   r%   c           	      ó*  • / nU R                    H  nU" U5      nUR                  U5        M     U R                   H  nU" U5      nUR                  U5        M     [        [	        U5       VVs/ s H  u  pE[        U5      U4PM     snn5      $ s  snnf rI   )rŠ   rk   r‹   r   Ú	enumeratera   )rP   rS   Úoutputr‰   ÚiÚvs         r,   rW   Ú(SSDLiteFeatureExtractorMobileNet.forward–   s   € àˆØ—]”]ˆEÙ�a“ˆAØ�M‰M˜!Öñ #ð —Z”ZˆEÙ�a“ˆAØ�M‰M˜!Öñ  ô ´I¸fÔ4EÔFÒ4E©D¨AœS ›V Q›KÑ4EÒFÓGÐGùÓFs   Á.B
)r‹   rŠ   )g      ð?é   )rY   rZ   r[   r\   r	   r_   r^   r   ÚfloatrK   r
   r`   ra   rW   rb   rc   rd   s   @r,   rx   rx   t   s|   ø† ð  Øñà—)‘)ðð ðð ˜S "§)¡)˜^Ñ,ð	ð
 ðð ÷ð ðBH˜ð H D¨¨f¨Ñ$5÷ Hò Hr.   rx   rz   Útrainable_layersc           
      ó¶  • U R                   n S/[        U 5       VVs/ s H  u  p4[        USS5      (       d  M  UPM     snn-   [        U 5      S-
  /-   n[        U5      nSUs=::  a  U::  d  O  [	        S5      eUS:X  a  [        U 5      OXVU-
     nU S U  H+  nUR                  5        H  nUR                  S5        M     M-     [        XS   U5      $ s  snnf )Nr   Ú_is_cnFr   zYtrainable_layers should be in the range [0, {num_stages}], instead got {trainable_layers}éþÿÿÿ)rŠ   r�   ÚgetattrÚlenrˆ   Ú
parametersÚrequires_grad_rx   )	rz   r–   r$   r‘   ÚbÚstage_indicesÚ
num_stagesÚfreeze_beforeÚ	parameters	            r,   Ú_mobilenet_extractorr£   ¤   sà   € ð
 × Ñ €Hð �C¬°8Ô)<Ô\Ò)<¡ ÄÈÈ8ÐUZ×@[Ÿ1Ñ)<Ò\Ñ\Ô`cÐdlÓ`mÐpqÑ`qÐ_rÑr€MÜ�]Ó#€Jð Ð Õ. JÕ.ÜÐtÓuÐuØ%5¸Ó%:”C˜”MÀÐ[kÑNkÑ@l€Mà�n�}Ó%ˆØŸ™žˆIØ×$Ñ$ UÖ+ó (ñ &ô ,¨HÀBÑ6GÈÓTÐTùó ]s
   �C¹Cc                   óB   • \ rS rSr\" S\S\SSSSS00S	S
SS.S9r\rSr	g)r   é»   zShttps://download.pytorch.org/models/ssdlite320_mobilenet_v3_large_coco-a79551df.pthi¼}4 )r   r   z]https://github.com/pytorch/vision/tree/main/references/detection#ssdlite320-mobilenetv3-largezCOCO-val2017Úbox_mapgÍÌÌÌÌL5@g-²�ï§â?g¼t“Ö*@zSThese weights were produced by following a similar training recipe as on the paper.)Ú
num_paramsÚ
categoriesÚmin_sizeÚrecipeÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsÚmetaro   N)
rY   rZ   r[   r\   r   r   r   ÚCOCO_V1ÚDEFAULTrb   ro   r.   r,   r   r   »   sG   † ÙØaØ"à!Ø*ØØuàØ˜tð!ðð
 Ø Ønñ
ñ€Gð$ ƒGr.   Ú
pretrainedÚpretrained_backbone)ÚweightsÚweights_backboneT)r¶   ÚprogressrG   r·   Útrainable_backbone_layersr$   r¶   r¸   rG   r·   r¹   Úkwargsc           
      óž  • [         R                  U 5      n [        R                  " U5      nSU;   a  [        R                  " S5        U b&  Sn[        SU[        U R                  S   5      5      nOUc  Sn[        U SL=(       d    USLUSS5      nUSL nUc  [        [        R                  SS	S
9n[        SX1XWS.UD6nUc  [        U5        [        UUU5      nSn	[        [!        S5       V
s/ s H  n
SS/PM	     sn
SSS9n["        R$                  " X‰5      nUR'                  5       n[        U5      [        UR(                  5      :w  a-  [+        S[        U5       S[        UR(                  5       35      eSSSS/ SQ/ SQS.n0 UEUEn[-        UUU	U4S[/        XÍX%5      0UD6nU b  UR1                  U R3                  USS95        U$ s  sn
f )a  SSDlite model architecture with input size 320x320 and a MobileNetV3 Large backbone, as
described at `Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`__ and
`MobileNetV2: Inverted Residuals and Linear Bottlenecks <https://arxiv.org/abs/1801.04381>`__.

.. betastatus:: detection module

See :func:`~torchvision.models.detection.ssd300_vgg16` for more details.

Example:

    >>> model = torchvision.models.detection.ssdlite320_mobilenet_v3_large(weights=SSDLite320_MobileNet_V3_Large_Weights.DEFAULT)
    >>> model.eval()
    >>> x = [torch.rand(3, 320, 320), torch.rand(3, 500, 400)]
    >>> predictions = model(x)

Args:
    weights (:class:`~torchvision.models.detection.SSDLite320_MobileNet_V3_Large_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.detection.SSDLite320_MobileNet_V3_Large_Weights` below for
        more details, and possible values. By default, no pre-trained
        weights are used.
    progress (bool, optional): If True, displays a progress bar of the
        download to stderr. Default is True.
    num_classes (int, optional): number of output classes of the model
        (including the background).
    weights_backbone (:class:`~torchvision.models.MobileNet_V3_Large_Weights`, optional): The pretrained
        weights for the backbone.
    trainable_backbone_layers (int, optional): number of trainable (not frozen) layers
        starting from final block. Valid values are between 0 and 6, with 6 meaning all
        backbone layers are trainable. If ``None`` is passed (the default) this value is
        set to 6.
    norm_layer (callable, optional): Module specifying the normalization layer to use.
    **kwargs: parameters passed to the ``torchvision.models.detection.ssd.SSD``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/detection/ssdlite.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.detection.SSDLite320_MobileNet_V3_Large_Weights
    :members:
Úsizez?The size of the model is already fixed; ignoring the parameter.NrG   r¨   é[   é   gü©ñÒMbP?r6   )ÚepsÚmomentum)r¶   r¸   r$   Úreduced_tail)é@  rÂ   r   r   gš™™™™™É?gffffffî?)Ú	min_ratioÚ	max_ratioz4The length of the output channels from the backbone z? do not match the length of the anchor generator aspect ratios gš™™™™™á?i,  )ç      à?rÅ   rÅ   )Úscore_threshÚ
nms_threshÚdetections_per_imgÚtopk_candidatesÚ
image_meanÚ	image_stdÚheadT)r¸   Ú
check_hashro   )r   Úverifyr   ÚwarningsÚwarnr   r›   r±   r   r   r	   ÚBatchNorm2dr   rB   r£   r   ÚrangeÚ	det_utilsÚretrieve_out_channelsÚnum_anchors_per_locationÚaspect_ratiosrˆ   r   rD   Úload_state_dictÚget_state_dict)r¶   r¸   rG   r·   r¹   r$   rº   Úreduce_tailrz   r¼   Ú_Úanchor_generatorr"   rF   ÚdefaultsÚmodels                   r,   r    r    Ñ   sB  € ôp 4×:Ñ:¸7ÓC€GÜ1×8Ò8Ð9IÓJÐà�ÓÜ�ŠÐWÔXàÑØÐÜ+¨M¸;ÌÈGÏLÉLÐYeÑLfÓHgÓh‰Ø	Ñ	Øˆä :Ø�tÐ×;Ð/°tÐ;Ð=VÐXYÐ[\ó!Ðð
 # dÐ*€KàÑÜœRŸ^™^°ÀÑFˆ
ä!ð Ø À
ñØhnñ€Hð Ñä�XÔÜ#ØØ!Øó€Hð €DÜ*¼EÀ!¼HÓ+EºH°q¨Q°«F¹HÑ+EÐQTÐ`dÑeÐÜ×2Ò2°8ÓB€LØ"×;Ñ;Ó=€KÜ
ˆ<ÓœCÐ 0× >Ñ >Ó?Ó?ÜØBÄ3À|ÓCTÐBUð  VUô  VYð  Zj÷  Zxñ  Zxó  Vyð  Uzð  {ó
ð 	
ð
 ØØ!Øò &Ú$ñ	€Hð )�XÐ( Ð(€FÜØØØØñ	ô
 ˜°KÓLðð ñ€Eð ÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lùò? ,Fs   Ã.G
)<rÏ   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r;   r	   r
   Úops.miscr   Útransforms._presetsr   Úutilsr   Ú r   Ú_apir   r   r   Ú_metar   r   r   r   Úmobilenetv3r   r   rÓ   Úanchor_utilsr   Úbackbone_utilsr   Ússdr   r   Ú__all__r^   r_   r)   r-   r3   rB   rD   rL   rN   rx   ÚMobileNetV2ÚMobileNetV3r£   r   r²   ÚIMAGENET1K_V1Úboolr    ro   r.   r,   Ú<module>rð      sD  ðÛ Ý #Ý ß 1Ó 1ã ß å ,Ý 2Ý (Ý ß 7Ñ 7Ý $ß Cß HÝ !Ý -Ý 6ß $ð ,Ø#ð€ðØðØ$'ðØ69ðØGOÐPSÐUW×U^ÑU^ÐP^ÑG_ðà‡]�]ôð$˜cð °ð À(È3ÐPR×PYÑPYÈ>ÑBZð Ð_a×_lÑ_lô ð29�r—y‘yô 9ô
�"—)‘)ô 
ô2 ô 2ô&˜Nô &ô-H r§y¡yô -Hð`UØ�I×)Ñ)¨9×+@Ñ+@Ð@ÑAðUàðUð ˜˜bŸi™i˜Ñ(ôUô.¨Kô ñ, ÓÙØÐ@×HÑHÐIØ+Ð-G×-UÑ-UÐVñð @DØØ!%Ø=W×=eÑ=eØ/3Ø59òuàÐ;Ñ<ðuð ðuð ˜#‘ð	uð
 Ð9Ñ:ðuð  (¨™}ðuð ˜ # r§y¡y .Ñ1Ñ2ðuð ðuð 	ôuó	ó ñ
ur.   