Ë
    þÍ:j°  ã                   óª  — d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	 d dl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 ddlmZmZmZmZmZmZ ddlm Z m!Z!m"Z" g d¢Z# G d„ de«      Z$ G d„ de«      Z% G d„ de«      Z& G d„ de«      Z' G d„ de«      Z( ed¬«       edd„ f¬«      ddd d!œd"eee(ef      d#e)d$e)d%ed&e'f
d'„«       «       Zy)(é    N)Úpartial)ÚAnyÚOptionalÚUnion)ÚTensor)Ú
functionalé   )ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)ÚBasicConv2dÚ	GoogLeNetÚGoogLeNet_WeightsÚGoogLeNetOutputsÚ	InceptionÚInceptionAuxé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)ÚQuantizableGoogLeNetÚGoogLeNet_QuantizedWeightsÚ	googlenetc                   óT   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee   ddfd	„Z	ˆ xZ
S )ÚQuantizableBasicConv2dÚargsÚkwargsÚreturnNc                 óV   •— t        ‰| �  |i |¤Ž t        j                  «       | _        y ©N)ÚsuperÚ__init__ÚnnÚReLUÚrelu©Úselfr!   r"   Ú	__class__s      €ú~/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/models/quantization/googlenet.pyr'   zQuantizableBasicConv2d.__init__   s"   ø€ Ü‰Ñ˜$Ð) &Ò)Ü—G‘G“Iˆ�	ó    Úxc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r%   ©ÚconvÚbnr*   ©r,   r0   s     r.   ÚforwardzQuantizableBasicConv2d.forward   s.   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØˆr/   Úis_qatc                 ó&   — t        | g d¢|d¬«       y )Nr2   T)Úinplace)r   )r,   r7   s     r.   Ú
fuse_modelz!QuantizableBasicConv2d.fuse_model$   s   € Ü�dÒ2°FÀDÖIr/   r%   )Ú__name__Ú
__module__Ú__qualname__r   r'   r   r6   r   Úboolr:   Ú__classcell__©r-   s   @r.   r    r       sJ   ø„ ð˜cð ¨Sð °Tõ ð˜ð  Fó ñJ ¨$¡ð J¸4÷ Jr/   r    c                   ó<   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zˆ xZS )ÚQuantizableInceptionr!   r"   r#   Nc                 óv   •— t        ‰| �  |dt        i|¤Ž t        j                  j                  «       | _        y ©NÚ
conv_block)r&   r'   r    r(   Ú	quantizedÚFloatFunctionalÚcatr+   s      €r.   r'   zQuantizableInception.__init__)   s/   ø€ Ü‰Ñ˜$ÐLÔ+AÐLÀVÒLÜ—<‘<×/Ñ/Ó1ˆ�r/   r0   c                 ó\   — | j                  |«      }| j                  j                  |d«      S )Nr   )Ú_forwardrH   )r,   r0   Úoutputss      r.   r6   zQuantizableInception.forward-   s%   € Ø—-‘- Ó"ˆØ�x‰x�|‰|˜G QÓ'Ð'r/   ©r;   r<   r=   r   r'   r   r6   r?   r@   s   @r.   rB   rB   (   s0   ø„ ð2˜cð 2¨Sð 2°Tõ 2ð(˜ð ( F÷ (r/   rB   c                   ó<   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zˆ xZS )ÚQuantizableInceptionAuxr!   r"   r#   Nc                 ób   •— t        ‰| �  |dt        i|¤Ž t        j                  «       | _        y rD   )r&   r'   r    r(   r)   r*   r+   s      €r.   r'   z QuantizableInceptionAux.__init__4   s(   ø€ Ü‰Ñ˜$ÐLÔ+AÐLÀVÒLÜ—G‘G“Iˆ�	r/   r0   c                 ó  — t        j                  |d«      }| j                  |«      }t        j                  |d«      }| j                  | j                  |«      «      }| j                  |«      }| j                  |«      }|S )N)é   rQ   r   )	ÚFÚadaptive_avg_pool2dr3   ÚtorchÚflattenr*   Úfc1ÚdropoutÚfc2r5   s     r.   r6   zQuantizableInceptionAux.forward8   sh   € ä×!Ñ! ! VÓ,ˆà�I‰I�a‹Lˆä�M‰M˜!˜QÓˆà�I‰I�d—h‘h˜q“kÓ"ˆà�L‰L˜‹Oˆà�H‰H�Q‹Kˆð ˆr/   rL   r@   s   @r.   rN   rN   2   s0   ø„ ð˜cð ¨Sð °Tõ ð˜ð  F÷ r/   rN   c                   óT   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee	   ddfd	„Z
ˆ xZS )r   r!   r"   r#   Nc                 óú   •— t        ‰| �  |dt        t        t        gi|¤Ž t
        j                  j                  j                  «       | _	        t
        j                  j                  j                  «       | _        y )NÚblocks)r&   r'   r    rB   rN   rT   ÚaoÚquantizationÚ	QuantStubÚquantÚDeQuantStubÚdequantr+   s      €r.   r'   zQuantizableGoogLeNet.__init__L   sb   ø€ Ü‰ÑØð	
Ü1Ô3GÔI`Ðað	
Øekò	
ô —X‘X×*Ñ*×4Ñ4Ó6ˆŒ
Ü—x‘x×,Ñ,×8Ñ8Ó:ˆ�r/   r0   c                 óp  — | j                  |«      }| j                  |«      }| j                  |«      \  }}}| j                  |«      }| j                  xr | j
                  }t        j                  j                  «       r$|st        j                  d«       t        |||«      S | j                  |||«      S )NzCScripted QuantizableGoogleNet always returns GoogleNetOutputs Tuple)Ú_transform_inputr_   rJ   ra   ÚtrainingÚ
aux_logitsrT   ÚjitÚis_scriptingÚwarningsÚwarnr   Úeager_outputs)r,   r0   Úaux1Úaux2Úaux_defineds        r.   r6   zQuantizableGoogLeNet.forwardS   s–   € Ø×!Ñ! !Ó$ˆØ�J‰J�q‹MˆØŸ™ aÓ(‰ˆˆ4�Ø�L‰L˜‹OˆØ—m‘mÒ7¨¯©ˆÜ�9‰9×!Ñ!Ô#ÙÜ—‘ÐcÔdÜ# A t¨TÓ2Ð2à×%Ñ% a¨¨tÓ4Ð4r/   r7   c                 ót   — | j                  «       D ]%  }t        |«      t        u sŒ|j                  |«       Œ' y)a  Fuse conv/bn/relu modules in googlenet model

        Fuse conv+bn+relu/ conv+relu/conv+bn modules to prepare for quantization.
        Model is modified in place.  Note that this operation does not change numerics
        and the model after modification is in floating point
        N)ÚmodulesÚtyper    r:   )r,   r7   Úms      r.   r:   zQuantizableGoogLeNet.fuse_model`   s2   € ð —‘“ò 	%ˆAÜ�A‹wÔ0Ò0Ø—‘˜VÕ$ñ	%r/   r%   )r;   r<   r=   r   r'   r   r   r6   r   r>   r:   r?   r@   s   @r.   r   r   J   sH   ø„ ð;˜cð ;¨Sð ;°Tõ ;ð5˜ð 5Ð$4ó 5ñ
% ¨$¡ð 
%¸4÷ 
%r/   r   c                   ój   — e Zd Z ed eed¬«      ddeddej                  dd	d
dœiddddœ
¬«      Z	e	Z
y)r   zKhttps://download.pytorch.org/models/quantized/googlenet_fbgemm-c81f6644.pthéà   )Ú	crop_sizeiˆe )é   ru   Úfbgemmzdhttps://github.com/pytorch/vision/tree/main/references/classification#post-training-quantized-modelszImageNet-1Kg¾Ÿ/ÝtQ@g`åÐ"ÛYV@)zacc@1zacc@5g+‡ÙÎ÷÷?g#Ûù~j<)@zª
                These weights were produced by doing Post Training Quantization (eager mode) on top of the unquantized
                weights listed below.
            )
Ú
num_paramsÚmin_sizeÚ
categoriesÚbackendÚrecipeÚunquantizedÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsÚmetaN)r;   r<   r=   r   r   r
   r   r   ÚIMAGENET1K_V1ÚIMAGENET1K_FBGEMM_V1ÚDEFAULT© r/   r.   r   r   m   s_   „ Ù"ØYÙÐ.¸#Ô>à!Ø Ø.ØØ|Ø,×:Ñ:àØ#Ø#ñ ðð Ø ðñ
ôÐð0 #�Gr/   r   Úquantized_googlenet)ÚnameÚ
pretrainedc                 óf   — | j                  dd«      rt        j                  S t        j                  S )NÚquantizeF)Úgetr   r…   r   r„   )r"   s    r.   ú<lambda>rŽ   �   s0   € à�z‰z˜* eÔ,ô '×;Ñ;ð ô #×0Ñ0ð r/   )ÚweightsTF)r�   ÚprogressrŒ   r�   r�   rŒ   r"   r#   c                 ód  — |rt         nt        j                  | «      } |j                  dd«      }| �vd|vrt	        |dd«       t	        |dd«       t	        |dd«       t	        |dt        | j                  d   «      «       d	| j                  v rt	        |d	| j                  d	   «       |j                  d	d
«      }t        di |¤Ž}t        |«       |rt        ||«       | �P|j                  | j                  |d¬«      «       |sd|_        d|_        d|_        |S t!        j"                  d«       |S )a¸  GoogLeNet (Inception v1) model architecture from `Going Deeper with Convolutions <http://arxiv.org/abs/1409.4842>`__.

    .. note::
        Note that ``quantize = True`` returns a quantized model with 8 bit
        weights. Quantized models only support inference and run on CPUs.
        GPU inference is not yet supported.

    Args:
        weights (:class:`~torchvision.models.quantization.GoogLeNet_QuantizedWeights` or :class:`~torchvision.models.GoogLeNet_Weights`, optional): The
            pretrained weights for the model. See
            :class:`~torchvision.models.quantization.GoogLeNet_QuantizedWeights` 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.
        quantize (bool, optional): If True, return a quantized version of the model. Default is False.
        **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableGoogLeNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/googlenet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.GoogLeNet_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.GoogLeNet_Weights
        :members:
        :noindex:
    re   FNÚtransform_inputTÚinit_weightsÚnum_classesry   rz   rv   )r�   Ú
check_hashz`auxiliary heads in the pretrained googlenet model are NOT pretrained, so make sure to train themr‡   )r   r   Úverifyr�   r   Úlenrƒ   Úpopr   r   r   Úload_state_dictÚget_state_dictre   rk   rl   rh   ri   )r�   r�   rŒ   r"   Úoriginal_aux_logitsrz   Úmodels          r.   r   r   ‰   s*  € ñ\ .6Õ)Ô;L×TÑTÐU\Ó]€Gà Ÿ*™* \°5Ó9ÐØÐØ FÑ*Ü! &Ð*;¸TÔBÜ˜f l°DÔ9Ü˜f n°eÔ<Ü˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ˜Ÿ™Ñ$Ü! &¨)°W·\±\À)Ñ5LÔMØ�j‰j˜ HÓ-€Gä Ñ* 6Ñ*€EÜ�%ÔÙÜ�u˜gÔ&àÐØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYÙ"Ø$ˆEÔØˆEŒJØˆEŒJð €Lô	 �M‰MØrôð €Lr/   )*rh   Ú	functoolsr   Útypingr   r   r   rT   Útorch.nnr(   r   r   rR   Útransforms._presetsr
   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   r   r   r   r   r   r   r   Úutilsr   r   r   Ú__all__r    rB   rN   r   r   r>   r‡   r/   r.   ú<module>r¦      s  ðÛ Ý ß 'Ñ 'ã Ý Ý Ý $å 6ß 7Ñ 7Ý (ß Cß l× lß ?Ñ ?ò€ôJ˜[ô Jô(˜9ô (ô˜lô ô0 %˜9ô  %ôF# ô #ñ8 Ð*Ô+Ùàñ	
ðô	ð OSØØò	@à�eÐ6Ð8IÐIÑJÑKð@ð ð@ð ð	@ð
 ð@ð ò@ó	ó ,ñ@r/   