§
    ù²ÅjP+  ã                   ó´  — d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	m
Z
 d dlm
c mZ d dlmZ d dlmZ d dlmZ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# g d¢Z$ G d„ dej%        ¦  «        Z& G d„ dej'        ¦  «        Z( G d„ dej)        ¦  «        Z* G d„ dej+        ¦  «        Z, G d„ dej-        ¦  «        Z. G d„ dej/        ¦  «        Z0 G d„ dej1        ¦  «        Z2 G d„ dej3        ¦  «        Z4 G d „ d!e¦  «        Z5 ed"¬#¦  «         ed$d%„ f¬&¦  «        dd'd(d)œd*eee5ef                  d+e6d,e6d-ed.e4f
d/„¦   «         ¦   «         Z7dS )0é    N)Úpartial)ÚAnyÚListÚOptionalÚUnion)ÚTensor)Ú	inception)ÚInception_V3_WeightsÚInceptionOutputsé   )ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)ÚQuantizableInception3ÚInception_V3_QuantizedWeightsÚinception_v3c                   óZ   ‡ — 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                 ój   •—  t          ¦   «         j        |i |¤Ž t          j        ¦   «         | _        d S ©N)ÚsuperÚ__init__ÚnnÚReLUÚrelu©Úselfr   r   Ú	__class__s      €úZC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/quantization/inception.pyr$   zQuantizableBasicConv2d.__init__   s0   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ý”G‘I”IˆŒ	ˆ	ˆ	ó    Úxc                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r"   ©ÚconvÚbnr'   )r)   r-   s     r+   ÚforwardzQuantizableBasicConv2d.forward   s4   € Ø�IŠI�a‰LŒLˆØ�GŠG�A‰JŒJˆØ�IŠI�a‰LŒLˆØˆr,   Úis_qatc                 ó0   — t          | g d¢|d¬¦  «         d S )Nr/   T)Úinplace)r   )r)   r3   s     r+   Ú
fuse_modelz!QuantizableBasicConv2d.fuse_model%   s&   € Ý�dÐ2Ð2Ð2°FÀDÐIÑIÔIÐIÐIÐIr,   r"   )Ú__name__Ú
__module__Ú__qualname__r   r$   r   r2   r   Úboolr6   Ú__classcell__©r*   s   @r+   r   r      sª   ø€ € € € € ð˜cð ¨Sð °Tð ð ð ð ð ð ð˜ð  Fð ð ð ð ðJð J ¨$¤ð J¸4ð Jð Jð Jð Jð Jð Jð Jð 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 )ÚQuantizableInceptionAr   r   r    Nc                 óŽ   •—  t          ¦   «         j        |dt          i|¤Ž t          j                             ¦   «         | _        d S ©NÚ
conv_block©r#   r$   r   r%   Ú	quantizedÚFloatFunctionalÚmyopr(   s      €r+   r$   zQuantizableInceptionA.__init__+   ó>   ø€ Ø�‰ŒÔ˜$ÐLÕ+AÐLÀVÐLÐLÐLÝ”L×0Ò0Ñ2Ô2ˆŒ	ˆ	ˆ	r,   r-   c                 ób   — |                       |¦  «        }| j                             |d¦  «        S ©Nr   ©Ú_forwardrE   Úcat©r)   r-   Úoutputss      r+   r2   zQuantizableInceptionA.forward/   ó)   € Ø—-’- Ñ"Ô"ˆØŒy�}Š}˜W aÑ(Ô(Ð(r,   ©r7   r8   r9   r   r$   r   r2   r;   r<   s   @r+   r>   r>   )   ót   ø€ € € € € ð3˜cð 3¨Sð 3°Tð 3ð 3ð 3ð 3ð 3ð 3ð)˜ð ) Fð )ð )ð )ð )ð )ð )ð )ð )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 )ÚQuantizableInceptionBr   r   r    Nc                 óŽ   •—  t          ¦   «         j        |dt          i|¤Ž t          j                             ¦   «         | _        d S r@   rB   r(   s      €r+   r$   zQuantizableInceptionB.__init__6   rF   r,   r-   c                 ób   — |                       |¦  «        }| j                             |d¦  «        S rH   rI   rL   s      r+   r2   zQuantizableInceptionB.forward:   rN   r,   rO   r<   s   @r+   rR   rR   4   rP   r,   rR   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 )ÚQuantizableInceptionCr   r   r    Nc                 óŽ   •—  t          ¦   «         j        |dt          i|¤Ž t          j                             ¦   «         | _        d S r@   rB   r(   s      €r+   r$   zQuantizableInceptionC.__init__A   rF   r,   r-   c                 ób   — |                       |¦  «        }| j                             |d¦  «        S rH   rI   rL   s      r+   r2   zQuantizableInceptionC.forwardE   rN   r,   rO   r<   s   @r+   rV   rV   ?   rP   r,   rV   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 )ÚQuantizableInceptionDr   r   r    Nc                 óŽ   •—  t          ¦   «         j        |dt          i|¤Ž t          j                             ¦   «         | _        d S r@   rB   r(   s      €r+   r$   zQuantizableInceptionD.__init__L   rF   r,   r-   c                 ób   — |                       |¦  «        }| j                             |d¦  «        S rH   rI   rL   s      r+   r2   zQuantizableInceptionD.forwardP   rN   r,   rO   r<   s   @r+   rZ   rZ   J   rP   r,   rZ   c                   óX   ‡ — e Zd Zdededdfˆ fd„Zdedee         fd„Zdedefd„Zˆ xZ	S )	ÚQuantizableInceptionEr   r   r    Nc                 ó  •—  t          ¦   «         j        |dt          i|¤Ž t          j                             ¦   «         | _        t          j                             ¦   «         | _        t          j                             ¦   «         | _        d S r@   )	r#   r$   r   r%   rC   rD   Úmyop1Úmyop2Úmyop3r(   s      €r+   r$   zQuantizableInceptionE.__init__W   sh   ø€ Ø�‰ŒÔ˜$ÐLÕ+AÐLÀVÐLÐLÐLÝ”\×1Ò1Ñ3Ô3ˆŒ
Ý”\×1Ò1Ñ3Ô3ˆŒ
Ý”\×1Ò1Ñ3Ô3ˆŒ
ˆ
ˆ
r,   r-   c                 ó(  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        |                      |¦  «        g}| j                             |d¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        |  	                    |¦  «        g}| j
                             |d¦  «        }t          j        |ddd¬¦  «        }|                      |¦  «        }||||g}|S )Nr   r   )Úkernel_sizeÚstrideÚpadding)Ú	branch1x1Úbranch3x3_1Úbranch3x3_2aÚbranch3x3_2br`   rK   Úbranch3x3dbl_1Úbranch3x3dbl_2Úbranch3x3dbl_3aÚbranch3x3dbl_3bra   ÚFÚ
avg_pool2dÚbranch_pool)r)   r-   rg   Ú	branch3x3Úbranch3x3dblrq   rM   s          r+   rJ   zQuantizableInceptionE._forward]   s  € Ø—N’N 1Ñ%Ô%ˆ	à×$Ò$ QÑ'Ô'ˆ	Ø×&Ò& yÑ1Ô1°4×3DÒ3DÀYÑ3OÔ3OÐPˆ	Ø”J—N’N 9¨aÑ0Ô0ˆ	à×*Ò*¨1Ñ-Ô-ˆØ×*Ò*¨<Ñ8Ô8ˆà× Ò  Ñ.Ô.Ø× Ò  Ñ.Ô.ð
ˆð ”z—~’~ l°AÑ6Ô6ˆå”l 1°!¸AÀqÐIÑIÔIˆØ×&Ò& {Ñ3Ô3ˆà˜i¨°{ÐCˆØˆr,   c                 ób   — |                       |¦  «        }| j                             |d¦  «        S rH   )rJ   rb   rK   rL   s      r+   r2   zQuantizableInceptionE.forwardr   s)   € Ø—-’- Ñ"Ô"ˆØŒz�~Š~˜g qÑ)Ô)Ð)r,   )
r7   r8   r9   r   r$   r   r   rJ   r2   r;   r<   s   @r+   r^   r^   U   sš   ø€ € € € € ð4˜cð 4¨Sð 4°Tð 4ð 4ð 4ð 4ð 4ð 4ð˜&ð  T¨&¤\ð ð ð ð ð**˜ð * Fð *ð *ð *ð *ð *ð *ð *ð *r,   r^   c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )ÚQuantizableInceptionAuxr   r   r    Nc                 óH   •—  t          ¦   «         j        |dt          i|¤Ž d S r@   )r#   r$   r   r(   s      €r+   r$   z QuantizableInceptionAux.__init__y   s+   ø€ Ø�‰ŒÔ˜$ÐLÕ+AÐLÀVÐLÐLÐLÐLÐLr,   )r7   r8   r9   r   r$   r;   r<   s   @r+   rv   rv   w   s_   ø€ € € € € ðM˜cð M¨Sð M°Tð Mð Mð Mð Mð Mð Mð Mð Mð Mð Mr,   rv   c                   óZ   ‡ — 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                 ó2  •—  t          ¦   «         j        |dt          t          t          t
          t          t          t          gi|¤Ž t          j
        j                             ¦   «         | _        t          j
        j                             ¦   «         | _        d S )NÚinception_blocks)r#   r$   r   r>   rR   rV   rZ   r^   rv   ÚtorchÚaoÚquantizationÚ	QuantStubÚquantÚDeQuantStubÚdequantr(   s      €r+   r$   zQuantizableInception3.__init__~   s‚   ø€ Ø�‰ŒÔØð	
õ 'Ý%Ý%Ý%Ý%Ý%Ý'ðð	
ð ð	
ð 	
ð 	
õ ”XÔ*×4Ò4Ñ6Ô6ˆŒ
Ý”xÔ,×8Ò8Ñ:Ô:ˆŒˆˆr,   r-   c                 ó€  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        \  }}|                      |¦  «        }| j        o| j        }t          j                             ¦   «         r&|st          j
        d¦  «         t          ||¦  «        S |                      ||¦  «        S )NzIScripted QuantizableInception3 always returns QuantizableInception3 Tuple)Ú_transform_inputr   rJ   r�   ÚtrainingÚ
aux_logitsr{   ÚjitÚis_scriptingÚwarningsÚwarnr   Úeager_outputs)r)   r-   ÚauxÚaux_defineds       r+   r2   zQuantizableInception3.forward�   s¬   € Ø×!Ò! !Ñ$Ô$ˆØ�JŠJ�q‰MŒMˆØ—’˜qÑ!Ô!‰ˆˆ3Ø�LŠL˜‰OŒOˆØ”mÐ7¨¬ˆÝŒ9×!Ò!Ñ#Ô#ð 	.Øð kÝ”ÐiÑjÔjÐjÝ# A sÑ+Ô+Ð+à×%Ò% a¨Ñ-Ô-Ð-r,   r3   c                 óŠ   — |                       ¦   «         D ]-}t          |¦  «        t          u r|                     |¦  «         Œ.dS )a  Fuse conv/bn/relu modules in inception 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   r6   )r)   r3   Úms      r+   r6   z QuantizableInception3.fuse_modelœ   sJ   € ð —’‘”ð 	%ð 	%ˆAÝ�A‰wŒwÕ0Ð0Ð0Ø—’˜VÑ$Ô$Ð$øð	%ð 	%r,   r"   )r7   r8   r9   r   r$   r   r   r2   r   r:   r6   r;   r<   s   @r+   r   r   }   s    ø€ € € € € ð;˜cð ;¨Sð ;°Tð ;ð ;ð ;ð ;ð ;ð ;ð".˜ð .Ð$4ð .ð .ð .ð .ð
%ð 
% ¨$¤ð 
%¸4ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%r,   r   c                   óp   — e Zd Z ed eedd¬¦  «        ddeddej        d	d
ddœiddddœ
¬¦  «        Z	e	Z
dS )r   zUhttps://download.pytorch.org/models/quantized/inception_v3_google_fbgemm-a2837893.pthi+  iV  )Ú	crop_sizeÚresize_sizei°rž)éK   r”   Úfbgemmzdhttps://github.com/pytorch/vision/tree/main/references/classification#post-training-quantized-modelszImageNet-1Kg%�•CKS@g-²�ï§VW@)zacc@1zacc@5g'1¬Ú@gL7‰A`%7@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)r7   r8   r9   r   r   r   r   r
   ÚIMAGENET1K_V1ÚIMAGENET1K_FBGEMM_V1ÚDEFAULT© r,   r+   r   r   ©   sˆ   € € € € € Ø"˜7ØcØ�7Ð.¸#È3ÐOÑOÔOà"Ø Ø.ØØ|Ø/Ô=àØ#Ø#ð ð  ðð Ø ðð
ð 
ðñ ô Ðð0 #€G€G€Gr,   r   Úquantized_inception_v3)ÚnameÚ
pretrainedc                 ó^   — |                       dd¦  «        rt          j        nt          j        S )NÚquantizeF)Úgetr   r¤   r
   r£   )r   s    r+   ú<lambda>r­   É   s,   € Ø�:Š:�j %Ñ(Ô(ð0Õ4ÔIÐIå!Ô/ð r,   )ÚweightsTF)r®   Úprogressr«   r®   r¯   r«   r   r    c                 óŠ  — |rt           nt                               | ¦  «        } |                     dd¦  «        }| �td|vrt	          |dd¦  «         t	          |dd¦  «         t	          |dt          | j        d         ¦  «        ¦  «         d| j        v rt	          |d| j        d         ¦  «         |                     dd	¦  «        }t          di |¤Ž}t          |¦  «         |rt          ||¦  «         | �N|r|sd|_        d|_        |                     |                      |d¬
¦  «        ¦  «         |s|sd|_        d|_        |S )a¦  Inception v3 model architecture from
    `Rethinking the Inception Architecture for Computer Vision <http://arxiv.org/abs/1512.00567>`__.

    .. note::
        **Important**: In contrast to the other models the inception_v3 expects tensors with a size of
        N x 3 x 299 x 299, so ensure your images are sized accordingly.

    .. 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.Inception_V3_QuantizedWeights` or :class:`~torchvision.models.Inception_V3_Weights`, optional): The pretrained
            weights for the model. See
            :class:`~torchvision.models.quantization.Inception_V3_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.QuantizableInception3``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/inception.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.Inception_V3_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.Inception_V3_Weights
        :members:
        :noindex:
    r…   FNÚtransform_inputTÚnum_classesr˜   r™   r•   )r¯   Ú
check_hashr¦   )r   r
   Úverifyr¬   r   Úlenr¢   Úpopr   r   r   r…   Ú	AuxLogitsÚload_state_dictÚget_state_dict)r®   r¯   r«   r   Úoriginal_aux_logitsr™   Úmodels          r+   r   r   Å   ss  € ðd 19ÐRÕ,Ð,Õ>R×ZÒZÐ[bÑcÔc€Gà Ÿ*š* \°5Ñ9Ô9ÐØÐØ FÐ*Ð*Ý! &Ð*;¸TÑBÔBÐBÝ˜f l°DÑ9Ô9Ð9Ý˜f mµS¸¼ÀlÔ9SÑ5TÔ5TÑUÔUÐUØ˜œÐ$Ð$Ý! &¨)°W´\À)Ô5LÑMÔMÐMØ�jŠj˜ HÑ-Ô-€Gå!Ð+Ð+ FÐ+Ð+€EÝ�%ÑÔÐØð 'Ý�u˜gÑ&Ô&Ð&àÐØð 	#Ð/ð 	#Ø$ˆEÔØ"ˆEŒOØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYØð 	#Ð 3ð 	#Ø$ˆEÔØ"ˆEŒOà€Lr,   )8rˆ   Ú	functoolsr   Útypingr   r   r   r   r{   Útorch.nnr%   Útorch.nn.functionalÚ
functionalro   r   Útorchvision.modelsr	   Úinception_moduleÚtorchvision.models.inceptionr
   r   Útransforms._presetsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úutilsr   r   r   Ú__all__ÚBasicConv2dr   Ú
InceptionAr>   Ú
InceptionBrR   Ú
InceptionCrV   Ú
InceptionDrZ   Ú
InceptionEr^   ÚInceptionAuxrv   Ú
Inception3r   r   r:   r   r¦   r,   r+   ú<module>rÒ      sº  ðØ €€€Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oà 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø (Ð (Ð (Ð (Ð (Ð (Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð €ðJð Jð Jð Jð JÐ-Ô9ñ Jô Jð Jð)ð )ð )ð )ð )Ð,Ô7ñ )ô )ð )ð)ð )ð )ð )ð )Ð,Ô7ñ )ô )ð )ð)ð )ð )ð )ð )Ð,Ô7ñ )ô )ð )ð)ð )ð )ð )ð )Ð,Ô7ñ )ô )ð )ð*ð *ð *ð *ð *Ð,Ô7ñ *ô *ð *ðDMð Mð Mð Mð MÐ.Ô;ñ Mô Mð Mð)%ð )%ð )%ð )%ð )%Ð,Ô7ñ )%ô )%ð )%ðX#ð #ð #ð #ð # Kñ #ô #ð #ð8 €Ð-Ð.Ñ.Ô.ØÐàð	0ð 	0ððñ ô ð UYØØð	Cð Cð Cà�eÐ9Ð;OÐOÔPÔQðCð ðCð ð	Cð
 ðCð ðCð Cð Cñô ñ /Ô.ðCð Cð Cr,   