
    khI                        d dl Z d dlmZ d dlmZ d dlmZmZ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jD                        Z# G d dejD                        Z$ G d dejD                        Z% G d dejD                        Z& G d dejD                        Z' G d dejD                        Z( G d dejD                        Z) G d  d!ejD                        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.y)-    N)
namedtuple)partial)AnyCallableListOptionalTuple)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   Nnum_classesr   transform_inputinception_blocks.init_weightsdropoutreturnc                    t         |           t        |        |%t        t        t
        t        t        t        t        g}|t        j                  dt               d}t        |      dk7  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)        jL                  d      | _'        t)        jP                  |      | _)        t)        jT                  d|      | _+        |r| jY                         D ]  }t[        |t(        j\                        st[        |t(        jT                        r\t_        |d      rta        |jb                        nd}td        j(                  jf                  ji                  |jj                  d |d!d"       t[        |t(        jl                        st(        jf                  jo                  |jj                  d       t(        jf                  jo                  |jp                  d        y y )#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                   X/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/models/inception.pyrC   zInception3.__init__   s    	D!# +ZZQ[]giuvMML 	  L A%QRUVfRgQhijj%a(
&q)&q)&q)&q)&q)(+$.'21QG'BA>'BAqI1='BA>'CQ?1=#Cr:#Cr:#Cr:#C(#Cc:#Cc:#Cc:#Cc:.2*3<DN#C(#D)#D)++F3zzG,))D+.\\^ 1a+z!RYY/G0780DU188_#FHHMM//sRTXY/Z2>>2GG%%ahh2GG%%affa0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    OOAadGQ/;?BUUEOOAadGQ/;?BUUEOOAadGQ/;?BUUE		5%/3Ar   c                 V   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }d }| j                  | j                   r| j                  |      }| j#                  |      }| j%                  |      }| j'                  |      }| j)                  |      }| j+                  |      }t-        j.                  |d      }| j1                  |      }||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   sn   q!q!q!MM!q!q!MM!MM!MM!MM!MM!MM!MM!MM!MM! $>>%}}nnQ'MM!MM!MM! LLOLLOMM!QGGAJ#vr   r   c                 N    | 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                  |      }| j                  |      \  }}| j                  xr | j                  }t        j
                  j                         r#|st        j                  d       t        ||      S | j                  ||      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   sv    !!!$q!3mm799!!#ST#As++%%a--r   )i  TFNNg      ?)__name__
__module____qualname__intboolr   r   r   r
   Modulerm   rC   r   r   r	   r   rn   r   unusedr   r   r   __classcell__r~   s   @r   r   r      s      %EI'+@1@1 @1 	@1
 #4bii(@#AB@1 tn@1 @1 
@1D& V 4& 4U68F3C+C%D 4l YY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                    t         |           |t        } ||dd      | _         ||dd      | _         |dddd      | _         ||dd      | _         |ddd	d      | _         |ddd	d      | _         |||d      | _	        y )
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%k21E%b"!QG(baH(RQJ(RQJ%k=aPr   r   c                 2   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }t        j                  |ddd      }| j                  |      }||||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ll1!AqI&&{3i{Cr   c                 P    | j                  |      }t        j                  |d      S r   r   rn   r   ru   r   r   s      r   r   zInceptionA.forward   !    --"yy!$$r   r   r   r   r   r   r   r   r
   r   rC   r   r   r   r   r   r   s   @r   rE   rE      sq    eiQQ/2Q@HRUWYW`W`R`Ia@bQ	Q"& T&\  % %F %r   rE   c                   x     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      | _        y )
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__   sb    $J#K!AN(baH(RQJ(RQqIr   r   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }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   sc    NN1%	**1-**<8**<8ll1!A>lK8r   c                 P    | j                  |      }t        j                  |d      S r   r   r   s      r   r   zInceptionB.forward   r   r   r   r   r   s   @r   rF   rF      s^    JC JXhsBII~>V5W Jcg 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      | _        y )	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__   s     	$J#K!D%k21E%b"&&Q%b#66R(baH(RVVT(RVVT(RVVT(SffU%k3AFr   r   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }t        j                  |ddd      }| j                  |      }||||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ll1!AqI&&{3i{Cr   c                 P    | j                  |      }t        j                  |d      S r   r   r   s      r   r   zInceptionC.forward  r   r   r   r   r   s   @r   rG   rG      sq    dhGG.1G?GQTVXV_V_Q_H`?aG	G*& T&\ &% %F %r   rG   c                   x     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                     t         |           |t        } ||dd      | _         |dddd      | _         ||dd      | _         |dddd	
      | _         |dddd
      | _         |dddd      | _        y )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%c3AaH'SaH'SffU'SffU'SaJr   r   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }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ll1!A>k;7r   c                 P    | j                  |      }t        j                  |d      S r   r   r   s      r   r   zInceptionD.forward;  r   r   r   r   r   s   @r   rH   rH   !  s^    
KC 
KXhsBII~>V5W 
Kcg 
K& T&\ % %F %r   rH   c                   x     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      | _        y )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%k3AF&sCVVT&sCVVT(cqI(cq!L)#sPVW)#sPVW%k3AFr   r   c                    | j                  |      }| j                  |      }| j                  |      | j                  |      g}t	        j
                  |d      }| j                  |      }| j                  |      }| j                  |      | j                  |      g}t	        j
                  |d      }t        j                  |ddd      }| j                  |      }||||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(
	 IIi+	**1-**<8  .  .
 yyq1ll1!AqI&&{3i{Cr   c                 P    | j                  |      }t        j                  |d      S r   r   r   s      r   r   zInceptionE.forwardj  r   r   r   r   r   s   @r   rI   rI   @  s^    GC GXhsBII~>V5W Gcg G"& T&\ 0% %F %r   rI   c            
       h     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                  _        y )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  sd     	$JSa@
Sa8
 

))C-r   r   c                     t        j                  |dd      }| j                  |      }| j                  |      }t        j                  |d      }t        j                  |d      }| j                  |      }|S )Nr(   r&   r+   r:   r   )r   r   r   r   adaptive_avg_pool2drn   r   rh   ru   r   s     r   r   zInceptionAux.forward|  sd    LL!4JJqMJJqM !!!V,MM!QGGAJr   r   )r   r   r   r   r   r   r
   r   rC   r   r   r   r   s   @r   rJ   rJ   o  sU    cg

-0
>FxPSUWU^U^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      | _        y )Nrt   Fr   )eps)rB   rC   r
   rk   convrr   bn)ru   r   r   r   r~   s       r   rC   zBasicConv2d.__init__  s<    IIk<NeNvN	..59r   r   c                 t    | j                  |      }| j                  |      }t        j                  |d      S )NT)inplace)r   r   r   relur   s     r   r   zBasicConv2d.forward  s-    IIaLGGAJvva&&r   )	r   r   r   r   r   rC   r   r   r   r   s   @r   rD   rD     s7    :C :s :c :d :
' 'F 'r   rD   c                   T    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y)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     sR    R.#3O" .j##  !L
M& Gr   r   
pretrained)weightsT)r  progressr  r  r   r#   c                 r   t         j                  |       } |j                  dd      }| Nd|vrt        |dd       t        |dd       t        |dd       t        |dt	        | j
                  d                t        d
i |}| 2|j                  | j                  |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 #))'2G **\48F*!&*;TBflD9fne<fmSl9S5TU  Eg44hSW4XY"$E"EOLr   )/rK   collectionsr   	functoolsr   typingr   r   r   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%     sW    "  7 7     5 ' 6 6 ' B j 08\2JK .4HVDT#U    % Q. Q.h$% $%N% %8+% +%\% %>,% ,%^299 >	'")) 	'; . ,0D0R0R!ST>BUY +X&:; +d +eh +mw + U +r   