
    QЦi3                        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	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\RZ                  4   S\R\                  4
S jr/S\,S\,S\S\RZ                  4   S\R\                  4S jr0S\RZ                  4S  jr1 " S! S"\RZ                  5      r2 " S# S$\*5      r3 " S% S&\*5      r4 " S' S(\RZ                  5      r5S)\\Rl                  \Rn                  4   S*\,S\S\RZ                  4   4S+ jr8 " S, S\5      r9\" 5       \" S-\9Rt                  4S.\"Rv                  4S/9SS0S\"Rv                  SSS1.S2\
\9   S3\<S4\
\,   S5\
\"   S6\
\,   S\
\S\RZ                  4      S7\S\)4S8 jj5       5       r=g)9    N)OrderedDict)partial)AnyCallableDictList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       c/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torchvision/models/detection/ssdlite.py_prediction_blockr/      sC     ==#!XX	
 			+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_blockr5   0   sf    J(A-==A*	
 	!!(!'	
 	!Q:	
! r0   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_)r6   layers     r.   _normal_initrD   I   sj    eRYY''HHMM!!%,,Sd!Czz%''

C8	  r0   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$ )SSDLiteHeadQ   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#   rH   rI   r&   	__class__s        r.   rM   SSDLiteHead.__init__R   s/     	#<[Wb#o 4[zZr0   xr'   c                 H    U R                  U5      U R                  U5      S.$ )N)bbox_regression
cls_logits)rQ   rO   )rR   rU   s     r.   forwardSSDLiteHead.forwardY   s(    #33A62215
 	
r0   )rO   rQ   )__name__
__module____qualname____firstlineno__r   intr   r   ModulerM   r   r   strrY   __static_attributes____classcell__rS   s   @r.   rF   rF   Q   sl    [9[379[KN[\dehjljsjses\t[
f 
$sF{*; 
 
r0   rF   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$ )	rN   `   r#   rH   rI   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/   rD   rL   rM   )	rR   r#   rH   rI   r&   rX   channelsanchorsrS   s	           r.   rM   "SSDLiteClassificationHead.__init__a   sV     ]]_
!$[!>H/:OQRT^_` "?Z 1r0    r[   r\   r]   r^   r   r_   r   r   r`   rM   rb   rc   rd   s   @r.   rN   rN   `   sG    2923792KN2\dehjljsjses\t2 2r0   rN   c                   b   ^  \ rS rSrS\\   S\\   S\S\R                  4   4U 4S jjr	Sr
U =r$ )rP   k   r#   rH   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   )rR   r#   rH   r&   bbox_regrl   rm   rS   s          r.   rM   SSDLiteRegressionHead.__init__l   sS    ==?!$[!>HOO-hGQ
ST "?X1%r0   ro   rp   rd   s   @r.   rP   rP   k   s=    &DI &DI &S[\_acajaj\jSk & &r0   rP   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$ ) SSDLiteFeatureExtractorMobileNett   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      $ rK   )maxr_   )dr}   r|   s    r.   <lambda>;SSDLiteFeatureExtractorMobileNet.__init__.<locals>.<lambda>   s    c)SZ-@Ar0   i         )rL   rM   r   use_res_connect
ValueErrorr   r+   blockfeaturesri   r5   r$   rD   extra)	rR   rz   r{   r&   r|   r}   	get_depthr   rS   s	       ``  r.   rM   )SSDLiteFeatureExtractorMobileNet.__init__u   s    	D!++OPPMMH8GV,Hh.>.D.DQ.GHMM(*004Nx
7MN
 B	Xb\66	#
SYs^Ys^ZHYs^Ys^ZHYs^Ys^ZH	
 	U
r0   rU   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 rK   )r   rk   r   r   	enumeratera   )rR   rU   outputr   ivs         r.   rY   (SSDLiteFeatureExtractorMobileNet.forward   s    ]]EaAMM! # ZZEaAMM!   If4EF4EDASVQK4EFGGFs   .B
)r   r   )g      ?   )r[   r\   r]   r^   r   r`   r_   r   floatrM   r   r   ra   rY   rb   rc   rd   s   @r.   rx   rx   t   s|      ))  S"))^,	
   BH HDf$5 H Hr0   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)<\)<8UZ@[1)<\\`cdl`mpq`q_rrM]#J  .J.tuu%5%:CM[kNk@lMn}%I$$U+ ( & ,HB6G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_mapgL5@g-?gt*@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)
r[   r\   r]   r^   r   r   r   COCO_V1DEFAULTrb   ro   r0   r.   r!   r!      sG    a"!*ut!
  n
G$ Gr0   
pretrainedpretrained_backbone)weightsweights_backboneT)r   progressrI   r   trainable_backbone_layersr&   r   r   rI   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$                  " X5      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[/        XX%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.NrI   r   [      gMbP?r8   )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   rD   r   r   range	det_utilsretrieve_out_channelsnum_anchors_per_locationaspect_ratiosr   r   rF   load_state_dictget_state_dict)r   r   rI   r   r   r&   r   reduce_tailrz   r   _anchor_generatorr$   rH   defaultsmodels                   r.   r"   r"      sB   p 4::7CG1889IJWX+M;GLLYeLfHgh		 :t;/t;=VXY[\!
 #d*KR^^F
!  
hnH X#!H D*E!H+EHqQFH+EQT`de228BL";;=K
<C 0 > >??B3|CTBU  VU  VY  Zj  Zx  Zx  Vy  Uz  {
 	

 ! &$	H )X((F	
 KL E g44hSW4XYL? ,Fs   .G
)>r   collectionsr   	functoolsr   typingr   r   r   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/   r5   rD   rF   rN   rP   rx   MobileNetV2MobileNetV3r   r!   r   IMAGENET1K_V1boolr"   ro   r0   r.   <module>r      sD    #  = =   , 2 (  7 7 $ C H ! - 6 $ ,#$'69GOPSUWU^U^P^G_]]$c  (3PRPYPY>BZ _a_l_l 29ryy 9
")) 
2 2&N &-Hryy -H`UI))9+@+@@AUU bii(U.K , @HHI+-G-U-UV @D!%=W=e=e/359u;<u u #	u
 9:u  (}u #ryy.12u u 	u	 
ur0   