
    YhI                        d dl Z 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c 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 g dZ edddg          Zeee         de_        e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                   Z& G d dej                   Z' G d  d!ej                   Z( G d" d#e          Z) e             ed$e)j*        f%          dd&d'd(ee)         d)e+d*ed+e!fd,                        Z,dS )-    N)
namedtuple)partial)AnyCallableOptional)nnTensor   )ImageClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)
Inception3InceptionOutputs_InceptionOutputsInception_V3_Weightsinception_v3r   logits
aux_logits)r   r   c                       e Zd Z	 	 	 	 	 	 ddededed	eeed
ej	        f                           dee         de
ddf fdZdedefdZdedeeee         f         fdZej        j        dedee         defd            ZdedefdZ xZS )r     TFN      ?num_classesr   transform_inputinception_blocks.init_weightsdropoutreturnc                 x   t                                                       t          |            |,t          t          t
          t          t          t          t          g}|t          j        dt                     d}t          |          dk    rt          dt          |                     |d         }|d         }|d         }	|d         }
|d	         }|d
         }|d         }|| _        || _         |dddd          | _         |ddd          | _         |dddd          | _        t)          j        dd          | _         |ddd          | _         |ddd          | _        t)          j        dd          | _         |dd          | _         |dd          | _         |dd          | _         |	d          | _         |
dd          | _         |
dd          | _         |
dd          | _          |
dd          | _!        d | _"        |r |d|          | _"         |d          | _#         |d          | _$         |d          | _%        t)          j&        d          | _'        t)          j(        |          | _)        t)          j*        d|          | _+        |r| ,                                D ]}t[          |t(          j.                  st[          |t(          j*                  rUt_          |d          rta          |j1                  nd}td          j        j3        4                    |j5        d |d!d"           t[          |t(          j6                  rJt(          j3        7                    |j5        d           t(          j3        7                    |j8        d           d S d S )#NzThe default weight initialization of inception_v3 will be changed in future releases of torchvision. If you wish to keep the old behavior (which leads to long initialization times due to scipy/scipy#11299), please set init_weights=True.T   z2length of inception_blocks should be 7 instead of r   r   r
                   kernel_sizestrider,   @   r,   paddingP      )pool_features   i         )channels_7x7   i   i   r   r   )pstddevg?g        )meanstdab)9super__init__r   BasicConv2d
InceptionA
InceptionB
InceptionC
InceptionD
InceptionEInceptionAuxwarningswarnFutureWarninglen
ValueErrorr   r   Conv2d_1a_3x3Conv2d_2a_3x3Conv2d_2b_3x3r   	MaxPool2dmaxpool1Conv2d_3b_1x1Conv2d_4a_3x3maxpool2Mixed_5bMixed_5cMixed_5dMixed_6aMixed_6bMixed_6cMixed_6dMixed_6e	AuxLogitsMixed_7aMixed_7bMixed_7cAdaptiveAvgPool2davgpoolDropoutr"   Linearfcmodules
isinstanceConv2dhasattrfloatr<   torchinittrunc_normal_weightBatchNorm2d	constant_bias)selfr   r   r   r    r!   r"   
conv_blockinception_ainception_binception_cinception_dinception_einception_auxmr<   	__class__s                   n/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torchvision/models/inception.pyrC   zInception3.__init__   s    	D!!!# +ZZQ[]giuvML 	    L  A%%iRUVfRgRgiijjj%a(
&q)&q)&q)&q)&q)(+$.'Z21QGGG'ZBA>>>'ZBAqIII1==='ZBA>>>'ZCQ???1===#Cr:::#Cr:::#Cr:::#C((#Cc:::#Cc:::#Cc:::#Cc:::.2 	=*]3<<DN#C((#D))#D))+F33zG,,,)D+.. 	1\\^^ 1 1a++ 1z!RY/G/G 10780D0DMU18___#FHM//sRTXY/ZZZZ2>22 1G%%ah222G%%afa000	1 	11 1    xc                 "   | j         rt          j        |d d df         d          dz  dz   }t          j        |d d df         d          dz  dz   }t          j        |d d df         d          dz  d	z   }t          j        |||fd          }|S )
Nr   r   gZd;O?gQgy&1?gI+r
   g?gMbȿ)r   rn   	unsqueezecat)ru   r   x_ch0x_ch1x_ch2s        r   _transform_inputzInception3._transform_input_   s     	4OAaaadGQ//;?BUUEOAaaadGQ//;?BUUEOAaaadGQ//;?BUUE	5%/33Ar   c                    |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }| 	                    |          }| 
                    |          }|                     |          }|                     |          }|                     |          }|                     |          }d }| j        | j        r|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t-          j        |d          }|                     |          }||fS Nr   )rP   rQ   rR   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   trainingra   rb   rc   re   r"   rn   flattenrh   ru   r   auxs      r   _forwardzInception3._forwardg   s   q!!q!!q!!MM!q!!q!!MM!MM!MM!MM!MM!MM!MM!MM!MM! $>%} (nnQ''MM!MM!MM! LLOOLLOOM!QGGAJJ#vr   r   c                 B    | j         r| j        rt          ||          S |S N)r   r   r   r   s      r   eager_outputszInception3.eager_outputs   s*    = 	T_ 	#As+++Hr   c                 ,   |                      |          }|                     |          \  }}| j        o| j        }t          j                                        r&|st          j        d           t          ||          S | 
                    ||          S )Nz3Scripted Inception3 always returns Inception3 Tuple)r   r   r   r   rn   jitis_scriptingrK   rL   r   r   )ru   r   r   aux_defineds       r   forwardzInception3.forward   s    !!!$$q!!3m79!!## 	. USTTT#As+++%%a---r   )r   TFNNr   )__name__
__module____qualname__intboolr   listr   r   Modulerm   rC   r	   r   tupler   rn   r   unusedr   r   r   __classcell__r~   s   @r   r   r      sz          %EI'+@1 @1@1 @1 	@1
 #4bi(@#AB@1 tn@1 @1 
@1 @1 @1 @1 @1 @1D& V    4& 4U68F3C+C%D 4 4 4 4l Yv HV,< AQ    	. 	.$4 	. 	. 	. 	. 	. 	. 	. 	.r   r   c            
            e Zd Z	 ddededeedej        f                  ddf fdZde	de
e	         fd	Zde	de	fd
Z xZS )rE   Nin_channelsr4   rv   .r#   c                 j   t                                                       |t          } ||dd          | _         ||dd          | _         |dddd          | _         ||dd          | _         |ddd	d          | _         |ddd	d          | _         |||d          | _	        d S )
Nr/   r   r.   0   r(   r
   r0   `   r&   )
rB   rC   rD   	branch1x1branch5x5_1branch5x5_2branch3x3dbl_1branch3x3dbl_2branch3x3dbl_3branch_pool)ru   r   r4   rv   r~   s       r   rC   zInceptionA.__init__   s     	$J#KCCC%:k21EEE%:b"!QGGG(jbaHHH(jRQJJJ(jRQJJJ%:k=aPPPr   r   c                 h   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t          j        |ddd          }|                     |          }||||g}|S Nr&   r   r,   r-   r1   )	r   r   r   r   r   r   F
avg_pool2dr   )ru   r   r   	branch5x5branch3x3dblr   outputss          r   r   zInceptionA._forward   s    NN1%%	$$Q''	$$Y//	**1--**<88**<88l1!AqIII&&{33i{Cr   c                 V    |                      |          }t          j        |d          S r   r   rn   r   ru   r   r   s      r   r   zInceptionA.forward   %    --""y!$$$r   r   r   r   r   r   r   r   r   r   rC   r	   r   r   r   r   r   s   @r   rE   rE      s        eiQ QQ/2Q@HRUWYW`R`Ia@bQ	Q Q Q Q Q Q"& T&\     % %F % % % % % % % %r   rE   c                        e Zd Zd
dedeedej        f                  ddf fdZde	de
e	         fdZde	de	fd	Z xZS )rF   Nr   rv   .r#   c                     t                                                       |t          } ||ddd          | _         ||dd          | _         |dddd	          | _         |dddd          | _        d S )
N  r&   r
   r+   r/   r   r.   r   r0   )rB   rC   rD   	branch3x3r   r   r   ru   r   rv   r~   s      r   rC   zInceptionB.__init__   s    $J#K!ANNN(jbaHHH(jRQJJJ(jRQqIIIr   r   c                     |                      |          }|                     |          }|                     |          }|                     |          }t	          j        |dd          }|||g}|S Nr&   r
   r+   )r   r   r   r   r   
max_pool2d)ru   r   r   r   r   r   s         r   r   zInceptionB._forward   ss    NN1%%	**1--**<88**<88l1!A>>>lK8r   c                 V    |                      |          }t          j        |d          S r   r   r   s      r   r   zInceptionB.forward   r   r   r   r   r   s   @r   rF   rF      s        J JC JXhsBI~>V5W Jcg J J J J J J
& 
T&\ 
 
 
 
% %F % % % % % % % %r   rF   c            
            e Zd Z	 ddededeedej        f                  ddf fdZde	de
e	         fd	Zde	de	fd
Z xZS )rG   Nr   r8   rv   .r#   c                    t                                                       |t          } ||dd          | _        |} |||d          | _         |||dd          | _         ||ddd          | _         |||d          | _         |||dd          | _         |||dd          | _	         |||dd          | _
         ||ddd          | _         ||dd          | _        d S )	Nr3   r   r.   r   r%   r   r&   r0   r%   r   r&   r   )rB   rC   rD   r   branch7x7_1branch7x7_2branch7x7_3branch7x7dbl_1branch7x7dbl_2branch7x7dbl_3branch7x7dbl_4branch7x7dbl_5r   )ru   r   r8   rv   c7r~   s        r   rC   zInceptionC.__init__   s6    	$J#K!DDD%:k21EEE%:b"&&QQQ%:b#66RRR(jbaHHH(jRVVTTT(jRVVTTT(jRVVTTT(jSffUUU%:k3AFFFr   r   c                    |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t          j
        |ddd          }|                     |          }||||g}|S r   )r   r   r   r   r   r   r   r   r   r   r   r   )ru   r   r   	branch7x7branch7x7dblr   r   s          r   r   zInceptionC._forward	  s    NN1%%	$$Q''	$$Y//	$$Y//	**1--**<88**<88**<88**<88l1!AqIII&&{33i{Cr   c                 V    |                      |          }t          j        |d          S r   r   r   s      r   r   zInceptionC.forward  r   r   r   r   r   s   @r   rG   rG      s        dhG GG.1G?GQTVXV_Q_H`?aG	G G G G G G*& T&\    &% %F % % % % % % % %r   rG   c                        e Zd Zd
dedeedej        f                  ddf fdZde	de
e	         fdZde	de	fd	Z xZS )rH   Nr   rv   .r#   c                 F   t                                                       |t          } ||dd          | _         |dddd          | _         ||dd          | _         |dddd	
          | _         |dddd
          | _         |dddd          | _        d S )Nr3   r   r.   @  r&   r
   r+   r   r   r0   r   r   )	rB   rC   rD   branch3x3_1branch3x3_2branch7x7x3_1branch7x7x3_2branch7x7x3_3branch7x7x3_4r   s      r   rC   zInceptionD.__init__"  s    $J%:k3AFFF%:c3AaHHH'ZSaHHH'ZSffUUU'ZSffUUU'ZSaJJJr   r   c                 :   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t          j        |dd          }|||g}|S r   )r   r   r   r   r   r   r   r   )ru   r   r   branch7x7x3r   r   s         r   r   zInceptionD._forward.  s    $$Q''	$$Y//	((++((55((55((55l1!A>>>k;7r   c                 V    |                      |          }t          j        |d          S r   r   r   s      r   r   zInceptionD.forward;  r   r   r   r   r   s   @r   rH   rH   !  s        
K 
KC 
KXhsBI~>V5W 
Kcg 
K 
K 
K 
K 
K 
K& T&\    % %F % % % % % % % %r   rH   c                        e Zd Zd
dedeedej        f                  ddf fdZde	de
e	         fdZde	de	fd	Z xZS )rI   Nr   rv   .r#   c                    t                                                       |t          } ||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 S )Nr   r   r.   r   )r   r&   )r   r   r0   )r&   r   )r   r   i  r&   r3   )rB   rC   rD   r   r   branch3x3_2abranch3x3_2br   r   branch3x3dbl_3abranch3x3dbl_3br   r   s      r   rC   zInceptionE.__init__A  s   $J#K!DDD%:k3AFFF&JsCVVTTT&JsCVVTTT(jcqIII(jcq!LLL)z#sPVWWW)z#sPVWWW%:k3AFFFr   r   c                    |                      |          }|                     |          }|                     |          |                     |          g}t	          j        |d          }|                     |          }|                     |          }|                     |          | 	                    |          g}t	          j        |d          }t          j        |ddd          }|                     |          }||||g}|S )Nr   r&   r   )r   r   r   r   rn   r   r   r   r   r   r   r   r   )ru   r   r   r   r   r   r   s          r   r   zInceptionE._forwardR  s   NN1%%	$$Q''	i((i((
	 Ii++	**1--**<88  ..  ..
 yq11l1!AqIII&&{33i{Cr   c                 V    |                      |          }t          j        |d          S r   r   r   s      r   r   zInceptionE.forwardj  r   r   r   r   r   s   @r   rI   rI   @  s        G GC GXhsBI~>V5W Gcg G G G G G G"& T&\    0% %F % % % % % % % %r   rI   c            
       j     e Zd Z	 d
dededeedej        f                  ddf fdZde	de	fd	Z
 xZS )rJ   Nr   r   rv   .r#   c                 
   t                                                       |t          } ||dd          | _         |ddd          | _        d| j        _        t          j        d|          | _        d| j        _        d S )Nr7   r   r.   r6   r(   g{Gz?MbP?)	rB   rC   rD   conv0conv1r<   r   rg   rh   )ru   r   r   rv   r~   s       r   rC   zInceptionAux.__init__p  s     	$JZSa@@@
ZSa888
 
)C--r   r   c                    t          j        |dd          }|                     |          }|                     |          }t          j        |d          }t          j        |d          }|                     |          }|S )Nr(   r&   r+   r:   r   )r   r   r   r   adaptive_avg_pool2drn   r   rh   ru   r   s     r   r   zInceptionAux.forward|  so    L!444JJqMMJJqMM !!V,,M!QGGAJJr   r   )r   r   r   r   r   r   r   r   rC   r	   r   r   r   s   @r   rJ   rJ   o  s        cg
 

-0
>FxPSUWU^P^G_>`
	
 
 
 
 
 
 F        r   rJ   c                   @     e Zd Zdedededdf fdZdedefdZ xZS )	rD   r   out_channelskwargsr#   Nc                     t                                                       t          j        ||fddi|| _        t          j        |d          | _        d S )Nrt   Fr   )eps)rB   rC   r   rk   convrr   bn)ru   r   r   r   r~   s       r   rC   zBasicConv2d.__init__  sS    Ik<NNeNvNN	.5999r   r   c                     |                      |          }|                     |          }t          j        |d          S )NT)inplace)r   r   r   relur   s     r   r   zBasicConv2d.forward  s5    IIaLLGGAJJva&&&&r   )	r   r   r   r   r   rC   r	   r   r   r   s   @r   rD   rD     s{        :C :s :c :d : : : : : :
' 'F ' ' ' ' ' ' ' 'r   rD   c                   b    e Zd Z ed eedd          ddeddd	d
didddd          ZeZdS )r   zDhttps://download.pytorch.org/models/inception_v3_google-0cc3c7bd.pthi+  iV  )	crop_sizeresize_sizeir)K   r  zRhttps://github.com/pytorch/vision/tree/main/references/classification#inception-v3zImageNet-1KgA`RS@g\W@)zacc@1zacc@5g'1@goY@z1These weights are ported from the original paper.)
num_paramsmin_size
categoriesrecipe_metrics_ops
_file_size_docs)url
transformsmetaN)	r   r   r   r   r   r   r   IMAGENET1K_V1DEFAULT r   r   r   r     s|        GR7.#3OOO" .j##    !L
 
  M& GGGr   r   
pretrained)weightsT)r  progressr  r  r   r#   c                    t                               |           } |                    dd          }| `d|vrt          |dd           t          |dd           t          |dd           t          |dt	          | j        d                              t          d
i |}| :|                    |                     |d	                     |sd|_	        d|_
        |S )ak  
    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.

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

    .. autoclass:: torchvision.models.Inception_V3_Weights
        :members:
    r   TNr   r!   Fr   r  )r  
check_hashr  )r   verifygetr   rN   r  r   load_state_dictget_state_dictr   r`   )r  r  r   original_aux_logitsmodels        r   r   r     s    6 #))'22G **\488F**!&*;TBBBflD999fne<<<fmSl9S5T5TUUU    Eg44hSW4XXYYY" 	#$E"EOLr   )-rK   collectionsr   	functoolsr   typingr   r   r   rn   torch.nn.functionalr   
functionalr   r	   transforms._presetsr   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r   __annotations__r   r   r   rE   rF   rG   rH   rI   rJ   rD   r   r  r   r   r  r   r   <module>r'     s^    " " " " " "       * * * * * * * * * *                   5 5 5 5 5 5 ' ' ' ' ' ' 6 6 6 6 6 6 6 6 6 6 ' ' ' ' ' ' B B B B B B B B j
i
i :08\2JKK .4HVDT#U#U    % Q. Q. Q. Q. Q. Q. Q. Q.h$% $% $% $% $% $% $% $%N% % % % % % % %8+% +% +% +% +% +% +% +%\% % % % % % % %>,% ,% ,% ,% ,% ,% ,% ,%^    29   >	' 	' 	' 	' 	'") 	' 	' 	'    ;   . ,0D0R!STTT>BUY + + +X&:; +d +eh +mw + + + UT + + +r   