Ë
    þÍ:j¬?  ã                   ój  — d dl mZ d dlmZ d dlmZmZmZ d dlZd dlm	Z	m
Z
 ddlmZmZ ddlmZ dd	lmZ d
dlmZmZmZ d
dlmZ d
dlmZmZmZ g d¢Z G d„ d«      Z G d„ de	j>                  «      Z  G d„ de	j>                  «      Z!	 d-de"de#de$de$def
d„Z%de&e   de'dee   de$dede!fd „Z(d!ed"œZ) G d#„ d$e«      Z* G d%„ d&e«      Z+ e«        ed'e*jX                  f¬(«      dd)d*œdee*   de$dede!fd+„«       «       Z- e«        ed'e+jX                  f¬(«      dd)d*œdee+   de$dede!fd,„«       «       Z.y).é    )ÚSequence)Úpartial)ÚAnyÚCallableÚOptionalN)ÚnnÚTensoré   )ÚConv2dNormActivationÚSqueezeExcitation)ÚImageClassification)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_make_divisibleÚ_ovewrite_named_paramÚhandle_legacy_interface)ÚMobileNetV3ÚMobileNet_V3_Large_WeightsÚMobileNet_V3_Small_WeightsÚmobilenet_v3_largeÚmobilenet_v3_smallc                   óR   — e Zd Zdedededededededed	efd
„Zeded	efd„«       Z	y)ÚInvertedResidualConfigÚinput_channelsÚkernelÚexpanded_channelsÚout_channelsÚuse_seÚ
activationÚstrideÚdilationÚ
width_multc
                 óÚ   — | j                  ||	«      | _        || _        | j                  ||	«      | _        | j                  ||	«      | _        || _        |dk(  | _        || _        || _        y )NÚHS)	Úadjust_channelsr   r   r    r!   r"   Úuse_hsr$   r%   )
Úselfr   r   r    r!   r"   r#   r$   r%   r&   s
             ús/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/models/mobilenetv3.pyÚ__init__zInvertedResidualConfig.__init__   sl   € ð #×2Ñ2°>À:ÓNˆÔØˆŒØ!%×!5Ñ!5Ð6GÈÓ!TˆÔØ ×0Ñ0°¸zÓJˆÔØˆŒØ  DÑ(ˆŒØˆŒØ ˆ�ó    Úchannelsc                 ó    — t        | |z  d«      S )Né   )r   )r/   r&   s     r,   r)   z&InvertedResidualConfig.adjust_channels0   s   € ä˜x¨*Ñ4°aÓ8Ð8r.   N)
Ú__name__Ú
__module__Ú__qualname__ÚintÚboolÚstrÚfloatr-   Ústaticmethodr)   © r.   r,   r   r      s�   „ ð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð ð!ð ð!ð ð!ð ó!ð* ð9 #ð 9°5ò 9ó ñ9r.   r   c            	       ó    ‡ — e Zd Z eeej                  ¬«      fdededej                  f   dedej                  f   fˆ fd„Z
dedefd	„Zˆ xZS )
ÚInvertedResidual)Úscale_activationÚcnfÚ
norm_layer.Úse_layerc                 ó  •— t         ‰| �  «        d|j                  cxk  rdk  st        d«      ‚ t        d«      ‚|j                  dk(  xr |j                  |j
                  k(  | _        g }|j                  rt        j                  nt        j                  }|j                  |j                  k7  r3|j                  t        |j                  |j                  d||¬«      «       |j                  dkD  rdn|j                  }|j                  t        |j                  |j                  |j                  ||j                  |j                  ||¬«      «       |j                   r;t#        |j                  dz  d«      }|j                   ||j                  |«      «       |j                  t        |j                  |j
                  d|d ¬«      «       t        j$                  |Ž | _        |j
                  | _        |j                  dkD  | _        y )Nr   r
   zillegal stride value©Úkernel_sizer?   Úactivation_layer)rC   r$   r%   Úgroupsr?   rD   é   r1   )Úsuperr-   r$   Ú
ValueErrorr   r!   Úuse_res_connectr*   r   Ú	HardswishÚReLUr    Úappendr   r%   r   r"   r   Ú
SequentialÚblockÚ_is_cn)	r+   r>   r?   r@   ÚlayersrD   r$   Úsqueeze_channelsÚ	__class__s	           €r,   r-   zInvertedResidual.__init__7   s»  ø€ ô 	‰ÑÔØ�S—Z‘ZÔ$ 1Ò$ÜÐ3Ó4Ð4ð %ÜÐ3Ó4Ð4à"Ÿz™z¨Q™ÒY°3×3EÑ3EÈ×IYÑIYÑ3YˆÔà"$ˆØ+.¯:ª:œ2Ÿ<š<¼2¿7¹7Ðð × Ñ  C×$6Ñ$6Ò6Ø�M‰MÜ$Ø×&Ñ&Ø×)Ñ)Ø !Ø)Ø%5ôôð —l‘l QÒ&‘¨C¯J©JˆØ�‰Ü Ø×%Ñ%Ø×%Ñ%ØŸJ™JØØŸ™Ø×,Ñ,Ø%Ø!1ô	ô	
ð �:Š:Ü.¨s×/DÑ/DÈÑ/IÈ1ÓMÐØ�M‰M™( 3×#8Ñ#8Ð:JÓKÔLð 	�‰Ü Ø×%Ñ% s×'7Ñ'7ÀQÐS]Ðptôô	
ô —]‘] FÐ+ˆŒ
Ø×,Ñ,ˆÔØ—j‘j 1‘nˆ�r.   ÚinputÚreturnc                 óJ   — | j                  |«      }| j                  r||z  }|S ©N)rN   rI   )r+   rS   Úresults      r,   ÚforwardzInvertedResidual.forwardo   s'   € Ø—‘˜EÓ"ˆØ×ÒØ�e‰OˆFØˆr.   )r2   r3   r4   r   ÚSElayerr   ÚHardsigmoidr   r   ÚModuler-   r	   rX   Ú__classcell__©rR   s   @r,   r<   r<   5   sb   ø„ ñ .5°WÈrÏ~É~Ô-^ñ	6%à#ð6%ð ˜S "§)¡)˜^Ñ,ð6%ð ˜3 §	¡	˜>Ñ*õ	6%ðp˜Vð ¨÷ r.   r<   c                   ó¸   ‡ — e Zd Z	 	 	 	 ddee   dededeedej                  f      deedej                  f      de
d	ed
dfˆ fd„Zded
efd„Zded
efd„Zˆ xZS )r   NÚinverted_residual_settingÚlast_channelÚnum_classesrN   .r?   ÚdropoutÚkwargsrT   c           
      ó¨  •— t         ‰| �  «        t        | «       |st        d«      ‚t	        |t
        «      r't        |D �cg c]  }t	        |t        «      ‘Œ c}«      st        d«      ‚|€t        }|€t        t        j                  dd¬«      }g }	|d   j                  }
|	j                  t        d|
dd	|t        j                   ¬
«      «       |D ]  }|	j                   |||«      «       Œ |d   j"                  }d|z  }|	j                  t        ||d|t        j                   ¬«      «       t        j$                  |	Ž | _        t        j(                  d«      | _        t        j$                  t        j,                  ||«      t        j                   d¬«      t        j.                  |d¬«      t        j,                  ||«      «      | _        | j3                  «       D �]l  }t	        |t        j4                  «      rbt        j6                  j9                  |j:                  d¬«       |j<                  €ŒVt        j6                  j?                  |j<                  «       Œ€t	        |t        j                  t        j@                  f«      rSt        j6                  jC                  |j:                  «       t        j6                  j?                  |j<                  «       Œýt	        |t        j,                  «      s�Œt        j6                  jE                  |j:                  dd«       t        j6                  j?                  |j<                  «       �Œo yc c}w )a.  
        MobileNet V3 main class

        Args:
            inverted_residual_setting (List[InvertedResidualConfig]): Network structure
            last_channel (int): The number of channels on the penultimate layer
            num_classes (int): Number of classes
            block (Optional[Callable[..., nn.Module]]): Module specifying inverted residual building block for mobilenet
            norm_layer (Optional[Callable[..., nn.Module]]): Module specifying the normalization layer to use
            dropout (float): The droupout probability
        z1The inverted_residual_setting should not be emptyzDThe inverted_residual_setting should be List[InvertedResidualConfig]Ngü©ñÒMbP?g{®Gáz„?)ÚepsÚmomentumr   é   r
   )rC   r$   r?   rD   éÿÿÿÿé   r   rB   T)Úinplace)Úprj   Úfan_out)Úmode)#rG   r-   r   rH   Ú
isinstancer   Úallr   Ú	TypeErrorr<   r   r   ÚBatchNorm2dr   rL   r   rJ   r!   rM   ÚfeaturesÚAdaptiveAvgPool2dÚavgpoolÚLinearÚDropoutÚ
classifierÚmodulesÚConv2dÚinitÚkaiming_normal_ÚweightÚbiasÚzeros_Ú	GroupNormÚones_Únormal_)r+   r_   r`   ra   rN   r?   rb   rc   ÚsrP   Úfirstconv_output_channelsr>   Úlastconv_input_channelsÚlastconv_output_channelsÚmrR   s                  €r,   r-   zMobileNetV3.__init__w   sq  ø€ ô* 	‰ÑÔÜ˜DÔ!á(ÜÐPÓQÐQäÐ0´(Ô;ÜÐD]Ö^¸q”Z Ô#9Õ:Ò^Ô_äÐbÓcÐcàˆ=Ü$ˆEàÐÜ ¤§¡°UÀTÔJˆJà"$ˆð %>¸aÑ$@×$OÑ$OÐ!Ø�‰Ü ØØ)ØØØ%Ü!#§¡ôô		
ð -ò 	2ˆCØ�M‰M™%  ZÓ0Õ1ð	2ð #<¸BÑ"?×"LÑ"LÐØ#$Ð'>Ñ#>Ð Ø�‰Ü Ø'Ø(ØØ%Ü!#§¡ôô	
ô Ÿ™ vÐ.ˆŒÜ×+Ñ+¨AÓ.ˆŒÜŸ-™-Ü�I‰IÐ.°Ó=Ü�L‰L Ô&Ü�J‰J˜¨$Ô/Ü�I‰I�l KÓ0ó	
ˆŒð —‘“ó 
	'ˆAÜ˜!œRŸY™YÔ'Ü—‘×'Ñ'¨¯©°yÐ'ÔAØ—6‘6Ñ%Ü—G‘G—N‘N 1§6¡6Õ*Ü˜A¤§¡´·±Ð=Ô>Ü—‘—‘˜aŸh™hÔ'Ü—‘—‘˜qŸv™vÕ&Ü˜AœrŸy™yÖ)Ü—‘—‘ §¡¨!¨TÔ2Ü—‘—‘˜qŸv™vÖ&ñ
	'ùòg _s   ÁMÚxc                 ó˜   — | j                  |«      }| j                  |«      }t        j                  |d«      }| j	                  |«      }|S )Nr   )rr   rt   ÚtorchÚflattenrw   ©r+   r‡   s     r,   Ú_forward_implzMobileNetV3._forward_implÒ   s@   € Ø�M‰M˜!Óˆà�L‰L˜‹OˆÜ�M‰M˜!˜QÓˆà�O‰O˜AÓˆàˆr.   c                 ó$   — | j                  |«      S rV   )rŒ   r‹   s     r,   rX   zMobileNetV3.forwardÜ   s   € Ø×!Ñ! !Ó$Ð$r.   )iè  NNgš™™™™™É?)r2   r3   r4   Úlistr   r5   r   r   r   r[   r8   r   r-   r	   rŒ   rX   r\   r]   s   @r,   r   r   v   s¾   ø„ ð
  Ø48Ø9=ØñY'à#'Ð(>Ñ#?ðY'ð ðY'ð ð	Y'ð
 ˜  b§i¡i Ñ0Ñ1ðY'ð ˜X c¨2¯9©9 nÑ5Ñ6ðY'ð ðY'ð ðY'ð 
õY'ðv˜vð ¨&ó ð%˜ð % F÷ %r.   r   Úarchr&   Úreduced_tailÚdilatedrc   c                 ó  — |rdnd}|rdnd}t        t        |¬«      }t        t        j                  |¬«      }| dk(  rø |dddddddd«       |ddd	d
dddd«       |d
ddd
dddd«       |d
ddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddd|z  ddd|«       |d|z  dd|z  d|z  ddd|«       |d|z  dd|z  d|z  ddd|«      g}	 |d|z  «      }
|	|
fS | dk(  rÀ |dddddddd«       |dddd
dddd«       |d
ddd
dddd«       |d
ddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |dddddddd«       |ddd d|z  ddd|«       |d|z  dd!|z  d|z  ddd|«       |d|z  dd!|z  d|z  ddd|«      g}	 |d"|z  «      }
|	|
fS t        d#| › �«      ‚)$Nr
   r   )r&   r   é   rg   FÚREé@   é   éH   é   é(   Téx   éð   éP   r(   éÈ   é¸   ià  ép   i   é    iÀ  i   r   éX   é`   é0   é�   i   i@  i   zUnsupported model type )r   r   r)   rH   )r�   r&   r�   r‘   rc   Úreduce_dividerr%   Ú
bneck_confr)   r_   r`   s              r,   Ú_mobilenet_v3_confr§   à   s>  € ñ '‘Q¨A€NÙ‰q €HäÔ/¸JÔG€JÜÔ4×DÑDÐQ[Ô\€OàÐ#Ò#á�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " d¨D°!°QÓ7Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 3¨¨d°A°qÓ9Ù�s˜A˜s C¨¨t°Q¸Ó:Ù�s˜A˜s C¨>Ñ$9¸4ÀÀqÈ(ÓSÙ�s˜nÑ,¨a°¸Ñ1FÈÈ~ÑH]Ð_cÐeiÐklÐnvÓwÙ�s˜nÑ,¨a°¸Ñ1FÈÈ~ÑH]Ð_cÐeiÐklÐnvÓwð%
Ð!ñ" ' t¨~Ñ'=Ó>ˆð& % lÐ2Ð2ð% 
Ð%Ò	%á�r˜1˜b " d¨D°!°QÓ7Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " d¨D°!°QÓ7Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2¨Ñ#7¸¸tÀQÈÓQÙ�r˜^Ñ+¨Q°°~Ñ0EÀrÈ^ÑG[Ð]aÐcgÐijÐltÓuÙ�r˜^Ñ+¨Q°°~Ñ0EÀrÈ^ÑG[Ð]aÐcgÐijÐltÓuð%
Ð!ñ ' t¨~Ñ'=Ó>ˆð % lÐ2Ð2ô Ð2°4°&Ð9Ó:Ð:r.   r_   r`   ÚweightsÚprogressrT   c                 ó²   — |�#t        |dt        |j                  d   «      «       t        | |fi |¤Ž}|�"|j	                  |j                  |d¬«      «       |S )Nra   Ú
categoriesT)r©   Ú
check_hash)r   ÚlenÚmetar   Úload_state_dictÚget_state_dict)r_   r`   r¨   r©   rc   Úmodels         r,   Ú_mobilenet_v3r²     s`   € ð ÐÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUäÐ1°<ÑJÀ6ÑJ€EàÐØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYà€Lr.   )r   r   )Úmin_sizer«   c                   óž   — e Zd Z ed eed¬«      i e¥dddddd	œid
dddœ¥¬«      Z ed eedd¬«      i e¥dddddd	œid
dddœ¥¬«      ZeZ	y)r   zChttps://download.pytorch.org/models/mobilenet_v3_large-8738ca79.pthéà   ©Ú	crop_sizeiªS ú^https://github.com/pytorch/vision/tree/main/references/classification#mobilenetv3-large--smallúImageNet-1Kg¦›Ä °‚R@gö(\�ÂÕV@©zacc@1zacc@5g-²�ï§ÆË?gw¾Ÿ/5@zJThese weights were trained from scratch by using a simple training recipe.©Ú
num_paramsÚrecipeÚ_metricsÚ_opsÚ
_file_sizeÚ_docs©ÚurlÚ
transformsr®   zChttps://download.pytorch.org/models/mobilenet_v3_large-5c1a4163.pthéè   )r·   Úresize_sizezHhttps://github.com/pytorch/vision/issues/3995#new-recipe-with-reg-tuningg¨ÆK7‰ÑR@gNbX9$W@g¬Zd5@a/  
                These weights improve marginally upon the results of the original paper by using a modified version of
                TorchVision's `new training recipe
                <https://pytorch.org/blog/how-to-train-state-of-the-art-models-using-torchvision-latest-primitives/>`_.
            N)
r2   r3   r4   r   r   r   Ú_COMMON_METAÚIMAGENET1K_V1ÚIMAGENET1K_V2ÚDEFAULTr:   r.   r,   r   r   )  s«   „ ÙØQÙÐ.¸#Ô>ð
Øð
à!ØvàØ#Ø#ñ ðð Ø Øeò
ô€Mñ$ ØQÙÐ.¸#È3ÔOð
Øð
à!Ø`àØ#Ø#ñ ðð Ø ðò
ô€Mð, �Gr.   r   c                   óV   — e Zd Z ed eed¬«      i e¥dddddd	œid
dddœ¥¬«      ZeZy)r   zChttps://download.pytorch.org/models/mobilenet_v3_small-047dcff4.pthrµ   r¶   iÍ& r¸   r¹   g˜nƒÀêP@g}?5^ºÙU@rº   gÉv¾Ÿ/­?gœÄ °r¨#@z}
                These weights improve upon the results of the original paper by using a simple training recipe.
            r»   rÂ   N)	r2   r3   r4   r   r   r   rÇ   rÈ   rÊ   r:   r.   r,   r   r   U  sY   „ ÙØQÙÐ.¸#Ô>ð
Øð
à!ØvàØ#Ø#ñ ðð Øðò
ô€Mð( �Gr.   r   Ú
pretrained)r¨   T)r¨   r©   c                 óf   — t         j                  | «      } t        di |¤Ž\  }}t        ||| |fi |¤ŽS )a³  
    Constructs a large MobileNetV3 architecture from
    `Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`__.

    Args:
        weights (:class:`~torchvision.models.MobileNet_V3_Large_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.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.
        **kwargs: parameters passed to the ``torchvision.models.mobilenet.MobileNetV3``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/mobilenetv3.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.MobileNet_V3_Large_Weights
        :members:
    )r   )r   Úverifyr§   r²   ©r¨   r©   rc   r_   r`   s        r,   r   r   m  ó@   € ô2 )×/Ñ/°Ó8€Gä.@Ñ.`ÐY_Ñ.`Ñ+Ð˜|ÜÐ2°LÀ'È8Ñ^ÐW]Ñ^Ð^r.   c                 óf   — t         j                  | «      } t        di |¤Ž\  }}t        ||| |fi |¤ŽS )a³  
    Constructs a small MobileNetV3 architecture from
    `Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`__.

    Args:
        weights (:class:`~torchvision.models.MobileNet_V3_Small_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.MobileNet_V3_Small_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.
        **kwargs: parameters passed to the ``torchvision.models.mobilenet.MobileNetV3``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/mobilenetv3.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.MobileNet_V3_Small_Weights
        :members:
    )r   )r   rÎ   r§   r²   rÏ   s        r,   r   r   Œ  rÐ   r.   )g      ð?FF)/Úcollections.abcr   Ú	functoolsr   Útypingr   r   r   r‰   r   r	   Úops.miscr   r   rY   Útransforms._presetsr   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   r   Ú__all__r   r[   r<   r   r7   r8   r6   r§   rŽ   r5   r²   rÇ   r   r   rÈ   r   r   r:   r.   r,   ú<module>rÜ      sÍ  ðÝ $Ý ß *Ñ *ã ß ç IÝ 5Ý 'ß 6Ñ 6Ý 'ß SÑ Sò€÷9ñ 9ô8>�r—y‘yô >ôBg%�"—)‘)ô g%ðV UZñ.3Ø
ð.3Ø ð.3Ø6:ð.3ØMQð.3Øehó.3ðbØ#Ð$:Ñ;ðàðð �kÑ"ðð ð	ð
 ðð óð& Ø&ñ€ô) ô )ôX ô ñ0 ÓÙ ,Ð0J×0XÑ0XÐ!YÔZà7;Èdò_ØÐ3Ñ4ð_ØGKð_Ø^að_àò_ó [ó ð_ñ: ÓÙ ,Ð0J×0XÑ0XÐ!YÔZà7;Èdò_ØÐ3Ñ4ð_ØGKð_Ø^að_àò_ó [ó ñ_r.   